@redacto.io/consent-sdk-react 3.6.0 → 5.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 (103) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/index.d.mts +4 -4
  3. package/dist/index.d.ts +4 -4
  4. package/dist/index.js +36 -7
  5. package/dist/index.mjs +36 -7
  6. package/dist/privacy-center.d.mts +134 -51
  7. package/dist/privacy-center.d.ts +134 -51
  8. package/dist/privacy-center.js +6391 -2741
  9. package/dist/privacy-center.mjs +6135 -2482
  10. package/package.json +1 -1
  11. package/src/RedactoNoticeConsent/RedactoNoticeConsent.tsx +5 -5
  12. package/src/RedactoNoticeConsent/language-codes.ts +37 -1
  13. package/src/RedactoNoticeConsentInline/RedactoNoticeConsentInline.tsx +0 -3
  14. package/src/RedactoNoticeConsentInline/api/index.ts +0 -1
  15. package/src/RedactoPrivacyCenter/PrivacyCenterCaseDetailsPage.tsx +154 -0
  16. package/src/RedactoPrivacyCenter/PrivacyCenterHomePage.tsx +3 -0
  17. package/src/RedactoPrivacyCenter/PrivacyCenterLayout.tsx +81 -50
  18. package/src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx +4 -0
  19. package/src/RedactoPrivacyCenter/api/actions.ts +68 -36
  20. package/src/RedactoPrivacyCenter/api/client.ts +125 -14
  21. package/src/RedactoPrivacyCenter/components/CaseDetails/AttachmentCard.tsx +38 -0
  22. package/src/RedactoPrivacyCenter/components/CaseDetails/ChatBubble.tsx +31 -0
  23. package/src/RedactoPrivacyCenter/components/CaseDetails/DocumentRequestCard.tsx +73 -0
  24. package/src/RedactoPrivacyCenter/components/CaseDetails/MessageComposer.tsx +87 -0
  25. package/src/RedactoPrivacyCenter/components/CaseDetails/MessageItem.tsx +95 -0
  26. package/src/RedactoPrivacyCenter/components/CaseDetails/MessagesTab.tsx +147 -0
  27. package/src/RedactoPrivacyCenter/components/CaseDetails/RequestDetailsTab.tsx +171 -0
  28. package/src/RedactoPrivacyCenter/components/CaseDetails/StatusEvent.tsx +23 -0
  29. package/src/RedactoPrivacyCenter/components/CaseDetails/useFileUpload.ts +116 -0
  30. package/src/RedactoPrivacyCenter/components/CaseDetails/useMessagePolling.ts +36 -0
  31. package/src/RedactoPrivacyCenter/components/CaseDetails/utils.ts +56 -0
  32. package/src/RedactoPrivacyCenter/components/CaseDetailsModal.tsx +1 -0
  33. package/src/RedactoPrivacyCenter/components/CaseHistory.tsx +6 -13
  34. package/src/RedactoPrivacyCenter/components/ConsentManager.tsx +6 -0
  35. package/src/RedactoPrivacyCenter/components/ConsentManagerColumns.tsx +0 -1
  36. package/src/RedactoPrivacyCenter/components/DataRequest/CorrectionDataSection.tsx +2 -2
  37. package/src/RedactoPrivacyCenter/components/DataRequest/PurposeSelectionSection.tsx +2 -3
  38. package/src/RedactoPrivacyCenter/components/Form.tsx +152 -11
  39. package/src/RedactoPrivacyCenter/components/GrievanceTable.tsx +4 -6
  40. package/src/RedactoPrivacyCenter/components/GrievanceTablePagination.tsx +9 -2
  41. package/src/RedactoPrivacyCenter/components/ModifyConsentModal.tsx +1 -0
  42. package/src/RedactoPrivacyCenter/components/Pagination.tsx +12 -12
  43. package/src/RedactoPrivacyCenter/components/PrivacyCenterLayout.tsx +3 -1
  44. package/src/RedactoPrivacyCenter/components/RequestSubmit.tsx +15 -1
  45. package/src/RedactoPrivacyCenter/components/SideMenuBarPC/SideBarPC.tsx +8 -8
  46. package/src/RedactoPrivacyCenter/components/SideMenuBarPC/SideMenuPC.tsx +7 -11
  47. package/src/RedactoPrivacyCenter/components/SideMenuBarPC/types.ts +1 -1
  48. package/src/RedactoPrivacyCenter/components/activitiesColumns.tsx +1 -1
  49. package/src/RedactoPrivacyCenter/components/caseHistoryColumns.tsx +4 -24
  50. package/src/RedactoPrivacyCenter/components/constant.ts +3 -7
  51. package/src/RedactoPrivacyCenter/components/types.ts +12 -4
  52. package/src/RedactoPrivacyCenter/context/AuthContext.tsx +30 -16
  53. package/src/RedactoPrivacyCenter/context/BaseUrlContext.tsx +3 -6
  54. package/src/RedactoPrivacyCenter/context/NavigationContext.tsx +35 -3
  55. package/src/RedactoPrivacyCenter/context/OrganizationContext.tsx +1 -1
  56. package/src/RedactoPrivacyCenter/context/types.ts +14 -0
  57. package/src/RedactoPrivacyCenter/lib/api.ts +101 -3
  58. package/src/RedactoPrivacyCenter/lib/constants.ts +46 -1
  59. package/src/RedactoPrivacyCenter/lib/i18n.ts +1 -1
  60. package/src/RedactoPrivacyCenter/lib/queries.ts +106 -2
  61. package/src/RedactoPrivacyCenter/lib/types.ts +186 -1
  62. package/src/RedactoPrivacyCenter/lib/utils.ts +1 -0
  63. package/src/RedactoPrivacyCenter/locales/as/translation.json +93 -1
  64. package/src/RedactoPrivacyCenter/locales/bho/translation.json +93 -1
  65. package/src/RedactoPrivacyCenter/locales/bn/translation.json +93 -1
  66. package/src/RedactoPrivacyCenter/locales/brx/translation.json +93 -1
  67. package/src/RedactoPrivacyCenter/locales/doi/translation.json +93 -1
  68. package/src/RedactoPrivacyCenter/locales/en/translation.json +69 -2
  69. package/src/RedactoPrivacyCenter/locales/gom/translation.json +93 -1
  70. package/src/RedactoPrivacyCenter/locales/gu/translation.json +93 -1
  71. package/src/RedactoPrivacyCenter/locales/hi/translation.json +93 -1
  72. package/src/RedactoPrivacyCenter/locales/kn/translation.json +93 -1
  73. package/src/RedactoPrivacyCenter/locales/ks/translation.json +93 -1
  74. package/src/RedactoPrivacyCenter/locales/mai/translation.json +93 -1
  75. package/src/RedactoPrivacyCenter/locales/ml/translation.json +93 -1
  76. package/src/RedactoPrivacyCenter/locales/mni-Mtei/translation.json +93 -1
  77. package/src/RedactoPrivacyCenter/locales/mr/translation.json +93 -1
  78. package/src/RedactoPrivacyCenter/locales/ne/translation.json +93 -1
  79. package/src/RedactoPrivacyCenter/locales/or/translation.json +93 -1
  80. package/src/RedactoPrivacyCenter/locales/pa/translation.json +93 -1
  81. package/src/RedactoPrivacyCenter/locales/sa/translation.json +93 -1
  82. package/src/RedactoPrivacyCenter/locales/sat/translation.json +93 -1
  83. package/src/RedactoPrivacyCenter/locales/sd/translation.json +93 -1
  84. package/src/RedactoPrivacyCenter/locales/ta/translation.json +93 -1
  85. package/src/RedactoPrivacyCenter/locales/te/translation.json +93 -1
  86. package/src/RedactoPrivacyCenter/locales/ur/translation.json +93 -1
  87. package/src/RedactoPrivacyCenter/styles/injectStyles.ts +725 -0
  88. package/src/RedactoPrivacyCenter/styles/pcStyles.ts +0 -6
  89. package/src/RedactoPrivacyCenter/table/AdvancedTable.tsx +5 -3
  90. package/src/RedactoPrivacyCenter/table/AdvancedTablePagination.tsx +9 -12
  91. package/src/RedactoPrivacyCenter/ui/Footer.tsx +4 -2
  92. package/src/RedactoPrivacyCenter/ui/PCAccordion.tsx +24 -18
  93. package/src/RedactoPrivacyCenter/ui/PCCollapse.tsx +30 -20
  94. package/src/RedactoPrivacyCenter/ui/PCInput.tsx +17 -13
  95. package/src/RedactoPrivacyCenter/ui/PCLoader.tsx +3 -2
  96. package/src/RedactoPrivacyCenter/ui/PCModal.tsx +3 -1
  97. package/src/RedactoPrivacyCenter/ui/PCPopover.tsx +0 -2
  98. package/src/RedactoPrivacyCenter/ui/PCSelect.tsx +10 -4
  99. package/src/RedactoPrivacyCenter/ui/PCTable.tsx +44 -32
  100. package/src/RedactoPrivacyCenter/ui/PCText.tsx +5 -3
  101. package/src/RedactoPrivacyCenter/ui/StatusBadge.tsx +0 -2
  102. package/src/RedactoPrivacyCenter/ui/ThemeToggle.tsx +4 -2
  103. package/src/privacy-center.ts +1 -0
