import React, { FC, useState } from "react"; import { observer } from "mobx-react"; import { useRouter } from "next/router"; // types import { IProjectView } from "@plane/types"; // components import { FavoriteStar } from "@/components/core"; import { DeleteProjectViewModal, CreateUpdateProjectViewModal, ViewQuickActions } from "@/components/views"; // constants import { EUserProjectRoles } from "@/constants/project"; // helpers import { calculateTotalFilters } from "@/helpers/filter.helper"; // hooks import { useProjectView, useUser } from "@/hooks/store"; type Props = { parentRef: React.RefObject; view: IProjectView; }; export const ViewListItemAction: FC = observer((props) => { const { parentRef, view } = props; // states const [createUpdateViewModal, setCreateUpdateViewModal] = useState(false); const [deleteViewModal, setDeleteViewModal] = useState(false); // router const router = useRouter(); const { workspaceSlug, projectId } = router.query; // store const { membership: { currentProjectRole }, } = useUser(); const { addViewToFavorites, removeViewFromFavorites } = useProjectView(); // derived values const isEditingAllowed = !!currentProjectRole && currentProjectRole >= EUserProjectRoles.MEMBER; // @ts-expect-error key types are not compatible const totalFilters = calculateTotalFilters(view.filters ?? {}); // handlers const handleAddToFavorites = () => { if (!workspaceSlug || !projectId) return; addViewToFavorites(workspaceSlug.toString(), projectId.toString(), view.id); }; const handleRemoveFromFavorites = () => { if (!workspaceSlug || !projectId) return; removeViewFromFavorites(workspaceSlug.toString(), projectId.toString(), view.id); }; return ( <> {workspaceSlug && projectId && view && ( setCreateUpdateViewModal(false)} workspaceSlug={workspaceSlug.toString()} projectId={projectId.toString()} data={view} /> )} setDeleteViewModal(false)} />

{totalFilters} {totalFilters === 1 ? "filter" : "filters"}

{isEditingAllowed && ( { e.preventDefault(); e.stopPropagation(); if (view.is_favorite) handleRemoveFromFavorites(); else handleAddToFavorites(); }} selected={view.is_favorite} /> )} {projectId && workspaceSlug && ( )} ); });