@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.
- package/.turbo/turbo-build.log +24 -0
- package/CHANGELOG.md +23 -0
- package/dist/privacy-center.d.mts +100 -42
- package/dist/privacy-center.d.ts +100 -42
- package/dist/privacy-center.js +4232 -2247
- package/dist/privacy-center.mjs +4266 -2284
- package/package.json +1 -1
- package/src/RedactoPrivacyCenter/PrivacyCenterLayout.tsx +6 -10
- package/src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx +18 -17
- package/src/RedactoPrivacyCenter/api/actions.ts +52 -8
- package/src/RedactoPrivacyCenter/api/client.ts +58 -15
- package/src/RedactoPrivacyCenter/api/orgBranding.ts +9 -0
- package/src/RedactoPrivacyCenter/components/ConsentManager.tsx +729 -278
- package/src/RedactoPrivacyCenter/components/ConsentManagerCells.tsx +187 -0
- package/src/RedactoPrivacyCenter/components/ConsentManagerColumns.tsx +65 -165
- package/src/RedactoPrivacyCenter/components/ConsentManagerExpandedRow.tsx +179 -0
- package/src/RedactoPrivacyCenter/components/ConsentManagerGroupedColumns.tsx +318 -0
- package/src/RedactoPrivacyCenter/components/ConsentManagerProductCards.tsx +333 -0
- package/src/RedactoPrivacyCenter/components/ConsentManagerPurposeCards.tsx +102 -0
- package/src/RedactoPrivacyCenter/components/ConsentManagerTableSkeleton.tsx +6 -2
- package/src/RedactoPrivacyCenter/components/Form.tsx +3 -3
- package/src/RedactoPrivacyCenter/components/ModifyConsentModal.tsx +9 -6
- package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationBell.tsx +1 -1
- package/src/RedactoPrivacyCenter/components/PrivacyCenterLayout.tsx +101 -56
- package/src/RedactoPrivacyCenter/components/SideMenuBarPC/SideBarPC.tsx +16 -2
- package/src/RedactoPrivacyCenter/components/types.ts +2 -5
- package/src/RedactoPrivacyCenter/context/BrandingContext.tsx +44 -0
- package/src/RedactoPrivacyCenter/context/PageChromeContext.tsx +21 -1
- package/src/RedactoPrivacyCenter/lib/api.ts +70 -28
- package/src/RedactoPrivacyCenter/lib/consent-manager/utils.tsx +4 -2
- package/src/RedactoPrivacyCenter/lib/types.ts +79 -36
- package/src/RedactoPrivacyCenter/locales/as/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/bho/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/bn/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/brx/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/doi/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/en/translation.json +16 -1
- package/src/RedactoPrivacyCenter/locales/gom/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/gu/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/hi/translation.json +15 -1
- package/src/RedactoPrivacyCenter/locales/kn/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/ks/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/mai/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/ml/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/mni-Mtei/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/mr/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/ne/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/or/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/pa/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/sa/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/sat/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/sd/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/ta/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/te/translation.json +12 -1
- package/src/RedactoPrivacyCenter/locales/ur/translation.json +12 -1
- package/src/RedactoPrivacyCenter/styles/applyBrandingTheme.ts +66 -0
- package/src/RedactoPrivacyCenter/styles/injectStyles.ts +528 -114
- package/src/RedactoPrivacyCenter/styles/pcStyles.ts +3 -2
- package/src/RedactoPrivacyCenter/styles/variables.css +5 -42
- package/src/RedactoPrivacyCenter/table/AdvancedTable.tsx +36 -16
- package/src/RedactoPrivacyCenter/table/AdvancedTablePagination.tsx +4 -12
- package/src/RedactoPrivacyCenter/ui/Footer.tsx +4 -10
- package/src/RedactoPrivacyCenter/ui/PCInput.tsx +1 -1
- package/src/RedactoPrivacyCenter/ui/PCSelect.tsx +51 -5
- package/src/privacy-center.ts +7 -3
- package/src/RedactoPrivacyCenter/components/ThemeTransitionOverlay.tsx +0 -85
- package/src/RedactoPrivacyCenter/context/theme.tsx +0 -127
- 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
|
-
[
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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:
|
|
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
|
|
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
|
-
|
|
219
|
-
total_purposes: number;
|
|
220
|
-
active_purposes: number;
|
|
262
|
+
nominator: NominatorInfo | null;
|
|
221
263
|
};
|
|
222
264
|
|
|
223
|
-
export type
|
|
224
|
-
|
|
225
|
-
|
|
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
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
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
|
|
235
|
-
|
|
236
|
-
|
|
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
|
}
|