@sunsama/event-calendar 0.2.6 → 0.2.7

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 (86) hide show
  1. package/lib/commonjs/components/all-day-events.js +5 -6
  2. package/lib/commonjs/components/all-day-events.js.map +1 -1
  3. package/lib/commonjs/components/event-container.js.map +1 -1
  4. package/lib/commonjs/components/timed-event-container.js.map +1 -1
  5. package/lib/commonjs/hooks/use-events.js +4 -4
  6. package/lib/commonjs/hooks/use-events.js.map +1 -1
  7. package/lib/commonjs/hooks/use-is-editing.js.map +1 -1
  8. package/lib/commonjs/index.js.map +1 -1
  9. package/lib/commonjs/utils/compute-positioning.js.map +1 -1
  10. package/lib/commonjs/utils/double-tap-reset-zoom-gesture.js.map +1 -1
  11. package/lib/commonjs/utils/generate-event-layouts.js.map +1 -1
  12. package/lib/commonjs/utils/globals.js.map +1 -1
  13. package/lib/commonjs/utils/pan-edit-event-gesture.js.map +1 -1
  14. package/lib/module/components/all-day-events.js +5 -6
  15. package/lib/module/components/all-day-events.js.map +1 -1
  16. package/lib/module/components/event-container.js.map +1 -1
  17. package/lib/module/components/timed-event-container.js.map +1 -1
  18. package/lib/module/hooks/use-events.js +4 -4
  19. package/lib/module/hooks/use-events.js.map +1 -1
  20. package/lib/module/hooks/use-is-editing.js.map +1 -1
  21. package/lib/module/index.js.map +1 -1
  22. package/lib/module/utils/compute-positioning.js.map +1 -1
  23. package/lib/module/utils/double-tap-reset-zoom-gesture.js.map +1 -1
  24. package/lib/module/utils/generate-event-layouts.js.map +1 -1
  25. package/lib/module/utils/globals.js.map +1 -1
  26. package/lib/module/utils/pan-edit-event-gesture.js.map +1 -1
  27. package/lib/typescript/commonjs/components/all-day-events.d.ts.map +1 -1
  28. package/lib/typescript/commonjs/components/event-container.d.ts +4 -4
  29. package/lib/typescript/commonjs/components/event-container.d.ts.map +1 -1
  30. package/lib/typescript/commonjs/components/timed-event-container.d.ts +4 -4
  31. package/lib/typescript/commonjs/components/timed-event-container.d.ts.map +1 -1
  32. package/lib/typescript/commonjs/hooks/use-events.d.ts +12 -12
  33. package/lib/typescript/commonjs/hooks/use-events.d.ts.map +1 -1
  34. package/lib/typescript/commonjs/hooks/use-is-editing.d.ts +6 -6
  35. package/lib/typescript/commonjs/hooks/use-is-editing.d.ts.map +1 -1
  36. package/lib/typescript/commonjs/index.d.ts +11 -11
  37. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  38. package/lib/typescript/commonjs/types.d.ts +15 -15
  39. package/lib/typescript/commonjs/types.d.ts.map +1 -1
  40. package/lib/typescript/commonjs/utils/compute-positioning.d.ts +4 -4
  41. package/lib/typescript/commonjs/utils/compute-positioning.d.ts.map +1 -1
  42. package/lib/typescript/commonjs/utils/double-tap-reset-zoom-gesture.d.ts +2 -2
  43. package/lib/typescript/commonjs/utils/double-tap-reset-zoom-gesture.d.ts.map +1 -1
  44. package/lib/typescript/commonjs/utils/generate-event-layouts.d.ts +4 -4
  45. package/lib/typescript/commonjs/utils/generate-event-layouts.d.ts.map +1 -1
  46. package/lib/typescript/commonjs/utils/globals.d.ts +1 -1
  47. package/lib/typescript/commonjs/utils/globals.d.ts.map +1 -1
  48. package/lib/typescript/commonjs/utils/pan-edit-event-gesture.d.ts +2 -2
  49. package/lib/typescript/commonjs/utils/pan-edit-event-gesture.d.ts.map +1 -1
  50. package/lib/typescript/module/components/all-day-events.d.ts.map +1 -1
  51. package/lib/typescript/module/components/event-container.d.ts +4 -4
  52. package/lib/typescript/module/components/event-container.d.ts.map +1 -1
  53. package/lib/typescript/module/components/timed-event-container.d.ts +4 -4
  54. package/lib/typescript/module/components/timed-event-container.d.ts.map +1 -1
  55. package/lib/typescript/module/hooks/use-events.d.ts +12 -12
  56. package/lib/typescript/module/hooks/use-events.d.ts.map +1 -1
  57. package/lib/typescript/module/hooks/use-is-editing.d.ts +6 -6
  58. package/lib/typescript/module/hooks/use-is-editing.d.ts.map +1 -1
  59. package/lib/typescript/module/index.d.ts +11 -11
  60. package/lib/typescript/module/index.d.ts.map +1 -1
  61. package/lib/typescript/module/types.d.ts +15 -15
  62. package/lib/typescript/module/types.d.ts.map +1 -1
  63. package/lib/typescript/module/utils/compute-positioning.d.ts +4 -4
  64. package/lib/typescript/module/utils/compute-positioning.d.ts.map +1 -1
  65. package/lib/typescript/module/utils/double-tap-reset-zoom-gesture.d.ts +2 -2
  66. package/lib/typescript/module/utils/double-tap-reset-zoom-gesture.d.ts.map +1 -1
  67. package/lib/typescript/module/utils/generate-event-layouts.d.ts +4 -4
  68. package/lib/typescript/module/utils/generate-event-layouts.d.ts.map +1 -1
  69. package/lib/typescript/module/utils/globals.d.ts +1 -1
  70. package/lib/typescript/module/utils/globals.d.ts.map +1 -1
  71. package/lib/typescript/module/utils/pan-edit-event-gesture.d.ts +2 -2
  72. package/lib/typescript/module/utils/pan-edit-event-gesture.d.ts.map +1 -1
  73. package/package.json +2 -3
  74. package/src/components/all-day-events.tsx +7 -11
  75. package/src/components/event-container.tsx +12 -6
  76. package/src/components/timed-event-container.tsx +10 -6
  77. package/src/hooks/use-events.tsx +20 -21
  78. package/src/hooks/use-is-editing.tsx +17 -10
  79. package/src/index.tsx +23 -23
  80. package/src/types.ts +15 -15
  81. package/src/utils/__tests___/compute-positioning.test.ts +1 -1
  82. package/src/utils/compute-positioning.ts +5 -5
  83. package/src/utils/double-tap-reset-zoom-gesture.ts +3 -3
  84. package/src/utils/generate-event-layouts.ts +17 -17
  85. package/src/utils/globals.ts +1 -1
  86. package/src/utils/pan-edit-event-gesture.ts +3 -3
