@redacto.io/consent-sdk-react 5.3.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/.turbo/turbo-build.log +24 -0
  2. package/CHANGELOG.md +23 -0
  3. package/dist/privacy-center.d.mts +100 -42
  4. package/dist/privacy-center.d.ts +100 -42
  5. package/dist/privacy-center.js +4232 -2247
  6. package/dist/privacy-center.mjs +4266 -2284
  7. package/package.json +1 -1
  8. package/src/RedactoPrivacyCenter/PrivacyCenterLayout.tsx +6 -10
  9. package/src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx +18 -17
  10. package/src/RedactoPrivacyCenter/api/actions.ts +52 -8
  11. package/src/RedactoPrivacyCenter/api/client.ts +58 -15
  12. package/src/RedactoPrivacyCenter/api/orgBranding.ts +9 -0
  13. package/src/RedactoPrivacyCenter/components/ConsentManager.tsx +729 -278
  14. package/src/RedactoPrivacyCenter/components/ConsentManagerCells.tsx +187 -0
  15. package/src/RedactoPrivacyCenter/components/ConsentManagerColumns.tsx +65 -165
  16. package/src/RedactoPrivacyCenter/components/ConsentManagerExpandedRow.tsx +179 -0
  17. package/src/RedactoPrivacyCenter/components/ConsentManagerGroupedColumns.tsx +318 -0
  18. package/src/RedactoPrivacyCenter/components/ConsentManagerProductCards.tsx +333 -0
  19. package/src/RedactoPrivacyCenter/components/ConsentManagerPurposeCards.tsx +102 -0
  20. package/src/RedactoPrivacyCenter/components/ConsentManagerTableSkeleton.tsx +6 -2
  21. package/src/RedactoPrivacyCenter/components/Form.tsx +3 -3
  22. package/src/RedactoPrivacyCenter/components/ModifyConsentModal.tsx +9 -6
  23. package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationBell.tsx +1 -1
  24. package/src/RedactoPrivacyCenter/components/PrivacyCenterLayout.tsx +101 -56
  25. package/src/RedactoPrivacyCenter/components/SideMenuBarPC/SideBarPC.tsx +16 -2
  26. package/src/RedactoPrivacyCenter/components/types.ts +2 -5
  27. package/src/RedactoPrivacyCenter/context/BrandingContext.tsx +44 -0
  28. package/src/RedactoPrivacyCenter/context/PageChromeContext.tsx +21 -1
  29. package/src/RedactoPrivacyCenter/lib/api.ts +70 -28
  30. package/src/RedactoPrivacyCenter/lib/consent-manager/utils.tsx +4 -2
  31. package/src/RedactoPrivacyCenter/lib/types.ts +79 -36
  32. package/src/RedactoPrivacyCenter/locales/as/translation.json +12 -1
  33. package/src/RedactoPrivacyCenter/locales/bho/translation.json +12 -1
  34. package/src/RedactoPrivacyCenter/locales/bn/translation.json +12 -1
  35. package/src/RedactoPrivacyCenter/locales/brx/translation.json +12 -1
  36. package/src/RedactoPrivacyCenter/locales/doi/translation.json +12 -1
  37. package/src/RedactoPrivacyCenter/locales/en/translation.json +16 -1
  38. package/src/RedactoPrivacyCenter/locales/gom/translation.json +12 -1
  39. package/src/RedactoPrivacyCenter/locales/gu/translation.json +12 -1
  40. package/src/RedactoPrivacyCenter/locales/hi/translation.json +15 -1
  41. package/src/RedactoPrivacyCenter/locales/kn/translation.json +12 -1
  42. package/src/RedactoPrivacyCenter/locales/ks/translation.json +12 -1
  43. package/src/RedactoPrivacyCenter/locales/mai/translation.json +12 -1
  44. package/src/RedactoPrivacyCenter/locales/ml/translation.json +12 -1
  45. package/src/RedactoPrivacyCenter/locales/mni-Mtei/translation.json +12 -1
  46. package/src/RedactoPrivacyCenter/locales/mr/translation.json +12 -1
  47. package/src/RedactoPrivacyCenter/locales/ne/translation.json +12 -1
  48. package/src/RedactoPrivacyCenter/locales/or/translation.json +12 -1
  49. package/src/RedactoPrivacyCenter/locales/pa/translation.json +12 -1
  50. package/src/RedactoPrivacyCenter/locales/sa/translation.json +12 -1
  51. package/src/RedactoPrivacyCenter/locales/sat/translation.json +12 -1
  52. package/src/RedactoPrivacyCenter/locales/sd/translation.json +12 -1
  53. package/src/RedactoPrivacyCenter/locales/ta/translation.json +12 -1
  54. package/src/RedactoPrivacyCenter/locales/te/translation.json +12 -1
  55. package/src/RedactoPrivacyCenter/locales/ur/translation.json +12 -1
  56. package/src/RedactoPrivacyCenter/styles/applyBrandingTheme.ts +66 -0
  57. package/src/RedactoPrivacyCenter/styles/injectStyles.ts +528 -114
  58. package/src/RedactoPrivacyCenter/styles/pcStyles.ts +3 -2
  59. package/src/RedactoPrivacyCenter/styles/variables.css +5 -42
  60. package/src/RedactoPrivacyCenter/table/AdvancedTable.tsx +36 -16
  61. package/src/RedactoPrivacyCenter/table/AdvancedTablePagination.tsx +4 -12
  62. package/src/RedactoPrivacyCenter/ui/Footer.tsx +4 -10
  63. package/src/RedactoPrivacyCenter/ui/PCInput.tsx +1 -1
  64. package/src/RedactoPrivacyCenter/ui/PCSelect.tsx +51 -5
  65. package/src/privacy-center.ts +7 -3
  66. package/src/RedactoPrivacyCenter/components/ThemeTransitionOverlay.tsx +0 -85
  67. package/src/RedactoPrivacyCenter/context/theme.tsx +0 -127
  68. package/src/RedactoPrivacyCenter/ui/ThemeToggle.tsx +0 -72
