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 { useTranslation } from 'react-i18next'; import { I18nNamespaces } from '../../i18n'; 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 rawTitle = getToolCategoryTitle(categoryName as string); const categoryTools = filterTools( getToolsByCategory().find(({ type }) => type === categoryName)?.tools ?? [], searchTerm ); const { t } = useTranslation( categoryTools.length ? getI18nNamespaceFromToolCategory(categoryTools[0].type) : 'translation' ); useEffect(() => { if (mainContentRef.current) { mainContentRef.current.scrollIntoView({ behavior: 'smooth' }); } }, []); return ( {`${rawTitle} Tools`} navigate('/')}> {`All ${rawTitle} Tools`} , 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)} ))} ); }