Skip to content

Commit 4612156

Browse files
authored
[MergeDragDrop] Refactor to use payloads, mergeTreeRefs (#3562)
1 parent 4a5d838 commit 4612156

File tree

1 file changed

+30
-26
lines changed
  • src/goals/MergeDuplicates/MergeDupsStep/MergeDragDrop

1 file changed

+30
-26
lines changed

src/goals/MergeDuplicates/MergeDupsStep/MergeDragDrop/index.tsx

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ import {
1616
moveSense,
1717
orderSense,
1818
} from "goals/MergeDuplicates/Redux/MergeDupsActions";
19+
import {
20+
type CombineSenseMergePayload,
21+
type MoveSensePayload,
22+
type OrderSensePayload,
23+
} from "goals/MergeDuplicates/Redux/MergeDupsReduxTypes";
1924
import { useAppDispatch, useAppSelector } from "rootRedux/hooks";
2025
import { type StoreState } from "rootRedux/types";
2126
import theme from "types/theme";
@@ -36,7 +41,10 @@ export default function MergeDragDrop(): ReactElement {
3641
(state: StoreState) => state.mergeDuplicateGoal.tree.words
3742
);
3843

39-
const [senseToDelete, setSenseToDelete] = useState<string>("");
44+
const [srcToDelete, setSrcToDelete] = useState<
45+
MergeTreeReference | undefined
46+
>();
47+
4048
const { t } = useTranslation();
4149

4250
function handleDrop(res: DropResult): void {
@@ -52,32 +60,27 @@ export default function MergeDragDrop(): ReactElement {
5260
// Case 1a: Cannot delete a protected sense.
5361
return;
5462
}
55-
setSenseToDelete(res.draggableId);
63+
setSrcToDelete(src);
5664
} else if (res.combine) {
5765
// Case 2: the sense was dropped on another sense.
5866
if (src.isSenseProtected && !src.order) {
5967
// Case 2a: Cannot merge a protected sense into another sense.
60-
if (srcWordId !== res.combine.droppableId) {
68+
const destWordId = res.combine.droppableId;
69+
if (srcWordId !== destWordId) {
6170
// The target sense is in a different word, so move instead of combine.
62-
dispatch(
63-
moveSense({
64-
src,
65-
destWordId: res.combine.droppableId,
66-
destOrder: 0,
67-
})
68-
);
71+
dispatch(moveSense({ destOrder: 0, destWordId, src }));
6972
}
7073
return;
7174
}
72-
const combineRef: MergeTreeReference = JSON.parse(
73-
res.combine.draggableId
74-
);
75-
if (combineRef.order !== undefined) {
75+
const dest: MergeTreeReference = JSON.parse(res.combine.draggableId);
76+
if (dest.order !== undefined) {
7677
// Case 2b: If the target is a sidebar sub-sense, it cannot receive a combine.
7778
return;
7879
}
79-
dispatch(combineSense({ src, dest: combineRef }));
80+
const combinePayload: CombineSenseMergePayload = { dest, src };
81+
dispatch(combineSense(combinePayload));
8082
} else if (res.destination) {
83+
const destOrder = res.destination.index;
8184
const destWordId = res.destination.droppableId;
8285
// Case 3: The sense was dropped in a droppable.
8386
if (srcWordId !== destWordId) {
@@ -87,27 +90,28 @@ export default function MergeDragDrop(): ReactElement {
8790
return;
8891
}
8992
// Move the sense to the dest MergeWord.
90-
dispatch(
91-
moveSense({ src, destWordId, destOrder: res.destination.index })
92-
);
93+
const movePayload: MoveSensePayload = { destOrder, destWordId, src };
94+
dispatch(moveSense(movePayload));
9395
} else {
9496
// Case 3b: The source & dest droppables are the same, so we reorder, not move.
95-
const destOrder = res.destination.index;
9697
if (
9798
src.order === destOrder ||
9899
(destOrder === 0 && src.order !== undefined && sidebarProtected)
99100
) {
100101
// If the sense wasn't moved or was moved within the sidebar above a protected sense, do nothing.
101102
return;
102103
}
103-
dispatch(orderSense({ src, destOrder }));
104+
const orderPayload: OrderSensePayload = { destOrder, src };
105+
dispatch(orderSense(orderPayload));
104106
}
105107
}
106108
}
107109

108-
function performDelete(): void {
109-
dispatch(deleteSense(JSON.parse(senseToDelete)));
110-
setSenseToDelete("");
110+
function onConfirmDelete(): void {
111+
if (srcToDelete) {
112+
dispatch(deleteSense(srcToDelete));
113+
setSrcToDelete(undefined);
114+
}
111115
}
112116

113117
function renderSidebar(): ReactElement {
@@ -170,10 +174,10 @@ export default function MergeDragDrop(): ReactElement {
170174
</ImageListItem>
171175
{renderSidebar()}
172176
<CancelConfirmDialog
173-
open={!!senseToDelete}
177+
open={!!srcToDelete}
174178
text="mergeDups.helpText.deleteDialog"
175-
handleCancel={() => setSenseToDelete("")}
176-
handleConfirm={performDelete}
179+
handleCancel={() => setSrcToDelete(undefined)}
180+
handleConfirm={onConfirmDelete}
177181
/>
178182
</ImageList>
179183
</Grid>

0 commit comments

Comments
 (0)