@@ -12,10 +12,17 @@ export type PageChromeOverride = {
12
12
  descriptionKey?: string;
13
13
  };
14
14
 
15
+ export type PageHeaderStatus = {
16
+ label: string;
17
+ variant: 'success' | 'warning';
18
+ };
19
+
15
20
  type PageChromeContextValue = {
16
21
  pageChromeOverride: PageChromeOverride | null;
17
22
  setPageChromeOverride: (override: PageChromeOverride | null) => void;
18
23
  clearPageChromeOverride: () => void;
24
+ headerStatus: PageHeaderStatus | null;
25
+ setHeaderStatus: (status: PageHeaderStatus | null) => void;
19
26
  };
20
27
 
21
28
  const PageChromeContext = createContext<PageChromeContextValue | null>(null);
@@ -23,6 +30,7 @@ const PageChromeContext = createContext<PageChromeContextValue | null>(null);
23
30
  export function PageChromeProvider({ children }: { children: ReactNode }) {
24
31
  const [pageChromeOverride, setPageChromeOverrideState] =
25
32
  useState<PageChromeOverride | null>(null);
33
+ const [headerStatus, setHeaderStatusState] = useState<PageHeaderStatus | null>(null);
26
34
 
27
35
  const setPageChromeOverride = useCallback(
28
36
  (override: PageChromeOverride | null) => {
@@ -35,13 +43,25 @@ export function PageChromeProvider({ children }: { children: ReactNode }) {
35
43
  setPageChromeOverrideState(null);
36
44
  }, []);
37
45
 
46
+ const setHeaderStatus = useCallback((status: PageHeaderStatus | null) => {
47
+ setHeaderStatusState(status);
48
+ }, []);
49
+
38
50
  const value = useMemo(
39
51
  () => ({
40
52
  pageChromeOverride,
41
53
  setPageChromeOverride,
42
54
  clearPageChromeOverride,
55
+ headerStatus,
56
+ setHeaderStatus,
43
57
  }),
44
- [pageChromeOverride, setPageChromeOverride, clearPageChromeOverride]
58
+ [
59
+ pageChromeOverride,
60
+ setPageChromeOverride,
61
+ clearPageChromeOverride,
62
+ headerStatus,
63
+ setHeaderStatus,
64
+ ]
45
65
  );
46
66
 
47
67
  return (
@@ -4,6 +4,7 @@ import {
4
4
  fetchCaseHistoryServer,
5
5
  fetchProductsServer,
6
6
  fetchUserConsentsServer,
7
+ fetchGroupPurposesServer,
7
8
  getFormDataServer,
8
9
  manageConsentServer,
9
10
  getCaseMessagesServer,
@@ -34,6 +35,7 @@ import type {
34
35
  UploadDocumentResponse,
35
36
  UserConsentDetail,
36
37
  UserDataRequest,
38
+ GroupPurposesOut,
37
39
  } from './types';
38
40
  import { ensureValidToken } from './utils';
39
41
 
@@ -260,37 +262,35 @@ export const fetchProducts = async (
260
262
  }
261
263
  };
262
264
 
265
+ export type FetchUserConsentsParams = {
266
+ organizationId: string;
267
+ workspaceId: string;
268
+ offset?: number;
269
+ limit?: number;
270
+ nominatedOffset?: number;
271
+ nominatedLimit?: number;
272
+ search?: string;
273
+ status?: string;
274
+ product_uuid?: string;
275
+ language?: string;
276
+ authContext?: AuthContext;
277
+ consentClient?: BaseUrlContextValue['consentClient'];
278
+ };
279
+
263
280
  export const fetchUserConsents = async (
264
- organizationId: string,
265
- workspaceId: string,
266
- contact: string,
267
- offset?: number,
268
- limit?: number,
269
- search?: string,
270
- status?: string,
271
- product_uuid?: string,
272
- authContext?: AuthContext,
273
- consentClient?: BaseUrlContextValue['consentClient'],
274
- language?: string
281
+ params: FetchUserConsentsParams
275
282
  ): Promise<UserConsentDetail | null> => {
283
+ const { organizationId, workspaceId, authContext, consentClient, ...rest } = params;
276
284
  try {
277
- // Ensure we have a valid token before making the API call
278
285
  const accessToken = await ensureValidToken(organizationId, workspaceId, undefined, authContext, consentClient);
279
286
  if (!accessToken) {
280
- // ensureValidToken already handled sign out and redirect
281
287
  return null;
282
288
  }
283
289
 
284
290
  const result = await fetchUserConsentsServer({
285
291
  organizationId,
286
292
  workspaceId,
287
- contact,
288
- offset,
289
- limit,
290
- search,
291
- status,
292
- product_uuid,
293
- language,
293
+ ...rest,
294
294
  authToken: accessToken,
295
295
  consentClient,
296
296
  });
@@ -298,18 +298,11 @@ export const fetchUserConsents = async (
298
298
  } catch (error: any) {
299
299
  const shouldRetry = await handleClientAuthError(error, organizationId, workspaceId, authContext, consentClient);
300
300
  if (shouldRetry) {
301
- // Read from sessionStorage first (synchronously updated) then fall back to context
302
301
  const newAccessToken = sessionStorage.getItem('access_token') || authContext?.accessToken || '';
303
302
  return await fetchUserConsentsServer({
304
303
  organizationId,
305
304
  workspaceId,
306
- contact,
307
- offset,
308
- limit,
309
- search,
310
- status,
311
- product_uuid,
312
- language,
305
+ ...rest,
313
306
  authToken: newAccessToken || undefined,
314
307
  consentClient,
315
308
  });
@@ -319,6 +312,55 @@ export const fetchUserConsents = async (
319
312
  }
320
313
  };
321
314
 
315
+ export type FetchGroupPurposesParams = {
316
+ organizationId: string;
317
+ workspaceId: string;
318
+ productUuid: string;
319
+ offset?: number;
320
+ limit?: number;
321
+ status?: string;
322
+ search?: string;
323
+ language?: string;
324
+ nominatorUuid?: string;
325
+ authContext?: AuthContext;
326
+ consentClient?: BaseUrlContextValue['consentClient'];
327
+ };
328
+
329
+ export const fetchGroupPurposes = async (
330
+ params: FetchGroupPurposesParams
331
+ ): Promise<GroupPurposesOut | null> => {
332
+ const { organizationId, workspaceId, authContext, consentClient, ...rest } = params;
333
+ try {
334
+ const accessToken = await ensureValidToken(organizationId, workspaceId, undefined, authContext, consentClient);
335
+ if (!accessToken) {
336
+ return null;
337
+ }
338
+
339
+ const result = await fetchGroupPurposesServer({
340
+ organizationId,
341
+ workspaceId,
342
+ ...rest,
343
+ authToken: accessToken,
344
+ consentClient,
345
+ });
346
+ return result;
347
+ } catch (error: any) {
348
+ const shouldRetry = await handleClientAuthError(error, organizationId, workspaceId, authContext, consentClient);
349
+ if (shouldRetry) {
350
+ const newAccessToken = sessionStorage.getItem('access_token') || authContext?.accessToken || '';
351
+ return await fetchGroupPurposesServer({
352
+ organizationId,
353
+ workspaceId,
354
+ ...rest,
355
+ authToken: newAccessToken || undefined,
356
+ consentClient,
357
+ });
358
+ }
359
+ console.error('Error fetching group purposes:', error);
360
+ return null;
361
+ }
362
+ };
363
+
322
364
  export const manageConsent = async ({
323
365
  organizationId,
324
366
  workspaceId,
@@ -1,7 +1,9 @@
1
1
  import { useMemo } from 'react';
2
2
  import { useTranslation } from 'react-i18next';
3
3
  import { ConsentStatusEnum } from '../types';
4
- import type { UserConsent } from '../types';
4
+ import type { PurposeItem } from '../types';
5
+
6
+ type CsvRow = Partial<PurposeItem> & Record<string, unknown>;
5
7
  import { formatDateTime as formatDateTimeShared } from '../../utils/date';
6
8
 
7
9
  // Re-export shared date formatting
@@ -20,7 +22,7 @@ export const useStatusOptions = () => {
20
22
  );
21
23
  };
22
24
 
23
- export const exportTableToCSV = (rows: UserConsent[]) => {
25
+ export const exportTableToCSV = (rows: CsvRow[]) => {
24
26
  if (!rows || rows.length === 0) {
25
27
  console.warn('No data to export');
26
28
  return;
@@ -27,6 +27,28 @@ export type OrganizationResponse = {
27
27
  detail: OrganizationDetail;
28
28
  };
29
29
 
30
+ export type OrgBrandingTheme = {
31
+ primary: string;
32
+ secondary: string;
33
+ primary_contrast: string;
34
+ link: string;
35
+ surface: string;
36
+ text: string;
37
+ text_muted: string;
38
+ border: string;
39
+ success: string;
40
+ warning: string;
41
+ danger: string;
42
+ };
43
+
44
+ export type OrgBrandingDetail = {
45
+ logo_url: string | null;
46
+ icon_url: string | null;
47
+ brand_name: string;
48
+ theme: OrgBrandingTheme;
49
+ hide_platform_branding: boolean;
50
+ };
51
+
30
52
  export type DataElement = {
31
53
  uuid: string;
32
54
  name: string;
@@ -180,21 +202,6 @@ export type ConsentDataElement = {
180
202
  selected: boolean;
181
203
  };
182
204
 
183
- export type UserConsent = {
184
- purpose_uuid?: string;
185
- purpose: string;
186
- purpose_description: string;
187
- status: ConsentStatusEnum;
188
- given_date: string;
189
- valid_till: string;
190
- method: string;
191
- data_elements: ConsentDataElement[];
192
- product_uuid?: string;
193
- product_name?: string;
194
- product_description?: string | null;
195
- nominator_info?: NominatorInfo;
196
- };
197
-
198
205
  export type NominatorInfo = {
199
206
  org_user_id: string;
200
207
  name: string | null;
@@ -202,44 +209,79 @@ export type NominatorInfo = {
202
209
  email: string | null;
203
210
  };
204
211
 
212
+ export type PurposeItem = {
213
+ purpose_uuid: string;
214
+ name: string;
215
+ description: string | null;
216
+ status: ConsentStatusEnum | string;
217
+ given_date: string | null;
218
+ valid_till: string | null;
219
+ method: string;
220
+ data_elements: ConsentDataElement[];
221
+ link_reason: string | null;
222
+ };
223
+
224
+ export type ConsentGroup = {
225
+ product_uuid: string;
226
+ product_name: string;
227
+ product_description: string | null;
228
+ nominator: NominatorInfo | null;
229
+ total_purposes: number;
230
+ active_purposes: number;
231
+ purposes: PurposeItem[];
232
+ has_more_purposes: boolean;
233
+ };
234
+
235
+ export type PaginationMeta = {
236
+ total_count: number;
237
+ offset: number;
238
+ limit: number;
239
+ };
240
+
241
+ export type Pagination = PaginationMeta;
242
+
205
243
  export type ConsentHistoryStatusSummary = {
206
244
  total_purposes: number;
207
245
  direct_purposes: number;
208
246
  nominated_purposes: number;
209
- nominee_purposes?: number;
210
247
  active_purposes: number;
211
248
  inactive_purposes: number;
212
249
  };
213
250
 
214
- export type ProductConsentHistoryGroup = {
251
+ export type DisplayProductGroup = ConsentGroup & {
252
+ withdrawn_purposes: number;
253
+ expired_purposes: number;
254
+ declined_purposes: number;
255
+ latest_given_date: string | null;
256
+ };
257
+
258
+ export type DisplayPurposeRow = PurposeItem & {
215
259
  product_uuid: string;
216
260
  product_name: string;
217
261
  product_description: string | null;
218
- purposes: UserConsent[];
219
- total_purposes: number;
220
- active_purposes: number;
262
+ nominator: NominatorInfo | null;
221
263
  };
222
264
 
223
- export type NominatedPurposesGroup = {
224
- nominator_info: NominatorInfo;
225
- product_groups: ProductConsentHistoryGroup[];
265
+ export type ConsentModalRecord = PurposeItem & {
266
+ product_uuid: string;
267
+ product_name: string;
268
+ product_description: string | null;
269
+ nominator: NominatorInfo | null;
226
270
  };
227
271
 
228
- export type Pagination = {
229
- total_count: number;
230
- offset: number;
231
- limit: number;
272
+ export type UserConsentDetail = {
273
+ direct: ConsentGroup[];
274
+ direct_pagination: PaginationMeta;
275
+ nominated: ConsentGroup[];
276
+ nominated_pagination: PaginationMeta;
277
+ user_status: 'ACTIVE' | 'TRANSFERRED' | null;
278
+ nominators: NominatorInfo[];
279
+ status_summary: ConsentHistoryStatusSummary;
232
280
  };
233
281
 
234
- export type UserConsentDetail = {
235
- data?: UserConsent[];
236
- product_purpose_groups?: ProductConsentHistoryGroup[];
237
- pagination: Pagination;
238
- direct_product_groups?: ProductConsentHistoryGroup[];
239
- user_status?: 'ACTIVE' | 'TRANSFERRED' | null;
240
- nominated_purposes?: NominatedPurposesGroup[];
241
- nominators?: NominatorInfo[];
242
- status_summary?: ConsentHistoryStatusSummary | null;
282
+ export type GroupPurposesOut = {
283
+ purposes: PurposeItem[];
284
+ pagination: PaginationMeta;
243
285
  };
244
286
 
245
287
  export type UserConsentResponse = {
@@ -251,6 +293,7 @@ export type UserConsentResponse = {
251
293
  export enum ConsentStatusEnum {
252
294
  ACTIVE = 'ACTIVE',
253
295
  WITHDRAWN = 'WITHDRAW',
296
+ REVOKED = 'REVOKED',
254
297
  EXPIRED = 'EXPIRED',
255
298
  DECLINED = 'DECLINED',
256
299
  }
@@ -276,5 +276,16 @@
276
276
  "removeAttachment": "সংলগ্ন আঁতৰাওক",
277
277
  "document": "নথি",
278
278
  "downloadAttachment": "{{fileName}} ডাউনলোড কৰক",
279
- "sortByColumn": "স্তম্ভ অনুসৰি সজাওক"
279
+ "sortByColumn": "স্তম্ভ অনুসৰি সজাওক",
280
+ "manage": "Manage",
281
+ "consents": "Consents",
282
+ "consentCount_one": "{{count}} consent",
283
+ "consentCount_other": "{{count}} consents",
284
+ "purposes": "Purposes",
285
+ "latestActivity": "Latest activity",
286
+ "activeWithCount": "{{count}} active",
287
+ "withdrawnWithCount": "{{count}} withdrawn",
288
+ "expiredWithCount": "{{count}} expired",
289
+ "declinedWithCount": "{{count}} declined",
290
+ "productsAndConsentsSummary": "{{products}} products, {{consents}} consents"
280
291
  }
@@ -276,5 +276,16 @@
276
276
  "removeAttachment": "संलग्नक हटाईं",
277
277
  "document": "दस्तावेज",
278
278
  "downloadAttachment": "{{fileName}} डाउनलोड करीं",
279
- "sortByColumn": "कॉलम अनुसार क्रमबद्ध करीं"
279
+ "sortByColumn": "कॉलम अनुसार क्रमबद्ध करीं",
280
+ "manage": "Manage",
281
+ "consents": "Consents",
282
+ "consentCount_one": "{{count}} consent",
283
+ "consentCount_other": "{{count}} consents",
284
+ "purposes": "Purposes",
285
+ "latestActivity": "Latest activity",
286
+ "activeWithCount": "{{count}} active",
287
+ "withdrawnWithCount": "{{count}} withdrawn",
288
+ "expiredWithCount": "{{count}} expired",
289
+ "declinedWithCount": "{{count}} declined",
290
+ "productsAndConsentsSummary": "{{products}} products, {{consents}} consents"
280
291
  }
@@ -276,5 +276,16 @@
276
276
  "removeAttachment": "সংযুক্তি সরান",
277
277
  "document": "নথি",
278
278
  "downloadAttachment": "{{fileName}} ডাউনলোড করুন",
279
- "sortByColumn": "কলাম অনুসারে সাজান"
279
+ "sortByColumn": "কলাম অনুসারে সাজান",
280
+ "manage": "Manage",
281
+ "consents": "Consents",
282
+ "consentCount_one": "{{count}} consent",
283
+ "consentCount_other": "{{count}} consents",
284
+ "purposes": "Purposes",
285
+ "latestActivity": "Latest activity",
286
+ "activeWithCount": "{{count}} active",
287
+ "withdrawnWithCount": "{{count}} withdrawn",
288
+ "expiredWithCount": "{{count}} expired",
289
+ "declinedWithCount": "{{count}} declined",
290
+ "productsAndConsentsSummary": "{{products}} products, {{consents}} consents"
280
291
  }
@@ -276,5 +276,16 @@
276
276
  "removeAttachment": "लाफाबनाय बोखार",
277
277
  "document": "फोरमान",
278
278
  "downloadAttachment": "{{fileName}} डाउनलड हो",
279
- "sortByColumn": "कलम बायदिजों दाय हो"
279
+ "sortByColumn": "कलम बायदिजों दाय हो",
280
+ "manage": "Manage",
281
+ "consents": "Consents",
282
+ "consentCount_one": "{{count}} consent",
283
+ "consentCount_other": "{{count}} consents",
284
+ "purposes": "Purposes",
285
+ "latestActivity": "Latest activity",
286
+ "activeWithCount": "{{count}} active",
287
+ "withdrawnWithCount": "{{count}} withdrawn",
288
+ "expiredWithCount": "{{count}} expired",
289
+ "declinedWithCount": "{{count}} declined",
290
+ "productsAndConsentsSummary": "{{products}} products, {{consents}} consents"
280
291
  }
@@ -276,5 +276,16 @@
276
276
  "removeAttachment": "संलग्नक हटाओ",
277
277
  "document": "दस्तावेज़",
278
278
  "downloadAttachment": "{{fileName}} डाउनलोड करो",
279
- "sortByColumn": "कॉलम अनुसार क्रमबद्ध करो"
279
+ "sortByColumn": "कॉलम अनुसार क्रमबद्ध करो",
280
+ "manage": "Manage",
281
+ "consents": "Consents",
282
+ "consentCount_one": "{{count}} consent",
283
+ "consentCount_other": "{{count}} consents",
284
+ "purposes": "Purposes",
285
+ "latestActivity": "Latest activity",
286
+ "activeWithCount": "{{count}} active",
287
+ "withdrawnWithCount": "{{count}} withdrawn",
288
+ "expiredWithCount": "{{count}} expired",
289
+ "declinedWithCount": "{{count}} declined",
290
+ "productsAndConsentsSummary": "{{products}} products, {{consents}} consents"
280
291
  }
@@ -85,6 +85,7 @@
85
85
  "manageConsentSubtitle": "Explore and manage all your consents in one place",
86
86
  "export": "Export",
87
87
  "search": "Search",
88
+ "searchConsentsProductsPurposes": "Search consents, products, purposes...",
88
89
  "status": "Status",
89
90
  "product": "Product",
90
91
  "exportConsentData": "Export consent data",
@@ -111,6 +112,7 @@
111
112
  "modifyButton": "Modify",
112
113
  "statusActive": "Active",
113
114
  "statusWithdrawn": "Withdrawn",
115
+ "statusRevoked": "Revoked",
114
116
  "statusExpired": "Expired",
115
117
  "statusDeclined": "Declined",
116
118
  "modifyConsent": "Modify Consent",
@@ -190,6 +192,8 @@
190
192
  "managing": "Managing",
191
193
  "consentVisibility": "Consent visibility",
192
194
  "managingConsentsFor": "Managing consents for:",
195
+ "nominatedBy": "Nominated by",
196
+ "loadMorePurposes": "Load more purposes",
193
197
  "statusTransferred": "Transferred",
194
198
  "nomination": "Nomination",
195
199
  "enterNomineeDetails": "Enter the nominee details",
@@ -277,5 +281,16 @@
277
281
  "total": "Total",
278
282
  "unread": "Unread",
279
283
  "viewAllNotifications": "View all notifications",
280
- "weeksAgo": "{{count}}w ago"
284
+ "weeksAgo": "{{count}}w ago",
285
+ "manage": "Manage",
286
+ "consents": "Consents",
287
+ "consentCount_one": "{{count}} consent",
288
+ "consentCount_other": "{{count}} consents",
289
+ "purposes": "Purposes",
290
+ "latestActivity": "Latest activity",
291
+ "activeWithCount": "{{count}} active",
292
+ "withdrawnWithCount": "{{count}} withdrawn",
293
+ "expiredWithCount": "{{count}} expired",
294
+ "declinedWithCount": "{{count}} declined",
295
+ "productsAndConsentsSummary": "{{products}} products, {{consents}} consents"
281
296
  }
@@ -276,5 +276,16 @@
276
276
  "removeAttachment": "जोडणी काडात",
277
277
  "document": "दस्तावेज",
278
278
  "downloadAttachment": "{{fileName}} डावनलोड करात",
279
- "sortByColumn": "स्तंभाप्रमाण क्रमबद्ध करात"
279
+ "sortByColumn": "स्तंभाप्रमाण क्रमबद्ध करात",
280
+ "manage": "Manage",
281
+ "consents": "Consents",
282
+ "consentCount_one": "{{count}} consent",
283
+ "consentCount_other": "{{count}} consents",
284
+ "purposes": "Purposes",
285
+ "latestActivity": "Latest activity",
286
+ "activeWithCount": "{{count}} active",
287
+ "withdrawnWithCount": "{{count}} withdrawn",
288
+ "expiredWithCount": "{{count}} expired",
289
+ "declinedWithCount": "{{count}} declined",
290
+ "productsAndConsentsSummary": "{{products}} products, {{consents}} consents"
280
291
  }
@@ -276,5 +276,16 @@
276
276
  "removeAttachment": "જોડાણ દૂર કરો",
277
277
  "document": "દસ્તાવેજ",
278
278
  "downloadAttachment": "{{fileName}} ડાઉનલોડ કરો",
279
- "sortByColumn": "કૉલમ દ્વારા સૉર્ટ કરો"
279
+ "sortByColumn": "કૉલમ દ્વારા સૉર્ટ કરો",
280
+ "manage": "Manage",
281
+ "consents": "Consents",
282
+ "consentCount_one": "{{count}} consent",
283
+ "consentCount_other": "{{count}} consents",
284
+ "purposes": "Purposes",
285
+ "latestActivity": "Latest activity",
286
+ "activeWithCount": "{{count}} active",
287
+ "withdrawnWithCount": "{{count}} withdrawn",
288
+ "expiredWithCount": "{{count}} expired",
289
+ "declinedWithCount": "{{count}} declined",
290
+ "productsAndConsentsSummary": "{{products}} products, {{consents}} consents"
280
291
  }
@@ -84,8 +84,11 @@
84
84
  "manageConsentSubtitle": "एक ही स्थान पर अपनी सभी सहमतियों को देखें और प्रबंधित करें",
85
85
  "export": "निर्यात",
86
86
  "search": "खोजें",
87
+ "searchConsentsProductsPurposes": "सहमतियां, उत्पाद, उद्देश्य खोजें...",
87
88
  "status": "स्थिति",
88
89
  "product": "उत्पाद",
90
+ "allStatus": "सभी स्थितियां",
91
+ "allProducts": "सभी उत्पाद",
89
92
  "exportConsentData": "सहमति डेटा निर्यात करें",
90
93
  "exportConsentDataSubtitle": "यह वर्तमान में दिखाई देने वाली पंक्तियों को CSV फाइल के रूप में डाउनलोड करेगा।",
91
94
  "exportingIncludesFilters": "निर्यात में इस तालिका दृश्य में लागू फ़िल्टर और खोज शामिल हैं।",
@@ -276,5 +279,16 @@
276
279
  "removeAttachment": "संलग्नक हटाएं",
277
280
  "document": "दस्तावेज़",
278
281
  "downloadAttachment": "{{fileName}} डाउनलोड करें",
279
- "sortByColumn": "कॉलम के अनुसार क्रमबद्ध करें"
282
+ "sortByColumn": "कॉलम के अनुसार क्रमबद्ध करें",
283
+ "manage": "प्रबंधित करें",
284
+ "consents": "सहमतियां",
285
+ "consentCount_one": "{{count}} सहमति",
286
+ "consentCount_other": "{{count}} सहमतियां",
287
+ "purposes": "उद्देश्य",
288
+ "latestActivity": "हाल की गतिविधि",
289
+ "activeWithCount": "{{count}} सक्रिय",
290
+ "withdrawnWithCount": "{{count}} वापस लिया गया",
291
+ "expiredWithCount": "{{count}} समाप्त",
292
+ "declinedWithCount": "{{count}} अस्वीकृत",
293
+ "productsAndConsentsSummary": "{{products}} उत्पाद, {{consents}} सहमतियां"
280
294
  }
@@ -276,5 +276,16 @@
276
276
  "removeAttachment": "ಲಗತ್ತನ್ನು ತೆಗೆದುಹಾಕಿ",
277
277
  "document": "ಡಾಕ್ಯುಮೆಂಟ್",
278
278
  "downloadAttachment": "{{fileName}} ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ",
279
- "sortByColumn": "ಕಾಲಮ್ ಪ್ರಕಾರ ವಿಂಗಡಿಸಿ"
279
+ "sortByColumn": "ಕಾಲಮ್ ಪ್ರಕಾರ ವಿಂಗಡಿಸಿ",
280
+ "manage": "Manage",
281
+ "consents": "Consents",
282
+ "consentCount_one": "{{count}} consent",
283
+ "consentCount_other": "{{count}} consents",
284
+ "purposes": "Purposes",
285
+ "latestActivity": "Latest activity",
286
+ "activeWithCount": "{{count}} active",
287
+ "withdrawnWithCount": "{{count}} withdrawn",
288
+ "expiredWithCount": "{{count}} expired",
289
+ "declinedWithCount": "{{count}} declined",
290
+ "productsAndConsentsSummary": "{{products}} products, {{consents}} consents"
280
291
  }
@@ -276,5 +276,16 @@
276
276
  "removeAttachment": "منسلکٕ ہٹاوِو",
277
277
  "document": "دستاویز",
278
278
  "downloadAttachment": "{{fileName}} ڈاونلوڈ کرِو",
279
- "sortByColumn": "کالم مطابق ترتیب"
279
+ "sortByColumn": "کالم مطابق ترتیب",
280
+ "manage": "Manage",
281
+ "consents": "Consents",
282
+ "consentCount_one": "{{count}} consent",
283
+ "consentCount_other": "{{count}} consents",
284
+ "purposes": "Purposes",
285
+ "latestActivity": "Latest activity",
286
+ "activeWithCount": "{{count}} active",
287
+ "withdrawnWithCount": "{{count}} withdrawn",
288
+ "expiredWithCount": "{{count}} expired",
289
+ "declinedWithCount": "{{count}} declined",
290
+ "productsAndConsentsSummary": "{{products}} products, {{consents}} consents"
280
291
  }
@@ -276,5 +276,16 @@
276
276
  "removeAttachment": "संलग्नक हटाउ",
277
277
  "document": "दस्तावेज",
278
278
  "downloadAttachment": "{{fileName}} डाउनलोड करू",
279
- "sortByColumn": "कॉलम अनुसार क्रमबद्ध करू"
279
+ "sortByColumn": "कॉलम अनुसार क्रमबद्ध करू",
280
+ "manage": "Manage",
281
+ "consents": "Consents",
282
+ "consentCount_one": "{{count}} consent",
283
+ "consentCount_other": "{{count}} consents",
284
+ "purposes": "Purposes",
285
+ "latestActivity": "Latest activity",
286
+ "activeWithCount": "{{count}} active",
287
+ "withdrawnWithCount": "{{count}} withdrawn",
288
+ "expiredWithCount": "{{count}} expired",
289
+ "declinedWithCount": "{{count}} declined",
290
+ "productsAndConsentsSummary": "{{products}} products, {{consents}} consents"
280
291
  }
@@ -276,5 +276,16 @@
276
276
  "removeAttachment": "അറ്റാച്ച്‌മെന്റ് നീക്കം ചെയ്യുക",
277
277
  "document": "രേഖ",
278
278
  "downloadAttachment": "{{fileName}} ഡൗൺലോഡ് ചെയ്യുക",
279
- "sortByColumn": "കോളം അനുസരിച്ച് അടുക്കുക"
279
+ "sortByColumn": "കോളം അനുസരിച്ച് അടുക്കുക",
280
+ "manage": "Manage",
281
+ "consents": "Consents",
282
+ "consentCount_one": "{{count}} consent",
283
+ "consentCount_other": "{{count}} consents",
284
+ "purposes": "Purposes",
285
+ "latestActivity": "Latest activity",
286
+ "activeWithCount": "{{count}} active",
287
+ "withdrawnWithCount": "{{count}} withdrawn",
288
+ "expiredWithCount": "{{count}} expired",
289
+ "declinedWithCount": "{{count}} declined",
290
+ "productsAndConsentsSummary": "{{products}} products, {{consents}} consents"
280
291
  }