@sunsama/event-calendar 0.2.3 → 0.2.5
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.
- package/lib/commonjs/hooks/use-events.js +79 -0
- package/lib/commonjs/hooks/use-events.js.map +1 -0
- package/lib/commonjs/hooks/use-is-editing.js +6 -3
- package/lib/commonjs/hooks/use-is-editing.js.map +1 -1
- package/lib/commonjs/index.js +65 -35
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/hooks/use-events.js +72 -0
- package/lib/module/hooks/use-events.js.map +1 -0
- package/lib/module/hooks/use-is-editing.js +5 -2
- package/lib/module/hooks/use-is-editing.js.map +1 -1
- package/lib/module/index.js +65 -35
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/commonjs/hooks/use-events.d.ts +31 -0
- package/lib/typescript/commonjs/hooks/use-events.d.ts.map +1 -0
- package/lib/typescript/commonjs/hooks/use-is-editing.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +4 -1
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/module/hooks/use-events.d.ts +31 -0
- package/lib/typescript/module/hooks/use-events.d.ts.map +1 -0
- package/lib/typescript/module/hooks/use-is-editing.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +4 -1
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/hooks/use-events.tsx +112 -0
- package/src/hooks/use-is-editing.tsx +9 -2
- package/src/index.tsx +92 -44
- package/lib/commonjs/hooks/use-cloned-events.js +0 -25
- package/lib/commonjs/hooks/use-cloned-events.js.map +0 -1
- package/lib/commonjs/hooks/use-events-layout.js +0 -34
- package/lib/commonjs/hooks/use-events-layout.js.map +0 -1
- package/lib/module/hooks/use-cloned-events.js +0 -21
- package/lib/module/hooks/use-cloned-events.js.map +0 -1
- package/lib/module/hooks/use-events-layout.js +0 -29
- package/lib/module/hooks/use-events-layout.js.map +0 -1
- package/lib/typescript/commonjs/hooks/use-cloned-events.d.ts +0 -11
- package/lib/typescript/commonjs/hooks/use-cloned-events.d.ts.map +0 -1
- package/lib/typescript/commonjs/hooks/use-events-layout.d.ts +0 -13
- package/lib/typescript/commonjs/hooks/use-events-layout.d.ts.map +0 -1
- package/lib/typescript/module/hooks/use-cloned-events.d.ts +0 -11
- package/lib/typescript/module/hooks/use-cloned-events.d.ts.map +0 -1
- package/lib/typescript/module/hooks/use-events-layout.d.ts +0 -13
- package/lib/typescript/module/hooks/use-events-layout.d.ts.map +0 -1
- package/src/hooks/use-cloned-events.ts +0 -26
- package/src/hooks/use-events-layout.ts +0 -55
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type Dispatch, type SetStateAction } from "react";
|
|
2
|
+
import { CalendarEvent, CalendarViewIntervalType, FullCalendarEventLayout } from "../types";
|
|
3
|
+
export type UpdateEvent = {
|
|
4
|
+
events: CalendarEvent[];
|
|
5
|
+
userCalendarId: string;
|
|
6
|
+
timezone: string;
|
|
7
|
+
startCalendarDate: string;
|
|
8
|
+
endCalendarDate: string;
|
|
9
|
+
startDayOfWeekOffset?: number;
|
|
10
|
+
calendarViewInterval?: CalendarViewIntervalType;
|
|
11
|
+
};
|
|
12
|
+
type EventsContextType = {
|
|
13
|
+
clonedEvents: CalendarEvent[];
|
|
14
|
+
updateClonedEvents: Dispatch<SetStateAction<CalendarEvent[]>>;
|
|
15
|
+
eventsLayout: FullCalendarEventLayout;
|
|
16
|
+
updateEventsLayout: (props: UpdateEvent) => void;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Provider that manages both cloned events & event layouts independently.
|
|
20
|
+
*/
|
|
21
|
+
export declare const EventsProvider: ({ children, initialProps, updateLocalStateAfterEdit, }: {
|
|
22
|
+
children: React.ReactNode;
|
|
23
|
+
initialProps: UpdateEvent;
|
|
24
|
+
updateLocalStateAfterEdit?: boolean;
|
|
25
|
+
}) => import("react").JSX.Element;
|
|
26
|
+
/**
|
|
27
|
+
* Hook to access cloned events and event layouts.
|
|
28
|
+
*/
|
|
29
|
+
export declare const useEvents: () => EventsContextType;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=use-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-events.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-events.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,cAAc,EAKpB,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,kBAAkB,EAAE,QAAQ,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC9D,YAAY,EAAE,uBAAuB,CAAC;IACtC,kBAAkB,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAClD,CAAC;AAKF;;GAEG;AACH,eAAO,MAAM,cAAc,2DAIxB;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,YAAY,EAAE,WAAW,CAAC;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,gCAoDA,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,yBAMrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-is-editing.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-is-editing.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAEZ,SAAS,EAIV,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAkB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-is-editing.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-is-editing.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAEZ,SAAS,EAIV,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAkB,MAAM,yBAAyB,CAAC;AAGtE,OAAO,EAAc,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAG9D,UAAU,aAAa;IACrB,SAAS,EAAE,IAAI,GAAG,sBAAsB,CAAC;IACzC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,YAAY,EAAE,CACZ,QAAQ,EAAE,sBAAsB,GAAG,IAAI,EACvC,YAAY,CAAC,EAAE;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,KACE,IAAI,CAAC;CACX;AAID,eAAO,MAAM,YAAY,qBAOxB,CAAC;AAGF,eAAO,MAAM,iBAAiB,iBAAkB;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,sBA8EtE,CAAC"}
|
|
@@ -23,6 +23,9 @@ type EventCalenderProps = {
|
|
|
23
23
|
extraTimedComponents?: Config["extraTimedComponents"];
|
|
24
24
|
onZoomChange?: Config["onZoomChange"];
|
|
25
25
|
};
|
|
26
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Wraps `EventCalendarContent` inside `ClonedEventsProvider` to manage cloned events independently.
|
|
28
|
+
*/
|
|
29
|
+
declare const EventCalendar: ({ timeFormat, dayDate, events, initialZoomLevel, timezone, userCalendarId, maxAllDayEvents, updateLocalStateAfterEdit, canCreateEvents, canEditEvent, ...props }: EventCalenderProps) => import("react").JSX.Element;
|
|
27
30
|
export default EventCalendar;
|
|
28
31
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEhF,cAAc,SAAS,CAAC;AAExB,KAAK,kBAAkB,GAAG;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAC5D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;CACvC,CAAC;AAkGF;;GAEG;AACH,QAAA,MAAM,aAAa,qKAYhB,kBAAkB,gCAgCpB,CAAC;AA0BF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type Dispatch, type SetStateAction } from "react";
|
|
2
|
+
import { CalendarEvent, CalendarViewIntervalType, FullCalendarEventLayout } from "../types";
|
|
3
|
+
export type UpdateEvent = {
|
|
4
|
+
events: CalendarEvent[];
|
|
5
|
+
userCalendarId: string;
|
|
6
|
+
timezone: string;
|
|
7
|
+
startCalendarDate: string;
|
|
8
|
+
endCalendarDate: string;
|
|
9
|
+
startDayOfWeekOffset?: number;
|
|
10
|
+
calendarViewInterval?: CalendarViewIntervalType;
|
|
11
|
+
};
|
|
12
|
+
type EventsContextType = {
|
|
13
|
+
clonedEvents: CalendarEvent[];
|
|
14
|
+
updateClonedEvents: Dispatch<SetStateAction<CalendarEvent[]>>;
|
|
15
|
+
eventsLayout: FullCalendarEventLayout;
|
|
16
|
+
updateEventsLayout: (props: UpdateEvent) => void;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Provider that manages both cloned events & event layouts independently.
|
|
20
|
+
*/
|
|
21
|
+
export declare const EventsProvider: ({ children, initialProps, updateLocalStateAfterEdit, }: {
|
|
22
|
+
children: React.ReactNode;
|
|
23
|
+
initialProps: UpdateEvent;
|
|
24
|
+
updateLocalStateAfterEdit?: boolean;
|
|
25
|
+
}) => import("react").JSX.Element;
|
|
26
|
+
/**
|
|
27
|
+
* Hook to access cloned events and event layouts.
|
|
28
|
+
*/
|
|
29
|
+
export declare const useEvents: () => EventsContextType;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=use-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-events.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-events.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,cAAc,EAKpB,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,kBAAkB,EAAE,QAAQ,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC9D,YAAY,EAAE,uBAAuB,CAAC;IACtC,kBAAkB,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAClD,CAAC;AAKF;;GAEG;AACH,eAAO,MAAM,cAAc,2DAIxB;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,YAAY,EAAE,WAAW,CAAC;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,gCAoDA,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,yBAMrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-is-editing.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-is-editing.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAEZ,SAAS,EAIV,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAkB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-is-editing.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-is-editing.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAEZ,SAAS,EAIV,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAkB,MAAM,yBAAyB,CAAC;AAGtE,OAAO,EAAc,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAG9D,UAAU,aAAa;IACrB,SAAS,EAAE,IAAI,GAAG,sBAAsB,CAAC;IACzC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,YAAY,EAAE,CACZ,QAAQ,EAAE,sBAAsB,GAAG,IAAI,EACvC,YAAY,CAAC,EAAE;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,KACE,IAAI,CAAC;CACX;AAID,eAAO,MAAM,YAAY,qBAOxB,CAAC;AAGF,eAAO,MAAM,iBAAiB,iBAAkB;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,sBA8EtE,CAAC"}
|
|
@@ -23,6 +23,9 @@ type EventCalenderProps = {
|
|
|
23
23
|
extraTimedComponents?: Config["extraTimedComponents"];
|
|
24
24
|
onZoomChange?: Config["onZoomChange"];
|
|
25
25
|
};
|
|
26
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Wraps `EventCalendarContent` inside `ClonedEventsProvider` to manage cloned events independently.
|
|
28
|
+
*/
|
|
29
|
+
declare const EventCalendar: ({ timeFormat, dayDate, events, initialZoomLevel, timezone, userCalendarId, maxAllDayEvents, updateLocalStateAfterEdit, canCreateEvents, canEditEvent, ...props }: EventCalenderProps) => import("react").JSX.Element;
|
|
27
30
|
export default EventCalendar;
|
|
28
31
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEhF,cAAc,SAAS,CAAC;AAExB,KAAK,kBAAkB,GAAG;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAC5D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;CACvC,CAAC;AAkGF;;GAEG;AACH,QAAA,MAAM,aAAa,qKAYhB,kBAAkB,gCAgCpB,CAAC;AA0BF,eAAe,aAAa,CAAC"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createContext,
|
|
3
|
+
type Dispatch,
|
|
4
|
+
type SetStateAction,
|
|
5
|
+
useCallback,
|
|
6
|
+
useContext,
|
|
7
|
+
useEffect,
|
|
8
|
+
useState,
|
|
9
|
+
} from "react";
|
|
10
|
+
import { cloneDeep } from "lodash";
|
|
11
|
+
import generateEventLayouts from "../utils/generate-event-layouts";
|
|
12
|
+
import {
|
|
13
|
+
CalendarEvent,
|
|
14
|
+
CalendarViewIntervalType,
|
|
15
|
+
FullCalendarEventLayout,
|
|
16
|
+
} from "../types";
|
|
17
|
+
|
|
18
|
+
export type UpdateEvent = {
|
|
19
|
+
events: CalendarEvent[];
|
|
20
|
+
userCalendarId: string;
|
|
21
|
+
timezone: string;
|
|
22
|
+
startCalendarDate: string;
|
|
23
|
+
endCalendarDate: string;
|
|
24
|
+
startDayOfWeekOffset?: number;
|
|
25
|
+
calendarViewInterval?: CalendarViewIntervalType;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
type EventsContextType = {
|
|
29
|
+
clonedEvents: CalendarEvent[];
|
|
30
|
+
updateClonedEvents: Dispatch<SetStateAction<CalendarEvent[]>>;
|
|
31
|
+
eventsLayout: FullCalendarEventLayout;
|
|
32
|
+
updateEventsLayout: (props: UpdateEvent) => void;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
// Context to store both cloned events & event layouts
|
|
36
|
+
const EventsContext = createContext<EventsContextType | null>(null);
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Provider that manages both cloned events & event layouts independently.
|
|
40
|
+
*/
|
|
41
|
+
export const EventsProvider = ({
|
|
42
|
+
children,
|
|
43
|
+
initialProps,
|
|
44
|
+
updateLocalStateAfterEdit = true,
|
|
45
|
+
}: {
|
|
46
|
+
children: React.ReactNode;
|
|
47
|
+
initialProps: UpdateEvent;
|
|
48
|
+
updateLocalStateAfterEdit?: boolean;
|
|
49
|
+
}) => {
|
|
50
|
+
// Cloned Events State
|
|
51
|
+
const [clonedEvents, setClonedEvents] = useState<CalendarEvent[]>(
|
|
52
|
+
initialProps.events
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
// Event Layouts State
|
|
56
|
+
const [eventsLayout, setEventsLayout] = useState<FullCalendarEventLayout>({
|
|
57
|
+
allDayEventsLayout: [],
|
|
58
|
+
partDayEventsLayout: [],
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// Function to update cloned events
|
|
62
|
+
const updateClonedEvents = useCallback(
|
|
63
|
+
(events: CalendarEvent[]) => {
|
|
64
|
+
setClonedEvents(updateLocalStateAfterEdit ? cloneDeep(events) : events);
|
|
65
|
+
},
|
|
66
|
+
[updateLocalStateAfterEdit]
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
// Function to update event layouts
|
|
70
|
+
const updateEventsLayout = (props: UpdateEvent) => {
|
|
71
|
+
setEventsLayout(
|
|
72
|
+
generateEventLayouts(props)[props.startCalendarDate] || {
|
|
73
|
+
partDayEventsLayout: [],
|
|
74
|
+
allDayEventsLayout: [],
|
|
75
|
+
}
|
|
76
|
+
);
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// Update both states when initialProps change
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
updateClonedEvents(initialProps.events);
|
|
82
|
+
updateEventsLayout(initialProps);
|
|
83
|
+
}, [initialProps, updateClonedEvents]);
|
|
84
|
+
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
updateEventsLayout({ ...initialProps, events: clonedEvents });
|
|
87
|
+
}, [initialProps, clonedEvents]);
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<EventsContext.Provider
|
|
91
|
+
value={{
|
|
92
|
+
clonedEvents,
|
|
93
|
+
updateClonedEvents: setClonedEvents,
|
|
94
|
+
eventsLayout,
|
|
95
|
+
updateEventsLayout,
|
|
96
|
+
}}
|
|
97
|
+
>
|
|
98
|
+
{children}
|
|
99
|
+
</EventsContext.Provider>
|
|
100
|
+
);
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Hook to access cloned events and event layouts.
|
|
105
|
+
*/
|
|
106
|
+
export const useEvents = () => {
|
|
107
|
+
const context = useContext(EventsContext);
|
|
108
|
+
if (!context) {
|
|
109
|
+
throw new Error("useEvents must be used within an EventsProvider");
|
|
110
|
+
}
|
|
111
|
+
return context;
|
|
112
|
+
};
|
|
@@ -8,8 +8,8 @@ import React, {
|
|
|
8
8
|
import { SharedValue, useSharedValue } from "react-native-reanimated";
|
|
9
9
|
import { ConfigProvider } from "../utils/globals";
|
|
10
10
|
import { isFunction } from "lodash";
|
|
11
|
-
import { updateClonedEvents } from "../hooks/use-cloned-events";
|
|
12
11
|
import { EditStatus, PartDayEventLayoutType } from "../types";
|
|
12
|
+
import { useEvents } from "./use-events";
|
|
13
13
|
|
|
14
14
|
interface IsEditingType {
|
|
15
15
|
isEditing: null | PartDayEventLayoutType;
|
|
@@ -38,6 +38,7 @@ export const useIsEditing = () => {
|
|
|
38
38
|
export const IsEditingProvider = ({ children }: { children: ReactNode }) => {
|
|
39
39
|
const { canEditEvent, onEventEdit, updateLocalStateAfterEdit } =
|
|
40
40
|
useContext(ConfigProvider);
|
|
41
|
+
const { updateClonedEvents } = useEvents();
|
|
41
42
|
const [isEditing, baseSetIsEditing] = useState<null | PartDayEventLayoutType>(
|
|
42
43
|
null
|
|
43
44
|
);
|
|
@@ -98,7 +99,13 @@ export const IsEditingProvider = ({ children }: { children: ReactNode }) => {
|
|
|
98
99
|
|
|
99
100
|
baseSetIsEditing(newValue);
|
|
100
101
|
},
|
|
101
|
-
[
|
|
102
|
+
[
|
|
103
|
+
canEditEvent,
|
|
104
|
+
isEditing,
|
|
105
|
+
onEventEdit,
|
|
106
|
+
updateClonedEvents,
|
|
107
|
+
updateLocalStateAfterEdit,
|
|
108
|
+
]
|
|
102
109
|
);
|
|
103
110
|
|
|
104
111
|
return (
|
package/src/index.tsx
CHANGED
|
@@ -4,13 +4,12 @@ import { ScrollView } from "react-native-gesture-handler";
|
|
|
4
4
|
import { useSharedValue } from "react-native-reanimated";
|
|
5
5
|
import ZoomProvider from "./components/zoom-provider";
|
|
6
6
|
import TimedEvents from "./components/timed-events";
|
|
7
|
-
import useEventsLayout, { UpdateEvent } from "./hooks/use-events-layout";
|
|
8
7
|
import { ConfigProvider, DEFAULT_MINUTE_HEIGHT } from "./utils/globals";
|
|
9
|
-
import moment from "moment-timezone";
|
|
8
|
+
import moment, { type Moment } from "moment-timezone";
|
|
10
9
|
import { useMemo, useRef } from "react";
|
|
11
10
|
import { GestureRef } from "react-native-gesture-handler/lib/typescript/handlers/gestures/gesture";
|
|
12
11
|
import { IsEditingProvider } from "./hooks/use-is-editing";
|
|
13
|
-
import
|
|
12
|
+
import { EventsProvider, useEvents } from "./hooks/use-events";
|
|
14
13
|
import type { CalendarEvent, Config, onCreateEvent, ThemeStyle } from "./types";
|
|
15
14
|
|
|
16
15
|
export * from "./types";
|
|
@@ -39,63 +38,63 @@ type EventCalenderProps = {
|
|
|
39
38
|
onZoomChange?: Config["onZoomChange"];
|
|
40
39
|
};
|
|
41
40
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
initialZoomLevel
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
onPressEvent
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
41
|
+
type EventCalenderContentProps = {
|
|
42
|
+
canCreateEvents: boolean;
|
|
43
|
+
canEditEvent: Config["canEditEvent"];
|
|
44
|
+
startCalendarDate: Moment;
|
|
45
|
+
fiveMinuteInterval?: boolean;
|
|
46
|
+
initialZoomLevel: number;
|
|
47
|
+
maxAllDayEvents: number;
|
|
48
|
+
onCreateEvent?: onCreateEvent;
|
|
49
|
+
onEventEdit?: Config["onEventEdit"];
|
|
50
|
+
onPressEvent?: Config["onPressEvent"];
|
|
51
|
+
renderDragBars?: Config["renderDragBars"];
|
|
52
|
+
renderEvent: Config["renderEvent"];
|
|
53
|
+
renderNewEventContainer?: Config["renderNewEventContainer"];
|
|
54
|
+
showTimeIndicator?: boolean;
|
|
55
|
+
theme?: ThemeStyle;
|
|
56
|
+
timeFormat: string;
|
|
57
|
+
timezone: string;
|
|
58
|
+
updateLocalStateAfterEdit: boolean;
|
|
59
|
+
extraTimedComponents?: Config["extraTimedComponents"];
|
|
60
|
+
onZoomChange?: Config["onZoomChange"];
|
|
61
|
+
};
|
|
62
|
+
const EventCalendarContent = ({
|
|
63
|
+
canCreateEvents,
|
|
64
|
+
canEditEvent,
|
|
57
65
|
fiveMinuteInterval,
|
|
58
|
-
|
|
66
|
+
initialZoomLevel,
|
|
67
|
+
maxAllDayEvents,
|
|
68
|
+
onCreateEvent,
|
|
59
69
|
onEventEdit,
|
|
70
|
+
onPressEvent,
|
|
60
71
|
renderDragBars,
|
|
61
|
-
|
|
72
|
+
renderEvent,
|
|
73
|
+
renderNewEventContainer,
|
|
74
|
+
showTimeIndicator,
|
|
75
|
+
theme,
|
|
76
|
+
timeFormat,
|
|
77
|
+
timezone,
|
|
78
|
+
updateLocalStateAfterEdit,
|
|
62
79
|
extraTimedComponents,
|
|
63
80
|
onZoomChange,
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
() => moment.tz(dayDate, timezone).startOf("day"),
|
|
67
|
-
[dayDate, timezone]
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
const clonedEvents = useClonedEvents(events, updateLocalStateAfterEdit);
|
|
71
|
-
|
|
72
|
-
const memoizedProps = useMemo<UpdateEvent>(
|
|
73
|
-
() => ({
|
|
74
|
-
startCalendarDate: startCalendarDate.format("YYYY-MM-DD"),
|
|
75
|
-
calendarViewInterval: "1day",
|
|
76
|
-
endCalendarDate: startCalendarDate.format("YYYY-MM-DD"),
|
|
77
|
-
userCalendarId,
|
|
78
|
-
timezone,
|
|
79
|
-
startDayOfWeekOffset: 0,
|
|
80
|
-
events: clonedEvents,
|
|
81
|
-
}),
|
|
82
|
-
[startCalendarDate, userCalendarId, timezone, clonedEvents]
|
|
83
|
-
);
|
|
84
|
-
|
|
85
|
-
const layout = useEventsLayout(memoizedProps);
|
|
81
|
+
startCalendarDate,
|
|
82
|
+
}: EventCalenderContentProps) => {
|
|
86
83
|
const zoomLevel = useSharedValue(initialZoomLevel);
|
|
87
84
|
const createY = useSharedValue(-1);
|
|
88
85
|
const maximumHour = useSharedValue(0);
|
|
89
86
|
|
|
90
87
|
const refNewEvent = useRef<GestureRef>(null);
|
|
91
88
|
|
|
89
|
+
const { eventsLayout } = useEvents();
|
|
90
|
+
|
|
92
91
|
return (
|
|
93
92
|
<View style={[styles.container, theme?.container]}>
|
|
94
93
|
<ConfigProvider.Provider
|
|
95
94
|
value={{
|
|
96
95
|
dayDate: startCalendarDate,
|
|
97
96
|
timeFormat,
|
|
98
|
-
layout,
|
|
97
|
+
layout: eventsLayout,
|
|
99
98
|
zoomLevel,
|
|
100
99
|
createY,
|
|
101
100
|
initialZoomLevel,
|
|
@@ -112,9 +111,9 @@ const EventCalendar = ({
|
|
|
112
111
|
onEventEdit,
|
|
113
112
|
renderDragBars,
|
|
114
113
|
maximumHour,
|
|
115
|
-
updateLocalStateAfterEdit,
|
|
116
114
|
extraTimedComponents,
|
|
117
115
|
onZoomChange,
|
|
116
|
+
updateLocalStateAfterEdit,
|
|
118
117
|
}}
|
|
119
118
|
>
|
|
120
119
|
<AllDayEvents />
|
|
@@ -135,6 +134,55 @@ const EventCalendar = ({
|
|
|
135
134
|
);
|
|
136
135
|
};
|
|
137
136
|
|
|
137
|
+
/**
|
|
138
|
+
* Wraps `EventCalendarContent` inside `ClonedEventsProvider` to manage cloned events independently.
|
|
139
|
+
*/
|
|
140
|
+
const EventCalendar = ({
|
|
141
|
+
timeFormat = "HH:mm",
|
|
142
|
+
dayDate,
|
|
143
|
+
events,
|
|
144
|
+
initialZoomLevel = DEFAULT_MINUTE_HEIGHT,
|
|
145
|
+
timezone = "UTC",
|
|
146
|
+
userCalendarId = "",
|
|
147
|
+
maxAllDayEvents = 2,
|
|
148
|
+
updateLocalStateAfterEdit = true,
|
|
149
|
+
canCreateEvents = true,
|
|
150
|
+
canEditEvent = true,
|
|
151
|
+
...props
|
|
152
|
+
}: EventCalenderProps) => {
|
|
153
|
+
const startCalendarDate = useMemo(
|
|
154
|
+
() => moment.tz(dayDate, timezone).startOf("day"),
|
|
155
|
+
[dayDate, timezone]
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
return (
|
|
159
|
+
<EventsProvider
|
|
160
|
+
initialProps={{
|
|
161
|
+
startCalendarDate: startCalendarDate.format("YYYY-MM-DD"),
|
|
162
|
+
calendarViewInterval: "1day",
|
|
163
|
+
endCalendarDate: startCalendarDate.format("YYYY-MM-DD"),
|
|
164
|
+
userCalendarId,
|
|
165
|
+
timezone,
|
|
166
|
+
startDayOfWeekOffset: 0,
|
|
167
|
+
events,
|
|
168
|
+
}}
|
|
169
|
+
updateLocalStateAfterEdit={!!updateLocalStateAfterEdit}
|
|
170
|
+
>
|
|
171
|
+
<EventCalendarContent
|
|
172
|
+
{...props}
|
|
173
|
+
timeFormat={timeFormat}
|
|
174
|
+
initialZoomLevel={initialZoomLevel}
|
|
175
|
+
timezone={timezone}
|
|
176
|
+
maxAllDayEvents={maxAllDayEvents}
|
|
177
|
+
updateLocalStateAfterEdit={updateLocalStateAfterEdit}
|
|
178
|
+
startCalendarDate={startCalendarDate}
|
|
179
|
+
canCreateEvents={canCreateEvents}
|
|
180
|
+
canEditEvent={canEditEvent}
|
|
181
|
+
/>
|
|
182
|
+
</EventsProvider>
|
|
183
|
+
);
|
|
184
|
+
};
|
|
185
|
+
|
|
138
186
|
const styles = StyleSheet.create({
|
|
139
187
|
container: {
|
|
140
188
|
flex: 1,
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.updateClonedEvents = exports.default = void 0;
|
|
7
|
-
var _react = require("react");
|
|
8
|
-
var _lodash = require("lodash");
|
|
9
|
-
let updateClonedEvents = exports.updateClonedEvents = void 0;
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Returns a cloned version of the events array if the updateLocalStateAfterEdit is set to true.
|
|
13
|
-
* We do this to make local state updates faster and more responsive. If the updateLocalStateAfterEdit is set to false,
|
|
14
|
-
* we return the original events array and don't clone it.
|
|
15
|
-
*/
|
|
16
|
-
const useClonedEvents = (events, updateLocalStateAfterEdit) => {
|
|
17
|
-
const [clonedEvents, setClonedEvents] = (0, _react.useState)(events);
|
|
18
|
-
(0, _react.useEffect)(() => {
|
|
19
|
-
setClonedEvents(updateLocalStateAfterEdit ? (0, _lodash.cloneDeep)(events) : events);
|
|
20
|
-
exports.updateClonedEvents = updateClonedEvents = setClonedEvents;
|
|
21
|
-
}, [events, updateLocalStateAfterEdit]);
|
|
22
|
-
return clonedEvents;
|
|
23
|
-
};
|
|
24
|
-
var _default = exports.default = useClonedEvents;
|
|
25
|
-
//# sourceMappingURL=use-cloned-events.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_lodash","updateClonedEvents","exports","useClonedEvents","events","updateLocalStateAfterEdit","clonedEvents","setClonedEvents","useState","useEffect","cloneDeep","_default","default"],"sourceRoot":"../../../src","sources":["hooks/use-cloned-events.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAGO,IAAIE,kBAA6D,GAAAC,OAAA,CAAAD,kBAAA;;AAExE;AACA;AACA;AACA;AACA;AACA,MAAME,eAAe,GAAGA,CACtBC,MAAuB,EACvBC,yBAAkC,KAC/B;EACH,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAG,IAAAC,eAAQ,EAACJ,MAAM,CAAC;EAExD,IAAAK,gBAAS,EAAC,MAAM;IACdF,eAAe,CAACF,yBAAyB,GAAG,IAAAK,iBAAS,EAACN,MAAM,CAAC,GAAGA,MAAM,CAAC;IACvEF,OAAA,CAAAD,kBAAA,GAAAA,kBAAkB,GAAGM,eAAe;EACtC,CAAC,EAAE,CAACH,MAAM,EAAEC,yBAAyB,CAAC,CAAC;EAEvC,OAAOC,YAAY;AACrB,CAAC;AAAC,IAAAK,QAAA,GAAAT,OAAA,CAAAU,OAAA,GAEaT,eAAe","ignoreList":[]}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _zustand = require("zustand");
|
|
8
|
-
var _immer = require("zustand/middleware/immer");
|
|
9
|
-
var _generateEventLayouts = _interopRequireDefault(require("../utils/generate-event-layouts.js"));
|
|
10
|
-
var _react = require("react");
|
|
11
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
-
const useEventsLayoutStore = (0, _zustand.create)()((0, _immer.immer)(set => ({
|
|
13
|
-
events: {
|
|
14
|
-
allDayEventsLayout: [],
|
|
15
|
-
partDayEventsLayout: []
|
|
16
|
-
},
|
|
17
|
-
updateEvents: props => set(state => {
|
|
18
|
-
state.events = (0, _generateEventLayouts.default)(props)[props.startCalendarDate] || {
|
|
19
|
-
partDayEventsLayout: [],
|
|
20
|
-
allDayEventsLayout: []
|
|
21
|
-
};
|
|
22
|
-
})
|
|
23
|
-
})));
|
|
24
|
-
const useEventsLayout = props => {
|
|
25
|
-
const {
|
|
26
|
-
events: layoutEvents
|
|
27
|
-
} = useEventsLayoutStore();
|
|
28
|
-
(0, _react.useEffect)(() => {
|
|
29
|
-
useEventsLayoutStore.getState().updateEvents(props);
|
|
30
|
-
}, [props]);
|
|
31
|
-
return layoutEvents;
|
|
32
|
-
};
|
|
33
|
-
var _default = exports.default = useEventsLayout;
|
|
34
|
-
//# sourceMappingURL=use-events-layout.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_zustand","require","_immer","_generateEventLayouts","_interopRequireDefault","_react","e","__esModule","default","useEventsLayoutStore","create","immer","set","events","allDayEventsLayout","partDayEventsLayout","updateEvents","props","state","generateEventLayouts","startCalendarDate","useEventsLayout","layoutEvents","useEffect","getState","_default","exports"],"sourceRoot":"../../../src","sources":["hooks/use-events-layout.ts"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,qBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAAkC,SAAAG,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAyBlC,MAAMG,oBAAoB,GAAG,IAAAC,eAAM,EAAkB,CAAC,CACpD,IAAAC,YAAK,EAAEC,GAAG,KAAM;EACdC,MAAM,EAAE;IACNC,kBAAkB,EAAE,EAAE;IACtBC,mBAAmB,EAAE;EACvB,CAAC;EACDC,YAAY,EAAGC,KAAkB,IAC/BL,GAAG,CAAEM,KAAK,IAAK;IACbA,KAAK,CAACL,MAAM,GAAG,IAAAM,6BAAoB,EAACF,KAAK,CAAC,CAACA,KAAK,CAACG,iBAAiB,CAAC,IAAI;MACrEL,mBAAmB,EAAE,EAAE;MACvBD,kBAAkB,EAAE;IACtB,CAAC;EACH,CAAC;AACL,CAAC,CAAC,CACJ,CAAC;AAED,MAAMO,eAAe,GAAIJ,KAAkB,IAAK;EAC9C,MAAM;IAAEJ,MAAM,EAAES;EAAa,CAAC,GAAGb,oBAAoB,CAAC,CAAC;EAEvD,IAAAc,gBAAS,EAAC,MAAM;IACdd,oBAAoB,CAACe,QAAQ,CAAC,CAAC,CAACR,YAAY,CAACC,KAAK,CAAC;EACrD,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,OAAOK,YAAY;AACrB,CAAC;AAAC,IAAAG,QAAA,GAAAC,OAAA,CAAAlB,OAAA,GAEaa,eAAe","ignoreList":[]}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import { useEffect, useState } from "react";
|
|
4
|
-
import { cloneDeep } from "lodash";
|
|
5
|
-
export let updateClonedEvents;
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Returns a cloned version of the events array if the updateLocalStateAfterEdit is set to true.
|
|
9
|
-
* We do this to make local state updates faster and more responsive. If the updateLocalStateAfterEdit is set to false,
|
|
10
|
-
* we return the original events array and don't clone it.
|
|
11
|
-
*/
|
|
12
|
-
const useClonedEvents = (events, updateLocalStateAfterEdit) => {
|
|
13
|
-
const [clonedEvents, setClonedEvents] = useState(events);
|
|
14
|
-
useEffect(() => {
|
|
15
|
-
setClonedEvents(updateLocalStateAfterEdit ? cloneDeep(events) : events);
|
|
16
|
-
updateClonedEvents = setClonedEvents;
|
|
17
|
-
}, [events, updateLocalStateAfterEdit]);
|
|
18
|
-
return clonedEvents;
|
|
19
|
-
};
|
|
20
|
-
export default useClonedEvents;
|
|
21
|
-
//# sourceMappingURL=use-cloned-events.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useState","cloneDeep","updateClonedEvents","useClonedEvents","events","updateLocalStateAfterEdit","clonedEvents","setClonedEvents"],"sourceRoot":"../../../src","sources":["hooks/use-cloned-events.ts"],"mappings":";;AAAA,SAAmCA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AACrE,SAASC,SAAS,QAAQ,QAAQ;AAGlC,OAAO,IAAIC,kBAA6D;;AAExE;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAGA,CACtBC,MAAuB,EACvBC,yBAAkC,KAC/B;EACH,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGP,QAAQ,CAACI,MAAM,CAAC;EAExDL,SAAS,CAAC,MAAM;IACdQ,eAAe,CAACF,yBAAyB,GAAGJ,SAAS,CAACG,MAAM,CAAC,GAAGA,MAAM,CAAC;IACvEF,kBAAkB,GAAGK,eAAe;EACtC,CAAC,EAAE,CAACH,MAAM,EAAEC,yBAAyB,CAAC,CAAC;EAEvC,OAAOC,YAAY;AACrB,CAAC;AAED,eAAeH,eAAe","ignoreList":[]}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import { create } from "zustand";
|
|
4
|
-
import { immer } from "zustand/middleware/immer";
|
|
5
|
-
import generateEventLayouts from "../utils/generate-event-layouts.js";
|
|
6
|
-
import { useEffect } from "react";
|
|
7
|
-
const useEventsLayoutStore = create()(immer(set => ({
|
|
8
|
-
events: {
|
|
9
|
-
allDayEventsLayout: [],
|
|
10
|
-
partDayEventsLayout: []
|
|
11
|
-
},
|
|
12
|
-
updateEvents: props => set(state => {
|
|
13
|
-
state.events = generateEventLayouts(props)[props.startCalendarDate] || {
|
|
14
|
-
partDayEventsLayout: [],
|
|
15
|
-
allDayEventsLayout: []
|
|
16
|
-
};
|
|
17
|
-
})
|
|
18
|
-
})));
|
|
19
|
-
const useEventsLayout = props => {
|
|
20
|
-
const {
|
|
21
|
-
events: layoutEvents
|
|
22
|
-
} = useEventsLayoutStore();
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
useEventsLayoutStore.getState().updateEvents(props);
|
|
25
|
-
}, [props]);
|
|
26
|
-
return layoutEvents;
|
|
27
|
-
};
|
|
28
|
-
export default useEventsLayout;
|
|
29
|
-
//# sourceMappingURL=use-events-layout.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["create","immer","generateEventLayouts","useEffect","useEventsLayoutStore","set","events","allDayEventsLayout","partDayEventsLayout","updateEvents","props","state","startCalendarDate","useEventsLayout","layoutEvents","getState"],"sourceRoot":"../../../src","sources":["hooks/use-events-layout.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,SAAS;AAChC,SAASC,KAAK,QAAQ,0BAA0B;AAChD,OAAOC,oBAAoB,MAAM,oCAAiC;AAClE,SAASC,SAAS,QAAQ,OAAO;AAyBjC,MAAMC,oBAAoB,GAAGJ,MAAM,CAAkB,CAAC,CACpDC,KAAK,CAAEI,GAAG,KAAM;EACdC,MAAM,EAAE;IACNC,kBAAkB,EAAE,EAAE;IACtBC,mBAAmB,EAAE;EACvB,CAAC;EACDC,YAAY,EAAGC,KAAkB,IAC/BL,GAAG,CAAEM,KAAK,IAAK;IACbA,KAAK,CAACL,MAAM,GAAGJ,oBAAoB,CAACQ,KAAK,CAAC,CAACA,KAAK,CAACE,iBAAiB,CAAC,IAAI;MACrEJ,mBAAmB,EAAE,EAAE;MACvBD,kBAAkB,EAAE;IACtB,CAAC;EACH,CAAC;AACL,CAAC,CAAC,CACJ,CAAC;AAED,MAAMM,eAAe,GAAIH,KAAkB,IAAK;EAC9C,MAAM;IAAEJ,MAAM,EAAEQ;EAAa,CAAC,GAAGV,oBAAoB,CAAC,CAAC;EAEvDD,SAAS,CAAC,MAAM;IACdC,oBAAoB,CAACW,QAAQ,CAAC,CAAC,CAACN,YAAY,CAACC,KAAK,CAAC;EACrD,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,OAAOI,YAAY;AACrB,CAAC;AAED,eAAeD,eAAe","ignoreList":[]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Dispatch, SetStateAction } from "react";
|
|
2
|
-
import { CalendarEvent } from "../types";
|
|
3
|
-
export declare let updateClonedEvents: Dispatch<SetStateAction<CalendarEvent[]>>;
|
|
4
|
-
/**
|
|
5
|
-
* Returns a cloned version of the events array if the updateLocalStateAfterEdit is set to true.
|
|
6
|
-
* We do this to make local state updates faster and more responsive. If the updateLocalStateAfterEdit is set to false,
|
|
7
|
-
* we return the original events array and don't clone it.
|
|
8
|
-
*/
|
|
9
|
-
declare const useClonedEvents: (events: CalendarEvent[], updateLocalStateAfterEdit: boolean) => CalendarEvent[];
|
|
10
|
-
export default useClonedEvents;
|
|
11
|
-
//# sourceMappingURL=use-cloned-events.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-cloned-events.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-cloned-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAuB,MAAM,OAAO,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,IAAI,kBAAkB,EAAE,QAAQ,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AAEzE;;;;GAIG;AACH,QAAA,MAAM,eAAe,WACX,aAAa,EAAE,6BACI,OAAO,oBAUnC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { CalendarEvent, CalendarViewIntervalType, FullCalendarEventLayout } from "../types";
|
|
2
|
-
export type UpdateEvent = {
|
|
3
|
-
events: CalendarEvent[];
|
|
4
|
-
userCalendarId: string;
|
|
5
|
-
timezone: string;
|
|
6
|
-
startCalendarDate: string;
|
|
7
|
-
endCalendarDate: string;
|
|
8
|
-
startDayOfWeekOffset?: number;
|
|
9
|
-
calendarViewInterval?: CalendarViewIntervalType;
|
|
10
|
-
};
|
|
11
|
-
declare const useEventsLayout: (props: UpdateEvent) => FullCalendarEventLayout;
|
|
12
|
-
export default useEventsLayout;
|
|
13
|
-
//# sourceMappingURL=use-events-layout.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-events-layout.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-events-layout.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAUlB,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD,CAAC;AAkBF,QAAA,MAAM,eAAe,UAAW,WAAW,4BAQ1C,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Dispatch, SetStateAction } from "react";
|
|
2
|
-
import { CalendarEvent } from "../types";
|
|
3
|
-
export declare let updateClonedEvents: Dispatch<SetStateAction<CalendarEvent[]>>;
|
|
4
|
-
/**
|
|
5
|
-
* Returns a cloned version of the events array if the updateLocalStateAfterEdit is set to true.
|
|
6
|
-
* We do this to make local state updates faster and more responsive. If the updateLocalStateAfterEdit is set to false,
|
|
7
|
-
* we return the original events array and don't clone it.
|
|
8
|
-
*/
|
|
9
|
-
declare const useClonedEvents: (events: CalendarEvent[], updateLocalStateAfterEdit: boolean) => CalendarEvent[];
|
|
10
|
-
export default useClonedEvents;
|
|
11
|
-
//# sourceMappingURL=use-cloned-events.d.ts.map
|