@@ -10,23 +10,23 @@ export type CalendarEvent = {
10
10
  end: string;
11
11
  isAllDay?: boolean;
12
12
  };
13
- export type AllDayEventLayoutType = {
14
- event: CalendarEvent;
13
+ export type AllDayEventLayoutType<T extends CalendarEvent> = {
14
+ event: T;
15
15
  rowIndex?: number;
16
16
  visibleWidthDays?: number;
17
17
  extend: EventExtend;
18
18
  isPrimaryRendered?: boolean;
19
19
  };
20
- export type PartDayEventLayoutType = {
21
- event: CalendarEvent;
20
+ export type PartDayEventLayoutType<T extends CalendarEvent> = {
21
+ event: T;
22
22
  collisions?: {
23
23
  total: number;
24
24
  order: number;
25
25
  };
26
26
  position: EventPosition;
27
27
  };
28
- export interface CollisionObject {
29
- event: CalendarEvent;
28
+ export interface CollisionObject<T extends CalendarEvent> {
29
+ event: T;
30
30
  collisions?: {
31
31
  total: number;
32
32
  order: number;
@@ -38,9 +38,9 @@ export type EventPosition = {
38
38
  width: string;
39
39
  marginLeft: string;
40
40
  };
41
- export type FullCalendarEventLayout = {
42
- allDayEventsLayout: AllDayEventLayoutType[];
43
- partDayEventsLayout: PartDayEventLayoutType[];
41
+ export type FullCalendarEventLayout<T extends CalendarEvent> = {
42
+ allDayEventsLayout: AllDayEventLayoutType<T>[];
43
+ partDayEventsLayout: PartDayEventLayoutType<T>[];
44
44
  };
45
45
  export type ThemeStyle = {
46
46
  container?: ViewStyle;
@@ -64,34 +64,34 @@ export type OnCreateEventProps = {
64
64
  isAllDay?: boolean;
65
65
  };
66
66
  export type onCreateEvent = (arg: OnCreateEventProps) => void;
67
- export type Config = {
67
+ export type Config<T extends CalendarEvent> = {
68
68
  timezone: string;
69
69
  timeFormat: string;
70
70
  dayDate: Moment;
71
71
  theme?: ThemeStyle;
72
72
  zoomLevel: SharedValue<number>;
73
- layout: FullCalendarEventLayout;
73
+ layout: FullCalendarEventLayout<T>;
74
74
  createY: SharedValue<number>;
75
75
  maximumHour: SharedValue<number>;
76
76
  onCreateEvent?: onCreateEvent;
77
77
  initialZoomLevel: number;
78
- renderEvent: (event: CalendarEvent, extended: EventExtend, eventHeight?: SharedValue<number>, updatedTimes?: {
78
+ renderEvent: (event: T, extended: EventExtend, eventHeight?: SharedValue<number>, updatedTimes?: {
79
79
  updatedStart: DerivedValue<number>;
80
80
  updatedEnd: DerivedValue<number>;
81
81
  }) => ReactNode;
82
82
  onEventEdit?: (params: {
83
- event: CalendarEvent;
83
+ event: T;
84
84
  status: EditStatus;
85
85
  updatedTimes?: {
86
86
  updatedStart: string;
87
87
  updatedEnd: string;
88
88
  };
89
89
  }) => void;
90
- onPressEvent?: (event: CalendarEvent) => void;
90
+ onPressEvent?: (event: T) => void;
91
91
  showTimeIndicator?: boolean;
92
92
  maxAllDayEvents: number;
93
93
  canCreateEvents: boolean;
94
- canEditEvent: boolean | ((event: CalendarEvent) => boolean);
94
+ canEditEvent: boolean | ((event: T) => boolean);
95
95
  renderNewEventContainer?: (hour: number, minute: number) => ReactNode;
96
96
  fiveMinuteInterval?: boolean;
97
97
  renderDragBars?: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { Moment } from "moment-timezone";
2
- import { CollisionObject, EventPosition } from "../types";
3
- type ComputePositioning = {
4
- collisionObject: CollisionObject;
2
+ import { type CalendarEvent, CollisionObject, EventPosition } from "../types";
3
+ type ComputePositioning<T extends CalendarEvent> = {
4
+ collisionObject: CollisionObject<T>;
5
5
  startOfDayMoment: Moment;
6
6
  timezone: string;
7
7
  };
8
- declare const computePositioning: ({ collisionObject, startOfDayMoment, timezone, }: ComputePositioning) => EventPosition;
8
+ declare const computePositioning: <T extends CalendarEvent>({ collisionObject, startOfDayMoment, timezone, }: ComputePositioning<T>) => EventPosition;
9
9
  export default computePositioning;
10
10
  //# sourceMappingURL=compute-positioning.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compute-positioning.d.ts","sourceRoot":"","sources":["../../../../src/utils/compute-positioning.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE1D,KAAK,kBAAkB,GAAG;IAExB,eAAe,EAAE,eAAe,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,QAAA,MAAM,kBAAkB,qDAIrB,kBAAkB,KAAG,aA2BvB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"compute-positioning.d.ts","sourceRoot":"","sources":["../../../../src/utils/compute-positioning.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9E,KAAK,kBAAkB,CAAC,CAAC,SAAS,aAAa,IAAI;IAEjD,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,CAAC,SAAS,aAAa,oDAIhD,kBAAkB,CAAC,CAAC,CAAC,KAAG,aA2B1B,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { SharedValue } from "react-native-reanimated";
2
- import { Config } from "../types";
3
- declare const doubleTapGesture: (zoomLevel: SharedValue<number>, initialZoomLevel: number, onZoomChange?: Config["onZoomChange"]) => import("react-native-gesture-handler/lib/typescript/handlers/gestures/tapGesture").TapGesture;
2
+ import { type CalendarEvent, Config } from "../types";
3
+ declare const doubleTapGesture: <T extends CalendarEvent>(zoomLevel: SharedValue<number>, initialZoomLevel: number, onZoomChange?: Config<T>["onZoomChange"]) => import("react-native-gesture-handler/lib/typescript/handlers/gestures/tapGesture").TapGesture;
4
4
  export default doubleTapGesture;
5
5
  //# sourceMappingURL=double-tap-reset-zoom-gesture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"double-tap-reset-zoom-gesture.d.ts","sourceRoot":"","sources":["../../../../src/utils/double-tap-reset-zoom-gesture.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,QAAA,MAAM,gBAAgB,cACT,WAAW,CAAC,MAAM,CAAC,oBACZ,MAAM,iBACT,MAAM,CAAC,cAAc,CAAC,kGAajC,CAAC;AAEP,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"double-tap-reset-zoom-gesture.d.ts","sourceRoot":"","sources":["../../../../src/utils/double-tap-reset-zoom-gesture.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEtD,QAAA,MAAM,gBAAgB,GAAI,CAAC,SAAS,aAAa,aACpC,WAAW,CAAC,MAAM,CAAC,oBACZ,MAAM,iBACT,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,kGAapC,CAAC;AAEP,eAAe,gBAAgB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { CalendarEvent, CalendarViewIntervalType, FullCalendarEventLayout } from "../types";
2
- interface GenerateEventLayouts {
3
- events: CalendarEvent[];
2
+ interface GenerateEventLayouts<T extends CalendarEvent> {
3
+ events: T[];
4
4
  userCalendarId: string;
5
5
  timezone: string;
6
6
  startCalendarDate: string;
@@ -8,8 +8,8 @@ interface GenerateEventLayouts {
8
8
  startDayOfWeekOffset?: number;
9
9
  calendarViewInterval?: CalendarViewIntervalType;
10
10
  }
11
- export declare const generateEventLayouts: ({ events, startCalendarDate, endCalendarDate, userCalendarId, calendarViewInterval, startDayOfWeekOffset, timezone, }: GenerateEventLayouts) => {
12
- [day: string]: FullCalendarEventLayout;
11
+ export declare const generateEventLayouts: <T extends CalendarEvent>({ events, startCalendarDate, endCalendarDate, userCalendarId, calendarViewInterval, startDayOfWeekOffset, timezone, }: GenerateEventLayouts<T>) => {
12
+ [day: string]: FullCalendarEventLayout<T>;
13
13
  };
14
14
  export default generateEventLayouts;
15
15
  //# sourceMappingURL=generate-event-layouts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-event-layouts.d.ts","sourceRoot":"","sources":["../../../../src/utils/generate-event-layouts.ts"],"names":[],"mappings":"AAeA,OAAO,EAEL,aAAa,EACb,wBAAwB,EAGxB,uBAAuB,EAExB,MAAM,UAAU,CAAC;AAElB,UAAU,oBAAoB;IAC5B,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;AAED,eAAO,MAAM,oBAAoB,0HAQ9B,oBAAoB;;CA8JtB,CAAC;AAgHF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"generate-event-layouts.d.ts","sourceRoot":"","sources":["../../../../src/utils/generate-event-layouts.ts"],"names":[],"mappings":"AAeA,OAAO,EAEL,aAAa,EACb,wBAAwB,EAGxB,uBAAuB,EAExB,MAAM,UAAU,CAAC;AAElB,UAAU,oBAAoB,CAAC,CAAC,SAAS,aAAa;IACpD,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,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;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,aAAa,yHAQzD,oBAAoB,CAAC,CAAC,CAAC;;CA8JzB,CAAC;AAgHF,eAAe,oBAAoB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Config } from "../types";
2
- export declare const ConfigProvider: import("react").Context<Config>;
2
+ export declare const ConfigProvider: import("react").Context<Config<any>>;
3
3
  export declare const DEFAULT_MINUTE_HEIGHT = 0.8;
4
4
  export declare const TOP_MARGIN_PIXEL_OFFSET = 5;
5
5
  //# sourceMappingURL=globals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"globals.d.ts","sourceRoot":"","sources":["../../../../src/utils/globals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,cAAc,iCAA4C,CAAC;AAExE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,eAAO,MAAM,uBAAuB,IAAI,CAAC"}
1
+ {"version":3,"file":"globals.d.ts","sourceRoot":"","sources":["../../../../src/utils/globals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,cAAc,sCAAiD,CAAC;AAE7E,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,eAAO,MAAM,uBAAuB,IAAI,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { SharedValue } from "react-native-reanimated";
2
2
  import { RefObject } from "react";
3
- import { PartDayEventLayoutType } from "../types";
4
- declare const gesturePan: (startY: SharedValue<number>, top: SharedValue<number>, currentY: SharedValue<number>, zoomLevel: SharedValue<number>, maximumHour: SharedValue<number>, height: SharedValue<number>, refNewEvent: RefObject<any>, fiveMinuteInterval?: boolean, isEditing?: null | PartDayEventLayoutType, startEditing?: () => void) => import("react-native-gesture-handler/lib/typescript/handlers/gestures/panGesture").PanGesture;
3
+ import { type CalendarEvent, PartDayEventLayoutType } from "../types";
4
+ declare const gesturePan: <T extends CalendarEvent>(startY: SharedValue<number>, top: SharedValue<number>, currentY: SharedValue<number>, zoomLevel: SharedValue<number>, maximumHour: SharedValue<number>, height: SharedValue<number>, refNewEvent: RefObject<any>, fiveMinuteInterval?: boolean, isEditing?: null | PartDayEventLayoutType<T>, startEditing?: () => void) => import("react-native-gesture-handler/lib/typescript/handlers/gestures/panGesture").PanGesture;
5
5
  export default gesturePan;
6
6
  //# sourceMappingURL=pan-edit-event-gesture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pan-edit-event-gesture.d.ts","sourceRoot":"","sources":["../../../../src/utils/pan-edit-event-gesture.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAElD,QAAA,MAAM,UAAU,WACN,WAAW,CAAC,MAAM,CAAC,OACtB,WAAW,CAAC,MAAM,CAAC,YACd,WAAW,CAAC,MAAM,CAAC,aAClB,WAAW,CAAC,MAAM,CAAC,eACjB,WAAW,CAAC,MAAM,CAAC,UACxB,WAAW,CAAC,MAAM,CAAC,eACd,SAAS,CAAC,GAAG,CAAC,uBACN,OAAO,cAChB,IAAI,GAAG,sBAAsB,iBAC1B,MAAM,IAAI,kGA8CrB,CAAC;AAEP,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"pan-edit-event-gesture.d.ts","sourceRoot":"","sources":["../../../../src/utils/pan-edit-event-gesture.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,KAAK,aAAa,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEtE,QAAA,MAAM,UAAU,GAAI,CAAC,SAAS,aAAa,UACjC,WAAW,CAAC,MAAM,CAAC,OACtB,WAAW,CAAC,MAAM,CAAC,YACd,WAAW,CAAC,MAAM,CAAC,aAClB,WAAW,CAAC,MAAM,CAAC,eACjB,WAAW,CAAC,MAAM,CAAC,UACxB,WAAW,CAAC,MAAM,CAAC,eACd,SAAS,CAAC,GAAG,CAAC,uBACN,OAAO,cAChB,IAAI,GAAG,sBAAsB,CAAC,CAAC,CAAC,iBAC7B,MAAM,IAAI,kGA8CrB,CAAC;AAEP,eAAe,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sunsama/event-calendar",
3
- "version": "0.2.6",
3
+ "version": "0.2.7",
4
4
  "description": "Event calendar.",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",
@@ -68,8 +68,7 @@
68
68
  "dependencies": {
69
69
  "immer": "^10.1.1",
70
70
  "lodash": "^4.17.21",
71
- "moment-timezone": "^0.5.47",
72
- "zustand": "^5.0.3"
71
+ "moment-timezone": "^0.5.47"
73
72
  },
74
73
  "devDependencies": {
75
74
  "@commitlint/config-conventional": "^19.7.1",
@@ -9,6 +9,7 @@ import Animated, {
9
9
  useSharedValue,
10
10
  withTiming,
11
11
  } from "react-native-reanimated";
12
+ import type { AllDayEventLayoutType } from "src/types";
12
13
 
13
14
  const AllDayEvents = memo(
14
15
  () => {
@@ -62,6 +63,10 @@ const AllDayEvents = memo(
62
63
  // Apply the animated height to the wrapping container
63
64
  const animatedStyle = useAnimatedStyle(() => {
64
65
  return {
66
+ // so children get clipped during animation
67
+ overflow: "hidden",
68
+ backgroundColor: "lightgrey",
69
+ minHeight: 1,
65
70
  // This ensures the container’s height animates smoothly
66
71
  height: measuredHeight.value,
67
72
  };
@@ -70,18 +75,9 @@ const AllDayEvents = memo(
70
75
  return (
71
76
  <View style={[styles.container, theme?.allDayContainer]}>
72
77
  <View style={[styles.eventContainer, theme?.allDayEventContainer]}>
73
- <Animated.View
74
- style={[
75
- animatedStyle,
76
- {
77
- overflow: "hidden", // so children get clipped during animation
78
- backgroundColor: "lightgrey",
79
- minHeight: 1,
80
- },
81
- ]}
82
- >
78
+ <Animated.View style={animatedStyle}>
83
79
  <View onLayout={onContentLayout}>
84
- {allDayEvents.map((allDayLayout) => (
80
+ {allDayEvents.map((allDayLayout: AllDayEventLayoutType<any>) => (
85
81
  <EventContainer
86
82
  key={allDayLayout.event.id}
87
83
  layout={allDayLayout}
@@ -2,13 +2,19 @@ import { ConfigProvider } from "../utils/globals";
2
2
  import { useCallback, useContext, useMemo } from "react";
3
3
  import { Pressable } from "react-native-gesture-handler";
4
4
  import { View } from "react-native";
5
- import { AllDayEventLayoutType, EventExtend } from "../types";
5
+ import {
6
+ AllDayEventLayoutType,
7
+ type CalendarEvent,
8
+ EventExtend,
9
+ } from "../types";
6
10
 
7
- type EventContainerProps = {
8
- layout: AllDayEventLayoutType;
11
+ type EventContainerProps<T extends CalendarEvent> = {
12
+ layout: AllDayEventLayoutType<T>;
9
13
  };
10
14
 
11
- const EventContainer = ({ layout }: EventContainerProps) => {
15
+ const EventContainer = <T extends CalendarEvent>({
16
+ layout,
17
+ }: EventContainerProps<T>) => {
12
18
  const { onPressEvent, renderEvent, initialZoomLevel } =
13
19
  useContext(ConfigProvider);
14
20
 
@@ -16,8 +22,8 @@ const EventContainer = ({ layout }: EventContainerProps) => {
16
22
  () =>
17
23
  renderEvent(
18
24
  layout.event,
19
- (layout as AllDayEventLayoutType).extend
20
- ? (layout as AllDayEventLayoutType).extend
25
+ (layout as AllDayEventLayoutType<T>).extend
26
+ ? (layout as AllDayEventLayoutType<T>).extend
21
27
  : EventExtend.None
22
28
  ),
23
29
  [layout, renderEvent]
@@ -11,17 +11,21 @@ import { StyleSheet, View } from "react-native";
11
11
  import { useIsEditing } from "../hooks/use-is-editing";
12
12
  import gesturePan from "../utils/pan-edit-event-gesture";
13
13
  import doubleTapGesture from "../utils/double-tap-reset-zoom-gesture";
14
- import { EventExtend, PartDayEventLayoutType } from "../types";
15
-
16
- type TimedEventContainerProps = {
17
- layout: PartDayEventLayoutType;
14
+ import {
15
+ type CalendarEvent,
16
+ EventExtend,
17
+ PartDayEventLayoutType,
18
+ } from "../types";
19
+
20
+ type TimedEventContainerProps<T extends CalendarEvent> = {
21
+ layout: PartDayEventLayoutType<T>;
18
22
  refNewEvent: RefObject<any>;
19
23
  };
20
24
 
21
- const TimedEventContainer = ({
25
+ const TimedEventContainer = <T extends CalendarEvent>({
22
26
  layout,
23
27
  refNewEvent,
24
- }: TimedEventContainerProps) => {
28
+ }: TimedEventContainerProps<T>) => {
25
29
  const { currentY, setIsEditing, isEditing } = useIsEditing();
26
30
  const {
27
31
  onPressEvent,
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  createContext,
3
3
  type Dispatch,
4
+ ReactNode,
4
5
  type SetStateAction,
5
6
  useCallback,
6
7
  useContext,
@@ -15,8 +16,8 @@ import {
15
16
  FullCalendarEventLayout,
16
17
  } from "../types";
17
18
 
18
- export type UpdateEvent = {
19
- events: CalendarEvent[];
19
+ export type UpdateEvent<T extends CalendarEvent> = {
20
+ events: T[];
20
21
  userCalendarId: string;
21
22
  timezone: string;
22
23
  startCalendarDate: string;
@@ -25,66 +26,64 @@ export type UpdateEvent = {
25
26
  calendarViewInterval?: CalendarViewIntervalType;
26
27
  };
27
28
 
28
- type EventsContextType = {
29
- clonedEvents: CalendarEvent[];
30
- updateClonedEvents: Dispatch<SetStateAction<CalendarEvent[]>>;
31
- eventsLayout: FullCalendarEventLayout;
32
- updateEventsLayout: (props: UpdateEvent) => void;
29
+ type EventsContextType<T extends CalendarEvent> = {
30
+ clonedEvents: T[];
31
+ updateClonedEvents: Dispatch<SetStateAction<T[]>>;
32
+ eventsLayout: FullCalendarEventLayout<T>;
33
+ updateEventsLayout: (props: UpdateEvent<T>) => void;
33
34
  };
34
35
 
35
36
  // Context to store both cloned events & event layouts
36
- const EventsContext = createContext<EventsContextType | null>(null);
37
+ const EventsContext = createContext<EventsContextType<any> | null>(null);
37
38
 
38
39
  /**
39
40
  * Provider that manages both cloned events & event layouts independently.
40
41
  */
41
- export const EventsProvider = ({
42
+ export const EventsProvider = <T extends CalendarEvent>({
42
43
  children,
43
44
  initialProps,
44
45
  updateLocalStateAfterEdit = true,
45
46
  }: {
46
- children: React.ReactNode;
47
- initialProps: UpdateEvent;
47
+ children: ReactNode;
48
+ initialProps: UpdateEvent<T>;
48
49
  updateLocalStateAfterEdit?: boolean;
49
50
  }) => {
50
51
  // Cloned Events State
51
- const [clonedEvents, setClonedEvents] = useState<CalendarEvent[]>(
52
- initialProps.events
53
- );
52
+ const [clonedEvents, setClonedEvents] = useState<T[]>(initialProps.events);
54
53
 
55
54
  // Event Layouts State
56
- const [eventsLayout, setEventsLayout] = useState<FullCalendarEventLayout>({
55
+ const [eventsLayout, setEventsLayout] = useState<FullCalendarEventLayout<T>>({
57
56
  allDayEventsLayout: [],
58
57
  partDayEventsLayout: [],
59
58
  });
60
59
 
61
60
  // Function to update cloned events
62
61
  const updateClonedEvents = useCallback(
63
- (events: CalendarEvent[]) => {
62
+ (events: T[]) => {
64
63
  setClonedEvents(updateLocalStateAfterEdit ? cloneDeep(events) : events);
65
64
  },
66
65
  [updateLocalStateAfterEdit]
67
66
  );
68
67
 
69
68
  // Function to update event layouts
70
- const updateEventsLayout = (props: UpdateEvent) => {
69
+ const updateEventsLayout = useCallback((props: UpdateEvent<T>) => {
71
70
  setEventsLayout(
72
- generateEventLayouts(props)[props.startCalendarDate] || {
71
+ generateEventLayouts<T>(props)[props.startCalendarDate] || {
73
72
  partDayEventsLayout: [],
74
73
  allDayEventsLayout: [],
75
74
  }
76
75
  );
77
- };
76
+ }, []);
78
77
 
79
78
  // Update both states when initialProps change
80
79
  useEffect(() => {
81
80
  updateClonedEvents(initialProps.events);
82
81
  updateEventsLayout(initialProps);
83
- }, [initialProps, updateClonedEvents]);
82
+ }, [initialProps, updateClonedEvents, updateEventsLayout]);
84
83
 
85
84
  useEffect(() => {
86
85
  updateEventsLayout({ ...initialProps, events: clonedEvents });
87
- }, [initialProps, clonedEvents]);
86
+ }, [initialProps, clonedEvents, updateEventsLayout]);
88
87
 
89
88
  return (
90
89
  <EventsContext.Provider
@@ -8,14 +8,18 @@ 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 { EditStatus, PartDayEventLayoutType } from "../types";
11
+ import {
12
+ type CalendarEvent,
13
+ EditStatus,
14
+ PartDayEventLayoutType,
15
+ } from "../types";
12
16
  import { useEvents } from "./use-events";
13
17
 
14
- interface IsEditingType {
15
- isEditing: null | PartDayEventLayoutType;
18
+ interface IsEditingType<T extends CalendarEvent> {
19
+ isEditing: null | PartDayEventLayoutType<T>;
16
20
  currentY: SharedValue<number>;
17
21
  setIsEditing: (
18
- newValue: PartDayEventLayoutType | null,
22
+ newValue: PartDayEventLayoutType<T> | null,
19
23
  updatedTimes?: {
20
24
  updatedStart: string;
21
25
  updatedEnd: string;
@@ -23,7 +27,7 @@ interface IsEditingType {
23
27
  ) => void;
24
28
  }
25
29
 
26
- const IsEditing = createContext<IsEditingType | undefined>(undefined);
30
+ const IsEditing = createContext<IsEditingType<any> | undefined>(undefined);
27
31
 
28
32
  export const useIsEditing = () => {
29
33
  const context = useContext(IsEditing);
@@ -35,18 +39,21 @@ export const useIsEditing = () => {
35
39
  };
36
40
 
37
41
  // Provider component
38
- export const IsEditingProvider = ({ children }: { children: ReactNode }) => {
42
+ export const IsEditingProvider = <T extends CalendarEvent>({
43
+ children,
44
+ }: {
45
+ children: ReactNode;
46
+ }) => {
39
47
  const { canEditEvent, onEventEdit, updateLocalStateAfterEdit } =
40
48
  useContext(ConfigProvider);
41
49
  const { updateClonedEvents } = useEvents();
42
- const [isEditing, baseSetIsEditing] = useState<null | PartDayEventLayoutType>(
43
- null
44
- );
50
+ const [isEditing, baseSetIsEditing] =
51
+ useState<null | PartDayEventLayoutType<T>>(null);
45
52
  const currentY = useSharedValue(0);
46
53
 
47
54
  const setIsEditing = useCallback(
48
55
  (
49
- newValue: PartDayEventLayoutType | null,
56
+ newValue: PartDayEventLayoutType<T> | null,
50
57
  updatedTimes?: {
51
58
  updatedStart: string;
52
59
  updatedEnd: string;
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: CalendarEvent[];
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]