Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / calendar / export / createExportIcs.ts
blob84e1681ec073c9de840d8f166f3dd16d72f956f2
1 import type { RequireSome } from '../../interfaces';
2 import type {
3     VcalVcalendar,
4     VcalVeventComponent,
5     VcalVtimezoneComponent,
6     VisualCalendar,
7 } from '../../interfaces/calendar';
8 import { ICAL_METHOD } from '../constants';
9 import { serialize } from '../vcal';
11 interface CreateExportIcsParams {
12     prodId: string;
13     eventsWithSummary: VcalVeventComponent[];
14     vtimezones?: VcalVtimezoneComponent[];
15     calendar: VisualCalendar;
16     defaultTzid: string;
19 type ExportVcal = RequireSome<VcalVcalendar, 'components'> & {
20     'X-WR-TIMEZONE': { value: string };
21     'X-WR-CALNAME': { value: string };
22     'X-WR-CALDESC'?: { value: string };
25 export const createExportIcs = ({
26     calendar,
27     prodId,
28     eventsWithSummary,
29     vtimezones = [],
30     defaultTzid,
31 }: CreateExportIcsParams): string => {
32     const exportVcal: ExportVcal = {
33         component: 'vcalendar',
34         components: [...vtimezones, ...eventsWithSummary],
35         prodid: { value: prodId },
36         version: { value: '2.0' },
37         method: { value: ICAL_METHOD.PUBLISH },
38         calscale: { value: 'GREGORIAN' },
39         'X-WR-TIMEZONE': { value: defaultTzid },
40         'X-WR-CALNAME': { value: calendar.Name },
41     };
43     if (calendar.Description) {
44         exportVcal['X-WR-CALDESC'] = { value: calendar.Description };
45     }
47     return serialize(exportVcal);