@isma91/react-scheduler 4.0.0 → 4.0.1

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/package.json +4 -76
  2. package/.github/workflows/publish.yml +0 -29
  3. package/.github/workflows/tests.yml +0 -35
  4. package/.gitignore +0 -32
  5. package/.husky/pre-commit +0 -2
  6. package/.prettierignore +0 -1
  7. package/.prettierrc.json +0 -7
  8. package/.yarnrc.yml +0 -1
  9. package/dist/LICENSE +0 -24
  10. package/dist/README.md +0 -172
  11. package/dist/package.json +0 -65
  12. package/eslint.config.js +0 -79
  13. package/index.html +0 -41
  14. package/jest.config.ts +0 -194
  15. package/public/favicon.ico +0 -0
  16. package/public/logo192.png +0 -0
  17. package/public/logo512.png +0 -0
  18. package/public/manifest.json +0 -25
  19. package/public/robots.txt +0 -3
  20. package/scripts/post-pack.js +0 -34
  21. package/src/App.tsx +0 -25
  22. package/src/Page1.tsx +0 -67
  23. package/src/events.tsx +0 -227
  24. package/src/index.tsx +0 -21
  25. package/src/lib/SchedulerComponent.tsx +0 -78
  26. package/src/lib/__tests__/index.test.tsx +0 -24
  27. package/src/lib/components/common/Cell.tsx +0 -52
  28. package/src/lib/components/common/LocaleArrow.tsx +0 -38
  29. package/src/lib/components/common/ResourceHeader.tsx +0 -73
  30. package/src/lib/components/common/Tabs.tsx +0 -119
  31. package/src/lib/components/common/TodayTypo.tsx +0 -44
  32. package/src/lib/components/common/WithResources.tsx +0 -98
  33. package/src/lib/components/events/Actions.tsx +0 -65
  34. package/src/lib/components/events/AgendaEventsList.tsx +0 -115
  35. package/src/lib/components/events/CurrentTimeBar.tsx +0 -59
  36. package/src/lib/components/events/EmptyAgenda.tsx +0 -27
  37. package/src/lib/components/events/EventItem.tsx +0 -180
  38. package/src/lib/components/events/EventItemPopover.tsx +0 -179
  39. package/src/lib/components/events/MonthEvents.tsx +0 -141
  40. package/src/lib/components/events/TodayEvents.tsx +0 -99
  41. package/src/lib/components/hoc/DateProvider.tsx +0 -19
  42. package/src/lib/components/inputs/DatePicker.tsx +0 -95
  43. package/src/lib/components/inputs/Input.tsx +0 -113
  44. package/src/lib/components/inputs/SelectInput.tsx +0 -164
  45. package/src/lib/components/month/MonthTable.tsx +0 -207
  46. package/src/lib/components/nav/DayDateBtn.tsx +0 -77
  47. package/src/lib/components/nav/MonthDateBtn.tsx +0 -80
  48. package/src/lib/components/nav/Navigation.tsx +0 -201
  49. package/src/lib/components/nav/WeekDateBtn.tsx +0 -89
  50. package/src/lib/components/week/WeekTable.tsx +0 -229
  51. package/src/lib/helpers/constants.ts +0 -4
  52. package/src/lib/helpers/generals.tsx +0 -354
  53. package/src/lib/hooks/useArrowDisable.ts +0 -26
  54. package/src/lib/hooks/useCellAttributes.ts +0 -67
  55. package/src/lib/hooks/useDragAttributes.ts +0 -31
  56. package/src/lib/hooks/useEventPermissions.ts +0 -42
  57. package/src/lib/hooks/useStore.ts +0 -8
  58. package/src/lib/hooks/useSyncScroll.ts +0 -31
  59. package/src/lib/hooks/useWindowResize.ts +0 -37
  60. package/src/lib/index.tsx +0 -14
  61. package/src/lib/positionManger/context.ts +0 -14
  62. package/src/lib/positionManger/provider.tsx +0 -113
  63. package/src/lib/positionManger/usePosition.ts +0 -8
  64. package/src/lib/store/context.ts +0 -5
  65. package/src/lib/store/default.ts +0 -157
  66. package/src/lib/store/provider.tsx +0 -211
  67. package/src/lib/store/types.ts +0 -33
  68. package/src/lib/styles/styles.ts +0 -256
  69. package/src/lib/types.ts +0 -423
  70. package/src/lib/views/Day.tsx +0 -265
  71. package/src/lib/views/DayAgenda.tsx +0 -57
  72. package/src/lib/views/Editor.tsx +0 -258
  73. package/src/lib/views/Month.tsx +0 -82
  74. package/src/lib/views/MonthAgenda.tsx +0 -84
  75. package/src/lib/views/Week.tsx +0 -92
  76. package/src/lib/views/WeekAgenda.tsx +0 -81
  77. package/src/vite-env.d.ts +0 -3
  78. package/tsconfig.build.json +0 -5
  79. package/tsconfig.json +0 -27
  80. package/vite.config.js +0 -40
  81. /package/{dist/SchedulerComponent.d.ts → SchedulerComponent.d.ts} +0 -0
  82. /package/{dist/components → components}/common/Cell.d.ts +0 -0
  83. /package/{dist/components → components}/common/LocaleArrow.d.ts +0 -0
  84. /package/{dist/components → components}/common/ResourceHeader.d.ts +0 -0
  85. /package/{dist/components → components}/common/Tabs.d.ts +0 -0
  86. /package/{dist/components → components}/common/TodayTypo.d.ts +0 -0
  87. /package/{dist/components → components}/common/WithResources.d.ts +0 -0
  88. /package/{dist/components → components}/events/Actions.d.ts +0 -0
  89. /package/{dist/components → components}/events/AgendaEventsList.d.ts +0 -0
  90. /package/{dist/components → components}/events/CurrentTimeBar.d.ts +0 -0
  91. /package/{dist/components → components}/events/EmptyAgenda.d.ts +0 -0
  92. /package/{dist/components → components}/events/EventItem.d.ts +0 -0
  93. /package/{dist/components → components}/events/EventItemPopover.d.ts +0 -0
  94. /package/{dist/components → components}/events/MonthEvents.d.ts +0 -0
  95. /package/{dist/components → components}/events/TodayEvents.d.ts +0 -0
  96. /package/{dist/components → components}/hoc/DateProvider.d.ts +0 -0
  97. /package/{dist/components → components}/inputs/DatePicker.d.ts +0 -0
  98. /package/{dist/components → components}/inputs/Input.d.ts +0 -0
  99. /package/{dist/components → components}/inputs/SelectInput.d.ts +0 -0
  100. /package/{dist/components → components}/month/MonthTable.d.ts +0 -0
  101. /package/{dist/components → components}/nav/DayDateBtn.d.ts +0 -0
  102. /package/{dist/components → components}/nav/MonthDateBtn.d.ts +0 -0
  103. /package/{dist/components → components}/nav/Navigation.d.ts +0 -0
  104. /package/{dist/components → components}/nav/WeekDateBtn.d.ts +0 -0
  105. /package/{dist/components → components}/week/WeekTable.d.ts +0 -0
  106. /package/{dist/helpers → helpers}/constants.d.ts +0 -0
  107. /package/{dist/helpers → helpers}/generals.d.ts +0 -0
  108. /package/{dist/hooks → hooks}/useArrowDisable.d.ts +0 -0
  109. /package/{dist/hooks → hooks}/useCellAttributes.d.ts +0 -0
  110. /package/{dist/hooks → hooks}/useDragAttributes.d.ts +0 -0
  111. /package/{dist/hooks → hooks}/useEventPermissions.d.ts +0 -0
  112. /package/{dist/hooks → hooks}/useStore.d.ts +0 -0
  113. /package/{dist/hooks → hooks}/useSyncScroll.d.ts +0 -0
  114. /package/{dist/hooks → hooks}/useWindowResize.d.ts +0 -0
  115. /package/{dist/index.d.ts → index.d.ts} +0 -0
  116. /package/{dist/index.js → index.js} +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
- }