@@ -1,7 +1,15 @@
1
- import { useQuery } from '@tanstack/react-query';
2
- import { fetchCaseHistory, type AuthContext } from './api';
1
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
2
+ import {
3
+ fetchCaseHistory,
4
+ getCaseMessages,
5
+ sendCaseMessage,
6
+ uploadCaseDocument,
7
+ submitDocumentForRequest,
8
+ type AuthContext,
9
+ } from './api';
3
10
  import { useBaseUrl } from '../context/BaseUrlContext';
4
11
  import { useCurrentLanguage } from './useCurrentLanguage';
12
+ import type { SendCaseMessageInput, SubmitDocumentForRequestInput } from './types';
5
13
 
6
14
  export const useCaseHistory = (
7
15
  organizationId: string | undefined,
@@ -28,3 +36,99 @@ export const useCaseHistory = (
28
36
  retry: 1,
29
37
  });
30
38
  };
39
+
40
+ // ─── Case Communication ──────────────────────────────────────────────────────
41
+
42
+ export const useCaseMessages = (
43
+ organizationId: string | undefined,
44
+ workspaceId: string | undefined,
45
+ caseUuid: string | undefined,
46
+ authContext?: AuthContext
47
+ ) => {
48
+ const { consentClient } = useBaseUrl();
49
+ const accessToken = authContext?.accessToken;
50
+
51
+ return useQuery({
52
+ queryKey: ['caseMessages', organizationId, workspaceId, caseUuid, accessToken],
53
+ queryFn: async () => {
54
+ if (!organizationId || !workspaceId || !caseUuid) return [];
55
+ const result = await getCaseMessages(organizationId, workspaceId, caseUuid, authContext, consentClient);
56
+ if (result === null) throw new Error('Failed to fetch case messages');
57
+ return result;
58
+ },
59
+ // Sort ascending (oldest → newest) regardless of server return order.
60
+ // ISO 8601 strings sort correctly as strings, so we fall back to that
61
+ // if Date parsing fails (avoids NaN comparisons leaving order undefined).
62
+ select: (data) =>
63
+ [...data].sort((a, b) => {
64
+ const ta = new Date(a.created_at).getTime();
65
+ const tb = new Date(b.created_at).getTime();
66
+ if (isNaN(ta) || isNaN(tb)) return a.created_at < b.created_at ? -1 : 1;
67
+ return ta - tb;
68
+ }),
69
+ enabled: !!organizationId && !!workspaceId && !!caseUuid && !!consentClient,
70
+ retry: 1,
71
+ });
72
+ };
73
+
74
+ export const useSendCaseMessage = (
75
+ organizationId: string | undefined,
76
+ workspaceId: string | undefined,
77
+ caseUuid: string | undefined,
78
+ authContext?: AuthContext
79
+ ) => {
80
+ const { consentClient } = useBaseUrl();
81
+ const queryClient = useQueryClient();
82
+
83
+ return useMutation({
84
+ mutationFn: async ({ body, documentUuids }: SendCaseMessageInput) => {
85
+ if (!organizationId || !workspaceId || !caseUuid) throw new Error('Missing params');
86
+ const result = await sendCaseMessage(organizationId, workspaceId, caseUuid, body, documentUuids, authContext, consentClient);
87
+ if (result === null) throw new Error('Send case message failed');
88
+ return result;
89
+ },
90
+ onSuccess: () => {
91
+ queryClient.invalidateQueries({ queryKey: ['caseMessages', organizationId, workspaceId, caseUuid] });
92
+ },
93
+ });
94
+ };
95
+
96
+ export const useUploadCaseDocument = (
97
+ organizationId: string | undefined,
98
+ workspaceId: string | undefined,
99
+ caseUuid: string | undefined,
100
+ authContext?: AuthContext
101
+ ) => {
102
+ const { consentClient } = useBaseUrl();
103
+
104
+ return useMutation({
105
+ mutationFn: async (file: File) => {
106
+ if (!organizationId || !workspaceId || !caseUuid) throw new Error('Missing params');
107
+ const result = await uploadCaseDocument(organizationId, workspaceId, caseUuid, file, authContext, consentClient);
108
+ if (result === null) throw new Error('Upload case document failed');
109
+ return result;
110
+ },
111
+ });
112
+ };
113
+
114
+ export const useSubmitDocumentForRequest = (
115
+ organizationId: string | undefined,
116
+ workspaceId: string | undefined,
117
+ caseUuid: string | undefined,
118
+ authContext?: AuthContext
119
+ ) => {
120
+ const { consentClient } = useBaseUrl();
121
+ const queryClient = useQueryClient();
122
+
123
+ return useMutation({
124
+ mutationFn: async ({ requestEventUuid, documentUuid, body }: SubmitDocumentForRequestInput) => {
125
+ if (!organizationId || !workspaceId || !caseUuid) throw new Error('Missing params');
126
+ const result = await submitDocumentForRequest(organizationId, workspaceId, caseUuid, requestEventUuid, documentUuid, body, authContext, consentClient);
127
+ if (result === null) throw new Error('Submit document for request failed');
128
+ return result;
129
+ },
130
+ onSuccess: () => {
131
+ queryClient.invalidateQueries({ queryKey: ['caseMessages', organizationId, workspaceId, caseUuid] });
132
+ },
133
+ });
134
+ };
@@ -133,6 +133,7 @@ export type UserDataRequest = {
133
133
  };
