import React, { useCallback } from "react"; import xor from "lodash/xor"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // hooks import { ModuleDropdown } from "components/dropdowns"; import { EIssuesStoreType } from "constants/issue"; import { useEventTracker, useIssues } from "hooks/store"; // components // types import { TIssue } from "@plane/types"; // constants type Props = { issue: TIssue; onClose: () => void; disabled: boolean; }; export const SpreadsheetModuleColumn: React.FC = observer((props) => { // router const router = useRouter(); const { workspaceSlug } = router.query; // props const { issue, disabled, onClose } = props; // hooks const { captureIssueEvent } = useEventTracker(); const { issues: { addModulesToIssue, removeModulesFromIssue }, } = useIssues(EIssuesStoreType.MODULE); const handleModule = useCallback( async (moduleIds: string[] | null) => { if (!workspaceSlug || !issue || !issue.module_ids || !moduleIds) return; const updatedModuleIds = xor(issue.module_ids, moduleIds); const modulesToAdd: string[] = []; const modulesToRemove: string[] = []; for (const moduleId of updatedModuleIds) if (issue.module_ids.includes(moduleId)) modulesToRemove.push(moduleId); else modulesToAdd.push(moduleId); if (issue.project_id && modulesToAdd.length > 0) addModulesToIssue(workspaceSlug.toString(), issue.project_id, issue.id, modulesToAdd); if (issue.project_id && modulesToRemove.length > 0) removeModulesFromIssue(workspaceSlug.toString(), issue.project_id, issue.id, modulesToRemove); captureIssueEvent({ eventName: "Issue updated", payload: { ...issue, module_ids: moduleIds, element: "Spreadsheet layout", }, updates: { changed_property: "module_ids", change_details: { module_ids: moduleIds } }, path: router.asPath, }); }, [workspaceSlug, issue, addModulesToIssue, removeModulesFromIssue, captureIssueEvent, router.asPath] ); return (
); });