Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / shared / lib / drawer / interfaces.ts
blob4f88006dc3c71bd7539841afa6fc31c746b7fb89
1 import type { ThemeColor } from '@proton/colors/types';
2 import type { IconName } from '@proton/components/components/icon/Icon';
3 import type { OfflineKey } from '@proton/shared/lib/authentication/offlineKey';
4 import type { APPS } from '@proton/shared/lib/constants';
5 import type { Environment } from '@proton/shared/lib/interfaces';
7 import type { User as tsUser } from '../interfaces';
8 import type { VCardContact } from '../interfaces/contacts/VCard';
9 import type { ThemeSetting } from '../themes/themes';
11 export enum DRAWER_NATIVE_APPS {
12     QUICK_SETTINGS = 'quick-settings',
13     CONTACTS = 'contacts',
14     SECURITY_CENTER = 'security-center',
16 export type DrawerApp = typeof APPS.PROTONCALENDAR | `${DRAWER_NATIVE_APPS}`;
17 export type IframeSrcMap = Partial<Record<DrawerApp, string | undefined>>;
19 export interface OpenDrawerArgs {
20     app: DrawerApp;
21     path?: string;
24 export interface DrawerLocalStorageValue {
25     app: DrawerApp;
26     path?: string;
29 /**
30  * Events sent from or to the drawer app
31  */
32 export enum DRAWER_EVENTS {
33     // Global inside iframe events
34     CLOSE = 'close',
35     SHOW = 'show',
36     SWITCH = 'switch',
37     READY = 'ready',
38     SESSION = 'session',
39     API_REQUEST = 'api-request',
40     API_RESPONSE = 'api-response',
41     ABORT_REQUEST = 'api-request-abort',
42     CHILD_URL_UPDATE = 'child-url-update',
44     // Global outside iframe events
45     CALL_EVENT_MANAGER_FROM_OUTSIDE = 'outside-call-event-manager',
46     UPDATE_THEME = 'outside-update-theme',
48     // Calendar inside iframe events
50     // Calendar outside iframe events
51     CALENDAR_OPEN_EVENT = 'outside-calendar-open-event',
52     CALL_CALENDAR_EVENT_MANAGER = 'outside-call-calendar-event-manager',
53     SET_WIDGET_EVENT = 'outside-set-widget-event',
54     UNSET_WIDGET_EVENT = 'outside-unset-widget-event',
56     // Calendar to mail events
57     REQUEST_OPEN_EVENTS = 'outside-request-open-events',
58     REFRESH_WIDGET = 'outside-refresh-widget',
59     OPEN_CONTACT_MODAL = 'open-contact-modal',
62 // Global inside iframe events
63 interface CLOSE {
64     type: DRAWER_EVENTS.CLOSE;
65     payload?: {
66         app: DrawerApp;
67         closeDefinitely?: boolean;
68     };
71 interface SHOW {
72     type: DRAWER_EVENTS.SHOW;
75 interface SWITCH {
76     type: DRAWER_EVENTS.SWITCH;
77     payload: {
78         nextUrl: string;
79     };
82 interface READY {
83     type: DRAWER_EVENTS.READY;
86 export interface SESSION_MESSAGE {
87     type: DRAWER_EVENTS.SESSION;
88     payload: {
89         UID: string;
90         keyPassword?: string;
91         User: tsUser;
92         localID: number;
93         clientKey: string;
94         offlineKey: OfflineKey | undefined;
95         persistent: boolean;
96         trusted: boolean;
97         tag?: Environment;
98     };
101 interface API_REQUEST {
102     type: DRAWER_EVENTS.API_REQUEST;
103     payload: {
104         id: string;
105         arg: object;
106         appVersion: string;
107         hasAbortController?: boolean;
108     };
111 interface API_RESPONSE {
112     type: DRAWER_EVENTS.API_RESPONSE;
113     payload: {
114         id: string;
115         success: boolean;
116         isApiError?: boolean;
117         data: any;
118         serverTime: Date;
119         output?: 'raw';
120     };
123 interface API_ABORT_REQUEST {
124     type: DRAWER_EVENTS.ABORT_REQUEST;
125     payload: {
126         id: string;
127     };
130 interface CHILD_URL_UPDATE {
131     type: DRAWER_EVENTS.CHILD_URL_UPDATE;
132     payload: {
133         url: string;
134         app: DrawerApp;
135     };
138 // Global outside iframe events
139 interface CALL_EVENT_MANAGER_OUTSIDE {
140     type: DRAWER_EVENTS.CALL_EVENT_MANAGER_FROM_OUTSIDE;
143 interface DRAWER_UPDATE_THEME {
144     type: DRAWER_EVENTS.UPDATE_THEME;
145     payload: {
146         themeSetting: ThemeSetting;
147     };
150 // Calendar inside iframe events
152 // Calendar outside iframe events
153 interface CALENDAR_OPEN_EVENT {
154     type: DRAWER_EVENTS.CALENDAR_OPEN_EVENT;
155     payload: {
156         calendarID: string;
157         eventID: string;
158         recurrenceID?: number;
159     };
162 interface CALENDAR_CALL_EVENT_MANAGER {
163     type: DRAWER_EVENTS.CALL_CALENDAR_EVENT_MANAGER;
164     payload: {
165         calendarID: string;
166     };
169 interface SET_WIDGET_EVENT {
170     type: DRAWER_EVENTS.SET_WIDGET_EVENT;
171     payload: {
172         messageID: string;
173         UID: string;
174     };
177 interface UNSET_WIDGET_EVENT {
178     type: DRAWER_EVENTS.UNSET_WIDGET_EVENT;
179     payload: {
180         messageID: string;
181         UID: string;
182     };
185 interface REQUEST_OPEN_EVENTS {
186     type: DRAWER_EVENTS.REQUEST_OPEN_EVENTS;
189 interface REFRESH_WIDGET {
190     type: DRAWER_EVENTS.REFRESH_WIDGET;
191     payload: {
192         UID: string;
193         ModifyTime: number;
194     };
197 type OPEN_CONTACT_MODAL =
198     | {
199           type: DRAWER_EVENTS.OPEN_CONTACT_MODAL;
200           payload: {
201               contactID: string;
202           };
203       }
204     | {
205           type: DRAWER_EVENTS.OPEN_CONTACT_MODAL;
206           payload: {
207               vCardContact: VCardContact;
208           };
209       };
211 export type DRAWER_ACTION =
212     | CLOSE
213     | SHOW
214     | SWITCH
215     | READY
216     | SESSION_MESSAGE
217     | API_REQUEST
218     | API_RESPONSE
219     | API_ABORT_REQUEST
220     | CHILD_URL_UPDATE
221     | CALL_EVENT_MANAGER_OUTSIDE
222     | DRAWER_UPDATE_THEME
223     | CALENDAR_OPEN_EVENT
224     | CALENDAR_CALL_EVENT_MANAGER
225     | SET_WIDGET_EVENT
226     | UNSET_WIDGET_EVENT
227     | REQUEST_OPEN_EVENTS
228     | REFRESH_WIDGET
229     | OPEN_CONTACT_MODAL;
232  * QUICK SETTINGS
233  */
235 export const KEY_TRANSPARENCY_REMINDER_UPDATE = 'KEY_TRANSPARENCY_REMINDER_UPDATE';
237 export interface QuickSettingsReminders {
238     icon?: IconName;
239     color?: ThemeColor;
240     text?: string;
241     callback: () => void;
242     testID: string;