Merge branch 'IDTEAM-1.26.0' into 'main'
[ProtonMail-WebClient.git] / packages / shared / lib / calendar / constants.ts
blobe7394bfcd67b86d2f7fbeb984058d95efa86292f
1 import { ACCENT_COLORS } from '../colors';
2 import { BASE_SIZE } from '../helpers/size';
4 export const MAX_CALENDARS_FREE = 3;
5 export const MAX_CALENDARS_PAID = 25; // Only paid mail
6 export const MAX_CALENDARS_FAMILY = 150;
7 export const MAX_CALENDARS_DUO = 50;
9 export const MAX_DEFAULT_NOTIFICATIONS = 5;
10 export const MAX_NOTIFICATIONS = 10;
11 export const MAX_ATTENDEES = 100;
12 export const MAX_CALENDAR_MEMBERS = 49;
13 export const MAX_LINKS_PER_CALENDAR = 5;
15 export enum CALENDAR_CARD_TYPE {
16     CLEAR_TEXT = 0,
17     ENCRYPTED = 1,
18     SIGNED = 2,
19     ENCRYPTED_AND_SIGNED = 3,
22 export enum CALENDAR_PERMISSIONS {
23     SUPER_OWNER = 1,
24     OWNER = 2,
25     ADMIN = 4,
26     READ_MEMBER_LIST = 8,
27     WRITE = 16,
28     READ = 32,
29     AVAILABILITY = 64,
32 export enum ATTENDEE_PERMISSIONS {
33     SEE = 1,
34     INVITE = 2,
35     SEE_AND_INVITE = 3,
36     EDIT = 4,
37     DELETE = 8,
40 export const DEFAULT_ATTENDEE_PERMISSIONS = ATTENDEE_PERMISSIONS.SEE;
42 export enum CALENDAR_FLAGS {
43     INACTIVE = 0,
44     ACTIVE = 1,
45     UPDATE_PASSPHRASE = 2,
46     RESET_NEEDED = 4,
47     INCOMPLETE_SETUP = 8,
48     LOST_ACCESS = 16,
49     SELF_DISABLED = 32,
50     SUPER_OWNER_DISABLED = 64,
53 export enum CALENDAR_TYPE {
54     PERSONAL = 0,
55     SUBSCRIPTION = 1,
56     HOLIDAYS = 2,
59 export enum CALENDAR_STATUS {
60     ACTIVE = 1,
61     DELETED = 2,
64 export enum CALENDAR_DISPLAY {
65     HIDDEN = 0,
66     VISIBLE = 1,
69 export enum CALENDAR_SHARE_BUSY_TIME_SLOTS {
70     NO = 0,
71     YES = 1,
74 export enum ICAL_CALSCALE {
75     GREGORIAN = 'GREGORIAN',
78 export enum ICAL_METHOD {
79     PUBLISH = 'PUBLISH',
80     REQUEST = 'REQUEST',
81     REPLY = 'REPLY',
82     CANCEL = 'CANCEL',
83     COUNTER = 'COUNTER',
84     DECLINECOUNTER = 'DECLINECOUNTER',
85     ADD = 'ADD',
86     REFRESH = 'REFRESH',
89 export const ICAL_METHODS_ATTENDEE = [ICAL_METHOD.REPLY, ICAL_METHOD.COUNTER, ICAL_METHOD.REFRESH];
90 export const ICAL_METHODS_ORGANIZER = [
91     ICAL_METHOD.REQUEST,
92     ICAL_METHOD.CANCEL,
93     ICAL_METHOD.ADD,
94     ICAL_METHOD.DECLINECOUNTER,
97 export enum ICAL_EVENT_STATUS {
98     TENTATIVE = 'TENTATIVE',
99     CONFIRMED = 'CONFIRMED',
100     CANCELLED = 'CANCELLED',
103 export enum ICAL_ATTENDEE_RSVP {
104     TRUE = 'TRUE',
105     FALSE = 'FALSE',
108 export enum ICAL_ATTENDEE_ROLE {
109     REQUIRED = 'REQ-PARTICIPANT', // Indicates a participant whose participation is required
110     OPTIONAL = 'OPT-PARTICIPANT', // Indicates a participant whose participation is optional
111     NON = 'NON-PARTICIPANT', // Indicates a participant who is copied for information purposes only
114 export enum ICAL_ATTENDEE_STATUS {
115     NEEDS_ACTION = 'NEEDS-ACTION',
116     ACCEPTED = 'ACCEPTED',
117     DECLINED = 'DECLINED',
118     TENTATIVE = 'TENTATIVE',
119     DELEGATED = 'DELEGATED',
122 export enum ICAL_ALARM_ACTION {
123     DISPLAY = 'DISPLAY',
124     EMAIL = 'EMAIL',
125     AUDIO = 'AUDIO',
128 export enum ATTENDEE_STATUS_API {
129     NEEDS_ACTION = 0,
130     TENTATIVE = 1,
131     DECLINED = 2,
132     ACCEPTED = 3,
135 export const MAX_ICAL_SEQUENCE = 2 ** 31;
137 export const MAX_CHARS_API = {
138     UID: 191,
139     CALENDAR_NAME: 100,
140     CALENDAR_DESCRIPTION: 255,
141     TITLE: 255,
142     EVENT_DESCRIPTION: 3000,
143     LOCATION: 255,
146 export const MAX_CHARS_CLEARTEXT = {
147     PURPOSE: 500,
150 export const MINIMUM_DATE = new Date(1970, 0, 1);
151 export const MINIMUM_DATE_UTC = new Date(
152     Date.UTC(MINIMUM_DATE.getFullYear(), MINIMUM_DATE.getMonth(), MINIMUM_DATE.getDate())
154 export const MAXIMUM_DATE = new Date(2037, 11, 31);
155 export const MAXIMUM_DATE_UTC = new Date(
156     Date.UTC(MAXIMUM_DATE.getFullYear(), MAXIMUM_DATE.getMonth(), MAXIMUM_DATE.getDate())
159 export enum FREQUENCY {
160     ONCE = 'ONCE',
161     DAILY = 'DAILY',
162     WEEKLY = 'WEEKLY',
163     MONTHLY = 'MONTHLY',
164     YEARLY = 'YEARLY',
165     CUSTOM = 'CUSTOM',
166     OTHER = 'OTHER',
169 export const FREQUENCY_INTERVALS_MAX = {
170     [FREQUENCY.ONCE]: 1000 - 1,
171     [FREQUENCY.DAILY]: 1000 - 1,
172     [FREQUENCY.WEEKLY]: 5000 - 1,
173     [FREQUENCY.MONTHLY]: 1000 - 1,
174     [FREQUENCY.YEARLY]: 100 - 1,
175     [FREQUENCY.CUSTOM]: 1000 - 1,
176     [FREQUENCY.OTHER]: 1,
178 export const FREQUENCY_COUNT_MAX = 50 - 1;
179 export const FREQUENCY_COUNT_MAX_INVITATION = 500 - 1;
181 export enum DAILY_TYPE {
182     ALL_DAYS = 0,
185 export enum WEEKLY_TYPE {
186     ON_DAYS = 0,
189 export enum MONTHLY_TYPE {
190     ON_MONTH_DAY = 0,
191     ON_NTH_DAY = 1,
192     ON_MINUS_NTH_DAY = -1,
195 export enum YEARLY_TYPE {
196     BY_MONTH_ON_MONTH_DAY = 0,
199 export enum END_TYPE {
200     NEVER = 'NEVER',
201     AFTER_N_TIMES = 'COUNT',
202     UNTIL = 'UNTIL',
205 export const ICAL_EXTENSIONS = ['ics', 'ical', 'ifb', 'icalendar'];
206 export const ICAL_MIME_TYPE = 'text/calendar';
208 export const DEFAULT_CALENDAR = {
209     name: 'My calendar',
210     color: ACCENT_COLORS[0],
211     description: '',
214 export enum VIEWS {
215     DAY = 1,
216     WEEK,
217     MONTH,
218     YEAR,
219     AGENDA,
220     CUSTOM,
221     MAIL,
222     DRIVE,
224     SEARCH,
227 export enum ACTION_VIEWS {
228     VIEW = 'VIEW',
231 export enum NOTIFICATION_WHEN {
232     BEFORE = '-',
233     AFTER = '',
236 export enum NOTIFICATION_UNITS {
237     WEEK = 1,
238     DAY = 2,
239     HOUR = 3,
240     MINUTE = 4,
243 export const NOTIFICATION_UNITS_MAX = {
244     [NOTIFICATION_UNITS.WEEK]: 1000 - 1,
245     [NOTIFICATION_UNITS.DAY]: 7000 - 1,
246     [NOTIFICATION_UNITS.HOUR]: 1000 - 1,
247     [NOTIFICATION_UNITS.MINUTE]: 10000 - 1,
250 export const DEFAULT_EVENT_DURATION = 30;
252 export const COLORS = {
253     BLACK: '#000',
254     WHITE: '#FFF',
257 export enum SAVE_CONFIRMATION_TYPES {
258     SINGLE = 1,
259     RECURRING,
262 export enum DELETE_CONFIRMATION_TYPES {
263     SINGLE = 1,
264     RECURRING,
267 export enum RECURRING_TYPES {
268     ALL = 1,
269     FUTURE,
270     SINGLE,
273 export const MAX_IMPORT_EVENTS = 15000;
274 export const MAX_IMPORT_EVENTS_STRING = MAX_IMPORT_EVENTS.toLocaleString();
275 export const MAX_IMPORT_FILE_SIZE = 10 * BASE_SIZE ** 2;
276 export const MAX_IMPORT_FILE_SIZE_STRING = '10 MB';
277 export const MAX_UID_CHARS_DISPLAY = 43;
278 export const MAX_FILENAME_CHARS_DISPLAY = 100;
279 export const IMPORT_CALENDAR_FAQ_URL = '/how-to-import-calendar-to-proton-calendar';
280 export const IMPORT_CALENDAR_UNSUPPORTED_FAQ_URL = `${IMPORT_CALENDAR_FAQ_URL}/#data-not-supported`;
282 export const TITLE_INPUT_ID = 'event-title-input';
283 export const FREQUENCY_INPUT_ID = 'event-frequency-input';
284 export const LOCATION_INPUT_ID = 'event-location-input';
285 export const NOTIFICATION_INPUT_ID = 'event-notification-input';
286 export const VIDEO_CONFERENCE_INPUT_ID = 'event-video-conference-input';
287 export const CALENDAR_INPUT_ID = 'event-calendar-input';
288 export const DESCRIPTION_INPUT_ID = 'event-description-input';
289 export const DATE_INPUT_ID = 'event-date-input';
290 export const PARTICIPANTS_INPUT_ID = 'event-participants-input';
291 export const MEMBERS_INPUT_ID = 'shared-members-input';
293 export enum IMPORT_ERROR_TYPE {
294     NO_FILE_SELECTED = 'NO_FILE_SELECTED',
295     NO_ICS_FILE = 'NO_ICS_FILE',
296     FILE_EMPTY = 'FILE_EMPTY',
297     FILE_TOO_BIG = 'FILE_TOO_BIG',
298     FILE_CORRUPTED = 'FILE_CORRUPTED',
299     INVALID_CALENDAR = 'INVALID_CALENDAR',
300     INVALID_METHOD = 'INVALID_METHOD',
301     NO_EVENTS = 'NO_EVENTS',
302     TOO_MANY_EVENTS = 'TOO_MANY_EVENTS',
305 export const SHARED_SIGNED_FIELDS = [
306     'uid',
307     'dtstamp',
308     'dtstart',
309     'dtend',
310     'recurrence-id',
311     'rrule',
312     'exdate',
313     'organizer',
314     'sequence',
315     'x-pm-conference-id',
316 ] as const;
318 export const SHARED_ENCRYPTED_FIELDS = [
319     'uid',
320     'dtstamp',
321     'created',
322     'description',
323     'summary',
324     'location',
325     'x-pm-conference-url',
326 ] as const;
328 export const CALENDAR_SIGNED_FIELDS = ['uid', 'dtstamp', 'exdate', 'status', 'transp'] as const;
329 export const CALENDAR_ENCRYPTED_FIELDS = ['uid', 'dtstamp', 'comment'] as const;
331 export const USER_SIGNED_FIELDS = ['uid', 'dtstamp'] as const;
332 export const USER_ENCRYPTED_FIELDS = [] as const;
334 export const ATTENDEES_SIGNED_FIELDS = [] as const;
335 export const ATTENDEES_ENCRYPTED_FIELDS = ['uid', 'attendee'] as const;
337 export const REQUIRED_SET = new Set(['uid', 'dtstamp'] as const);
339 // Set of taken keys to put the rest
340 export const TAKEN_KEYS = [
341     ...new Set([
342         ...SHARED_SIGNED_FIELDS,
343         ...SHARED_ENCRYPTED_FIELDS,
344         ...CALENDAR_SIGNED_FIELDS,
345         ...CALENDAR_ENCRYPTED_FIELDS,
346         ...USER_SIGNED_FIELDS,
347         ...USER_ENCRYPTED_FIELDS,
348         ...ATTENDEES_ENCRYPTED_FIELDS,
349         ...ATTENDEES_SIGNED_FIELDS,
350     ]),
351 ] as const;
353 export enum NOTIFICATION_TYPE_API {
354     EMAIL = 0,
355     DEVICE = 1,
358 export enum EVENT_VERIFICATION_STATUS {
359     SUCCESSFUL = 1,
360     NOT_VERIFIED = 0,
361     FAILED = -1,
364 export enum SETTINGS_VIEW {
365     DAY = 0,
366     WEEK = 1,
367     MONTH = 2,
368     YEAR = 3,
369     PLANNING = 4,
372 export enum CALENDAR_VALIDATION_MODE {
373     DOWNLOAD_ONLY = 0,
374     DOWNLOAD_AND_PARSE = 1,
377 export const CALENDAR_SETTINGS_ROUTE = {
378     GENERAL: '/general',
379     CALENDARS: '/calendars',
380     INTEROPS: '/import-export',
381     GET_APPS: '/get-the-apps',
384 export const CALENDAR_SETTINGS_SECTION_ID = {
385     TIME_ZONE: 'time-zone',
386     LAYOUT: 'layout',
387     INVITATIONS: 'invitations',
388     THEME: 'theme',
389     PERSONAL_CALENDARS: 'my-calendars',
390     OTHER_CALENDARS: 'other-calendars',
391     IMPORT: 'import',
392     EXPORT: 'export',
393     SHARE: 'share',
394     SHARE_PRIVATELY: 'share-privately',
395     SHARE_PUBLICLY: 'share-publicly',
396     MOBILE_APP: 'mobile-app',
397     DESKTOP_APP: 'desktop-app',
398     INTEGRATIONS: 'integrations',
401 /** Visual limit of the attendees busy slots we display */
402 export const BUSY_TIME_SLOTS_MAX_ATTENDEES_DISPLAYED = 10;
404 export const TMP_UID = 'tmp';
405 export const TMP_UNIQUE_ID = 'tmp';