Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / api / filters.ts
blobf315609f8faa5e5be8bc28c463d4d841be1314f9
1 import type { Filter } from '@proton/components/containers/filters/interfaces';
2 import type { MailSearchContext } from '@proton/shared/lib/api/messages';
3 import type { Nullable } from '@proton/shared/lib/interfaces';
5 type AddSieveFilterParams = Required<Pick<Filter, 'Name' | 'Sieve' | 'Version'>>;
6 export const addSieveFilter = ({ Name, Sieve, Version }: AddSieveFilterParams) => ({
7     method: 'post',
8     url: 'mail/v4/filters',
9     data: { Name, Sieve, Version },
10 });
12 export const addTreeFilter = (
13     {
14         ID,
15         Name,
16         Status,
17         Version,
18         Simple,
19         Tree,
20         Sieve,
21     }: Pick<Filter, 'ID' | 'Name' | 'Status' | 'Version' | 'Simple' | 'Tree' | 'Sieve'>,
22     Source?: 'AutoLabel' | 'AutoFolder'
23 ) => ({
24     method: 'post',
25     url: 'mail/v4/filters',
26     data: { ID, Name, Status, Version, Simple, Tree, Sieve },
27     params: { Source },
28 });
30 export const queryFilters = () => ({
31     method: 'get',
32     url: 'mail/v4/filters',
33 });
35 export const clearFilters = () => ({
36     method: 'delete',
37     url: 'mail/v4/filters',
38 });
40 export const updateFilter = (
41     filterID: string,
42     {
43         Name,
44         Status,
45         Version,
46         Sieve,
47         Simple,
48         Tree,
49     }: Pick<Filter, 'ID' | 'Name' | 'Status' | 'Version' | 'Simple' | 'Tree' | 'Sieve'>
50 ) => ({
51     method: 'put',
52     url: `mail/v4/filters/${filterID}`,
53     data: {
54         Name,
55         Status,
56         Version,
57         Simple,
58         Tree,
59         Sieve,
60     },
61 });
63 export const checkSieveFilter = (
64     { Sieve, Version }: Partial<Pick<Filter, 'Sieve' | 'Version'>> = { Sieve: undefined, Version: undefined }
65 ) => ({
66     method: 'put',
67     url: 'mail/v4/filters/check',
68     data: { Sieve, Version },
69 });
71 export const enableFilter = (filterID: string) => ({
72     method: 'put',
73     url: `mail/v4/filters/${filterID}/enable`,
74 });
76 export const disableFilter = (filterID: string) => ({
77     method: 'put',
78     url: `mail/v4/filters/${filterID}/disable`,
79 });
81 export const toggleEnable = (ID: string, enable = true) => (enable ? enableFilter : disableFilter)(ID);
83 export const deleteFilter = (filterID: string) => ({
84     method: 'delete',
85     url: `mail/v4/filters/${filterID}`,
86 });
88 export const updateFilterOrder = (FilterIDs: string[]) => ({
89     method: 'put',
90     url: 'mail/v4/filters/order',
91     data: { FilterIDs },
92 });
94 interface ApplyFiltersParams {
95     SearchContext?: Nullable<MailSearchContext>;
96     Version?: Nullable<string>;
97     Sieve?: Nullable<string>;
98     AllFilters?: 0 | 1;
99     FilterIDs?: string[];
100     AllowList?: 0 | 1;
101     BlockList?: 0 | 1;
102     SpamList?: 0 | 1;
105 export const applyFilters = ({
106     SearchContext = null,
107     Version = null,
108     Sieve = null,
109     AllFilters = 0,
110     FilterIDs = [],
111     AllowList = 0,
112     BlockList = 0,
113     SpamList = 0,
114 }: ApplyFiltersParams) => ({
115     method: 'post',
116     url: 'mail/v4/messages/apply-filters',
117     data: {
118         SearchContext,
119         Version,
120         Sieve,
121         AllFilters,
122         FilterIDs,
123         AllowList,
124         BlockList,
125         SpamList,
126     },