@sunsama/event-calendar 0.2.6 → 0.2.8
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/components/all-day-events.js +3 -13
- package/lib/commonjs/components/all-day-events.js.map +1 -1
- package/lib/commonjs/components/event-container.js.map +1 -1
- package/lib/commonjs/components/timed-event-container.js.map +1 -1
- package/lib/commonjs/hooks/use-events.js +4 -4
- package/lib/commonjs/hooks/use-events.js.map +1 -1
- package/lib/commonjs/hooks/use-is-editing.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/compute-positioning.js.map +1 -1
- package/lib/commonjs/utils/double-tap-reset-zoom-gesture.js.map +1 -1
- package/lib/commonjs/utils/generate-event-layouts.js.map +1 -1
- package/lib/commonjs/utils/globals.js.map +1 -1
- package/lib/commonjs/utils/pan-edit-event-gesture.js.map +1 -1
- package/lib/module/components/all-day-events.js +3 -13
- package/lib/module/components/all-day-events.js.map +1 -1
- package/lib/module/components/event-container.js.map +1 -1
- package/lib/module/components/timed-event-container.js.map +1 -1
- package/lib/module/hooks/use-events.js +4 -4
- package/lib/module/hooks/use-events.js.map +1 -1
- package/lib/module/hooks/use-is-editing.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/compute-positioning.js.map +1 -1
- package/lib/module/utils/double-tap-reset-zoom-gesture.js.map +1 -1
- package/lib/module/utils/generate-event-layouts.js.map +1 -1
- package/lib/module/utils/globals.js.map +1 -1
- package/lib/module/utils/pan-edit-event-gesture.js.map +1 -1
- package/lib/typescript/commonjs/components/all-day-events.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/event-container.d.ts +4 -4
- package/lib/typescript/commonjs/components/event-container.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/timed-event-container.d.ts +4 -4
- package/lib/typescript/commonjs/components/timed-event-container.d.ts.map +1 -1
- package/lib/typescript/commonjs/hooks/use-events.d.ts +12 -12
- package/lib/typescript/commonjs/hooks/use-events.d.ts.map +1 -1
- package/lib/typescript/commonjs/hooks/use-is-editing.d.ts +6 -6
- package/lib/typescript/commonjs/hooks/use-is-editing.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +11 -11
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/types.d.ts +15 -15
- package/lib/typescript/commonjs/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/compute-positioning.d.ts +4 -4
- package/lib/typescript/commonjs/utils/compute-positioning.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/double-tap-reset-zoom-gesture.d.ts +2 -2
- package/lib/typescript/commonjs/utils/double-tap-reset-zoom-gesture.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/generate-event-layouts.d.ts +4 -4
- package/lib/typescript/commonjs/utils/generate-event-layouts.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/globals.d.ts +1 -1
- package/lib/typescript/commonjs/utils/globals.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/pan-edit-event-gesture.d.ts +2 -2
- package/lib/typescript/commonjs/utils/pan-edit-event-gesture.d.ts.map +1 -1
- package/lib/typescript/module/components/all-day-events.d.ts.map +1 -1
- package/lib/typescript/module/components/event-container.d.ts +4 -4
- package/lib/typescript/module/components/event-container.d.ts.map +1 -1
- package/lib/typescript/module/components/timed-event-container.d.ts +4 -4
- package/lib/typescript/module/components/timed-event-container.d.ts.map +1 -1
- package/lib/typescript/module/hooks/use-events.d.ts +12 -12
- package/lib/typescript/module/hooks/use-events.d.ts.map +1 -1
- package/lib/typescript/module/hooks/use-is-editing.d.ts +6 -6
- package/lib/typescript/module/hooks/use-is-editing.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +11 -11
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/types.d.ts +15 -15
- package/lib/typescript/module/types.d.ts.map +1 -1
- package/lib/typescript/module/utils/compute-positioning.d.ts +4 -4
- package/lib/typescript/module/utils/compute-positioning.d.ts.map +1 -1
- package/lib/typescript/module/utils/double-tap-reset-zoom-gesture.d.ts +2 -2
- package/lib/typescript/module/utils/double-tap-reset-zoom-gesture.d.ts.map +1 -1
- package/lib/typescript/module/utils/generate-event-layouts.d.ts +4 -4
- package/lib/typescript/module/utils/generate-event-layouts.d.ts.map +1 -1
- package/lib/typescript/module/utils/globals.d.ts +1 -1
- package/lib/typescript/module/utils/globals.d.ts.map +1 -1
- package/lib/typescript/module/utils/pan-edit-event-gesture.d.ts +2 -2
- package/lib/typescript/module/utils/pan-edit-event-gesture.d.ts.map +1 -1
- package/package.json +2 -3
- package/src/components/all-day-events.tsx +5 -15
- package/src/components/event-container.tsx +12 -6
- package/src/components/timed-event-container.tsx +10 -6
- package/src/hooks/use-events.tsx +20 -21
- package/src/hooks/use-is-editing.tsx +17 -10
- package/src/index.tsx +23 -23
- package/src/types.ts +15 -15
- package/src/utils/__tests___/compute-positioning.test.ts +1 -1
- package/src/utils/compute-positioning.ts +5 -5
- package/src/utils/double-tap-reset-zoom-gesture.ts +3 -3
- package/src/utils/generate-event-layouts.ts +17 -17
- package/src/utils/globals.ts +1 -1
- package/src/utils/pan-edit-event-gesture.ts +3 -3
package/src/index.tsx
CHANGED
|
@@ -14,52 +14,52 @@ import type { CalendarEvent, Config, onCreateEvent, ThemeStyle } from "./types";
|
|
|
14
14
|
|
|
15
15
|
export * from "./types";
|
|
16
16
|
|
|
17
|
-
type EventCalenderProps = {
|
|
17
|
+
type EventCalenderProps<T extends CalendarEvent> = {
|
|
18
18
|
canCreateEvents?: boolean;
|
|
19
|
-
canEditEvent?: Config["canEditEvent"];
|
|
19
|
+
canEditEvent?: Config<T>["canEditEvent"];
|
|
20
20
|
dayDate: string;
|
|
21
|
-
events:
|
|
21
|
+
events: T[];
|
|
22
22
|
fiveMinuteInterval?: boolean;
|
|
23
23
|
initialZoomLevel?: number;
|
|
24
24
|
maxAllDayEvents?: number;
|
|
25
25
|
onCreateEvent?: onCreateEvent;
|
|
26
|
-
onEventEdit?: Config["onEventEdit"];
|
|
27
|
-
onPressEvent?: Config["onPressEvent"];
|
|
28
|
-
renderDragBars?: Config["renderDragBars"];
|
|
29
|
-
renderEvent: Config["renderEvent"];
|
|
30
|
-
renderNewEventContainer?: Config["renderNewEventContainer"];
|
|
26
|
+
onEventEdit?: Config<T>["onEventEdit"];
|
|
27
|
+
onPressEvent?: Config<T>["onPressEvent"];
|
|
28
|
+
renderDragBars?: Config<T>["renderDragBars"];
|
|
29
|
+
renderEvent: Config<T>["renderEvent"];
|
|
30
|
+
renderNewEventContainer?: Config<T>["renderNewEventContainer"];
|
|
31
31
|
showTimeIndicator?: boolean;
|
|
32
32
|
theme?: ThemeStyle;
|
|
33
33
|
timeFormat?: string;
|
|
34
34
|
timezone?: string;
|
|
35
35
|
updateLocalStateAfterEdit?: boolean;
|
|
36
36
|
userCalendarId?: string;
|
|
37
|
-
extraTimedComponents?: Config["extraTimedComponents"];
|
|
38
|
-
onZoomChange?: Config["onZoomChange"];
|
|
37
|
+
extraTimedComponents?: Config<T>["extraTimedComponents"];
|
|
38
|
+
onZoomChange?: Config<T>["onZoomChange"];
|
|
39
39
|
};
|
|
40
40
|
|
|
41
|
-
type EventCalenderContentProps = {
|
|
41
|
+
type EventCalenderContentProps<T extends CalendarEvent> = {
|
|
42
42
|
canCreateEvents: boolean;
|
|
43
|
-
canEditEvent: Config["canEditEvent"];
|
|
43
|
+
canEditEvent: Config<T>["canEditEvent"];
|
|
44
44
|
startCalendarDate: Moment;
|
|
45
45
|
fiveMinuteInterval?: boolean;
|
|
46
46
|
initialZoomLevel: number;
|
|
47
47
|
maxAllDayEvents: number;
|
|
48
48
|
onCreateEvent?: onCreateEvent;
|
|
49
|
-
onEventEdit?: Config["onEventEdit"];
|
|
50
|
-
onPressEvent?: Config["onPressEvent"];
|
|
51
|
-
renderDragBars?: Config["renderDragBars"];
|
|
52
|
-
renderEvent: Config["renderEvent"];
|
|
53
|
-
renderNewEventContainer?: Config["renderNewEventContainer"];
|
|
49
|
+
onEventEdit?: Config<T>["onEventEdit"];
|
|
50
|
+
onPressEvent?: Config<T>["onPressEvent"];
|
|
51
|
+
renderDragBars?: Config<T>["renderDragBars"];
|
|
52
|
+
renderEvent: Config<T>["renderEvent"];
|
|
53
|
+
renderNewEventContainer?: Config<T>["renderNewEventContainer"];
|
|
54
54
|
showTimeIndicator?: boolean;
|
|
55
55
|
theme?: ThemeStyle;
|
|
56
56
|
timeFormat: string;
|
|
57
57
|
timezone: string;
|
|
58
58
|
updateLocalStateAfterEdit: boolean;
|
|
59
|
-
extraTimedComponents?: Config["extraTimedComponents"];
|
|
60
|
-
onZoomChange?: Config["onZoomChange"];
|
|
59
|
+
extraTimedComponents?: Config<T>["extraTimedComponents"];
|
|
60
|
+
onZoomChange?: Config<T>["onZoomChange"];
|
|
61
61
|
};
|
|
62
|
-
const EventCalendarContent = ({
|
|
62
|
+
const EventCalendarContent = <T extends CalendarEvent>({
|
|
63
63
|
canCreateEvents,
|
|
64
64
|
canEditEvent,
|
|
65
65
|
fiveMinuteInterval,
|
|
@@ -79,7 +79,7 @@ const EventCalendarContent = ({
|
|
|
79
79
|
extraTimedComponents,
|
|
80
80
|
onZoomChange,
|
|
81
81
|
startCalendarDate,
|
|
82
|
-
}: EventCalenderContentProps) => {
|
|
82
|
+
}: EventCalenderContentProps<T>) => {
|
|
83
83
|
const zoomLevel = useSharedValue(initialZoomLevel);
|
|
84
84
|
const createY = useSharedValue(-1);
|
|
85
85
|
const maximumHour = useSharedValue(0);
|
|
@@ -138,7 +138,7 @@ const EventCalendarContent = ({
|
|
|
138
138
|
/**
|
|
139
139
|
* Wraps `EventCalendarContent` inside `ClonedEventsProvider` to manage cloned events independently.
|
|
140
140
|
*/
|
|
141
|
-
const EventCalendar = ({
|
|
141
|
+
const EventCalendar = <T extends CalendarEvent>({
|
|
142
142
|
timeFormat = "HH:mm",
|
|
143
143
|
dayDate,
|
|
144
144
|
events,
|
|
@@ -150,7 +150,7 @@ const EventCalendar = ({
|
|
|
150
150
|
canCreateEvents = true,
|
|
151
151
|
canEditEvent = true,
|
|
152
152
|
...props
|
|
153
|
-
}: EventCalenderProps) => {
|
|
153
|
+
}: EventCalenderProps<T>) => {
|
|
154
154
|
const startCalendarDate = useMemo(
|
|
155
155
|
() => moment.tz(dayDate, timezone).startOf("day"),
|
|
156
156
|
[dayDate, timezone]
|
package/src/types.ts
CHANGED
|
@@ -12,16 +12,16 @@ export type CalendarEvent = {
|
|
|
12
12
|
isAllDay?: boolean;
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
export type AllDayEventLayoutType = {
|
|
16
|
-
event:
|
|
15
|
+
export type AllDayEventLayoutType<T extends CalendarEvent> = {
|
|
16
|
+
event: T;
|
|
17
17
|
rowIndex?: number;
|
|
18
18
|
visibleWidthDays?: number;
|
|
19
19
|
extend: EventExtend;
|
|
20
20
|
isPrimaryRendered?: boolean;
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
-
export type PartDayEventLayoutType = {
|
|
24
|
-
event:
|
|
23
|
+
export type PartDayEventLayoutType<T extends CalendarEvent> = {
|
|
24
|
+
event: T;
|
|
25
25
|
collisions?: {
|
|
26
26
|
total: number;
|
|
27
27
|
order: number;
|
|
@@ -29,8 +29,8 @@ export type PartDayEventLayoutType = {
|
|
|
29
29
|
position: EventPosition;
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
-
export interface CollisionObject {
|
|
33
|
-
event:
|
|
32
|
+
export interface CollisionObject<T extends CalendarEvent> {
|
|
33
|
+
event: T;
|
|
34
34
|
collisions?: { total: number; order: number };
|
|
35
35
|
}
|
|
36
36
|
|
|
@@ -41,9 +41,9 @@ export type EventPosition = {
|
|
|
41
41
|
marginLeft: string;
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
-
export type FullCalendarEventLayout = {
|
|
45
|
-
allDayEventsLayout: AllDayEventLayoutType[];
|
|
46
|
-
partDayEventsLayout: PartDayEventLayoutType[];
|
|
44
|
+
export type FullCalendarEventLayout<T extends CalendarEvent> = {
|
|
45
|
+
allDayEventsLayout: AllDayEventLayoutType<T>[];
|
|
46
|
+
partDayEventsLayout: PartDayEventLayoutType<T>[];
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
export type ThemeStyle = {
|
|
@@ -85,19 +85,19 @@ export type OnCreateEventProps = {
|
|
|
85
85
|
|
|
86
86
|
export type onCreateEvent = (arg: OnCreateEventProps) => void;
|
|
87
87
|
|
|
88
|
-
export type Config = {
|
|
88
|
+
export type Config<T extends CalendarEvent> = {
|
|
89
89
|
timezone: string;
|
|
90
90
|
timeFormat: string;
|
|
91
91
|
dayDate: Moment;
|
|
92
92
|
theme?: ThemeStyle;
|
|
93
93
|
zoomLevel: SharedValue<number>;
|
|
94
|
-
layout: FullCalendarEventLayout
|
|
94
|
+
layout: FullCalendarEventLayout<T>;
|
|
95
95
|
createY: SharedValue<number>;
|
|
96
96
|
maximumHour: SharedValue<number>;
|
|
97
97
|
onCreateEvent?: onCreateEvent;
|
|
98
98
|
initialZoomLevel: number;
|
|
99
99
|
renderEvent: (
|
|
100
|
-
event:
|
|
100
|
+
event: T,
|
|
101
101
|
extended: EventExtend,
|
|
102
102
|
eventHeight?: SharedValue<number>,
|
|
103
103
|
updatedTimes?: {
|
|
@@ -106,18 +106,18 @@ export type Config = {
|
|
|
106
106
|
}
|
|
107
107
|
) => ReactNode;
|
|
108
108
|
onEventEdit?: (params: {
|
|
109
|
-
event:
|
|
109
|
+
event: T;
|
|
110
110
|
status: EditStatus;
|
|
111
111
|
updatedTimes?: {
|
|
112
112
|
updatedStart: string;
|
|
113
113
|
updatedEnd: string;
|
|
114
114
|
};
|
|
115
115
|
}) => void;
|
|
116
|
-
onPressEvent?: (event:
|
|
116
|
+
onPressEvent?: (event: T) => void;
|
|
117
117
|
showTimeIndicator?: boolean;
|
|
118
118
|
maxAllDayEvents: number;
|
|
119
119
|
canCreateEvents: boolean;
|
|
120
|
-
canEditEvent: boolean | ((event:
|
|
120
|
+
canEditEvent: boolean | ((event: T) => boolean);
|
|
121
121
|
renderNewEventContainer?: (hour: number, minute: number) => ReactNode;
|
|
122
122
|
fiveMinuteInterval?: boolean;
|
|
123
123
|
renderDragBars?: { top?: () => ReactNode; bottom?: () => ReactNode };
|
|
@@ -4,7 +4,7 @@ import { PartDayEventLayoutType } from "../../types";
|
|
|
4
4
|
|
|
5
5
|
describe("computePositioning", () => {
|
|
6
6
|
it("should compute positioning correctly without collisions", () => {
|
|
7
|
-
const layout: PartDayEventLayoutType = {
|
|
7
|
+
const layout: PartDayEventLayoutType<any> = {
|
|
8
8
|
event: {
|
|
9
9
|
start: "2023-10-01T09:00:00Z",
|
|
10
10
|
end: "2023-10-01T10:00:00Z",
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import moment, { Moment } from "moment-timezone";
|
|
2
|
-
import { CollisionObject, EventPosition } from "../types";
|
|
2
|
+
import { type CalendarEvent, CollisionObject, EventPosition } from "../types";
|
|
3
3
|
|
|
4
|
-
type ComputePositioning = {
|
|
4
|
+
type ComputePositioning<T extends CalendarEvent> = {
|
|
5
5
|
// We only need the collisions part of this type
|
|
6
|
-
collisionObject: CollisionObject
|
|
6
|
+
collisionObject: CollisionObject<T>;
|
|
7
7
|
startOfDayMoment: Moment;
|
|
8
8
|
timezone: string;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
const computePositioning = ({
|
|
11
|
+
const computePositioning = <T extends CalendarEvent>({
|
|
12
12
|
collisionObject,
|
|
13
13
|
startOfDayMoment,
|
|
14
14
|
timezone,
|
|
15
|
-
}: ComputePositioning): EventPosition => {
|
|
15
|
+
}: ComputePositioning<T>): EventPosition => {
|
|
16
16
|
const startDateMoment = moment.tz(collisionObject.event.start, timezone);
|
|
17
17
|
const durationMinutes = moment
|
|
18
18
|
.tz(collisionObject.event.end, timezone)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Gesture } from "react-native-gesture-handler";
|
|
2
2
|
import { runOnJS, SharedValue } from "react-native-reanimated";
|
|
3
|
-
import { Config } from "../types";
|
|
3
|
+
import { type CalendarEvent, Config } from "../types";
|
|
4
4
|
|
|
5
|
-
const doubleTapGesture = (
|
|
5
|
+
const doubleTapGesture = <T extends CalendarEvent>(
|
|
6
6
|
zoomLevel: SharedValue<number>,
|
|
7
7
|
initialZoomLevel: number,
|
|
8
|
-
onZoomChange?: Config["onZoomChange"]
|
|
8
|
+
onZoomChange?: Config<T>["onZoomChange"]
|
|
9
9
|
) =>
|
|
10
10
|
Gesture.Tap()
|
|
11
11
|
.numberOfTaps(2)
|
|
@@ -23,8 +23,8 @@ import {
|
|
|
23
23
|
PartDayEventLayoutType,
|
|
24
24
|
} from "../types";
|
|
25
25
|
|
|
26
|
-
interface GenerateEventLayouts {
|
|
27
|
-
events:
|
|
26
|
+
interface GenerateEventLayouts<T extends CalendarEvent> {
|
|
27
|
+
events: T[];
|
|
28
28
|
userCalendarId: string;
|
|
29
29
|
timezone: string;
|
|
30
30
|
startCalendarDate: string;
|
|
@@ -33,7 +33,7 @@ interface GenerateEventLayouts {
|
|
|
33
33
|
calendarViewInterval?: CalendarViewIntervalType;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
export const generateEventLayouts = ({
|
|
36
|
+
export const generateEventLayouts = <T extends CalendarEvent>({
|
|
37
37
|
events,
|
|
38
38
|
startCalendarDate,
|
|
39
39
|
endCalendarDate,
|
|
@@ -41,7 +41,7 @@ export const generateEventLayouts = ({
|
|
|
41
41
|
calendarViewInterval = "1day",
|
|
42
42
|
startDayOfWeekOffset = 0,
|
|
43
43
|
timezone,
|
|
44
|
-
}: GenerateEventLayouts) => {
|
|
44
|
+
}: GenerateEventLayouts<T>) => {
|
|
45
45
|
// Calculate spacial layout for CalendarViewDay events
|
|
46
46
|
// in month view, midnight-spanning part-day events are rendered as all-day multi-day
|
|
47
47
|
const [allDayEvents, partDayEvents] = _partition([...events], (event) =>
|
|
@@ -99,7 +99,7 @@ export const generateEventLayouts = ({
|
|
|
99
99
|
});
|
|
100
100
|
|
|
101
101
|
const result: {
|
|
102
|
-
[day: string]: FullCalendarEventLayout
|
|
102
|
+
[day: string]: FullCalendarEventLayout<T>;
|
|
103
103
|
} = {};
|
|
104
104
|
|
|
105
105
|
calendarViewDateRanges.forEach((date) => {
|
|
@@ -142,8 +142,8 @@ export const generateEventLayouts = ({
|
|
|
142
142
|
const endDate = moment.tz(startDate, timezone).endOf("day").toDate();
|
|
143
143
|
const showHours = !["month"].includes(calendarViewInterval);
|
|
144
144
|
const dayId = calendarDate;
|
|
145
|
-
const allDayEventsLayout: AllDayEventLayoutType[] = [];
|
|
146
|
-
let partDayEventsLayout: PartDayEventLayoutType[] = [];
|
|
145
|
+
const allDayEventsLayout: AllDayEventLayoutType<T>[] = [];
|
|
146
|
+
let partDayEventsLayout: PartDayEventLayoutType<T>[] = [];
|
|
147
147
|
|
|
148
148
|
const x = moment(startDate).diff(
|
|
149
149
|
moment.tz(date.basisDate, timezone),
|
|
@@ -174,7 +174,7 @@ export const generateEventLayouts = ({
|
|
|
174
174
|
partDayEventsLayout = partDayEventsLayout.concat(
|
|
175
175
|
handleCollisions(
|
|
176
176
|
events.filter(
|
|
177
|
-
(event) =>
|
|
177
|
+
(event: T) =>
|
|
178
178
|
!isAllDayOrSpansMidnight(event, timezone) &&
|
|
179
179
|
dateRangeIntersect(
|
|
180
180
|
{
|
|
@@ -201,11 +201,11 @@ export const generateEventLayouts = ({
|
|
|
201
201
|
return result;
|
|
202
202
|
};
|
|
203
203
|
|
|
204
|
-
const combineEventPosition = (
|
|
204
|
+
const combineEventPosition = <T extends CalendarEvent>(
|
|
205
205
|
dayDate: Moment,
|
|
206
206
|
timezone: string,
|
|
207
|
-
collisionObject: CollisionObject
|
|
208
|
-
): PartDayEventLayoutType => {
|
|
207
|
+
collisionObject: CollisionObject<T>
|
|
208
|
+
): PartDayEventLayoutType<T> => {
|
|
209
209
|
const position = computePositioning({
|
|
210
210
|
timezone,
|
|
211
211
|
collisionObject: collisionObject,
|
|
@@ -218,12 +218,12 @@ const combineEventPosition = (
|
|
|
218
218
|
};
|
|
219
219
|
};
|
|
220
220
|
|
|
221
|
-
const handleCollisions = (
|
|
222
|
-
allEvents:
|
|
221
|
+
const handleCollisions = <T extends CalendarEvent>(
|
|
222
|
+
allEvents: T[],
|
|
223
223
|
userCalendarId: string,
|
|
224
224
|
dayDate: Moment,
|
|
225
225
|
timezone: string
|
|
226
|
-
): PartDayEventLayoutType[] => {
|
|
226
|
+
): PartDayEventLayoutType<T>[] => {
|
|
227
227
|
let stackableEvents = _sortBy(allEvents, (event) => event.id);
|
|
228
228
|
stackableEvents = _sortBy(stackableEvents, (event) => {
|
|
229
229
|
// current user's primary calendar should always be leftmost option
|
|
@@ -233,8 +233,8 @@ const handleCollisions = (
|
|
|
233
233
|
new Date(event.start).valueOf()
|
|
234
234
|
);
|
|
235
235
|
// calculate overlap stack properties
|
|
236
|
-
const stackedEvtsByPos: Record<string, PartDayEventLayoutType[]> = {};
|
|
237
|
-
let curStack: (CollisionObject | null)[] = [];
|
|
236
|
+
const stackedEvtsByPos: Record<string, PartDayEventLayoutType<T>[]> = {};
|
|
237
|
+
let curStack: (CollisionObject<T> | null)[] = [];
|
|
238
238
|
|
|
239
239
|
for (const evt of stackableEvents) {
|
|
240
240
|
// already sorted by startDate
|
|
@@ -302,7 +302,7 @@ const handleCollisions = (
|
|
|
302
302
|
}
|
|
303
303
|
|
|
304
304
|
// always draw position 0 stack elements first.
|
|
305
|
-
let stackedEvents: PartDayEventLayoutType[] = [];
|
|
305
|
+
let stackedEvents: PartDayEventLayoutType<T>[] = [];
|
|
306
306
|
|
|
307
307
|
Object.keys(stackedEvtsByPos).forEach(
|
|
308
308
|
(pos) => (stackedEvents = stackedEvents.concat(stackedEvtsByPos[pos]))
|
package/src/utils/globals.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createContext } from "react";
|
|
2
2
|
import { Config } from "../types";
|
|
3
3
|
|
|
4
|
-
export const ConfigProvider = createContext<Config
|
|
4
|
+
export const ConfigProvider = createContext<Config<any>>(undefined as never);
|
|
5
5
|
|
|
6
6
|
export const DEFAULT_MINUTE_HEIGHT = 0.8;
|
|
7
7
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Gesture } from "react-native-gesture-handler";
|
|
2
2
|
import { runOnJS, SharedValue } from "react-native-reanimated";
|
|
3
3
|
import { RefObject } from "react";
|
|
4
|
-
import { PartDayEventLayoutType } from "../types";
|
|
4
|
+
import { type CalendarEvent, PartDayEventLayoutType } from "../types";
|
|
5
5
|
|
|
6
|
-
const gesturePan = (
|
|
6
|
+
const gesturePan = <T extends CalendarEvent>(
|
|
7
7
|
startY: SharedValue<number>,
|
|
8
8
|
top: SharedValue<number>,
|
|
9
9
|
currentY: SharedValue<number>,
|
|
@@ -12,7 +12,7 @@ const gesturePan = (
|
|
|
12
12
|
height: SharedValue<number>,
|
|
13
13
|
refNewEvent: RefObject<any>,
|
|
14
14
|
fiveMinuteInterval?: boolean,
|
|
15
|
-
isEditing?: null | PartDayEventLayoutType
|
|
15
|
+
isEditing?: null | PartDayEventLayoutType<T>,
|
|
16
16
|
startEditing?: () => void
|
|
17
17
|
) =>
|
|
18
18
|
Gesture.Pan()
|