@symbiote-native/calendar 0.1.0

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 (141) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +189 -0
  3. package/build/angular/index.d.ts +3 -0
  4. package/build/angular/index.js +3 -0
  5. package/build/angular/services/calendar-permissions.service/index.d.ts +5 -0
  6. package/build/angular/services/calendar-permissions.service/index.js +60 -0
  7. package/build/angular/services/reminders-permissions.service/index.d.ts +5 -0
  8. package/build/angular/services/reminders-permissions.service/index.js +60 -0
  9. package/build/core/attendee.d.ts +9 -0
  10. package/build/core/attendee.js +28 -0
  11. package/build/core/calendar-permission-api.d.ts +9 -0
  12. package/build/core/calendar-permission-api.js +9 -0
  13. package/build/core/calendar.d.ts +34 -0
  14. package/build/core/calendar.js +118 -0
  15. package/build/core/enums.d.ts +141 -0
  16. package/build/core/enums.js +157 -0
  17. package/build/core/event.d.ts +14 -0
  18. package/build/core/event.js +40 -0
  19. package/build/core/index.d.ts +6 -0
  20. package/build/core/index.js +6 -0
  21. package/build/core/native-module.d.ts +154 -0
  22. package/build/core/native-module.js +3 -0
  23. package/build/core/reminder.d.ts +10 -0
  24. package/build/core/reminder.js +34 -0
  25. package/build/core/types.d.ts +184 -0
  26. package/build/core/types.js +1 -0
  27. package/build/core/utils.d.ts +7 -0
  28. package/build/core/utils.js +29 -0
  29. package/build/legacy/calendar.d.ts +23 -0
  30. package/build/legacy/calendar.js +261 -0
  31. package/build/legacy/enums.d.ts +1 -0
  32. package/build/legacy/enums.js +2 -0
  33. package/build/legacy/index.d.ts +5 -0
  34. package/build/legacy/index.js +5 -0
  35. package/build/legacy/native-module.d.ts +39 -0
  36. package/build/legacy/native-module.js +3 -0
  37. package/build/legacy/permissions.d.ts +9 -0
  38. package/build/legacy/permissions.js +33 -0
  39. package/build/legacy/reminders.d.ts +6 -0
  40. package/build/legacy/reminders.js +56 -0
  41. package/build/legacy/types.d.ts +147 -0
  42. package/build/legacy/types.js +1 -0
  43. package/build/react/index.d.ts +3 -0
  44. package/build/react/index.js +3 -0
  45. package/build/react/use-calendar-permissions.d.ts +10 -0
  46. package/build/react/use-calendar-permissions.js +7 -0
  47. package/build/react/use-reminders-permissions.d.ts +8 -0
  48. package/build/react/use-reminders-permissions.js +10 -0
  49. package/build/solid/index.d.ts +3 -0
  50. package/build/solid/index.js +3 -0
  51. package/build/solid/use-calendar-permissions.d.ts +11 -0
  52. package/build/solid/use-calendar-permissions.js +7 -0
  53. package/build/solid/use-reminders-permissions.d.ts +9 -0
  54. package/build/solid/use-reminders-permissions.js +10 -0
  55. package/build/svelte/index.d.ts +3 -0
  56. package/build/svelte/index.js +3 -0
  57. package/build/svelte/use-calendar-permissions.svelte.d.ts +10 -0
  58. package/build/svelte/use-calendar-permissions.svelte.js +7 -0
  59. package/build/svelte/use-reminders-permissions.svelte.d.ts +8 -0
  60. package/build/svelte/use-reminders-permissions.svelte.js +10 -0
  61. package/build/vue/index.d.ts +3 -0
  62. package/build/vue/index.js +3 -0
  63. package/build/vue/use-calendar-permissions.d.ts +11 -0
  64. package/build/vue/use-calendar-permissions.js +7 -0
  65. package/build/vue/use-reminders-permissions.d.ts +9 -0
  66. package/build/vue/use-reminders-permissions.js +10 -0
  67. package/build-ngc/angular/index.d.ts +3 -0
  68. package/build-ngc/angular/index.js +4 -0
  69. package/build-ngc/angular/index.js.map +1 -0
  70. package/build-ngc/angular/services/calendar-permissions.service/index.d.ts +8 -0
  71. package/build-ngc/angular/services/calendar-permissions.service/index.js +17 -0
  72. package/build-ngc/angular/services/calendar-permissions.service/index.js.map +1 -0
  73. package/build-ngc/angular/services/reminders-permissions.service/index.d.ts +8 -0
  74. package/build-ngc/angular/services/reminders-permissions.service/index.js +17 -0
  75. package/build-ngc/angular/services/reminders-permissions.service/index.js.map +1 -0
  76. package/build-ngc/core/attendee.d.ts +9 -0
  77. package/build-ngc/core/attendee.js +29 -0
  78. package/build-ngc/core/attendee.js.map +1 -0
  79. package/build-ngc/core/calendar-permission-api.d.ts +9 -0
  80. package/build-ngc/core/calendar-permission-api.js +10 -0
  81. package/build-ngc/core/calendar-permission-api.js.map +1 -0
  82. package/build-ngc/core/calendar.d.ts +34 -0
  83. package/build-ngc/core/calendar.js +119 -0
  84. package/build-ngc/core/calendar.js.map +1 -0
  85. package/build-ngc/core/enums.d.ts +141 -0
  86. package/build-ngc/core/enums.js +158 -0
  87. package/build-ngc/core/enums.js.map +1 -0
  88. package/build-ngc/core/event.d.ts +14 -0
  89. package/build-ngc/core/event.js +41 -0
  90. package/build-ngc/core/event.js.map +1 -0
  91. package/build-ngc/core/index.d.ts +6 -0
  92. package/build-ngc/core/index.js +7 -0
  93. package/build-ngc/core/index.js.map +1 -0
  94. package/build-ngc/core/native-module.d.ts +154 -0
  95. package/build-ngc/core/native-module.js +4 -0
  96. package/build-ngc/core/native-module.js.map +1 -0
  97. package/build-ngc/core/reminder.d.ts +10 -0
  98. package/build-ngc/core/reminder.js +35 -0
  99. package/build-ngc/core/reminder.js.map +1 -0
  100. package/build-ngc/core/types.d.ts +184 -0
  101. package/build-ngc/core/types.js +2 -0
  102. package/build-ngc/core/types.js.map +1 -0
  103. package/build-ngc/core/utils.d.ts +7 -0
  104. package/build-ngc/core/utils.js +30 -0
  105. package/build-ngc/core/utils.js.map +1 -0
  106. package/native-link.json +29 -0
  107. package/package.json +155 -0
  108. package/src/angular/index.ts +3 -0
  109. package/src/angular/services/calendar-permissions.service/index.ts +19 -0
  110. package/src/angular/services/reminders-permissions.service/index.ts +16 -0
  111. package/src/core/attendee.ts +43 -0
  112. package/src/core/calendar-permission-api.ts +16 -0
  113. package/src/core/calendar.ts +197 -0
  114. package/src/core/enums.ts +156 -0
  115. package/src/core/event.ts +70 -0
  116. package/src/core/index.ts +18 -0
  117. package/src/core/native-module.ts +212 -0
  118. package/src/core/reminder.ts +52 -0
  119. package/src/core/types.ts +209 -0
  120. package/src/core/utils.ts +39 -0
  121. package/src/legacy/calendar.ts +401 -0
  122. package/src/legacy/enums.ts +2 -0
  123. package/src/legacy/index.ts +5 -0
  124. package/src/legacy/native-module.ts +77 -0
  125. package/src/legacy/permissions.ts +47 -0
  126. package/src/legacy/reminders.ts +98 -0
  127. package/src/legacy/types.ts +183 -0
  128. package/src/react/index.ts +3 -0
  129. package/src/react/use-calendar-permissions.ts +25 -0
  130. package/src/react/use-reminders-permissions.ts +25 -0
  131. package/src/solid/index.ts +3 -0
  132. package/src/solid/use-calendar-permissions.ts +26 -0
  133. package/src/solid/use-reminders-permissions.ts +26 -0
  134. package/src/svelte/index.ts +3 -0
  135. package/src/svelte/svelte-ambient.d.ts +3 -0
  136. package/src/svelte/svelte-compile.test-helper.ts +7 -0
  137. package/src/svelte/use-calendar-permissions.svelte.ts +25 -0
  138. package/src/svelte/use-reminders-permissions.svelte.ts +25 -0
  139. package/src/vue/index.ts +3 -0
  140. package/src/vue/use-calendar-permissions.ts +26 -0
  141. package/src/vue/use-reminders-permissions.ts +26 -0
