import { Button } from "@mui/joy"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { useTranslation } from "react-i18next"; import useLoading from "../hooks/useLoading"; import { useResourceStore } from "../store/module"; import Icon from "../components/Icon"; import ResourceCard from "../components/ResourceCard"; import ResourceSearchBar from "../components/ResourceSearchBar"; import { showCommonDialog } from "../components/Dialog/CommonDialog"; import showCreateResourceDialog from "../components/CreateResourceDialog"; import MobileHeader from "../components/MobileHeader"; import Dropdown from "../components/base/Dropdown"; const ResourcesDashboard = () => { const { t } = useTranslation(); const loadingState = useLoading(); const resourceStore = useResourceStore(); const resources = resourceStore.state.resources; const [selectedList, setSelectedList] = useState>([]); const [isVisiable, setIsVisiable] = useState(false); const [queryText, setQueryText] = useState(""); useEffect(() => { resourceStore .fetchResourceList() .catch((error) => { console.error(error); toast.error(error.response.data.message); }) .finally(() => { loadingState.setFinish(); }); }, []); useEffect(() => { if (selectedList.length === 0) { setIsVisiable(false); } else { setIsVisiable(true); } }, [selectedList]); const handleCheckBtnClick = (resourceId: ResourceId) => { setSelectedList([...selectedList, resourceId]); }; const handleUncheckBtnClick = (resourceId: ResourceId) => { setSelectedList(selectedList.filter((resId) => resId !== resourceId)); }; const handleDeleteUnusedResourcesBtnClick = () => { let warningText = t("resources.warning-text-unused"); const unusedResources = resources.filter((resource) => { if (resource.linkedMemoAmount === 0) { warningText = warningText + `\n- ${resource.filename}`; return true; } return false; }); if (unusedResources.length === 0) { toast.success(t("resources.no-unused-resources")); return; } showCommonDialog({ title: t("resources.delete-resource"), content: warningText, style: "warning", dialogName: "delete-unused-resources", onConfirm: async () => { for (const resource of unusedResources) { await resourceStore.deleteResourceById(resource.id); } }, }); }; const handleDeleteSelectedBtnClick = () => { if (selectedList.length == 0) { toast.error(t("resources.no-files-selected")); } else { const warningText = t("resources.warning-text"); showCommonDialog({ title: t("resources.delete-resource"), content: warningText, style: "warning", dialogName: "delete-resource-dialog", onConfirm: async () => { selectedList.map(async (resourceId: ResourceId) => { await resourceStore.deleteResourceById(resourceId); }); }, }); } }; return (

{t("common.resources")}

{isVisiable && ( )} } actions={ <> } />
{loadingState.isLoading ? (

{t("resources.fetching-data")}

) : (
{resources.length === 0 ? (

{t("resources.no-resources")}

) : ( resources .filter((res: Resource) => (queryText === "" ? true : res.filename.toLowerCase().includes(queryText.toLowerCase()))) .map((resource) => ( handleCheckBtnClick(resource.id)} handleUncheckClick={() => handleUncheckBtnClick(resource.id)} > )) )}
)}
); }; export default ResourcesDashboard;