import { ReactElement, useCallback } from "react"; import { observer } from "mobx-react"; // components import { PageHead } from "components/core"; import { ProjectsHeader } from "components/headers"; import { ProjectAppliedFiltersList, ProjectCardList } from "components/project"; // layouts import { useApplication, useProject, useProjectFilter, useWorkspace } from "hooks/store"; import { AppLayout } from "layouts/app-layout"; // helpers import { calculateTotalFilters } from "helpers/filter.helper"; // types import { NextPageWithLayout } from "lib/types"; import { TProjectFilters } from "@plane/types"; const ProjectsPage: NextPageWithLayout = observer(() => { // store const { router: { workspaceSlug }, } = useApplication(); const { currentWorkspace } = useWorkspace(); const { workspaceProjectIds, filteredProjectIds } = useProject(); const { currentWorkspaceFilters, clearAllFilters, updateFilters } = useProjectFilter(); // derived values const pageTitle = currentWorkspace?.name ? `${currentWorkspace?.name} - Projects` : undefined; const handleRemoveFilter = useCallback( (key: keyof TProjectFilters, value: string | null) => { if (!workspaceSlug) return; let newValues = currentWorkspaceFilters?.[key] ?? []; if (!value) newValues = []; else newValues = newValues.filter((val) => val !== value); updateFilters(workspaceSlug.toString(), { [key]: newValues }); }, [currentWorkspaceFilters, updateFilters, workspaceSlug] ); return ( <>
{calculateTotalFilters(currentWorkspaceFilters ?? {}) !== 0 && (
clearAllFilters(`${workspaceSlug}`)} handleRemoveFilter={handleRemoveFilter} filteredProjects={filteredProjectIds?.length ?? 0} totalProjects={workspaceProjectIds?.length ?? 0} alwaysAllowEditing />
)}
); }); ProjectsPage.getLayout = function getLayout(page: ReactElement) { return }>{page}; }; export default ProjectsPage;