Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / api / labels.ts
blobfec583350a4b0f8d1ba5343f55287668f0b72d6e
1 import { LABEL_TYPE } from '../constants';
3 const { MESSAGE_LABEL, MESSAGE_FOLDER, CONTACT_GROUP, SYSTEM_FOLDER } = LABEL_TYPE;
5 export const get = (Type: number) => ({
6     url: 'core/v4/labels',
7     method: 'get',
8     params: { Type },
9 });
11 interface PartialLabelOrderArgument {
12     LabelIDs: string[];
13     ParentID?: string | number;
15 interface LabelOrderArgument extends PartialLabelOrderArgument {
16     Type: number;
18 export const order = ({ LabelIDs, ParentID, Type }: LabelOrderArgument) => ({
19     method: 'put',
20     url: 'core/v4/labels/order',
21     data: { LabelIDs, ParentID, Type },
22 });
24 export const orderAllFolders = () => ({
25     method: 'put',
26     url: 'core/v4/labels/order/tree',
27 });
29 interface PartialCreateLabelArgument {
30     Name: string;
31     Color: string;
32     ParentID?: string | number;
33     Notify?: number;
34     Expanded?: number;
35     Sticky?: number;
37 interface CreateLabelArgument extends PartialCreateLabelArgument {
38     Type: number;
40 export const create = ({ Name, Color, Type, Notify, ParentID, Expanded }: CreateLabelArgument) => ({
41     method: 'post',
42     url: 'core/v4/labels',
43     data: { Name, Color, Type, Notify, ParentID, Expanded },
44 });
46 interface UpdateLabelArguments {
47     Name: string;
48     Color: string;
49     Notify?: number;
50     ParentID?: string | number;
51     Sticky?: number;
52     Expanded?: number;
53     Display?: number;
55 export const updateLabel = (
56     labelID: string,
57     { Name, Color, Notify, ParentID, Sticky, Expanded, Display }: UpdateLabelArguments
58 ) => ({
59     method: 'put',
60     url: `core/v4/labels/${labelID}`,
61     data: { Name, Color, Notify, ParentID, Sticky, Expanded, Display },
62 });
64 export const deleteLabel = (labelID: string) => ({
65     method: 'delete',
66     url: `core/v4/labels/${labelID}`,
67 });
69 export const deleteLabels = (labelIDs: string[]) => ({
70     method: 'delete',
71     url: 'core/v4/labels',
72     data: { LabelIDs: labelIDs },
73 });
75 export const checkLabelAvailability = (params: { Name: string; Type: LABEL_TYPE; ParentID?: string | number }) => ({
76     method: 'get',
77     url: 'core/v4/labels/available',
78     params,
79 });
81 export const getLabels = () => get(MESSAGE_LABEL);
82 export const getFolders = () => get(MESSAGE_FOLDER);
83 export const getSystemFolders = () => get(SYSTEM_FOLDER);
84 export const getContactGroup = () => get(CONTACT_GROUP);
86 export const orderFolders = (opt: PartialLabelOrderArgument) => order({ ...opt, Type: MESSAGE_FOLDER });
87 export const orderLabels = (opt: PartialLabelOrderArgument) => order({ ...opt, Type: MESSAGE_LABEL });
88 export const orderSystemFolders = (opt: Pick<PartialLabelOrderArgument, 'LabelIDs'>) =>
89     order({ ...opt, ParentID: undefined, Type: SYSTEM_FOLDER });
90 export const orderContactGroup = (opt: PartialLabelOrderArgument) => order({ ...opt, Type: CONTACT_GROUP });
92 export const createLabel = (opt: PartialCreateLabelArgument) => create({ ...opt, Type: MESSAGE_LABEL });
93 export const createContactGroup = (opt: PartialCreateLabelArgument) => create({ ...opt, Type: CONTACT_GROUP });
95 export const updateSystemFolders = (labelId: string, opt: Pick<UpdateLabelArguments, 'Color' | 'Name' | 'Display'>) =>
96     updateLabel(labelId, { ...opt });