import {useEffect, useState} from "react"; import '../assets/styles/home.css'; import { Box, Button, Divider, Fab, IconButton, InputAdornment, TextField, ThemeProvider, Typography, useTheme } from "@mui/material"; import {getAll} from '~/api'; import customTheme from "~/assets/mui/themes/home"; import {BlacklistItem} from "~/classes/blacklistItem"; import {ResponseError} from "~/classes/responseError"; import ItemList from "~/components/itemList"; import ItemDialog from "~/components/itemDialog"; import OutlinedFlagIcon from '@mui/icons-material/OutlinedFlag'; import ReportDialog from "~/components/reportDialog"; import LoopIcon from '@mui/icons-material/Loop'; import ClearIcon from '@mui/icons-material/Clear'; export default function Home() { const outerTheme = useTheme(); const [searchText, setSearchText] = useState(''); const [isFetchingList, setIsFetchingList] = useState(false); const [totalBlacklistItems, setTotalBlacklistItems] = useState([]); const [blacklistItems, setBlacklistItems] = useState([]); const [showDialog, setShowDialog] = useState(false); const [currentDialogBlacklistItem, setCurrentDialogBlacklistItem] = useState(null); const [fabIsHovered, setFabIsHovered] = useState(false); const [showReportDialog, setReportShowDialog] = useState(false); const [triggerUpdate, setTriggerUpdate] = useState(0); const [showEraseButton, setShowEraseButton] = useState(false); useEffect(() => { let isIgnore = false; setIsFetchingList(true); getAll(searchText).then((res: BlacklistItem[] | ResponseError | undefined)=> { if (!isIgnore) { if (res instanceof Array){ setBlacklistItems(res); setTotalBlacklistItems(res); } else if (res instanceof ResponseError) { // TODO error handler console.log(res); } setIsFetchingList(false); } }); return () => { isIgnore = true; // При следующем изменении someValue старый запрос будет проигнорирован }; }, [triggerUpdate, showReportDialog]); useEffect(() => { if (searchText !== ""){ setShowEraseButton(true); setIsFetchingList(true); let result = search(searchText); console.log(result); setBlacklistItems(result); setIsFetchingList(false); } else { setShowEraseButton(false); setBlacklistItems(totalBlacklistItems); } }, [searchText]); function handleSearch(text: string) { setSearchText(text); } function handleItemClick(item: BlacklistItem){ setCurrentDialogBlacklistItem(item); setShowDialog(true); } const handleDialogClose = () => { setShowDialog(false); }; const handleReportDialogOpen = () => { setReportShowDialog(true); }; const handleReportDialogClose = () => { setReportShowDialog(false); }; const sync = () => { setSearchText(''); setTriggerUpdate(triggerUpdate + 1) }; const handleClickEraseSearch = () => { setSearchText(""); }; const search = (searchString: string) => { searchString = searchString.toLowerCase(); return totalBlacklistItems.filter((item) => { return item.link.toLowerCase().includes(searchString) || item.nicknames.some((nickname) => { return nickname.toLowerCase().includes(searchString) }); }); }; return (
handleSearch(e.target.value)} fullWidth slotProps={{ input: { endAdornment: { showEraseButton ? .MuiSvgIcon-root': { color: '#282c34', }, } }} > : "" } , }, }} />
handleReportDialogOpen()} onMouseEnter={() => setFabIsHovered(true)} onMouseLeave={() => setFabIsHovered(false)} variant={fabIsHovered ? 'extended' : 'circular'} sx={{ position: 'fixed', bottom: 16, right: 16, zIndex: 1000, width: fabIsHovered ? '160px' : '56px', // Переход между кругом и овалом transition: 'width 0.3s ease-in-out', overflow: 'hidden', }} > {fabIsHovered ? 'Send report' : ''}
); }