forked from github/plane
63b6150b9c
* fix: Labels reordering inconsistency * fix: Delete child labels * feat: multi-select while grouping labels * refactor: label sorting in mobx computed function * feat: drag & drop label grouping, un-grouping * chore: removed label select modal * fix: moving labels from project store to project label store * fix: typo changes and build tree function added * labels feature * disable dropping group into a group * fix build errors * fix more issues * chore: added combining state UI, fixed scroll issue for label groups * chore: group icon for label groups * fix: group cannot be dropped in another group --------- Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com> Co-authored-by: rahulramesha <rahulramesham@gmail.com> Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
import React, { useCallback } from "react";
|
|
import { useRouter } from "next/router";
|
|
import { observer } from "mobx-react-lite";
|
|
|
|
// mobx store
|
|
import { useMobxStore } from "lib/mobx/store-provider";
|
|
// components
|
|
import { SpreadsheetView } from "components/issues";
|
|
// types
|
|
import { IIssue, IIssueDisplayFilterOptions } from "types";
|
|
// constants
|
|
import { IIssueUnGroupedStructure } from "store/issue";
|
|
|
|
export const ModuleSpreadsheetLayout: React.FC = observer(() => {
|
|
const router = useRouter();
|
|
const { workspaceSlug, projectId } = router.query;
|
|
|
|
const {
|
|
issueFilter: issueFilterStore,
|
|
moduleIssue: moduleIssueStore,
|
|
issueDetail: issueDetailStore,
|
|
projectLabel: { projectLabels },
|
|
projectMember: { projectMembers },
|
|
projectState: projectStateStore,
|
|
} = useMobxStore();
|
|
|
|
const issues = moduleIssueStore.getIssues;
|
|
|
|
const handleDisplayFiltersUpdate = useCallback(
|
|
(updatedDisplayFilter: Partial<IIssueDisplayFilterOptions>) => {
|
|
if (!workspaceSlug || !projectId) return;
|
|
|
|
issueFilterStore.updateUserFilters(workspaceSlug.toString(), projectId.toString(), {
|
|
display_filters: {
|
|
...updatedDisplayFilter,
|
|
},
|
|
});
|
|
},
|
|
[issueFilterStore, projectId, workspaceSlug]
|
|
);
|
|
|
|
const handleUpdateIssue = useCallback(
|
|
(issue: IIssue, data: Partial<IIssue>) => {
|
|
if (!workspaceSlug || !projectId) return;
|
|
|
|
const payload = {
|
|
...issue,
|
|
...data,
|
|
};
|
|
|
|
moduleIssueStore.updateIssueStructure(null, null, payload);
|
|
issueDetailStore.updateIssue(workspaceSlug.toString(), projectId.toString(), issue.id, data);
|
|
},
|
|
[issueDetailStore, moduleIssueStore, projectId, workspaceSlug]
|
|
);
|
|
|
|
return (
|
|
<SpreadsheetView
|
|
displayProperties={issueFilterStore.userDisplayProperties}
|
|
displayFilters={issueFilterStore.userDisplayFilters}
|
|
handleDisplayFilterUpdate={handleDisplayFiltersUpdate}
|
|
issues={issues as IIssueUnGroupedStructure}
|
|
members={projectMembers?.map((m) => m.member)}
|
|
labels={projectLabels ?? undefined}
|
|
states={projectId ? projectStateStore.states?.[projectId.toString()] : undefined}
|
|
handleIssueAction={() => {}}
|
|
handleUpdateIssue={handleUpdateIssue}
|
|
disableUserActions={false}
|
|
/>
|
|
);
|
|
});
|