134
134
  time_period: number | null;
135
135
  requestor_note: string;
136
+ revoke_consent_on_fulfilment?: boolean;
136
137
  };
137
138
 
138
139
  export type CreateCaseResponse = {
@@ -319,6 +320,13 @@ export type ActivityBadgeStatus =
319
320
  | 'info'
320
321
  | 'pending';
321
322
 
323
+ export type CaseRequestDetails = {
324
+ purposes: RawPurposeWrapper[];
325
+ correction_data: UpdateCorrectionDataItem[];
326
+ grievance_types?: GrievanceTypeElement[];
327
+ nomination_data?: NominationData;
328
+ };
329
+
322
330
  export type CaseRequest = {
323
331
  uuid: string;
324
332
  case_id: string;
@@ -331,7 +339,13 @@ export type CaseRequest = {
331
339
  created_at: string;
332
340
  completed_at?: string;
333
341
  due_date?: string;
334
- request_details?: any;
342
+ request_details?: CaseRequestDetails;
343
+ };
344
+
345
+ export type RequestDetailsTabProps = {
346
+ selectedCase: CaseRequest;
347
+ request_details: CaseRequestDetails | undefined;
348
+ requestTypeLabel: string;
335
349
  };
336
350
 
337
351
  export type CaseHistoryDetail = {
@@ -344,3 +358,174 @@ export type CaseHistoryResponse = {
344
358
  status: string;
345
359
  detail: CaseRequest[];
346
360
  };
361
+
362
+ // ─── Case Communication ──────────────────────────────────────────────────────
363
+
364
+ export type MessageType =
365
+ | 'message_sent'
366
+ | 'document_requested'
367
+ | 'document_submitted'
368
+ | 'document_replaced'
369
+ | 'document_replacement_requested'
370
+ | 'document_approved'
371
+ | 'document_rejected';
372
+
373
+ export type DocumentRequestStatus =
374
+ | 'pending'
375
+ | 'under_review'
376
+ | 'approved'
377
+ | 'rejected'
378
+ | 'replacement_requested';
379
+
380
+ export type FileUrlMap = {
381
+ url?: string;
382
+ download_url?: string;
383
+ };
384
+
385
+ export type MessageDocument = {
386
+ uuid: string;
387
+ file_name: string | null;
388
+ content_type: string | null;
389
+ file_size: number | null;
390
+ file_url: FileUrlMap | null;
391
+ };
392
+
393
+ export type DocumentRequestMetadata = {
394
+ title: string;
395
+ accepted_document: string;
396
+ document_request_status: DocumentRequestStatus;
397
+ document_request_uuid: string | null;
398
+ rejection_reason: string;
399
+ };
400
+
401
+ export type CaseMessage = {
402
+ uuid: string;
403
+ case_uuid: string;
404
+ sender_role: 'data_fiduciary' | 'data_principal';
405
+ triggered_by_email: string;
406
+ created_at: string;
407
+ body: string;
408
+ document_uuids: string[];
409
+ documents: MessageDocument[];
410
+ message_type: MessageType;
411
+ document_request_metadata: DocumentRequestMetadata | null;
412
+ };
413
+
414
+ export type TabId = 'messages' | 'request-details';
415
+
416
+ export type PendingUpload = { uuid: string; file_name: string; file_size: number };
417
+
418
+ // ─── Case Communication server action params ────────────────────────────────
419
+
420
+ export type CaseActionBaseParams = {
421
+ organizationId: string;
422
+ workspaceId: string;
423
+ caseUuid: string;
424
+ authToken?: string;
425
+ consentClient?: ReturnType<typeof import('../api/client').createConsentClient>;
426
+ };
427
+
428
+ export type GetCaseMessagesParams = CaseActionBaseParams;
429
+
430
+ export type SendCaseMessageParams = CaseActionBaseParams & {
431
+ body: string;
432
+ documentUuids: string[];
433
+ };
434
+
435
+ export type UploadCaseDocumentParams = CaseActionBaseParams & {
436
+ file: File;
437
+ };
438
+
439
+ export type SubmitDocumentForRequestParams = CaseActionBaseParams & {
440
+ requestEventUuid: string;
441
+ documentUuid: string;
442
+ body: string;
443
+ };
444
+
445
+ export type GetCaseDocumentParams = CaseActionBaseParams & {
446
+ documentUuid: string;
447
+ };
448
+
449
+ export type UploadDocumentResponse = {
450
+ uuid: string;
451
+ suid: string;
452
+ file_name: string;
453
+ file_type: string;
454
+ content_type: string;
455
+ file_size: number;
456
+ created_at: string;
457
+ is_public: boolean;
458
+ file: string;
459
+ file_hash: string | null;
460
+ status: string;
461
+ allow_ai_processing: boolean;
462
+ metadata: Record<string, string> | null;
463
+ };
464
+
465
+ export type MessageItemProps = Readonly<{
466
+ message: CaseMessage;
467
+ onUploadForRequest: (requestEventUuid: string) => void;
468
+ isSubmittingForRequest: boolean;
469
+ }>;
470
+
471
+ export type ChatBubbleProps = Readonly<{
472
+ message: CaseMessage;
473
+ isPrincipal: boolean;
474
+ senderLabel: string;
475
+ timestamp: string;
476
+ }>;
477
+
478
+ export type AttachmentCardProps = Readonly<{
479
+ doc: MessageDocument;
480
+ }>
481
+
482
+ export type DocumentRequestCardProps = Readonly<{
483
+ message: CaseMessage;
484
+ onUpload: (requestEventUuid: string) => void;
485
+ isSubmitting: boolean;
486
+ }>
487
+
488
+ export type StatusEventProps = Readonly<{
489
+ icon: React.ReactNode;
490
+ color: string;
491
+ bgColor: string;
492
+ borderColor: string;
493
+ text: string;
494
+ subText?: string;
495
+ timestamp: string;
496
+ }>;
497
+
498
+ export type MessagesTabProps = Readonly<{
499
+ caseUuid: string;
500
+ }>;
501
+
502
+ export type MessageComposerProps = Readonly<{
503
+ messageText: string;
504
+ onMessageTextChange: (text: string) => void;
505
+ pendingUpload: PendingUpload | null;
506
+ onRemovePendingUpload: () => void;
507
+ onAttachClick: () => void;
508
+ onSend: () => void;
509
+ isSending: boolean;
510
+ isUploading: boolean;
511
+ }>;
512
+
513
+ export type CaseStatusVariant =
514
+ | 'success'
515
+ | 'error'
516
+ | 'warning'
517
+ | 'info'
518
+ | 'secondary';
519
+
520
+
521
+ export type SendCaseMessageInput = Readonly<{
522
+ body: string; documentUuids: string[]
523
+ }>;
524
+
525
+ export type SubmitDocumentForRequestInput = Readonly<{
526
+ requestEventUuid: string; documentUuid: string; body: string
527
+ }>;
528
+
529
+ export type DocumentRequestStatusInfo = Readonly<{ labelKey: string; color: string }>;
530
+
531
+ export type CaseDetailsTab = Readonly<{ id: TabId; label: string }>;
@@ -317,6 +317,7 @@ export const signOutPrivacyCenter = (): void => {
317
317
  'pc_workspace_id',
318
318
  'pc_current_page',
319
319
  'pc_grievance_view',
320
+ 'pc_selected_case_uuid',
320
321
  ];
321
322
  privacyCenterKeys.forEach((key) => {
322
323
  sessionStorage.removeItem(key);
@@ -20,6 +20,17 @@
20
20
  "saveDraft": "খচৰা সংৰক্ষণ কৰক",
21
21
  "submit": "জমা কৰক",
22
22
  "confirmCheckBox": "মই নিশ্চিত কৰোঁ যে মই ডাটা প্ৰিন্সিপালৰ হৈ এই অনুৰোধ দাখিল কৰিবলৈ অধিকৃত আছোঁ",
23
+ "revokeConsentModalTitle": "মচি পেলোৱাৰ সৈতে সন্মতিও প্ৰত্যাহাৰ কৰিব নেকি?",
24
+ "revokeConsentModalQuestion": "এই মচি পেলোৱাৰ অনুৰোধৰ উদ্দেশ্য(সমূহ)ৰ বাবে আপোনাৰ সক্ৰিয় সন্মতি আছে। অনুৰোধ পূৰণ হ'লে আপুনি এই সন্মতিসমূহো প্ৰত্যাহাৰ কৰিব বিচাৰে নেকি?",
25
+ "revokeConsentModalPurposesLabel": "আপোনাৰ মচি পেলোৱাৰ অনুৰোধত থকা উদ্দেশ্যসমূহ",
26
+ "revokeConsentModalConsentActive": "সন্মতি সক্ৰিয়",
27
+ "revokeConsentModalIfYesLabel": "আপুনি হয় বাছনি কৰিলে:",
28
+ "revokeConsentModalIfYesBody": "প্ৰতিষ্ঠানে আপোনাৰ মচি পেলোৱাৰ অনুৰোধ পূৰণ কৰাৰ পিছত, ওপৰৰ উদ্দেশ্য(সমূহ)ৰ বাবে আপোনাৰ সন্মতি স্বয়ংক্ৰিয়ভাৱে প্ৰত্যাহাৰ কৰা হ'ব আৰু আপোনাক ইমেইলৰ জৰিয়তে জনোৱা হ'ব।",
29
+ "revokeConsentModalYourPurposes": "আপুনি বাছনি কৰা উদ্দেশ্যসমূহ",
30
+ "revokeConsentModalAndMore": "আৰু {{count}} টা অধিক",
31
+ "revokeConsentYes": "হয়, সন্মতিও প্ৰত্যাহাৰ কৰক",
32
+ "revokeConsentNo": "নহয়, কেৱল মচি পেলাওক",
33
+ "erasureConsentRevokeNotice": "{{purposes}}ৰ বাবে আপোনাৰ সন্মতি আপোনাৰ অনুৰোধ পূৰণ হোৱাৰ লগে লগে স্বয়ংক্ৰিয়ভাৱে প্ৰত্যাহাৰ কৰা হ'ব।",
23
34
  "requestSubmittedSuccessfully": "অনুৰোধ সফলভাৱে দাখিল কৰা হৈছে",
24
35
  "thankYouForSubmittingYourRequest": "আপোনাৰ অনুৰোধ দাখিল কৰাৰ বাবে ধন্যবাদ",
25
36
  "caseID": "কেছ আইডি",
@@ -184,5 +195,86 @@
184
195
  "nomineeEmail": "মনোনীত ব্যক্তিৰ ইমেইল",
185
196
  "nomineeEmailPlaceholder": "nominee@example.com",
186
197
  "nomineeMobile": "মনোনীত ব্যক্তিৰ মোবাইল",
187
- "nomineeMobilePlaceholder": "+919876543210"
198
+ "nomineeMobilePlaceholder": "+919876543210",
199
+ "descriptionLabel": "বিৱৰণ",
200
+ "messages": "বাৰ্তা",
201
+ "myDocuments": "মোৰ নথি",
202
+ "submitted": "দাখিল কৰা হৈছে",
203
+ "responseDue": "প্ৰতিক্ৰিয়া বাকী",
204
+ "secureMessagesNotice": "আপোনাৰ বাৰ্তাসমূহ কেৱল গোপনীয়তা দলক সুৰক্ষিতভাৱে প্ৰেৰণ কৰা হয়।",
205
+ "noMessagesYet": "এতিয়ালৈকে কোনো বাৰ্তা নাই",
206
+ "writeMessagePlaceholder": "গোপনীয়তা দলক বাৰ্তা লিখক...",
207
+ "attachFile": "ফাইল সংলগ্ন কৰক",
208
+ "send": "প্ৰেৰণ কৰক",
209
+ "messagesSecureFooter": "বাৰ্তাসমূহ কেৱল গোপনীয়তা দলক সুৰক্ষিতভাৱে প্ৰেৰণ কৰা হয়",
210
+ "noDocumentsYet": "এতিয়ালৈকে কোনো নথি নাই",
211
+ "errorLoadingMessages": "বাৰ্তা লোড কৰিবলৈ বিফল। অনুগ্ৰহ কৰি পুনৰ চেষ্টা কৰক।",
212
+ "refreshMessages": "বাৰ্তা ৰিফ্ৰেশ্ব কৰক",
213
+ "senderYou": "আপুনি",
214
+ "senderPrivacyTeam": "গোপনীয়তা দল",
215
+ "documentAccepted": "আপোনাৰ নথি গ্ৰহণ কৰা হৈছে",
216
+ "documentRejected": "আপোনাৰ নথি প্ৰত্যাখ্যান কৰা হৈছে",
217
+ "replacementRequested": "এটা সলনি নথিৰ অনুৰোধ কৰা হৈছে",
218
+ "documentRequestedLabel": "নথি অনুৰোধ: {{title}}",
219
+ "acceptedLabel": "গৃহীত: {{accepted}}",
220
+ "uploadAndSubmit": "আপলোড আৰু দাখিল কৰক",
221
+ "rejectionReasonLabel": "কাৰণ: {{reason}}",
222
+ "docStatusPending": "বিচাৰাধীন",
223
+ "docStatusUnderReview": "পৰ্যালোচনাধীন",
224
+ "docStatusApproved": "অনুমোদিত",
225
+ "docStatusRejected": "প্ৰত্যাখ্যাত",
226
+ "docStatusReplacementRequested": "সলনি অনুৰোধ",
227
+ "notificationHub": "জাননী কেন্দ্ৰ",
228
+ "notificationHubSubtitle": "আপোনাৰ সকলো গোপনীয়তা-সম্পৰ্কীয় জাননী এটা ঠাইত",
229
+ "backToManageConsent": "সন্মতি ব্যৱস্থাপনালৈ উভতি যাওক",
230
+ "notifications": "জাননী",
231
+ "total": "মুঠ",
232
+ "unread": "অপঠিত",
233
+ "actionNeeded": "পদক্ষেপ প্ৰয়োজন",
234
+ "acknowledged": "স্বীকৃত",
235
+ "markAllAsRead": "সকলোকে পঠিত বুলি চিহ্নিত কৰক",
236
+ "refreshNotifications": "জাননী ৰিফ্ৰেশ্ব কৰক",
237
+ "all": "সকলো",
238
+ "consent": "সন্মতি",
239
+ "requests": "অনুৰোধ",
240
+ "system": "চিষ্টেম",
241
+ "loadingNotifications": "জাননী লোড হৈ আছে...",
242
+ "noNotificationsInCategory": "এই শ্ৰেণীত কোনো জাননী নাই।",
243
+ "noNotificationsYet": "এতিয়ালৈকে কোনো জাননী নাই।",
244
+ "previous": "পূৰ্বৱৰ্তী",
245
+ "next": "পৰৱৰ্তী",
246
+ "viewAllNotifications": "সকলো জাননী চাওক",
247
+ "justNow": "এইমাত্ৰ",
248
+ "minutesAgo": "{{count}}মি আগতে",
249
+ "hoursAgo": "{{count}}ঘ আগতে",
250
+ "daysAgo": "{{count}}দি আগতে",
251
+ "weeksAgo": "{{count}}স আগতে",
252
+ "paginationRange": "{{start}}–{{end}} / {{total}}",
253
+ "poweredBy": "দ্বাৰা পৰিচালিত",
254
+ "redactoLogoAlt": "ৰেডাক্টো ল'গো",
255
+ "switchToDarkMode": "ডাৰ্ক মোডলৈ সলনি কৰক",
256
+ "switchToLightMode": "লাইট মোডলৈ সলনি কৰক",
257
+ "loadingEllipsis": "লোড হৈ আছে...",
258
+ "loading": "লোড হৈ আছে",
259
+ "clearInput": "ইনপুট মচক",
260
+ "selectPlaceholder": "বাছনি কৰক...",
261
+ "searchPlaceholder": "সন্ধান কৰক...",
262
+ "noOptionsFound": "কোনো বিকল্প পোৱা নগ'ল",
263
+ "clearSelection": "বাছনি মচক",
264
+ "closeModal": "মডেল বন্ধ কৰক",
265
+ "totalRecords": "মুঠ: {{count}} ৰেকৰ্ড",
266
+ "goToFirstPage": "প্ৰথম পৃষ্ঠালৈ যাওক",
267
+ "goToPreviousPage": "পূৰ্বৱৰ্তী পৃষ্ঠালৈ যাওক",
268
+ "goToNextPage": "পৰৱৰ্তী পৃষ্ঠালৈ যাওক",
269
+ "goToLastPage": "শেষ পৃষ্ঠালৈ যাওক",
270
+ "openSidebarMenu": "ছাইডবাৰ মেনু খোলক",
271
+ "closeSidebarMenu": "ছাইডবাৰ মেনু বন্ধ কৰক",
272
+ "expandSidebar": "ছাইডবাৰ বিস্তাৰ কৰক",
273
+ "collapseSidebar": "ছাইডবাৰ সংকুচিত কৰক",
274
+ "currentValuePlaceholder": "বৰ্তমান মান",
275
+ "updatedValuePlaceholder": "আপডেট কৰা মান",
276
+ "removeAttachment": "সংলগ্ন আঁতৰাওক",
277
+ "document": "নথি",
278
+ "downloadAttachment": "{{fileName}} ডাউনলোড কৰক",
279
+ "sortByColumn": "স্তম্ভ অনুসৰি সজাওক"
188
280
  }
@@ -20,6 +20,17 @@
20
20
  "saveDraft": "ड्राफ्ट सहेजें",
21
21
  "submit": "जमा करीं",
22
22
  "confirmCheckBox": "हम पुष्टि करीला कि हम डेटा प्रिंसिपल के ओर से ई अनुरोध दर्ज करे खातिर अधिकृत बानी",
23
+ "revokeConsentModalTitle": "मिटावे के साथ सहमति भी वापस लीं?",
24
+ "revokeConsentModalQuestion": "एह मिटावे के अनुरोध के उद्देश्य(न) खातिर रउआ के सक्रिय सहमति बा। का रउआ अनुरोध पूरा होखला पर ई सहमति भी वापस लिहल चाहब?",
25
+ "revokeConsentModalPurposesLabel": "रउआ के मिटावे के अनुरोध में उद्देश्य",
26
+ "revokeConsentModalConsentActive": "सहमति सक्रिय",
27
+ "revokeConsentModalIfYesLabel": "अगर रउआ हाँ चुनब:",
28
+ "revokeConsentModalIfYesBody": "जब संगठन रउआ के मिटावे के अनुरोध पूरा कर दी, त ऊपर के उद्देश्य(न) खातिर रउआ के सहमति स्वतः वापस ले लिहल जाई आ रउआ के ईमेल से सूचित कइल जाई।",
29
+ "revokeConsentModalYourPurposes": "रउआ के चुनल उद्देश्य",
30
+ "revokeConsentModalAndMore": "आ {{count}} गो अउरी",
31
+ "revokeConsentYes": "हाँ, सहमति भी वापस लीं",
32
+ "revokeConsentNo": "नाहीं, खाली मिटाईं",
33
+ "erasureConsentRevokeNotice": "{{purposes}} खातिर रउआ के सहमति रउआ के अनुरोध पूरा होते स्वतः वापस ले लिहल जाई।",
23
34
  "requestSubmittedSuccessfully": "अनुरोध सफलतापूर्वक जमा भइल",
24
35
  "thankYouForSubmittingYourRequest": "रउरा अनुरोध जमा करे खातिर धन्यवाद",
25
36
  "caseID": "मामला आईडी",
@@ -184,5 +195,86 @@
184
195
  "nomineeEmail": "नामांकित व्यक्ति के ईमेल",
185
196
  "nomineeEmailPlaceholder": "nominee@example.com",
186
197
  "nomineeMobile": "नामांकित व्यक्ति के मोबाइल",
187
- "nomineeMobilePlaceholder": "+919876543210"
198
+ "nomineeMobilePlaceholder": "+919876543210",
199
+ "descriptionLabel": "विवरण",
200
+ "messages": "संदेश",
201
+ "myDocuments": "हमार दस्तावेज",
202
+ "submitted": "जमा भइल",
203
+ "responseDue": "जवाब बाकी बा",
204
+ "secureMessagesNotice": "रउआ संदेश बस गोपनीयता टीम के सुरक्षित तरीका से भेजल जाला।",
205
+ "noMessagesYet": "अबहीं तक कवनो संदेश नइखे",
206
+ "writeMessagePlaceholder": "गोपनीयता टीम के संदेश लिखीं...",
207
+ "attachFile": "फाइल जोड़ीं",
208
+ "send": "भेजीं",
209
+ "messagesSecureFooter": "संदेश बस गोपनीयता टीम के सुरक्षित तरीका से भेजल जाला",
210
+ "noDocumentsYet": "अबहीं तक कवनो दस्तावेज नइखे",
211
+ "errorLoadingMessages": "संदेश लोड करे में असफल। कृपया फिर से कोसिस करीं।",
212
+ "refreshMessages": "संदेश ताजा करीं",
213
+ "senderYou": "रउआ",
214
+ "senderPrivacyTeam": "गोपनीयता टीम",
215
+ "documentAccepted": "रउआ दस्तावेज स्वीकार भइल",
216
+ "documentRejected": "रउआ दस्तावेज रद्द भइल",
217
+ "replacementRequested": "बदली दस्तावेज के अनुरोध भइल बा",
218
+ "documentRequestedLabel": "दस्तावेज अनुरोध: {{title}}",
219
+ "acceptedLabel": "स्वीकार: {{accepted}}",
220
+ "uploadAndSubmit": "अपलोड आ जमा करीं",
221
+ "rejectionReasonLabel": "कारण: {{reason}}",
222
+ "docStatusPending": "लंबित",
223
+ "docStatusUnderReview": "समीक्षा में",
224
+ "docStatusApproved": "मंजूर",
225
+ "docStatusRejected": "रद्द",
226
+ "docStatusReplacementRequested": "बदली अनुरोध",
227
+ "notificationHub": "सूचना केंद्र",
228
+ "notificationHubSubtitle": "रउआ सब गोपनीयता-संबंधित सूचना एक जगह",
229
+ "backToManageConsent": "सहमति प्रबंधन पर वापस जाईं",
230
+ "notifications": "सूचना",
231
+ "total": "कुल",
232
+ "unread": "अनपढ़ल",
233
+ "actionNeeded": "कार्रवाई जरूरी बा",
234
+ "acknowledged": "मानल गइल",
235
+ "markAllAsRead": "सब के पढ़ल चिन्हित करीं",
236
+ "refreshNotifications": "सूचना ताजा करीं",
237
+ "all": "सब",
238
+ "consent": "सहमति",
239
+ "requests": "अनुरोध",
240
+ "system": "सिस्टम",
241
+ "loadingNotifications": "सूचना लोड हो रहल बा...",
242
+ "noNotificationsInCategory": "एह श्रेणी में कवनो सूचना नइखे।",
243
+ "noNotificationsYet": "अबहीं तक कवनो सूचना नइखे।",
244
+ "previous": "पिछला",
245
+ "next": "अगिला",
246
+ "viewAllNotifications": "सब सूचना देखीं",
247
+ "justNow": "अबहीं",
248
+ "minutesAgo": "{{count}}मि पहिले",
249
+ "hoursAgo": "{{count}}घं पहिले",
250
+ "daysAgo": "{{count}}दि पहिले",
251
+ "weeksAgo": "{{count}}ह पहिले",
252
+ "paginationRange": "{{start}}–{{end}} / {{total}}",
253
+ "poweredBy": "के द्वारा संचालित",
254
+ "redactoLogoAlt": "रेडैक्टो लोगो",
255
+ "switchToDarkMode": "डार्क मोड पर जाईं",
256
+ "switchToLightMode": "लाइट मोड पर जाईं",
257
+ "loadingEllipsis": "लोड हो रहल बा...",
258
+ "loading": "लोड हो रहल बा",
259
+ "clearInput": "इनपुट साफ करीं",
260
+ "selectPlaceholder": "चुनीं...",
261
+ "searchPlaceholder": "खोजीं...",
262
+ "noOptionsFound": "कवनो विकल्प ना मिलल",
263
+ "clearSelection": "चयन साफ करीं",
264
+ "closeModal": "मोडल बंद करीं",
265
+ "totalRecords": "कुल: {{count}} रिकॉर्ड",
266
+ "goToFirstPage": "पहिला पन्ना पर जाईं",
267
+ "goToPreviousPage": "पिछला पन्ना पर जाईं",
268
+ "goToNextPage": "अगिला पन्ना पर जाईं",
269
+ "goToLastPage": "आखिरी पन्ना पर जाईं",
270
+ "openSidebarMenu": "साइडबार मेनू खोलीं",
271
+ "closeSidebarMenu": "साइडबार मेनू बंद करीं",
272
+ "expandSidebar": "साइडबार बड़ा करीं",
273
+ "collapseSidebar": "साइडबार छोट करीं",
274
+ "currentValuePlaceholder": "अबहीं के मान",
275
+ "updatedValuePlaceholder": "अपडेट भइल मान",
276
+ "removeAttachment": "संलग्नक हटाईं",
277
+ "document": "दस्तावेज",
278
+ "downloadAttachment": "{{fileName}} डाउनलोड करीं",
279
+ "sortByColumn": "कॉलम अनुसार क्रमबद्ध करीं"
188
280
  }
@@ -20,6 +20,17 @@
20
20
  "saveDraft": "খসড়া সংরক্ষণ করুন",
21
21
  "submit": "জমা দিন",
22
22
  "confirmCheckBox": "আমি নিশ্চিত করছি যে আমি ডেটা প্রিন্সিপালের হয়ে এই অনুরোধটি উত্থাপন করার জন্য অনুমোদিত৷",
23
+ "revokeConsentModalTitle": "মুছে ফেলার সঙ্গে সম্মতিও প্রত্যাহার করবেন?",
24
+ "revokeConsentModalQuestion": "এই মুছে ফেলার অনুরোধের উদ্দেশ্য(গুলি)র জন্য আপনার সক্রিয় সম্মতি রয়েছে। অনুরোধ পূর্ণ হলে আপনি কি এই সম্মতিগুলিও প্রত্যাহার করতে চান?",
25
+ "revokeConsentModalPurposesLabel": "আপনার মুছে ফেলার অনুরোধে উদ্দেশ্যসমূহ",
26
+ "revokeConsentModalConsentActive": "সম্মতি সক্রিয়",
27
+ "revokeConsentModalIfYesLabel": "আপনি হ্যাঁ নির্বাচন করলে:",
28
+ "revokeConsentModalIfYesBody": "প্রতিষ্ঠানটি আপনার মুছে ফেলার অনুরোধ পূর্ণ করার পরে, উপরের উদ্দেশ্য(গুলি)র জন্য আপনার সম্মতি স্বয়ংক্রিয়ভাবে প্রত্যাহার করা হবে এবং আপনাকে ইমেলের মাধ্যমে অবহিত করা হবে।",
29
+ "revokeConsentModalYourPurposes": "আপনার নির্বাচিত উদ্দেশ্যসমূহ",
30
+ "revokeConsentModalAndMore": "এবং আরও {{count}} টি",
31
+ "revokeConsentYes": "হ্যাঁ, সম্মতিও প্রত্যাহার করুন",
32
+ "revokeConsentNo": "না, শুধুমাত্র মুছুন",
33
+ "erasureConsentRevokeNotice": "{{purposes}}-এর জন্য আপনার সম্মতি অনুরোধ পূর্ণ হওয়ার সাথে সাথেই স্বয়ংক্রিয়ভাবে প্রত্যাহার করা হবে।",
23
34
  "requestSubmittedSuccessfully": "অনুরোধ সফলভাবে জমা দেওয়া হয়েছে",
24
35
  "thankYouForSubmittingYourRequest": "আপনার অনুরোধ জমা দেওয়ার জন্য আপনাকে ধন্যবাদ",
25
36
  "caseID": "কেস আইডি",
@@ -184,5 +195,86 @@
184
195
  "nomineeEmail": "মনোনীত ব্যক্তির ইমেইল",
185
196
  "nomineeEmailPlaceholder": "nominee@example.com",
186
197
  "nomineeMobile": "মনোনীত ব্যক্তির মোবাইল",
187
- "nomineeMobilePlaceholder": "+919876543210"
198
+ "nomineeMobilePlaceholder": "+919876543210",
199
+ "descriptionLabel": "বিবরণ",
200
+ "messages": "বার্তা",
201
+ "myDocuments": "আমার নথি",
202
+ "submitted": "জমা দেওয়া হয়েছে",
203
+ "responseDue": "প্রতিক্রিয়া বাকি",
204
+ "secureMessagesNotice": "আপনার বার্তাগুলি শুধুমাত্র গোপনীয়তা দলের কাছে নিরাপদে পাঠানো হয়।",
205
+ "noMessagesYet": "এখনো কোনো বার্তা নেই",
206
+ "writeMessagePlaceholder": "গোপনীয়তা দলকে একটি বার্তা লিখুন...",
207
+ "attachFile": "ফাইল সংযুক্ত করুন",
208
+ "send": "পাঠান",
209
+ "messagesSecureFooter": "বার্তাগুলি শুধুমাত্র গোপনীয়তা দলের কাছে নিরাপদে পাঠানো হয়",
210
+ "noDocumentsYet": "এখনো কোনো নথি নেই",
211
+ "errorLoadingMessages": "বার্তা লোড করতে ব্যর্থ। অনুগ্রহ করে আবার চেষ্টা করুন।",
212
+ "refreshMessages": "বার্তা রিফ্রেশ করুন",
213
+ "senderYou": "আপনি",
214
+ "senderPrivacyTeam": "গোপনীয়তা দল",
215
+ "documentAccepted": "আপনার নথি গৃহীত হয়েছে",
216
+ "documentRejected": "আপনার নথি প্রত্যাখ্যান করা হয়েছে",
217
+ "replacementRequested": "একটি প্রতিস্থাপন নথির অনুরোধ করা হয়েছে",
218
+ "documentRequestedLabel": "নথি অনুরোধ করা হয়েছে: {{title}}",
219
+ "acceptedLabel": "গৃহীত: {{accepted}}",
220
+ "uploadAndSubmit": "আপলোড ও জমা দিন",
221
+ "rejectionReasonLabel": "কারণ: {{reason}}",
222
+ "docStatusPending": "মুলতুবি",
223
+ "docStatusUnderReview": "পর্যালোচনাধীন",
224
+ "docStatusApproved": "অনুমোদিত",
225
+ "docStatusRejected": "প্রত্যাখ্যাত",
226
+ "docStatusReplacementRequested": "প্রতিস্থাপন অনুরোধ করা হয়েছে",
227
+ "notificationHub": "বিজ্ঞপ্তি কেন্দ্র",
228
+ "notificationHubSubtitle": "আপনার সমস্ত গোপনীয়তা-সম্পর্কিত বিজ্ঞপ্তি এক জায়গায়",
229
+ "backToManageConsent": "সম্মতি ব্যবস্থাপনায় ফিরে যান",
230
+ "notifications": "বিজ্ঞপ্তি",
231
+ "total": "মোট",
232
+ "unread": "অপঠিত",
233
+ "actionNeeded": "পদক্ষেপ প্রয়োজন",
234
+ "acknowledged": "স্বীকৃত",
235
+ "markAllAsRead": "সব পঠিত হিসাবে চিহ্নিত করুন",
236
+ "refreshNotifications": "বিজ্ঞপ্তি রিফ্রেশ করুন",
237
+ "all": "সব",
238
+ "consent": "সম্মতি",
239
+ "requests": "অনুরোধ",
240
+ "system": "সিস্টেম",
241
+ "loadingNotifications": "বিজ্ঞপ্তি লোড হচ্ছে...",
242
+ "noNotificationsInCategory": "এই বিভাগে কোনো বিজ্ঞপ্তি নেই।",
243
+ "noNotificationsYet": "এখনো কোনো বিজ্ঞপ্তি নেই।",
244
+ "previous": "পূর্ববর্তী",
245
+ "next": "পরবর্তী",
246
+ "viewAllNotifications": "সব বিজ্ঞপ্তি দেখুন",
247
+ "justNow": "এইমাত্র",
248
+ "minutesAgo": "{{count}}মি আগে",
249
+ "hoursAgo": "{{count}}ঘ আগে",
250
+ "daysAgo": "{{count}}দি আগে",
251
+ "weeksAgo": "{{count}}স আগে",
252
+ "paginationRange": "{{start}}–{{end}} / {{total}}",
253
+ "poweredBy": "পরিচালিত",
254
+ "redactoLogoAlt": "রেডাক্টো লোগো",
255
+ "switchToDarkMode": "ডার্ক মোডে স্যুইচ করুন",
256
+ "switchToLightMode": "লাইট মোডে স্যুইচ করুন",
257
+ "loadingEllipsis": "লোড হচ্ছে...",
258
+ "loading": "লোড হচ্ছে",
259
+ "clearInput": "ইনপুট মুছুন",
260
+ "selectPlaceholder": "নির্বাচন করুন...",
261
+ "searchPlaceholder": "অনুসন্ধান...",
262
+ "noOptionsFound": "কোনো বিকল্প পাওয়া যায়নি",
263
+ "clearSelection": "নির্বাচন মুছুন",
264
+ "closeModal": "মোডাল বন্ধ করুন",
265
+ "totalRecords": "মোট: {{count}} রেকর্ড",
266
+ "goToFirstPage": "প্রথম পৃষ্ঠায় যান",
267
+ "goToPreviousPage": "পূর্ববর্তী পৃষ্ঠায় যান",
268
+ "goToNextPage": "পরবর্তী পৃষ্ঠায় যান",
269
+ "goToLastPage": "শেষ পৃষ্ঠায় যান",
270
+ "openSidebarMenu": "সাইডবার মেনু খুলুন",
271
+ "closeSidebarMenu": "সাইডবার মেনু বন্ধ করুন",
272
+ "expandSidebar": "সাইডবার বিস্তৃত করুন",
273
+ "collapseSidebar": "সাইডবার সংকুচিত করুন",
274
+ "currentValuePlaceholder": "বর্তমান মান",
275
+ "updatedValuePlaceholder": "আপডেট করা মান",
276
+ "removeAttachment": "সংযুক্তি সরান",
277
+ "document": "নথি",
278
+ "downloadAttachment": "{{fileName}} ডাউনলোড করুন",
279
+ "sortByColumn": "কলাম অনুসারে সাজান"
188
280
  }