@isma91/react-scheduler 4.0.0 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/{dist/index.js → index.js} +218 -203
  2. package/package.json +4 -76
  3. package/.github/workflows/publish.yml +0 -29
  4. package/.github/workflows/tests.yml +0 -35
  5. package/.gitignore +0 -32
  6. package/.husky/pre-commit +0 -2
  7. package/.prettierignore +0 -1
  8. package/.prettierrc.json +0 -7
  9. package/.yarnrc.yml +0 -1
  10. package/dist/LICENSE +0 -24
  11. package/dist/README.md +0 -172
  12. package/dist/package.json +0 -65
  13. package/eslint.config.js +0 -79
  14. package/index.html +0 -41
  15. package/jest.config.ts +0 -194
  16. package/public/favicon.ico +0 -0
  17. package/public/logo192.png +0 -0
  18. package/public/logo512.png +0 -0
  19. package/public/manifest.json +0 -25
  20. package/public/robots.txt +0 -3
  21. package/scripts/post-pack.js +0 -34
  22. package/src/App.tsx +0 -25
  23. package/src/Page1.tsx +0 -67
  24. package/src/events.tsx +0 -227
  25. package/src/index.tsx +0 -21
  26. package/src/lib/SchedulerComponent.tsx +0 -78
  27. package/src/lib/__tests__/index.test.tsx +0 -24
  28. package/src/lib/components/common/Cell.tsx +0 -52
  29. package/src/lib/components/common/LocaleArrow.tsx +0 -38
  30. package/src/lib/components/common/ResourceHeader.tsx +0 -73
  31. package/src/lib/components/common/Tabs.tsx +0 -119
  32. package/src/lib/components/common/TodayTypo.tsx +0 -44
  33. package/src/lib/components/common/WithResources.tsx +0 -98
  34. package/src/lib/components/events/Actions.tsx +0 -65
  35. package/src/lib/components/events/AgendaEventsList.tsx +0 -115
  36. package/src/lib/components/events/CurrentTimeBar.tsx +0 -59
  37. package/src/lib/components/events/EmptyAgenda.tsx +0 -27
  38. package/src/lib/components/events/EventItem.tsx +0 -180
  39. package/src/lib/components/events/EventItemPopover.tsx +0 -179
  40. package/src/lib/components/events/MonthEvents.tsx +0 -141
  41. package/src/lib/components/events/TodayEvents.tsx +0 -99
  42. package/src/lib/components/hoc/DateProvider.tsx +0 -19
  43. package/src/lib/components/inputs/DatePicker.tsx +0 -95
  44. package/src/lib/components/inputs/Input.tsx +0 -113
  45. package/src/lib/components/inputs/SelectInput.tsx +0 -164
  46. package/src/lib/components/month/MonthTable.tsx +0 -207
  47. package/src/lib/components/nav/DayDateBtn.tsx +0 -77
  48. package/src/lib/components/nav/MonthDateBtn.tsx +0 -80
  49. package/src/lib/components/nav/Navigation.tsx +0 -201
  50. package/src/lib/components/nav/WeekDateBtn.tsx +0 -89
  51. package/src/lib/components/week/WeekTable.tsx +0 -229
  52. package/src/lib/helpers/constants.ts +0 -4
  53. package/src/lib/helpers/generals.tsx +0 -354
  54. package/src/lib/hooks/useArrowDisable.ts +0 -26
  55. package/src/lib/hooks/useCellAttributes.ts +0 -67
  56. package/src/lib/hooks/useDragAttributes.ts +0 -31
  57. package/src/lib/hooks/useEventPermissions.ts +0 -42
  58. package/src/lib/hooks/useStore.ts +0 -8
  59. package/src/lib/hooks/useSyncScroll.ts +0 -31
  60. package/src/lib/hooks/useWindowResize.ts +0 -37
  61. package/src/lib/index.tsx +0 -14
  62. package/src/lib/positionManger/context.ts +0 -14
  63. package/src/lib/positionManger/provider.tsx +0 -113
  64. package/src/lib/positionManger/usePosition.ts +0 -8
  65. package/src/lib/store/context.ts +0 -5
  66. package/src/lib/store/default.ts +0 -157
  67. package/src/lib/store/provider.tsx +0 -211
  68. package/src/lib/store/types.ts +0 -33
  69. package/src/lib/styles/styles.ts +0 -256
  70. package/src/lib/types.ts +0 -423
  71. package/src/lib/views/Day.tsx +0 -265
  72. package/src/lib/views/DayAgenda.tsx +0 -57
  73. package/src/lib/views/Editor.tsx +0 -258
  74. package/src/lib/views/Month.tsx +0 -82
  75. package/src/lib/views/MonthAgenda.tsx +0 -84
  76. package/src/lib/views/Week.tsx +0 -92
  77. package/src/lib/views/WeekAgenda.tsx +0 -81
  78. package/src/vite-env.d.ts +0 -3
  79. package/tsconfig.build.json +0 -5
  80. package/tsconfig.json +0 -27
  81. package/vite.config.js +0 -40
  82. /package/{dist/SchedulerComponent.d.ts → SchedulerComponent.d.ts} +0 -0
  83. /package/{dist/components → components}/common/Cell.d.ts +0 -0
  84. /package/{dist/components → components}/common/LocaleArrow.d.ts +0 -0
  85. /package/{dist/components → components}/common/ResourceHeader.d.ts +0 -0
  86. /package/{dist/components → components}/common/Tabs.d.ts +0 -0
  87. /package/{dist/components → components}/common/TodayTypo.d.ts +0 -0
  88. /package/{dist/components → components}/common/WithResources.d.ts +0 -0
  89. /package/{dist/components → components}/events/Actions.d.ts +0 -0
  90. /package/{dist/components → components}/events/AgendaEventsList.d.ts +0 -0
  91. /package/{dist/components → components}/events/CurrentTimeBar.d.ts +0 -0
  92. /package/{dist/components → components}/events/EmptyAgenda.d.ts +0 -0
  93. /package/{dist/components → components}/events/EventItem.d.ts +0 -0
  94. /package/{dist/components → components}/events/EventItemPopover.d.ts +0 -0
  95. /package/{dist/components → components}/events/MonthEvents.d.ts +0 -0
  96. /package/{dist/components → components}/events/TodayEvents.d.ts +0 -0
  97. /package/{dist/components → components}/hoc/DateProvider.d.ts +0 -0
  98. /package/{dist/components → components}/inputs/DatePicker.d.ts +0 -0
  99. /package/{dist/components → components}/inputs/Input.d.ts +0 -0
  100. /package/{dist/components → components}/inputs/SelectInput.d.ts +0 -0
  101. /package/{dist/components → components}/month/MonthTable.d.ts +0 -0
  102. /package/{dist/components → components}/nav/DayDateBtn.d.ts +0 -0
  103. /package/{dist/components → components}/nav/MonthDateBtn.d.ts +0 -0
  104. /package/{dist/components → components}/nav/Navigation.d.ts +0 -0
  105. /package/{dist/components → components}/nav/WeekDateBtn.d.ts +0 -0
  106. /package/{dist/components → components}/week/WeekTable.d.ts +0 -0
  107. /package/{dist/helpers → helpers}/constants.d.ts +0 -0
  108. /package/{dist/helpers → helpers}/generals.d.ts +0 -0
  109. /package/{dist/hooks → hooks}/useArrowDisable.d.ts +0 -0
  110. /package/{dist/hooks → hooks}/useCellAttributes.d.ts +0 -0
  111. /package/{dist/hooks → hooks}/useDragAttributes.d.ts +0 -0
  112. /package/{dist/hooks → hooks}/useEventPermissions.d.ts +0 -0
  113. /package/{dist/hooks → hooks}/useStore.d.ts +0 -0
  114. /package/{dist/hooks → hooks}/useSyncScroll.d.ts +0 -0
  115. /package/{dist/hooks → hooks}/useWindowResize.d.ts +0 -0
  116. /package/{dist/index.d.ts → index.d.ts} +0 -0
  117. /package/{dist/positionManger → positionManger}/context.d.ts +0 -0
  118. /package/{dist/positionManger → positionManger}/provider.d.ts +0 -0
  119. /package/{dist/positionManger → positionManger}/usePosition.d.ts +0 -0
  120. /package/{dist/store → store}/context.d.ts +0 -0
  121. /package/{dist/store → store}/default.d.ts +0 -0
  122. /package/{dist/store → store}/provider.d.ts +0 -0
  123. /package/{dist/store → store}/types.d.ts +0 -0
  124. /package/{dist/styles → styles}/styles.d.ts +0 -0
  125. /package/{dist/types.d.ts → types.d.ts} +0 -0
  126. /package/{dist/views → views}/Day.d.ts +0 -0
  127. /package/{dist/views → views}/DayAgenda.d.ts +0 -0
  128. /package/{dist/views → views}/Editor.d.ts +0 -0
  129. /package/{dist/views → views}/Month.d.ts +0 -0
  130. /package/{dist/views → views}/MonthAgenda.d.ts +0 -0
  131. /package/{dist/views → views}/Week.d.ts +0 -0
  132. /package/{dist/views → views}/WeekAgenda.d.ts +0 -0
