Skip to content

Commit 88c51c8

Browse files
committed
refactor: separate draft effects into useDraftEffects hook for improved clarity and organization
1 parent 588c948 commit 88c51c8

File tree

2 files changed

+74
-44
lines changed

2 files changed

+74
-44
lines changed

packages/web/src/views/Calendar/hooks/draft/actions/useDraftActions.ts

Lines changed: 4 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ import {
3333
} from "@web/ducks/events/selectors/draft.selectors";
3434
import { YEAR_MONTH_DAY_FORMAT } from "@core/constants/date.constants";
3535
import { State_Draft_Local } from "../state/useDraftState";
36+
import { useDraftEffects } from "../effects/useDraftEffects";
3637

37-
type DraftActionSetters = {
38+
export type Setters_Draft_Actions = {
3839
setIsDragging: (isDragging: boolean) => void;
3940
setIsResizing: (isResizing: boolean) => void;
4041
setDragStatus: (status: any) => void;
@@ -46,7 +47,7 @@ type DraftActionSetters = {
4647

4748
export const useDraftActions = (
4849
draftState: State_Draft_Local,
49-
setters: DraftActionSetters,
50+
setters: Setters_Draft_Actions,
5051
dateCalcs: DateCalcs,
5152
weekProps: WeekProps,
5253
isSidebarOpen: boolean
@@ -82,27 +83,6 @@ export const useDraftActions = (
8283
setIsFormOpen,
8384
} = setters;
8485

85-
//TODO change into user action for changing week
86-
useEffect(() => {
87-
reset();
88-
discard();
89-
}, [weekProps.component.week]);
90-
91-
useEffect(() => {
92-
if (isResizing) {
93-
setDateBeingChanged(dateBeingChanged);
94-
setIsFormOpen(false);
95-
}
96-
}, [dateBeingChanged, isResizing]);
97-
98-
useEffect(() => {
99-
const isStaleDraft = !isDrafting && isFormOpen;
100-
if (isStaleDraft) {
101-
setDraft(null);
102-
return;
103-
}
104-
}, [isDrafting, isFormOpen]);
105-
10686
const startDragging = useCallback(() => {
10787
setDraft(reduxDraft);
10888
setIsDragging(true);
@@ -413,27 +393,7 @@ export const useDraftActions = (
413393
isDrafting,
414394
]);
415395

416-
useEffect(() => {
417-
handleChange();
418-
}, [handleChange]);
419-
420-
useEffect(() => {
421-
if (isDragging) {
422-
setIsFormOpen(false);
423-
setDraft((_draft) => {
424-
const durationMin = dayjs(_draft.endDate).diff(
425-
_draft.startDate,
426-
"minutes"
427-
);
428-
429-
setDragStatus({
430-
durationMin,
431-
});
432-
433-
return draft;
434-
});
435-
}
436-
}, [isDragging]);
396+
useDraftEffects(draftState, setters, weekProps, isDrafting, handleChange);
437397

438398
return {
439399
stopDragging,
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import { useEffect } from "react";
2+
import dayjs from "dayjs";
3+
import { State_Draft_Local } from "../state/useDraftState";
4+
import { Setters_Draft_Actions } from "../actions/useDraftActions";
5+
import { WeekProps } from "../../useWeek";
6+
7+
export const useDraftEffects = (
8+
state: State_Draft_Local,
9+
setters: Setters_Draft_Actions,
10+
weekProps: WeekProps,
11+
isDrafting: boolean,
12+
handleChange: () => Promise<void>
13+
) => {
14+
const { draft, isDragging, isResizing, isFormOpen, dateBeingChanged } = state;
15+
const {
16+
setDraft,
17+
setIsDragging,
18+
setIsFormOpen,
19+
setIsResizing,
20+
setResizeStatus,
21+
setDragStatus,
22+
setDateBeingChanged,
23+
} = setters;
24+
25+
useEffect(() => {
26+
setDraft(null);
27+
setIsDragging(false);
28+
setIsFormOpen(false);
29+
setIsResizing(false);
30+
setDragStatus(null);
31+
setResizeStatus(null);
32+
setDateBeingChanged(null);
33+
}, [weekProps.component.week]);
34+
35+
useEffect(() => {
36+
if (isResizing) {
37+
setDateBeingChanged(dateBeingChanged);
38+
setIsFormOpen(false);
39+
}
40+
}, [dateBeingChanged, isResizing]);
41+
42+
useEffect(() => {
43+
const isStaleDraft = !isDrafting && isFormOpen;
44+
if (isStaleDraft) {
45+
setDraft(null);
46+
}
47+
}, [isDrafting, isFormOpen]);
48+
49+
useEffect(() => {
50+
handleChange();
51+
}, [handleChange]);
52+
53+
useEffect(() => {
54+
if (isDragging) {
55+
setIsFormOpen(false);
56+
setDraft((_draft) => {
57+
const durationMin = dayjs(_draft.endDate).diff(
58+
_draft.startDate,
59+
"minutes"
60+
);
61+
62+
setDragStatus({
63+
durationMin,
64+
});
65+
66+
return draft;
67+
});
68+
}
69+
}, [isDragging]);
70+
};

0 commit comments

Comments
 (0)