import { Box, Divider, Stack, styled, TextField, useTheme } from '@mui/material'; import Grid from '@mui/material/Grid'; import Typography from '@mui/material/Typography'; import { Link, useNavigate, useParams } from 'react-router-dom'; import { filterTools, getToolsByCategory } from '../../tools'; import Hero from 'components/Hero'; import { getI18nNamespaceFromToolCategory, getToolCategoryTitle } from '@utils/string'; import { Icon } from '@iconify/react'; import { categoriesColors } from 'config/uiConfig'; import React, { useEffect } from 'react'; import IconButton from '@mui/material/IconButton'; import ArrowBackIcon from '@mui/icons-material/ArrowBack'; import SearchIcon from '@mui/icons-material/Search'; import { Helmet } from 'react-helmet'; import UserTypeFilter from '@components/UserTypeFilter'; import { useTranslation } from 'react-i18next'; import { I18nNamespaces, validNamespaces } from '../../i18n'; import { useUserTypeFilter } from '../../providers/UserTypeFilterProvider'; const StyledLink = styled(Link)(({ theme }) => ({ '&:hover': { color: theme.palette.mode === 'dark' ? 'white' : theme.palette.primary.light } })); export default function ToolsByCategory() { const navigate = useNavigate(); const theme = useTheme(); const mainContentRef = React.useRef(null); const { categoryName } = useParams(); const [searchTerm, setSearchTerm] = React.useState(''); const { selectedUserTypes, setSelectedUserTypes } = useUserTypeFilter(); const { t } = useTranslation(validNamespaces); const rawTitle = getToolCategoryTitle(categoryName as string, t); // First get tools by category without filtering const toolsByCategory = getToolsByCategory(selectedUserTypes, t).find( ({ type }) => type === categoryName ); const categoryDefinedTools = toolsByCategory?.tools ?? []; const categoryTools = filterTools( categoryDefinedTools, searchTerm, selectedUserTypes, t ); useEffect(() => { if (mainContentRef.current) { mainContentRef.current.scrollIntoView({ behavior: 'smooth' }); } }, []); return ( {rawTitle} navigate('/')}> {t('translation:toolLayout.allToolsTitle', { type: rawTitle })} , sx: { borderRadius: 4, backgroundColor: 'background.paper', maxWidth: 400 } }} onChange={(event) => setSearchTerm(event.target.value)} /> {categoryTools.map((tool, index) => ( navigate('/' + tool.path)} direction={'row'} alignItems={'center'} spacing={2} padding={2} border={`1px solid ${theme.palette.background.default}`} borderRadius={2} > {/*@ts-ignore*/} {t(tool.name)} {/*@ts-ignore*/} {t(tool.shortDescription)} ))} ); }