|
1 | 1 | import React, { useCallback } from "react";
|
2 | 2 | import { useRouter } from "next/router";
|
3 | 3 | import { observer } from "mobx-react-lite";
|
| 4 | +import xor from "lodash/xor"; |
4 | 5 | // hooks
|
5 | 6 | import { useEventTracker, useIssues } from "hooks/store";
|
6 | 7 | // components
|
@@ -32,15 +33,16 @@ export const SpreadsheetModuleColumn: React.FC<Props> = observer((props) => {
|
32 | 33 | async (moduleIds: string[] | null) => {
|
33 | 34 | if (!workspaceSlug || !issue || !issue.module_ids || !moduleIds) return;
|
34 | 35 |
|
35 |
| - if (moduleIds.length === 0) |
36 |
| - removeModulesFromIssue(workspaceSlug.toString(), issue.project_id, issue.id, issue.module_ids); |
37 |
| - else if (moduleIds.length > issue.module_ids.length) { |
38 |
| - const newModuleIds = moduleIds.filter((m) => !issue.module_ids?.includes(m)); |
39 |
| - addModulesToIssue(workspaceSlug.toString(), issue.project_id, issue.id, newModuleIds); |
40 |
| - } else if (moduleIds.length < issue.module_ids.length) { |
41 |
| - const removedModuleIds = issue.module_ids.filter((m) => !moduleIds.includes(m)); |
42 |
| - removeModulesFromIssue(workspaceSlug.toString(), issue.project_id, issue.id, removedModuleIds); |
43 |
| - } |
| 36 | + const updatedModuleIds = xor(issue.module_ids, moduleIds); |
| 37 | + const modulesToAdd: string[] = []; |
| 38 | + const modulesToRemove: string[] = []; |
| 39 | + for (const moduleId of updatedModuleIds) |
| 40 | + if (issue.module_ids.includes(moduleId)) modulesToRemove.push(moduleId); |
| 41 | + else modulesToAdd.push(moduleId); |
| 42 | + if (modulesToAdd.length > 0) |
| 43 | + addModulesToIssue(workspaceSlug.toString(), issue.project_id, issue.id, modulesToAdd); |
| 44 | + if (modulesToRemove.length > 0) |
| 45 | + removeModulesFromIssue(workspaceSlug.toString(), issue.project_id, issue.id, modulesToRemove); |
44 | 46 |
|
45 | 47 | captureIssueEvent({
|
46 | 48 | eventName: "Issue updated",
|
|
0 commit comments