@@ -1,113 +0,0 @@
1
- import { useEffect, useState } from "react";
2
- import { PositionManagerState, PositionContext } from "./context";
3
- import useStore from "../hooks/useStore";
4
- import { DefaultResource, FieldProps, ProcessedEvent, ResourceFields } from "../types";
5
- import {
6
- getResourcedEvents,
7
- sortEventsByTheEarliest,
8
- sortEventsByTheLengthest,
9
- } from "../helpers/generals";
10
- import { eachDayOfInterval, format } from "date-fns";
11
- import { View } from "../components/nav/Navigation";
12
-
13
- type Props = {
14
- children: React.ReactNode;
15
- };
16
-
17
- const setEventPositions = (events: ProcessedEvent[]) => {
18
- const slots: PositionManagerState["renderedSlots"][string] = {};
19
- let position = 0;
20
- for (let i = 0; i < events.length; i++) {
21
- const event = events[i];
22
- const eventLength = eachDayOfInterval({ start: event.start, end: event.end });
23
- for (let i = 0; i < eventLength.length; i++) {
24
- const day = format(eventLength[i], "yyyy-MM-dd");
25
- if (slots[day]) {
26
- const positions = Object.values(slots[day]);
27
- while (positions.includes(position)) {
28
- position += 1;
29
- }
30
- slots[day][event.event_id] = position;
31
- } else {
32
- slots[day] = { [event.event_id]: position };
33
- }
34
- }
35
-
36
- // rest
37
- position = 0;
38
- }
39
-
40
- return slots;
41
- };
42
-
43
- const setEventPositionsWithResources = (
44
- events: ProcessedEvent[],
45
- resources: DefaultResource[],
46
- rFields: ResourceFields,
47
- fields: FieldProps[],
48
- view: View
49
- ) => {
50
- const sorted =
51
- view === "month" ? sortEventsByTheLengthest(events) : sortEventsByTheEarliest(events);
52
- const slots: PositionManagerState["renderedSlots"] = {};
53
-
54
- if (resources.length) {
55
- for (const resource of resources) {
56
- const resourcedEvents = getResourcedEvents(sorted, resource, rFields, fields);
57
- const positions = setEventPositions(resourcedEvents);
58
- slots[resource[rFields.idField]] = positions;
59
- }
60
- } else {
61
- slots.all = setEventPositions(sorted);
62
- }
63
- return slots;
64
- };
65
-
66
- export const PositionProvider = ({ children }: Props) => {
67
- const { events, resources, resourceFields, fields, view } = useStore();
68
- const [state, set] = useState<PositionManagerState>({
69
- renderedSlots: setEventPositionsWithResources(events, resources, resourceFields, fields, view),
70
- });
71
-
72
- useEffect(() => {
73
- set((prev) => ({
74
- ...prev,
75
- renderedSlots: setEventPositionsWithResources(
76
- events,
77
- resources,
78
- resourceFields,
79
- fields,
80
- view
81
- ),
82
- }));
83
- }, [events, fields, resourceFields, resources, view]);
84
-
85
- const setRenderedSlot = (day: string, eventId: string, position: number, resourceId?: string) => {
86
- set((prev) => ({
87
- ...prev,
88
- renderedSlots: {
89
- ...prev.renderedSlots,
90
- [resourceId || "all"]: {
91
- ...prev.renderedSlots?.[resourceId || "all"],
92
- [day]: prev.renderedSlots?.[resourceId || "all"]?.[day]
93
- ? {
94
- ...prev.renderedSlots?.[resourceId || "all"]?.[day],
95
- [eventId]: position,
96
- }
97
- : { [eventId]: position },
98
- },
99
- },
100
- }));
101
- };
102
-
103
- return (
104
- <PositionContext.Provider
105
- value={{
106
- ...state,
107
- setRenderedSlot,
108
- }}
109
- >
110
- {children}
111
- </PositionContext.Provider>
112
- );
113
- };
@@ -1,8 +0,0 @@
1
- import { useContext } from "react";
2
- import { PositionContext } from "./context";
3
-
4
- const usePosition = () => {
5
- return useContext(PositionContext);
6
- };
7
-
8
- export default usePosition;
@@ -1,5 +0,0 @@
1
- import { createContext } from "react";
2
- import { initialStore } from "./default";
3
- import { Store } from "./types";
4
-
5
- export const StoreContext = createContext<Store>(initialStore);
@@ -1,157 +0,0 @@
1
- import { enUS } from "date-fns/locale";
2
- import { SchedulerProps } from "../types";
3
- import { getOneView, getTimeZonedDate } from "../helpers/generals";
4
-
5
- const defaultMonth = {
6
- weekDays: [0, 1, 2, 3, 4, 5, 6],
7
- weekStartOn: 6,
8
- startHour: 9,
9
- endHour: 17,
10
- navigation: true,
11
- disableGoToDay: false,
12
- };
13
-
14
- const defaultWeek = {
15
- weekDays: [0, 1, 2, 3, 4, 5, 6],
16
- weekStartOn: 6,
17
- startHour: 9,
18
- endHour: 17,
19
- step: 60,
20
- navigation: true,
21
- disableGoToDay: false,
22
- };
23
-
24
- const defaultDay = {
25
- startHour: 9,
26
- endHour: 17,
27
- step: 60,
28
- navigation: true,
29
- };
30
-
31
- const defaultResourceFields = {
32
- idField: "assignee",
33
- textField: "text",
34
- subTextField: "subtext",
35
- avatarField: "avatar",
36
- colorField: "color",
37
- };
38
-
39
- const defaultTranslations = (trans: Partial<SchedulerProps["translations"]> = {}) => {
40
- const { navigation, form, event, ...other } = trans;
41
-
42
- return {
43
- navigation: Object.assign(
44
- {
45
- month: "Month",
46
- week: "Week",
47
- day: "Day",
48
- agenda: "Agenda",
49
- today: "Today",
50
- },
51
- navigation
52
- ),
53
- form: Object.assign(
54
- {
55
- addTitle: "Add Event",
56
- editTitle: "Edit Event",
57
- confirm: "Confirm",
58
- delete: "Delete",
59
- cancel: "Cancel",
60
- },
61
- form
62
- ),
63
- event: Object.assign(
64
- {
65
- title: "Title",
66
- start: "Start",
67
- end: "End",
68
- allDay: "All Day",
69
- },
70
- event
71
- ),
72
- ...Object.assign(
73
- { moreEvents: "More...", loading: "Loading...", noDataToDisplay: "No data to display" },
74
- other
75
- ),
76
- };
77
- };
78
-
79
- const defaultViews = (props: Partial<SchedulerProps>) => {
80
- const { month, week, day } = props;
81
- return {
82
- month: month !== null ? Object.assign(defaultMonth, month) : null,
83
- week: week !== null ? Object.assign(defaultWeek, week) : null,
84
- day: day !== null ? Object.assign(defaultDay, day) : null,
85
- };
86
- };
87
-
88
- export const defaultProps = (props: Partial<SchedulerProps>) => {
89
- // We're pulling values out of props that we don't want to
90
- // pass on, so there are 'unused' ones here.
91
- const {
92
- translations,
93
- resourceFields,
94
- view,
95
- agenda,
96
- selectedDate,
97
- resourceViewMode,
98
- direction,
99
- dialogMaxWidth,
100
- hourFormat,
101
- ...otherProps
102
- } = props;
103
-
104
- const views = defaultViews(props);
105
- const defaultView = view || "week";
106
- const initialView = views[defaultView] ? defaultView : getOneView(views);
107
- return {
108
- ...views,
109
- translations: defaultTranslations(translations),
110
- resourceFields: Object.assign(defaultResourceFields, resourceFields),
111
- view: initialView,
112
- selectedDate: getTimeZonedDate(selectedDate || new Date(), props.timeZone),
113
- height: 600,
114
- navigation: true,
115
- disableViewNavigator: false,
116
- events: [],
117
- fields: [],
118
- loading: undefined,
119
- customEditor: undefined,
120
- onConfirm: undefined,
121
- onDelete: undefined,
122
- viewerExtraComponent: undefined,
123
- resources: [],
124
- resourceHeaderComponent: undefined,
125
- resourceViewMode: resourceViewMode || "default",
126
- direction: direction || "ltr",
127
- dialogMaxWidth: dialogMaxWidth || "md",
128
- locale: enUS,
129
- deletable: true,
130
- editable: true,
131
- hourFormat: hourFormat || "12",
132
- draggable: true,
133
- agenda,
134
- enableAgenda: typeof agenda === "undefined" || agenda,
135
- showCurrentTimeBar: true,
136
- forceInlineMultiDay: false,
137
- ...otherProps,
138
- };
139
- };
140
-
141
- export const initialStore = {
142
- ...defaultProps({}),
143
- setProps: () => {},
144
- dialog: false,
145
- selectedRange: undefined,
146
- selectedEvent: undefined,
147
- selectedResource: undefined,
148
- handleState: () => {},
149
- getViews: () => [],
150
- toggleAgenda: () => {},
151
- triggerDialog: () => {},
152
- triggerLoading: () => {},
153
- handleGotoDay: () => {},
154
- confirmEvent: () => {},
155
- setCurrentDragged: () => {},
156
- onDrop: () => {},
157
- };
@@ -1,211 +0,0 @@
1
- import { DragEvent, useEffect, useState } from "react";
2
- import { EventActions, ProcessedEvent, SchedulerProps } from "../types";
3
- import { defaultProps, initialStore } from "./default";
4
- import { StoreContext } from "./context";
5
- import { SchedulerState, SelectedRange, Store } from "./types";
6
- import { arraytizeFieldVal, getAvailableViews } from "../helpers/generals";
7
- import { addMinutes, differenceInMinutes, isEqual } from "date-fns";
8
- import { View } from "../components/nav/Navigation";
9
-
10
- type Props = {
11
- children: React.ReactNode;
12
- initial: Partial<SchedulerProps>;
13
- };
14
-
15
- export const StoreProvider = ({ children, initial }: Props) => {
16
- const [state, set] = useState<Store>({ ...initialStore, ...defaultProps(initial) });
17
-
18
- useEffect(() => {
19
- set((prev) => ({
20
- ...prev,
21
- onEventDrop: initial.onEventDrop,
22
- customEditor: initial.customEditor,
23
- customHeaderContent: initial.customHeaderContent,
24
- events: initial.events || [],
25
- }));
26
- }, [initial.onEventDrop, initial.customEditor, initial.events, initial.customHeaderContent]);
27
-
28
- useEffect(() => {
29
- if ("undefined" !== typeof initial.loading) {
30
- set((prev) => ({ ...prev, loading: initial.loading }));
31
- }
32
- }, [initial.loading]);
33
-
34
- const handleState = (value: SchedulerState[keyof SchedulerState], name: keyof SchedulerState) => {
35
- set((prev) => ({ ...prev, [name]: value }));
36
- };
37
-
38
- const getViews = () => {
39
- return getAvailableViews(state);
40
- };
41
-
42
- const toggleAgenda = () => {
43
- set((prev) => {
44
- const newStatus = !prev.agenda;
45
-
46
- if (state.onViewChange && typeof state.onViewChange === "function") {
47
- state.onViewChange(state.view, newStatus);
48
- }
49
-
50
- return { ...prev, agenda: newStatus };
51
- });
52
- };
53
-
54
- const triggerDialog = (status: boolean, selected?: SelectedRange | ProcessedEvent) => {
55
- const isEvent = selected as ProcessedEvent;
56
-
57
- set((prev) => ({
58
- ...prev,
59
- dialog: status,
60
- selectedRange: isEvent?.event_id
61
- ? undefined
62
- : isEvent || {
63
- start: new Date(),
64
- end: new Date(Date.now() + 60 * 60 * 1000),
65
- },
66
- selectedEvent: isEvent?.event_id ? isEvent : undefined,
67
- selectedResource: isEvent?.[state.resourceFields?.idField],
68
- }));
69
- };
70
-
71
- const triggerLoading = (status: boolean) => {
72
- // Trigger if not out-sourced by props
73
- if (typeof initial.loading === "undefined") {
74
- set((prev) => ({ ...prev, loading: status }));
75
- }
76
- };
77
-
78
- const handleGotoDay = (day: Date) => {
79
- const currentViews = getViews();
80
- let view: View | undefined;
81
- if (currentViews.includes("day")) {
82
- view = "day";
83
- set((prev) => ({ ...prev, view: "day", selectedDate: day }));
84
- } else if (currentViews.includes("week")) {
85
- view = "week";
86
- set((prev) => ({ ...prev, view: "week", selectedDate: day }));
87
- } else {
88
- console.warn("No Day/Week views available");
89
- }
90
-
91
- if (!!view && state.onViewChange && typeof state.onViewChange === "function") {
92
- state.onViewChange(view, state.agenda);
93
- }
94
-
95
- if (!!view && state.onSelectedDateChange && typeof state.onSelectedDateChange === "function") {
96
- state.onSelectedDateChange(day);
97
- }
98
- };
99
-
100
- const confirmEvent = (event: ProcessedEvent | ProcessedEvent[], action: EventActions) => {
101
- let updatedEvents: ProcessedEvent[];
102
- if (action === "edit") {
103
- if (Array.isArray(event)) {
104
- updatedEvents = state.events.map((e) => {
105
- const exist = event.find((ex) => ex.event_id === e.event_id);
106
- return exist ? { ...e, ...exist } : e;
107
- });
108
- } else {
109
- updatedEvents = state.events.map((e) =>
110
- e.event_id === event.event_id ? { ...e, ...event } : e
111
- );
112
- }
113
- } else {
114
- updatedEvents = state.events.concat(event);
115
- }
116
- set((prev) => ({ ...prev, events: updatedEvents }));
117
- };
118
-
119
- const setCurrentDragged = (event?: ProcessedEvent) => {
120
- set((prev) => ({ ...prev, currentDragged: event }));
121
- };
122
-
123
- const onDrop = async (
124
- event: DragEvent<HTMLButtonElement>,
125
- eventId: string,
126
- startTime: Date,
127
- resKey?: string,
128
- resVal?: string | number
129
- ) => {
130
- // Get dropped event
131
- const droppedEvent = state.events.find((e) => {
132
- if (typeof e.event_id === "number") {
133
- return e.event_id === +eventId;
134
- }
135
- return e.event_id === eventId;
136
- }) as ProcessedEvent;
137
-
138
- // Check if has resource and if is multiple
139
- const resField = state.fields.find((f) => f.name === resKey);
140
- const isMultiple = !!resField?.config?.multiple;
141
- let newResource = resVal as string | number | string[] | number[];
142
- if (resField) {
143
- const eResource = droppedEvent[resKey as string];
144
- const currentRes = arraytizeFieldVal(resField, eResource, droppedEvent).value;
145
- if (isMultiple) {
146
- // if dropped on already owned resource
147
- if (currentRes.includes(resVal)) {
148
- // Omit if dropped on same time slot for multiple event
149
- if (isEqual(droppedEvent.start, startTime)) {
150
- return;
151
- }
152
- newResource = currentRes;
153
- } else {
154
- // if have multiple resource ? add other : move to other
155
- newResource = currentRes.length > 1 ? [...currentRes, resVal] : [resVal];
156
- }
157
- }
158
- }
159
-
160
- // Omit if dropped on same time slot for non multiple events
161
- if (isEqual(droppedEvent.start, startTime)) {
162
- if (!newResource || (!isMultiple && newResource === droppedEvent[resKey as string])) {
163
- return;
164
- }
165
- }
166
-
167
- // Update event time according to original duration & update resources/owners
168
- const diff = differenceInMinutes(droppedEvent.end, droppedEvent.start);
169
- const updatedEvent: ProcessedEvent = {
170
- ...droppedEvent,
171
- start: startTime,
172
- end: addMinutes(startTime, diff),
173
- recurring: undefined,
174
- [resKey as string]: newResource || "",
175
- };
176
-
177
- // Local
178
- if (!state.onEventDrop || typeof state.onEventDrop !== "function") {
179
- return confirmEvent(updatedEvent, "edit");
180
- }
181
- // Remote
182
- try {
183
- triggerLoading(true);
184
- const _event = await state.onEventDrop(event, startTime, updatedEvent, droppedEvent);
185
- if (_event) {
186
- confirmEvent(_event, "edit");
187
- }
188
- } finally {
189
- triggerLoading(false);
190
- }
191
- };
192
-
193
- return (
194
- <StoreContext.Provider
195
- value={{
196
- ...state,
197
- handleState,
198
- getViews,
199
- toggleAgenda,
200
- triggerDialog,
201
- triggerLoading,
202
- handleGotoDay,
203
- confirmEvent,
204
- setCurrentDragged,
205
- onDrop,
206
- }}
207
- >
208
- {children}
209
- </StoreContext.Provider>
210
- );
211
- };
@@ -1,33 +0,0 @@
1
- import { DragEvent } from "react";
2
- import { View } from "../components/nav/Navigation";
3
- import { DefaultResource, EventActions, ProcessedEvent, SchedulerProps } from "../types";
4
-
5
- export type SelectedRange = { start: Date; end: Date };
6
-
7
- export interface SchedulerState extends SchedulerProps {
8
- dialog: boolean;
9
- selectedRange?: SelectedRange;
10
- selectedEvent?: ProcessedEvent;
11
- selectedResource?: DefaultResource["assignee"] | DefaultResource["assignee"][];
12
- selectedTab?: DefaultResource["assignee"];
13
- currentDragged?: ProcessedEvent;
14
- enableAgenda?: boolean;
15
- }
16
-
17
- export interface Store extends SchedulerState {
18
- handleState(value: SchedulerState[keyof SchedulerState], name: keyof SchedulerState): void;
19
- getViews(): View[];
20
- toggleAgenda: () => void;
21
- triggerDialog(status: boolean, event?: SelectedRange | ProcessedEvent): void;
22
- triggerLoading(status: boolean): void;
23
- handleGotoDay(day: Date): void;
24
- confirmEvent(event: ProcessedEvent | ProcessedEvent[], action: EventActions): void;
25
- setCurrentDragged(event?: ProcessedEvent): void;
26
- onDrop(
27
- event: DragEvent<HTMLButtonElement>,
28
- eventId: string,
29
- droppedStartTime: Date,
30
- resourceKey?: string,
31
- resourceVal?: string | number
32
- ): void;
33
- }