@@ -0,0 +1,16 @@
1
+ // Angular twin of `../../react`'s `useRemindersPermissions`
2
+
3
+ import { Injectable } from '@angular/core';
4
+ import { PermissionsServiceBase } from '@symbiote-native/angular';
5
+ import {
6
+ getRemindersPermissions,
7
+ requestRemindersPermissions,
8
+ } from '../../../core/calendar';
9
+ import type { PermissionResponse } from 'expo-modules-core';
10
+
11
+ @Injectable({ providedIn: 'root' })
12
+ export class RemindersPermissionsService extends PermissionsServiceBase<PermissionResponse> {
13
+ constructor() {
14
+ super(getRemindersPermissions, requestRemindersPermissions);
15
+ }
16
+ }
@@ -0,0 +1,43 @@
1
+ import { UnavailabilityError } from 'expo-modules-core';
2
+ import { expoCalendarNext } from './native-module';
3
+ import type { NativeExpoCalendarAttendee } from './native-module';
4
+ import type { IAttendeePatch } from './types';
5
+ import { getNullableDetailsFields, stringifyDateValues } from './utils';
6
+
7
+ /** @platform android - iOS registers this class with no properties or methods. */
8
+ export class ExpoCalendarAttendee
9
+ extends expoCalendarNext.ExpoCalendarAttendee
10
+ {
11
+ override async update(details: IAttendeePatch): Promise<void> {
12
+ if (!super.update) {
13
+ throw new UnavailabilityError('ExpoCalendarAttendee', 'update');
14
+ }
15
+ return super.update(
16
+ stringifyDateValues(details),
17
+ getNullableDetailsFields(details),
18
+ );
19
+ }
20
+
21
+ override async delete(): Promise<void> {
22
+ if (!super.delete) {
23
+ throw new UnavailabilityError('ExpoCalendarAttendee', 'delete');
24
+ }
25
+ return super.delete();
26
+ }
27
+ }
28
+
29
+ function isExpoCalendarAttendee(value: unknown): value is ExpoCalendarAttendee {
30
+ return value instanceof ExpoCalendarAttendee;
31
+ }
32
+
33
+ export function upgradeToExpoCalendarAttendee(
34
+ native: NativeExpoCalendarAttendee,
35
+ ): ExpoCalendarAttendee {
36
+ Object.setPrototypeOf(native, ExpoCalendarAttendee.prototype);
37
+ if (!isExpoCalendarAttendee(native)) {
38
+ throw new Error(
39
+ 'unreachable - just reassigned the prototype to ExpoCalendarAttendee',
40
+ );
41
+ }
42
+ return native;
43
+ }
@@ -0,0 +1,16 @@
1
+ // `methods` every adapter's `useCalendarPermissions` binds to the shared
2
+ // `@symbiote-native/{react,vue,solid,svelte}` `createPermissionHook` factory
3
+
4
+ import { getCalendarPermissions, requestCalendarPermissions } from './calendar';
5
+ import { splitWriteOnlyPermissionOptions } from '@symbiote-native/engine';
6
+
7
+ export type ICalendarPermissionMethodOptions = { writeOnly?: boolean };
8
+
9
+ export const calendarPermissionMethods = {
10
+ getMethod: (options?: ICalendarPermissionMethodOptions) =>
11
+ getCalendarPermissions(options?.writeOnly),
12
+ requestMethod: (options?: ICalendarPermissionMethodOptions) =>
13
+ requestCalendarPermissions(options?.writeOnly),
14
+ };
15
+
16
+ export const splitCalendarPermissionOptions = splitWriteOnlyPermissionOptions;
@@ -0,0 +1,197 @@
1
+ import { UnavailabilityError } from 'expo-modules-core';
2
+ import type { PermissionResponse } from 'expo-modules-core';
3
+ import { expoCalendarNext } from './native-module';
4
+ import type { NativeExpoCalendar } from './native-module';
5
+ import type {
6
+ IAddEventWithFormOptions,
7
+ ICalendarInput,
8
+ ICalendarPatch,
9
+ IDialogEventResult,
10
+ IEventInput,
11
+ IReminderInput,
12
+ ISource,
13
+ } from './types';
14
+ import type { EntityTypes } from './enums';
15
+ import { stringifyDateValues, stringifyIfDate } from './utils';
16
+ import { ExpoCalendarEvent, upgradeToExpoCalendarEvent } from './event';
17
+ import {
18
+ ExpoCalendarReminder,
19
+ upgradeToExpoCalendarReminder,
20
+ } from './reminder';
21
+
22
+ export class ExpoCalendar extends expoCalendarNext.ExpoCalendar {
23
+ override async createEvent(details: IEventInput): Promise<ExpoCalendarEvent> {
24
+ return upgradeToExpoCalendarEvent(
25
+ await super.createEvent(stringifyDateValues(details)),
26
+ );
27
+ }
28
+
29
+ /** @platform ios */
30
+ override async createReminder(
31
+ details: IReminderInput,
32
+ ): Promise<ExpoCalendarReminder> {
33
+ if (!super.createReminder) {
34
+ throw new UnavailabilityError('ExpoCalendar', 'createReminder');
35
+ }
36
+ return upgradeToExpoCalendarReminder(
37
+ await super.createReminder(stringifyDateValues(details)),
38
+ );
39
+ }
40
+
41
+ override async listEvents(
42
+ startDate: Date,
43
+ endDate: Date,
44
+ ): Promise<ExpoCalendarEvent[]> {
45
+ if (!startDate) {
46
+ throw new Error(
47
+ 'listEvents must be called with a startDate (date) to search for events',
48
+ );
49
+ }
50
+ if (!endDate) {
51
+ throw new Error(
52
+ 'listEvents must be called with an endDate (date) to search for events',
53
+ );
54
+ }
55
+ const events = await super.listEvents(
56
+ stringifyIfDate(startDate),
57
+ stringifyIfDate(endDate),
58
+ );
59
+ return events.map(upgradeToExpoCalendarEvent);
60
+ }
61
+
62
+ /** @platform ios */
63
+ override async listReminders(
64
+ startDate: string | Date | null = null,
65
+ endDate: string | Date | null = null,
66
+ status: string | null = null,
67
+ ): Promise<ExpoCalendarReminder[]> {
68
+ if (!super.listReminders) {
69
+ throw new UnavailabilityError('ExpoCalendar', 'listReminders');
70
+ }
71
+ const reminders = await super.listReminders(startDate, endDate, status);
72
+ return reminders.map(upgradeToExpoCalendarReminder);
73
+ }
74
+
75
+ override async update(details: ICalendarPatch): Promise<void> {
76
+ return super.update(stringifyDateValues(details));
77
+ }
78
+
79
+ override async addEventWithForm(
80
+ options?: IAddEventWithFormOptions,
81
+ ): Promise<IDialogEventResult> {
82
+ if (!super.addEventWithForm) {
83
+ throw new UnavailabilityError('ExpoCalendar', 'addEventWithForm');
84
+ }
85
+ return super.addEventWithForm(options && stringifyDateValues(options));
86
+ }
87
+
88
+ override async delete(): Promise<void> {
89
+ return super.delete();
90
+ }
91
+
92
+ static async get(calendarId: string): Promise<ExpoCalendar> {
93
+ return upgradeToExpoCalendar(
94
+ await expoCalendarNext.getCalendarById(calendarId),
95
+ );
96
+ }
97
+ }
98
+
99
+ function isExpoCalendar(value: unknown): value is ExpoCalendar {
100
+ return value instanceof ExpoCalendar;
101
+ }
102
+
103
+ function upgradeToExpoCalendar(native: NativeExpoCalendar): ExpoCalendar {
104
+ Object.setPrototypeOf(native, ExpoCalendar.prototype);
105
+ if (!isExpoCalendar(native)) {
106
+ throw new Error(
107
+ 'unreachable - just reassigned the prototype to ExpoCalendar',
108
+ );
109
+ }
110
+ return native;
111
+ }
112
+
113
+ /** @platform ios - Android has no single system-managed default calendar. */
114
+ export function getDefaultCalendarSync(): ExpoCalendar {
115
+ if (!expoCalendarNext.getDefaultCalendarSync) {
116
+ throw new UnavailabilityError('Calendar', 'getDefaultCalendarSync');
117
+ }
118
+ return upgradeToExpoCalendar(expoCalendarNext.getDefaultCalendarSync());
119
+ }
120
+
121
+ export async function getCalendars(
122
+ entityType?: EntityTypes,
123
+ ): Promise<ExpoCalendar[]> {
124
+ if (!expoCalendarNext.getCalendars) {
125
+ throw new UnavailabilityError('Calendar', 'getCalendars');
126
+ }
127
+ const calendars = await expoCalendarNext.getCalendars(entityType ?? null);
128
+ return calendars.map(upgradeToExpoCalendar);
129
+ }
130
+
131
+ export async function createCalendar(
132
+ details: ICalendarInput = {},
133
+ ): Promise<ExpoCalendar> {
134
+ return upgradeToExpoCalendar(await expoCalendarNext.createCalendar(details));
135
+ }
136
+
137
+ /** @platform ios */
138
+ export async function presentPicker(): Promise<ExpoCalendar | null> {
139
+ if (!expoCalendarNext.presentPicker) {
140
+ throw new UnavailabilityError('Calendar', 'presentPicker');
141
+ }
142
+ const calendar = await expoCalendarNext.presentPicker();
143
+ return calendar ? upgradeToExpoCalendar(calendar) : null;
144
+ }
145
+
146
+ /** Searches events across several calendars at once - use `calendar.listEvents()` for one. */
147
+ export async function listEvents(
148
+ calendars: (string | ExpoCalendar)[],
149
+ startDate: Date,
150
+ endDate: Date,
151
+ ): Promise<ExpoCalendarEvent[]> {
152
+ const calendarIds = calendars.map(calendar =>
153
+ typeof calendar === 'string' ? calendar : calendar.id,
154
+ );
155
+ const events = await expoCalendarNext.listEvents(
156
+ calendarIds,
157
+ stringifyIfDate(startDate),
158
+ stringifyIfDate(endDate),
159
+ );
160
+ return events.map(upgradeToExpoCalendarEvent);
161
+ }
162
+
163
+ export async function requestCalendarPermissions(
164
+ writeOnly?: boolean,
165
+ ): Promise<PermissionResponse> {
166
+ return expoCalendarNext.requestCalendarPermissions(writeOnly);
167
+ }
168
+
169
+ export async function getCalendarPermissions(
170
+ writeOnly?: boolean,
171
+ ): Promise<PermissionResponse> {
172
+ return expoCalendarNext.getCalendarPermissions(writeOnly);
173
+ }
174
+
175
+ /** @platform ios */
176
+ export async function requestRemindersPermissions(): Promise<PermissionResponse> {
177
+ if (!expoCalendarNext.requestRemindersPermissions) {
178
+ throw new UnavailabilityError('Calendar', 'requestRemindersPermissions');
179
+ }
180
+ return expoCalendarNext.requestRemindersPermissions();
181
+ }
182
+
183
+ /** @platform ios */
184
+ export async function getRemindersPermissions(): Promise<PermissionResponse> {
185
+ if (!expoCalendarNext.getRemindersPermissions) {
186
+ throw new UnavailabilityError('Calendar', 'getRemindersPermissions');
187
+ }
188
+ return expoCalendarNext.getRemindersPermissions();
189
+ }
190
+
191
+ /** @platform ios - Android has no first-class calendar-sources API. */
192
+ export function getSourcesSync(): ISource[] {
193
+ if (!expoCalendarNext.getSourcesSync) {
194
+ throw new UnavailabilityError('Calendar', 'getSourcesSync');
195
+ }
196
+ return expoCalendarNext.getSourcesSync();
197
+ }
@@ -0,0 +1,156 @@
1
+ export enum EntityTypes {
2
+ EVENT = 'event',
3
+ REMINDER = 'reminder',
4
+ }
5
+
6
+ export enum Frequency {
7
+ DAILY = 'daily',
8
+ WEEKLY = 'weekly',
9
+ MONTHLY = 'monthly',
10
+ YEARLY = 'yearly',
11
+ }
12
+
13
+ /** `NOT_SUPPORTED`/`UNAVAILABLE` are iOS-only. */
14
+ export enum Availability {
15
+ NOT_SUPPORTED = 'notSupported',
16
+ BUSY = 'busy',
17
+ FREE = 'free',
18
+ TENTATIVE = 'tentative',
19
+ UNAVAILABLE = 'unavailable',
20
+ }
21
+
22
+ /** @platform ios */
23
+ export enum CalendarType {
24
+ LOCAL = 'local',
25
+ CALDAV = 'caldav',
26
+ EXCHANGE = 'exchange',
27
+ SUBSCRIBED = 'subscribed',
28
+ BIRTHDAYS = 'birthdays',
29
+ UNKNOWN = 'unknown',
30
+ }
31
+
32
+ export enum EventStatus {
33
+ NONE = 'none',
34
+ CONFIRMED = 'confirmed',
35
+ TENTATIVE = 'tentative',
36
+ CANCELED = 'canceled',
37
+ }
38
+
39
+ /** @platform ios */
40
+ export enum SourceType {
41
+ LOCAL = 'local',
42
+ EXCHANGE = 'exchange',
43
+ CALDAV = 'caldav',
44
+ MOBILEME = 'mobileme',
45
+ SUBSCRIBED = 'subscribed',
46
+ BIRTHDAYS = 'birthdays',
47
+ }
48
+
49
+ /** iOS: UNKNOWN/REQUIRED/OPTIONAL/CHAIR/NON_PARTICIPANT. Android: the rest. */
50
+ export enum AttendeeRole {
51
+ UNKNOWN = 'unknown',
52
+ REQUIRED = 'required',
53
+ OPTIONAL = 'optional',
54
+ CHAIR = 'chair',
55
+ NON_PARTICIPANT = 'nonParticipant',
56
+ ATTENDEE = 'attendee',
57
+ ORGANIZER = 'organizer',
58
+ PERFORMER = 'performer',
59
+ SPEAKER = 'speaker',
60
+ NONE = 'none',
61
+ }
62
+
63
+ /** iOS: UNKNOWN/PENDING/DELEGATED/COMPLETED/IN_PROCESS. Android: INVITED/NONE. */
64
+ export enum AttendeeStatus {
65
+ UNKNOWN = 'unknown',
66
+ PENDING = 'pending',
67
+ ACCEPTED = 'accepted',
68
+ DECLINED = 'declined',
69
+ TENTATIVE = 'tentative',
70
+ DELEGATED = 'delegated',
71
+ COMPLETED = 'completed',
72
+ IN_PROCESS = 'inProcess',
73
+ INVITED = 'invited',
74
+ NONE = 'none',
75
+ }
76
+
77
+ /** iOS: UNKNOWN/PERSON/ROOM/GROUP. Android: OPTIONAL/REQUIRED/NONE. Both: RESOURCE. */
78
+ export enum AttendeeType {
79
+ UNKNOWN = 'unknown',
80
+ PERSON = 'person',
81
+ ROOM = 'room',
82
+ GROUP = 'group',
83
+ RESOURCE = 'resource',
84
+ OPTIONAL = 'optional',
85
+ REQUIRED = 'required',
86
+ NONE = 'none',
87
+ }
88
+
89
+ /** @platform android */
90
+ export enum AlarmMethod {
91
+ ALARM = 'alarm',
92
+ ALERT = 'alert',
93
+ EMAIL = 'email',
94
+ SMS = 'sms',
95
+ DEFAULT = 'default',
96
+ }
97
+
98
+ /** @platform android */
99
+ export enum EventAccessLevel {
100
+ CONFIDENTIAL = 'confidential',
101
+ PRIVATE = 'private',
102
+ PUBLIC = 'public',
103
+ DEFAULT = 'default',
104
+ }
105
+
106
+ /** @platform android */
107
+ export enum CalendarAccessLevel {
108
+ CONTRIBUTOR = 'contributor',
109
+ EDITOR = 'editor',
110
+ FREEBUSY = 'freebusy',
111
+ OVERRIDE = 'override',
112
+ OWNER = 'owner',
113
+ READ = 'read',
114
+ RESPOND = 'respond',
115
+ ROOT = 'root',
116
+ NONE = 'none',
117
+ }
118
+
119
+ /** @platform ios */
120
+ export enum ReminderStatus {
121
+ COMPLETED = 'completed',
122
+ INCOMPLETE = 'incomplete',
123
+ }
124
+
125
+ export enum DayOfTheWeek {
126
+ Sunday = 1,
127
+ Monday = 2,
128
+ Tuesday = 3,
129
+ Wednesday = 4,
130
+ Thursday = 5,
131
+ Friday = 6,
132
+ Saturday = 7,
133
+ }
134
+
135
+ export enum MonthOfTheYear {
136
+ January = 1,
137
+ February = 2,
138
+ March = 3,
139
+ April = 4,
140
+ May = 5,
141
+ June = 6,
142
+ July = 7,
143
+ August = 8,
144
+ September = 9,
145
+ October = 10,
146
+ November = 11,
147
+ December = 12,
148
+ }
149
+
150
+ export enum CalendarDialogResultActions {
151
+ done = 'done',
152
+ canceled = 'canceled',
153
+ deleted = 'deleted',
154
+ responded = 'responded',
155
+ saved = 'saved',
156
+ }
@@ -0,0 +1,70 @@
1
+ import { UnavailabilityError } from 'expo-modules-core';
2
+ import { expoCalendarNext } from './native-module';
3
+ import type { NativeExpoCalendarEvent } from './native-module';
4
+ import type {
5
+ IAttendeeInput,
6
+ IEventPatch,
7
+ IRecurringEventOptions,
8
+ } from './types';
9
+ import { getNullableDetailsFields, stringifyDateValues } from './utils';
10
+ import {
11
+ ExpoCalendarAttendee,
12
+ upgradeToExpoCalendarAttendee,
13
+ } from './attendee';
14
+
15
+ export class ExpoCalendarEvent extends expoCalendarNext.ExpoCalendarEvent {
16
+ override getOccurrenceSync(
17
+ options: IRecurringEventOptions = {},
18
+ ): ExpoCalendarEvent {
19
+ const occurrence = super.getOccurrenceSync(stringifyDateValues(options));
20
+ return upgradeToExpoCalendarEvent(occurrence);
21
+ }
22
+
23
+ override async getAttendees(): Promise<ExpoCalendarAttendee[]> {
24
+ const attendees = await super.getAttendees();
25
+ return attendees.map(upgradeToExpoCalendarAttendee);
26
+ }
27
+
28
+ /** @platform android */
29
+ override async createAttendee(
30
+ attendee: IAttendeeInput,
31
+ ): Promise<ExpoCalendarAttendee> {
32
+ if (!super.createAttendee) {
33
+ throw new UnavailabilityError('ExpoCalendarEvent', 'createAttendee');
34
+ }
35
+ return upgradeToExpoCalendarAttendee(await super.createAttendee(attendee));
36
+ }
37
+
38
+ override async update(details: IEventPatch): Promise<void> {
39
+ return super.update(
40
+ stringifyDateValues(details),
41
+ getNullableDetailsFields(details),
42
+ );
43
+ }
44
+
45
+ override async delete(): Promise<void> {
46
+ return super.delete();
47
+ }
48
+
49
+ static async get(eventId: string): Promise<ExpoCalendarEvent> {
50
+ return upgradeToExpoCalendarEvent(
51
+ await expoCalendarNext.getEventById(eventId),
52
+ );
53
+ }
54
+ }
55
+
56
+ function isExpoCalendarEvent(value: unknown): value is ExpoCalendarEvent {
57
+ return value instanceof ExpoCalendarEvent;
58
+ }
59
+
60
+ export function upgradeToExpoCalendarEvent(
61
+ native: NativeExpoCalendarEvent,
62
+ ): ExpoCalendarEvent {
63
+ Object.setPrototypeOf(native, ExpoCalendarEvent.prototype);
64
+ if (!isExpoCalendarEvent(native)) {
65
+ throw new Error(
66
+ 'unreachable - just reassigned the prototype to ExpoCalendarEvent',
67
+ );
68
+ }
69
+ return native;
70
+ }
@@ -0,0 +1,18 @@
1
+ export * from './enums';
2
+ export * from './types';
3
+ export { ExpoCalendarEvent } from './event';
4
+ export { ExpoCalendarAttendee } from './attendee';
5
+ export { ExpoCalendarReminder } from './reminder';
6
+ export {
7
+ ExpoCalendar,
8
+ getDefaultCalendarSync,
9
+ getCalendars,
10
+ createCalendar,
11
+ presentPicker,
12
+ listEvents,
13
+ requestCalendarPermissions,
14
+ getCalendarPermissions,
15
+ requestRemindersPermissions,
16
+ getRemindersPermissions,
17
+ getSourcesSync,
18
+ } from './calendar';