@redacto.io/consent-sdk-react-native 5.0.0-beta.0 → 5.0.0-beta.10
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/README.md +90 -0
- package/dist/chunk-B2TXWC2C.mjs +60 -0
- package/dist/index.d.mts +28 -2
- package/dist/index.d.ts +28 -2
- package/dist/index.js +196 -55
- package/dist/index.mjs +153 -56
- package/dist/privacy-center.d.mts +147 -63
- package/dist/privacy-center.d.ts +147 -63
- package/dist/privacy-center.js +1570 -647
- package/dist/privacy-center.mjs +1530 -644
- package/package.json +1 -1
- package/dist/chunk-Y6FXYEAI.mjs +0 -10
package/dist/privacy-center.js
CHANGED
|
@@ -121,10 +121,10 @@ __export(privacy_center_exports, {
|
|
|
121
121
|
module.exports = __toCommonJS(privacy_center_exports);
|
|
122
122
|
|
|
123
123
|
// src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx
|
|
124
|
-
var
|
|
124
|
+
var import_react45 = require("react");
|
|
125
125
|
var import_react_query2 = require("@tanstack/react-query");
|
|
126
|
-
var
|
|
127
|
-
var
|
|
126
|
+
var import_react_i18next31 = require("react-i18next");
|
|
127
|
+
var import_react_native66 = require("react-native");
|
|
128
128
|
|
|
129
129
|
// src/RedactoPrivacyCenter/lib/i18n.ts
|
|
130
130
|
var import_i18next = __toESM(require("i18next"));
|
|
@@ -541,7 +541,14 @@ var translation_default = {
|
|
|
541
541
|
submittingAs: "Submitting as {{email}}",
|
|
542
542
|
tapToChooseFile: "Tap to choose a file",
|
|
543
543
|
view: "View",
|
|
544
|
-
whatDoYouNeed: "What do you need?"
|
|
544
|
+
whatDoYouNeed: "What do you need?",
|
|
545
|
+
sessionExpiredTitle: "Your session has expired",
|
|
546
|
+
sessionExpiredDescription: "Please sign in again to continue.",
|
|
547
|
+
chooseYourProfile: "Choose your profile",
|
|
548
|
+
loginIdentifierLinkedToMultipleProfiles: "The login identifier is linked to more than one profile. Choose the one you want to view.",
|
|
549
|
+
userIdLabel: "User ID: {{id}}",
|
|
550
|
+
signingInEllipsis: "Signing in\u2026",
|
|
551
|
+
switchProfile: "Switch profile"
|
|
545
552
|
};
|
|
546
553
|
|
|
547
554
|
// src/RedactoPrivacyCenter/locales/as/translation.json
|
|
@@ -955,7 +962,14 @@ var translation_default2 = {
|
|
|
955
962
|
submittingAs: "{{email}} \u09B9\u09BF\u099A\u09BE\u09AA\u09C7 \u09A6\u09BE\u0996\u09BF\u09B2 \u0995\u09F0\u09BF \u0986\u099B\u09C7",
|
|
956
963
|
tapToChooseFile: "\u09AB\u09BE\u0987\u09B2 \u09AC\u09BE\u099B\u09BF\u09AC\u09B2\u09C8 \u099F\u09BF\u09AA\u0995",
|
|
957
964
|
view: "\u099A\u09BE\u0993\u0995",
|
|
958
|
-
whatDoYouNeed: "\u0986\u09AA\u09CB\u09A8\u09BE\u0995 \u0995\u09BF \u09B2\u09BE\u0997\u09C7?"
|
|
965
|
+
whatDoYouNeed: "\u0986\u09AA\u09CB\u09A8\u09BE\u0995 \u0995\u09BF \u09B2\u09BE\u0997\u09C7?",
|
|
966
|
+
sessionExpiredTitle: "\u0986\u09AA\u09CB\u09A8\u09BE\u09F0 \u099B\u09C7\u099A\u09A8 \u09B6\u09C7\u09B7 \u09B9\u09C8\u099B\u09C7",
|
|
967
|
+
sessionExpiredDescription: "\u0985\u09AC\u09CD\u09AF\u09BE\u09B9\u09A4 \u09F0\u09BE\u0996\u09BF\u09AC\u09B2\u09C8 \u0985\u09A8\u09C1\u0997\u09CD\u09F0\u09B9 \u0995\u09F0\u09BF \u09AA\u09C1\u09A8\u09F0 \u099B\u09BE\u0987\u09A8 \u0987\u09A8 \u0995\u09F0\u0995\u0964",
|
|
968
|
+
chooseYourProfile: "\u0986\u09AA\u09CB\u09A8\u09BE\u09F0 \u09AA\u09CD\u09F0'\u09AB\u09BE\u0987\u09B2 \u09AC\u09BE\u099B\u09A8\u09BF \u0995\u09F0\u0995",
|
|
969
|
+
loginIdentifierLinkedToMultipleProfiles: "\u09B2\u0997\u0987\u09A8 \u0986\u0987\u09A1\u09BF \u098F\u0995\u09BE\u09A7\u09BF\u0995 \u09AA\u09CD\u09F0'\u09AB\u09BE\u0987\u09B2\u09F0 \u09B8\u09C8\u09A4\u09C7 \u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4\u0964 \u0986\u09AA\u09C1\u09A8\u09BF \u099A\u09BE\u09AC \u09AC\u09BF\u099A\u09F0\u09BE\u099F\u09CB \u09AC\u09BE\u099B\u09A8\u09BF \u0995\u09F0\u0995\u0964",
|
|
970
|
+
userIdLabel: "\u09AC\u09CD\u09AF\u09F1\u09B9\u09BE\u09F0\u0995\u09BE\u09F0\u09C0 \u0986\u0987\u09A1\u09BF: {{id}}",
|
|
971
|
+
signingInEllipsis: "\u099B\u09BE\u0987\u09A8 \u0987\u09A8 \u09B9\u09C8 \u0986\u099B\u09C7\u2026",
|
|
972
|
+
switchProfile: "\u09AA\u09CD\u09F0'\u09AB\u09BE\u0987\u09B2 \u09B8\u09B2\u09A8\u09BF \u0995\u09F0\u0995"
|
|
959
973
|
};
|
|
960
974
|
|
|
961
975
|
// src/RedactoPrivacyCenter/locales/bn/translation.json
|
|
@@ -1369,7 +1383,14 @@ var translation_default3 = {
|
|
|
1369
1383
|
submittingAs: "{{email}} \u09B9\u09BF\u09B8\u09BE\u09AC\u09C7 \u099C\u09AE\u09BE \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u099A\u09CD\u099B\u09C7",
|
|
1370
1384
|
tapToChooseFile: "\u09AB\u09BE\u0987\u09B2 \u09AC\u09C7\u099B\u09C7 \u09A8\u09BF\u09A4\u09C7 \u099F\u09CD\u09AF\u09BE\u09AA \u0995\u09B0\u09C1\u09A8",
|
|
1371
1385
|
view: "\u09A6\u09C7\u0996\u09C1\u09A8",
|
|
1372
|
-
whatDoYouNeed: "\u0986\u09AA\u09A8\u09BE\u09B0 \u0995\u09C0 \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8?"
|
|
1386
|
+
whatDoYouNeed: "\u0986\u09AA\u09A8\u09BE\u09B0 \u0995\u09C0 \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8?",
|
|
1387
|
+
sessionExpiredTitle: "\u0986\u09AA\u09A8\u09BE\u09B0 \u09B8\u09C7\u09B6\u09A8 \u09AE\u09C7\u09AF\u09BC\u09BE\u09A6 \u09B6\u09C7\u09B7 \u09B9\u09AF\u09BC\u09C7 \u0997\u09C7\u099B\u09C7",
|
|
1388
|
+
sessionExpiredDescription: "\u099A\u09BE\u09B2\u09BF\u09AF\u09BC\u09C7 \u09AF\u09C7\u09A4\u09C7 \u0985\u09A8\u09C1\u0997\u09CD\u09B0\u09B9 \u0995\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u09B8\u09BE\u0987\u09A8 \u0987\u09A8 \u0995\u09B0\u09C1\u09A8\u0964",
|
|
1389
|
+
chooseYourProfile: "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u09AC\u09C7\u099B\u09C7 \u09A8\u09BF\u09A8",
|
|
1390
|
+
loginIdentifierLinkedToMultipleProfiles: "\u09B2\u0997\u0987\u09A8 \u0986\u0987\u09A1\u09BF \u098F\u0995\u09BE\u09A7\u09BF\u0995 \u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2\u09C7\u09B0 \u09B8\u09BE\u09A5\u09C7 \u09AF\u09C1\u0995\u09CD\u09A4\u0964 \u0986\u09AA\u09A8\u09BF \u09AF\u09C7\u099F\u09BF \u09A6\u09C7\u0996\u09A4\u09C7 \u099A\u09BE\u09A8 \u09B8\u09C7\u099F\u09BF \u09AC\u09C7\u099B\u09C7 \u09A8\u09BF\u09A8\u0964",
|
|
1391
|
+
userIdLabel: "\u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0\u09B0 \u0986\u0987\u09A1\u09BF: {{id}}",
|
|
1392
|
+
signingInEllipsis: "\u09B8\u09BE\u0987\u09A8 \u0987\u09A8 \u09B9\u099A\u09CD\u099B\u09C7\u2026",
|
|
1393
|
+
switchProfile: "\u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09A8 \u0995\u09B0\u09C1\u09A8"
|
|
1373
1394
|
};
|
|
1374
1395
|
|
|
1375
1396
|
// src/RedactoPrivacyCenter/locales/brx/translation.json
|
|
@@ -1783,7 +1804,14 @@ var translation_default4 = {
|
|
|
1783
1804
|
submittingAs: "{{email}} \u092E\u0939\u0930\u0948 \u0917\u0925\u093E\u092F\u0917\u093E\u0938\u093F\u0928\u094B",
|
|
1784
1805
|
tapToChooseFile: "\u092B\u093E\u0907\u0932 \u0938\u093E\u092F\u0916\u0928\u094B \u091F\u0947\u092C \u0916\u093E\u0932\u093E\u092E",
|
|
1785
1806
|
view: "\u0928\u093E\u092F",
|
|
1786
|
-
whatDoYouNeed: "\u0928\u094B\u0902\u0925\u093E\u0902\u0928\u094B \u092E\u093E \u0917\u094B\u0928\u093E\u0902?"
|
|
1807
|
+
whatDoYouNeed: "\u0928\u094B\u0902\u0925\u093E\u0902\u0928\u094B \u092E\u093E \u0917\u094B\u0928\u093E\u0902?",
|
|
1808
|
+
sessionExpiredTitle: "\u0928\u094B\u0902\u0925\u093E\u0902\u0928\u093F \u0938\u0947\u0938\u0928 \u091C\u094B\u092C\u092C\u093E\u092F",
|
|
1809
|
+
sessionExpiredDescription: "\u0938\u093E\u0932\u093E\u092F\u0928\u094B \u0925\u093E\u0916\u093E\u092F \u0905\u0928\u0928\u093E\u0928\u0948 \u092B\u093F\u0928 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0916\u093E\u0932\u093E\u092E\u0964",
|
|
1810
|
+
chooseYourProfile: "\u0928\u094B\u0902\u0925\u093E\u0902\u0928\u093F \u092A\u094D\u0930\u092B\u093E\u0907\u0932 \u0938\u093E\u092F\u0916",
|
|
1811
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0932\u0949\u0917\u093F\u0928 \u0906\u0908\u0921\u0940 \u092E\u094B\u0928\u0938\u0947\u0928\u093F\u0916\u094D\u0930\u0941\u0907 \u092C\u093E\u0902\u0938\u093F\u0928 \u092A\u094D\u0930\u092B\u093E\u0907\u0932\u091C\u094B\u0902 \u0928\u093E\u0902\u091C\u093E\u092C \u0926\u0902\u0964 \u0928\u094B\u0902\u0925\u093E\u0919\u093E \u0928\u093E\u092F\u0928\u094B \u0932\u0941\u092C\u0948\u092F\u094B\u092C\u094D\u0932\u093E \u092C\u0947\u0916\u094C \u0938\u093E\u092F\u0916\u0964",
|
|
1812
|
+
userIdLabel: "\u092F\u0942\u091C\u0930 \u0906\u0908\u0921\u0940: {{id}}",
|
|
1813
|
+
signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u091C\u093E\u092F\u0917\u093E\u0938\u093F\u0928\u094B \u0926\u0902\u2026",
|
|
1814
|
+
switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u0938\u094B\u0932\u093E\u092F"
|
|
1787
1815
|
};
|
|
1788
1816
|
|
|
1789
1817
|
// src/RedactoPrivacyCenter/locales/doi/translation.json
|
|
@@ -2197,7 +2225,14 @@ var translation_default5 = {
|
|
|
2197
2225
|
submittingAs: "{{email}} \u0926\u0947 \u0930\u0942\u092A \u091A \u091C\u092E\u093E\u0902 \u0915\u0930\u0926\u0947",
|
|
2198
2226
|
tapToChooseFile: "\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u0928\u0947 \u0906\u0938\u094D\u0924\u0948 \u091F\u0948\u092A \u0915\u0930\u094B",
|
|
2199
2227
|
view: "\u0926\u093F\u0915\u094D\u0916\u094B",
|
|
2200
|
-
whatDoYouNeed: "\u0924\u0941\u0938\u0947\u0902 \u0915\u0947\u0939\u094D \u091A\u093E\u0939\u093F\u0926\u093E?"
|
|
2228
|
+
whatDoYouNeed: "\u0924\u0941\u0938\u0947\u0902 \u0915\u0947\u0939\u094D \u091A\u093E\u0939\u093F\u0926\u093E?",
|
|
2229
|
+
sessionExpiredTitle: "\u0924\u0941\u0902\u0926\u093E \u0938\u0924\u094D\u0930 \u0916\u0924\u092E \u0939\u094B\u0908 \u0917\u0947\u0906 \u0910",
|
|
2230
|
+
sessionExpiredDescription: "\u091C\u093E\u0930\u0940 \u0930\u0915\u094D\u0916\u0928\u0947 \u0906\u0938\u094D\u0924\u0948 \u0915\u0943\u092A\u093E \u0915\u0930\u093F\u092F\u0948 \u092B\u093F\u0930\u0940 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u094B\u0964",
|
|
2231
|
+
chooseYourProfile: "\u0905\u092A\u0928\u0940 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u094B",
|
|
2232
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0932\u0949\u0917\u093F\u0928 \u0906\u0908\u0921\u0940 \u0907\u0915 \u0915\u094B\u0932\u093E \u092E\u0924\u093E \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932\u0947\u0902 \u0915\u0928\u094D\u0928\u0948 \u091C\u0941\u0921\u093C\u094D\u092F\u093E \u0926\u093E \u0910\u0964 \u091C\u0947\u0939\u094D\u0921\u093C\u0940 \u0924\u0941\u0938\u0947\u0902 \u0926\u093F\u0915\u094D\u0916\u0928\u0940 \u0910 \u0913\u0939\u094D \u091A\u0941\u0928\u094B\u0964",
|
|
2233
|
+
userIdLabel: "\u092A\u094D\u0930\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0906\u0908\u0921\u0940: {{id}}",
|
|
2234
|
+
signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0939\u094B\u0906 \u0915\u0930\u0926\u093E \u0910\u2026",
|
|
2235
|
+
switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u092C\u0926\u0932\u094B"
|
|
2201
2236
|
};
|
|
2202
2237
|
|
|
2203
2238
|
// src/RedactoPrivacyCenter/locales/gom/translation.json
|
|
@@ -2611,7 +2646,14 @@ var translation_default6 = {
|
|
|
2611
2646
|
submittingAs: "{{email}} \u092E\u094D\u0939\u0942\u0923 \u0938\u093E\u0926\u0930 \u0915\u0930\u0924\u093E",
|
|
2612
2647
|
tapToChooseFile: "\u092B\u093E\u092F\u0932 \u0928\u093F\u0935\u0921\u092A\u093E\u0915 \u091F\u0945\u092A \u0915\u0930\u093E\u0924",
|
|
2613
2648
|
view: "\u092A\u0933\u092F\u093E\u0924",
|
|
2614
|
-
whatDoYouNeed: "\u0924\u0941\u092E\u0915\u093E\u0902 \u0915\u093F\u0924\u0947\u0902 \u091C\u093E\u092F?"
|
|
2649
|
+
whatDoYouNeed: "\u0924\u0941\u092E\u0915\u093E\u0902 \u0915\u093F\u0924\u0947\u0902 \u091C\u093E\u092F?",
|
|
2650
|
+
sessionExpiredTitle: "\u0924\u0941\u092E\u091A\u0947\u0902 \u0938\u0924\u094D\u0930 \u0938\u094B\u0902\u092A\u0932\u093E\u0902",
|
|
2651
|
+
sessionExpiredDescription: "\u092B\u0941\u0921\u0947\u0902 \u0935\u091A\u092A\u093E\u0915 \u0909\u092A\u0915\u093E\u0930 \u0915\u0930\u0942\u0928 \u092A\u0930\u0924\u0942\u0928 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u093E\u0924.",
|
|
2652
|
+
chooseYourProfile: "\u0924\u0941\u092E\u091A\u0947\u0902 \u092A\u094D\u0930\u094B\u092B\u093E\u092F\u0932 \u0928\u093F\u0935\u0921\u093E\u0924",
|
|
2653
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0932\u0949\u0917\u093F\u0928 \u0906\u092F\u0921\u0940 \u090F\u0915\u093E\u092A\u0930\u0938 \u091A\u0921 \u092A\u094D\u0930\u094B\u092B\u093E\u092F\u0932\u093E\u0902\u0915 \u091C\u094B\u0921\u0932\u093E. \u0924\u0941\u092E\u0915\u093E\u0902 \u091C\u0947\u0902 \u092A\u0933\u094B\u0935\u092A\u093E\u0915 \u091C\u093E\u092F \u0924\u0947\u0902 \u0928\u093F\u0935\u0921\u093E\u0924.",
|
|
2654
|
+
userIdLabel: "\u0935\u093E\u092A\u0930\u092A\u0940 \u0906\u092F\u0921\u0940: {{id}}",
|
|
2655
|
+
signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u091C\u093E\u0935\u0928 \u0906\u0938\u093E\u2026",
|
|
2656
|
+
switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u092F\u0932 \u092C\u0926\u0932\u093E"
|
|
2615
2657
|
};
|
|
2616
2658
|
|
|
2617
2659
|
// src/RedactoPrivacyCenter/locales/gu/translation.json
|
|
@@ -3025,7 +3067,14 @@ var translation_default7 = {
|
|
|
3025
3067
|
submittingAs: "{{email}} \u0AA4\u0AB0\u0AC0\u0A95\u0AC7 \u0AB8\u0AAC\u0AAE\u0ABF\u0A9F \u0A95\u0AB0\u0AC0 \u0AB0\u0AB9\u0ACD\u0AAF\u0ABE \u0A9B\u0ACB",
|
|
3026
3068
|
tapToChooseFile: "\u0AAB\u0ABE\u0A87\u0AB2 \u0AAA\u0AB8\u0A82\u0AA6 \u0A95\u0AB0\u0AB5\u0ABE \u0A9F\u0AC5\u0AAA \u0A95\u0AB0\u0ACB",
|
|
3027
3069
|
view: "\u0A9C\u0AC1\u0A93",
|
|
3028
|
-
whatDoYouNeed: "\u0AA4\u0AAE\u0AA8\u0AC7 \u0AB6\u0AC1\u0A82 \u0A9C\u0ACB\u0A88\u0A8F \u0A9B\u0AC7?"
|
|
3070
|
+
whatDoYouNeed: "\u0AA4\u0AAE\u0AA8\u0AC7 \u0AB6\u0AC1\u0A82 \u0A9C\u0ACB\u0A88\u0A8F \u0A9B\u0AC7?",
|
|
3071
|
+
sessionExpiredTitle: "\u0AA4\u0AAE\u0ABE\u0AB0\u0AC1\u0A82 \u0AB8\u0AA4\u0ACD\u0AB0 \u0AB8\u0AAE\u0ABE\u0AAA\u0ACD\u0AA4 \u0AA5\u0A88 \u0A97\u0AAF\u0AC1\u0A82 \u0A9B\u0AC7",
|
|
3072
|
+
sessionExpiredDescription: "\u0A9A\u0ABE\u0AB2\u0AC1 \u0AB0\u0ABE\u0A96\u0AB5\u0ABE \u0AAE\u0ABE\u0A9F\u0AC7 \u0A95\u0AC3\u0AAA\u0ABE \u0A95\u0AB0\u0AC0\u0AA8\u0AC7 \u0AAB\u0AB0\u0AC0\u0AA5\u0AC0 \u0AB8\u0ABE\u0A87\u0AA8 \u0A87\u0AA8 \u0A95\u0AB0\u0ACB.",
|
|
3073
|
+
chooseYourProfile: "\u0AA4\u0AAE\u0ABE\u0AB0\u0AC0 \u0AAA\u0ACD\u0AB0\u0ACB\u0AAB\u0ABE\u0A87\u0AB2 \u0AAA\u0AB8\u0A82\u0AA6 \u0A95\u0AB0\u0ACB",
|
|
3074
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0AB2\u0ACB\u0A97\u0ABF\u0AA8 \u0A86\u0A88\u0AA1\u0AC0 \u0A8F\u0A95 \u0A95\u0AB0\u0AA4\u0ABE\u0A82 \u0AB5\u0AA7\u0AC1 \u0AAA\u0ACD\u0AB0\u0ACB\u0AAB\u0ABE\u0A87\u0AB2 \u0AB8\u0ABE\u0AA5\u0AC7 \u0A9C\u0ACB\u0AA1\u0ABE\u0AAF\u0AC7\u0AB2 \u0A9B\u0AC7. \u0AA4\u0AAE\u0AC7 \u0A9C\u0AC7 \u0A9C\u0ACB\u0AB5\u0ABE \u0AAE\u0ABE\u0A82\u0A97\u0ACB \u0A9B\u0ACB \u0AA4\u0AC7 \u0AAA\u0AB8\u0A82\u0AA6 \u0A95\u0AB0\u0ACB.",
|
|
3075
|
+
userIdLabel: "\u0AB5\u0AAA\u0AB0\u0ABE\u0AB6\u0A95\u0AB0\u0ACD\u0AA4\u0ABE \u0A86\u0A88\u0AA1\u0AC0: {{id}}",
|
|
3076
|
+
signingInEllipsis: "\u0AB8\u0ABE\u0A87\u0AA8 \u0A87\u0AA8 \u0AA5\u0A88 \u0AB0\u0AB9\u0ACD\u0AAF\u0AC1\u0A82 \u0A9B\u0AC7\u2026",
|
|
3077
|
+
switchProfile: "\u0AAA\u0ACD\u0AB0\u0ACB\u0AAB\u0ABE\u0A87\u0AB2 \u0AAC\u0AA6\u0AB2\u0ACB"
|
|
3029
3078
|
};
|
|
3030
3079
|
|
|
3031
3080
|
// src/RedactoPrivacyCenter/locales/hi/translation.json
|
|
@@ -3439,7 +3488,14 @@ var translation_default8 = {
|
|
|
3439
3488
|
submittingAs: "{{email}} \u0915\u0947 \u0930\u0942\u092A \u092E\u0947\u0902 \u0938\u092C\u092E\u093F\u091F \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902",
|
|
3440
3489
|
tapToChooseFile: "\u092B\u093C\u093E\u0907\u0932 \u091A\u0941\u0928\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u091F\u0948\u092A \u0915\u0930\u0947\u0902",
|
|
3441
3490
|
view: "\u0926\u0947\u0916\u0947\u0902",
|
|
3442
|
-
whatDoYouNeed: "\u0906\u092A\u0915\u094B \u0915\u094D\u092F\u093E \u091A\u093E\u0939\u093F\u090F?"
|
|
3491
|
+
whatDoYouNeed: "\u0906\u092A\u0915\u094B \u0915\u094D\u092F\u093E \u091A\u093E\u0939\u093F\u090F?",
|
|
3492
|
+
sessionExpiredTitle: "\u0906\u092A\u0915\u093E \u0938\u0924\u094D\u0930 \u0938\u092E\u093E\u092A\u094D\u0924 \u0939\u094B \u0917\u092F\u093E \u0939\u0948",
|
|
3493
|
+
sessionExpiredDescription: "\u091C\u093E\u0930\u0940 \u0930\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0915\u0943\u092A\u092F\u093E \u092B\u093F\u0930 \u0938\u0947 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u0947\u0902\u0964",
|
|
3494
|
+
chooseYourProfile: "\u0905\u092A\u0928\u0940 \u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932 \u091A\u0941\u0928\u0947\u0902",
|
|
3495
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0932\u0949\u0917\u093F\u0928 \u0906\u0908\u0921\u0940 \u090F\u0915 \u0938\u0947 \u0905\u0927\u093F\u0915 \u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932 \u0938\u0947 \u091C\u0941\u0921\u093C\u093E \u0939\u0948\u0964 \u091C\u093F\u0938\u0947 \u0906\u092A \u0926\u0947\u0916\u0928\u093E \u091A\u093E\u0939\u0924\u0947 \u0939\u0948\u0902 \u0909\u0938\u0947 \u091A\u0941\u0928\u0947\u0902\u0964",
|
|
3496
|
+
userIdLabel: "\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0906\u0908\u0921\u0940: {{id}}",
|
|
3497
|
+
signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026",
|
|
3498
|
+
switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932 \u092C\u0926\u0932\u0947\u0902"
|
|
3443
3499
|
};
|
|
3444
3500
|
|
|
3445
3501
|
// src/RedactoPrivacyCenter/locales/kn/translation.json
|
|
@@ -3853,7 +3909,14 @@ var translation_default9 = {
|
|
|
3853
3909
|
submittingAs: "{{email}} \u0C86\u0C97\u0CBF \u0CB8\u0CB2\u0CCD\u0CB2\u0CBF\u0CB8\u0CB2\u0CBE\u0C97\u0CC1\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CC6",
|
|
3854
3910
|
tapToChooseFile: "\u0CAB\u0CC8\u0CB2\u0CCD \u0C86\u0CAF\u0CCD\u0C95\u0CC6\u0CAE\u0CBE\u0CA1\u0CB2\u0CC1 \u0C9F\u0CCD\u0CAF\u0CBE\u0CAA\u0CCD \u0CAE\u0CBE\u0CA1\u0CBF",
|
|
3855
3911
|
view: "\u0CB5\u0CC0\u0C95\u0CCD\u0CB7\u0CBF\u0CB8\u0CBF",
|
|
3856
|
-
whatDoYouNeed: "\u0CA8\u0CBF\u0CAE\u0C97\u0CC6 \u0C8F\u0CA8\u0CC1 \u0CAC\u0CC7\u0C95\u0CC1?"
|
|
3912
|
+
whatDoYouNeed: "\u0CA8\u0CBF\u0CAE\u0C97\u0CC6 \u0C8F\u0CA8\u0CC1 \u0CAC\u0CC7\u0C95\u0CC1?",
|
|
3913
|
+
sessionExpiredTitle: "\u0CA8\u0CBF\u0CAE\u0CCD\u0CAE \u0CB8\u0CC6\u0CB7\u0CA8\u0CCD \u0C85\u0CB5\u0CA7\u0CBF \u0CAE\u0CC1\u0C97\u0CBF\u0CA6\u0CBF\u0CA6\u0CC6",
|
|
3914
|
+
sessionExpiredDescription: "\u0CAE\u0CC1\u0C82\u0CA6\u0CC1\u0CB5\u0CB0\u0CBF\u0CB8\u0CB2\u0CC1 \u0CA6\u0CAF\u0CB5\u0CBF\u0C9F\u0CCD\u0C9F\u0CC1 \u0CAE\u0CA4\u0CCD\u0CA4\u0CC6 \u0CB8\u0CC8\u0CA8\u0CCD \u0C87\u0CA8\u0CCD \u0CAE\u0CBE\u0CA1\u0CBF.",
|
|
3915
|
+
chooseYourProfile: "\u0CA8\u0CBF\u0CAE\u0CCD\u0CAE \u0CAA\u0CCD\u0CB0\u0CCA\u0CAB\u0CC8\u0CB2\u0CCD \u0C86\u0CAF\u0CCD\u0C95\u0CC6\u0CAE\u0CBE\u0CA1\u0CBF",
|
|
3916
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0CB2\u0CBE\u0C97\u0CBF\u0CA8\u0CCD \u0C90\u0CA1\u0CBF \u0C92\u0C82\u0CA6\u0C95\u0CCD\u0C95\u0CBF\u0C82\u0CA4 \u0CB9\u0CC6\u0C9A\u0CCD\u0C9A\u0CC1 \u0CAA\u0CCD\u0CB0\u0CCA\u0CAB\u0CC8\u0CB2\u0CCD\u200C\u0C97\u0CB3\u0CBF\u0C97\u0CC6 \u0CB2\u0CBF\u0C82\u0C95\u0CCD \u0C86\u0C97\u0CBF\u0CA6\u0CC6. \u0CA8\u0CC0\u0CB5\u0CC1 \u0CB5\u0CC0\u0C95\u0CCD\u0CB7\u0CBF\u0CB8\u0CB2\u0CC1 \u0CAC\u0CAF\u0CB8\u0CC1\u0CB5\u0CC1\u0CA6\u0CA8\u0CCD\u0CA8\u0CC1 \u0C86\u0CAF\u0CCD\u0C95\u0CC6\u0CAE\u0CBE\u0CA1\u0CBF.",
|
|
3917
|
+
userIdLabel: "\u0CAC\u0CB3\u0C95\u0CC6\u0CA6\u0CBE\u0CB0 \u0C90\u0CA1\u0CBF: {{id}}",
|
|
3918
|
+
signingInEllipsis: "\u0CB8\u0CC8\u0CA8\u0CCD \u0C87\u0CA8\u0CCD \u0C86\u0C97\u0CC1\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CC6\u2026",
|
|
3919
|
+
switchProfile: "\u0CAA\u0CCD\u0CB0\u0CCA\u0CAB\u0CC8\u0CB2\u0CCD \u0CAC\u0CA6\u0CB2\u0CBE\u0CAF\u0CBF\u0CB8\u0CBF"
|
|
3857
3920
|
};
|
|
3858
3921
|
|
|
3859
3922
|
// src/RedactoPrivacyCenter/locales/ks/translation.json
|
|
@@ -4267,7 +4330,14 @@ var translation_default10 = {
|
|
|
4267
4330
|
submittingAs: "{{email}} \u067E\u0620\u0658\u0679\u06BE \u062C\u0645\u0639 \u06A9\u0631\u0627\u0646",
|
|
4268
4331
|
tapToChooseFile: "\u0641\u0627\u06CC\u0644 \u0698\u0627\u0631\u0646\u06C1 \u062E\u0672\u0637\u0631\u0655 \u0679\u06CC\u067E \u06A9\u0631\u06CC\u0648",
|
|
4269
4332
|
view: "\u0648\u064F\u0686\u06BE\u0650\u0648",
|
|
4270
|
-
whatDoYouNeed: "\u062A\u0648\u06C1\u0650 \u06A9\u06CC\u0627 \u0636\u0631\u0648\u0631\u062A \u0686\u06BE\u064F\u061F"
|
|
4333
|
+
whatDoYouNeed: "\u062A\u0648\u06C1\u0650 \u06A9\u06CC\u0627 \u0636\u0631\u0648\u0631\u062A \u0686\u06BE\u064F\u061F",
|
|
4334
|
+
sessionExpiredTitle: "\u062A\u064F\u06C1\u0646\u065B\u062F \u0633\u06CC\u0634\u064E\u0646 \u062E\u062A\u0645 \u06AF\u06C4\u0645\u064F\u062A",
|
|
4335
|
+
sessionExpiredDescription: "\u062C\u0627\u0631\u06CC \u0631\u06A9\u06BE\u0646\u06C1\u0655 \u062E\u0672\u0637\u0631\u0655 \u0645\u06C1\u0631\u0628\u0627\u0646\u06CC \u06A9\u0631\u0650\u062A\u06BE \u062F\u0648\u0628\u0627\u0631\u0655 \u0633\u0627\u0626\u0646 \u0627\u0650\u0646 \u06A9\u0631\u06CC\u0648\u06D4",
|
|
4336
|
+
chooseYourProfile: "\u067E\u0646\u0646\u06C1\u0655 \u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u0698\u0627\u0631\u0655\u0648",
|
|
4337
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0644\u0627\u06AF \u0627\u0650\u0646 \u0622\u0626\u06CC \u0688\u06CC \u0686\u06BE\u064F \u0627\u06A9\u06C1 \u06A9\u06BE\u06C4\u062A\u06C1 \u0632\u06CC\u0627\u062F\u0655 \u067E\u0631\u0648\u0641\u0627\u0626\u0644\u0646 \u0633\u065F\u062A\u0620 \u062C\u0648\u0691\u0646\u06C1 \u0622\u0645\u064F\u062A\u06D4 \u06CC\u064F\u0633 \u062A\u0648\u06C1\u06C1\u0650 \u0648\u064F\u0686\u06BE\u064F\u0646 \u0686\u06BE\u0650\u0648 \u06CC\u0698\u06BE\u0627\u0646 \u0633\u064F \u0698\u0627\u0631\u0655\u0648\u06D4",
|
|
4338
|
+
userIdLabel: "\u0635\u0627\u0631\u0641 \u0622\u0626\u06CC \u0688\u06CC: {{id}}",
|
|
4339
|
+
signingInEllipsis: "\u0633\u0627\u0626\u0646 \u0627\u0650\u0646 \u06AF\u0698\u06BE\u0627\u0646 \u0686\u06BE\u064F\u2026",
|
|
4340
|
+
switchProfile: "\u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u0628\u062F\u0644\u0627\u0648"
|
|
4271
4341
|
};
|
|
4272
4342
|
|
|
4273
4343
|
// src/RedactoPrivacyCenter/locales/mai/translation.json
|
|
@@ -4681,7 +4751,14 @@ var translation_default11 = {
|
|
|
4681
4751
|
submittingAs: "{{email}} \u0930\u0942\u092A\u092E\u0947 \u091C\u092E\u093E \u0915\u093D \u0930\u0939\u0932 \u091B\u0940",
|
|
4682
4752
|
tapToChooseFile: "\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u092C\u093E\u0915 \u0932\u0947\u0932 \u091F\u0948\u092A \u0915\u0930\u0942",
|
|
4683
4753
|
view: "\u0926\u0947\u0916\u0942",
|
|
4684
|
-
whatDoYouNeed: "\u0905\u0939\u093E\u0901\u0915\u0947\u0901 \u0915\u0940 \u091A\u093E\u0939\u0940?"
|
|
4754
|
+
whatDoYouNeed: "\u0905\u0939\u093E\u0901\u0915\u0947\u0901 \u0915\u0940 \u091A\u093E\u0939\u0940?",
|
|
4755
|
+
sessionExpiredTitle: "\u0905\u0939\u093E\u0901\u0915 \u0938\u0924\u094D\u0930 \u0938\u092E\u093E\u092A\u094D\u0924 \u092D\u093D \u0917\u0947\u0932 \u0905\u091B\u093F",
|
|
4756
|
+
sessionExpiredDescription: "\u091C\u093E\u0930\u0940 \u0930\u093E\u0916\u092C\u093E\u0915 \u0932\u0947\u0932 \u0915\u0943\u092A\u092F\u093E \u092B\u0947\u0930 \u0938\u0901 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u0942\u0964",
|
|
4757
|
+
chooseYourProfile: "\u0905\u092A\u0928 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u0942",
|
|
4758
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0932\u0949\u0917\u093F\u0928 \u0906\u0907\u0921\u0940 \u090F\u0915\u093E\u0927\u093F\u0915 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932\u0938\u0901 \u091C\u0941\u0921\u093C\u0932 \u0905\u091B\u093F\u0964 \u091C\u0947 \u0905\u0939\u093E\u0901 \u0926\u0947\u0916\u092F \u091A\u093E\u0939\u0948\u0924 \u091B\u0940 \u0913\u0915\u0930\u093E \u091A\u0941\u0928\u0942\u0964",
|
|
4759
|
+
userIdLabel: "\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0906\u0907\u0921\u0940: {{id}}",
|
|
4760
|
+
signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u092D' \u0930\u0939\u0932 \u0905\u091B\u093F\u2026",
|
|
4761
|
+
switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u092C\u0926\u0932\u0942"
|
|
4685
4762
|
};
|
|
4686
4763
|
|
|
4687
4764
|
// src/RedactoPrivacyCenter/locales/ml/translation.json
|
|
@@ -5095,7 +5172,14 @@ var translation_default12 = {
|
|
|
5095
5172
|
submittingAs: "{{email}} \u0D06\u0D2F\u0D3F \u0D38\u0D2E\u0D7C\u0D2A\u0D4D\u0D2A\u0D3F\u0D15\u0D4D\u0D15\u0D41\u0D28\u0D4D\u0D28\u0D41",
|
|
5096
5173
|
tapToChooseFile: "\u0D2B\u0D2F\u0D7D \u0D24\u0D3F\u0D30\u0D1E\u0D4D\u0D1E\u0D46\u0D1F\u0D41\u0D15\u0D4D\u0D15\u0D3E\u0D7B \u0D1F\u0D3E\u0D2A\u0D4D\u0D2A\u0D4D \u0D1A\u0D46\u0D2F\u0D4D\u0D2F\u0D41\u0D15",
|
|
5097
5174
|
view: "\u0D15\u0D3E\u0D23\u0D41\u0D15",
|
|
5098
|
-
whatDoYouNeed: "\u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D7E\u0D15\u0D4D\u0D15\u0D4D \u0D0E\u0D28\u0D4D\u0D24\u0D3E\u0D23\u0D4D \u0D35\u0D47\u0D23\u0D4D\u0D1F\u0D24\u0D4D?"
|
|
5175
|
+
whatDoYouNeed: "\u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D7E\u0D15\u0D4D\u0D15\u0D4D \u0D0E\u0D28\u0D4D\u0D24\u0D3E\u0D23\u0D4D \u0D35\u0D47\u0D23\u0D4D\u0D1F\u0D24\u0D4D?",
|
|
5176
|
+
sessionExpiredTitle: "\u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D33\u0D41\u0D1F\u0D46 \u0D38\u0D46\u0D37\u0D7B \u0D15\u0D3E\u0D32\u0D39\u0D30\u0D23\u0D2A\u0D4D\u0D2A\u0D46\u0D1F\u0D4D\u0D1F\u0D41",
|
|
5177
|
+
sessionExpiredDescription: "\u0D24\u0D41\u0D1F\u0D30\u0D3E\u0D7B \u0D26\u0D2F\u0D35\u0D3E\u0D2F\u0D3F \u0D35\u0D40\u0D23\u0D4D\u0D1F\u0D41\u0D02 \u0D38\u0D48\u0D7B \u0D07\u0D7B \u0D1A\u0D46\u0D2F\u0D4D\u0D2F\u0D41\u0D15.",
|
|
5178
|
+
chooseYourProfile: "\u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D33\u0D41\u0D1F\u0D46 \u0D2A\u0D4D\u0D30\u0D4A\u0D2B\u0D48\u0D7D \u0D24\u0D3F\u0D30\u0D1E\u0D4D\u0D1E\u0D46\u0D1F\u0D41\u0D15\u0D4D\u0D15\u0D41\u0D15",
|
|
5179
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0D32\u0D4B\u0D17\u0D3F\u0D7B \u0D10\u0D21\u0D3F \u0D12\u0D28\u0D4D\u0D28\u0D3F\u0D32\u0D27\u0D3F\u0D15\u0D02 \u0D2A\u0D4D\u0D30\u0D4A\u0D2B\u0D48\u0D32\u0D41\u0D15\u0D33\u0D41\u0D2E\u0D3E\u0D2F\u0D3F \u0D2C\u0D28\u0D4D\u0D27\u0D3F\u0D2A\u0D4D\u0D2A\u0D3F\u0D1A\u0D4D\u0D1A\u0D3F\u0D30\u0D3F\u0D15\u0D4D\u0D15\u0D41\u0D28\u0D4D\u0D28\u0D41. \u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D7E \u0D15\u0D3E\u0D23\u0D3E\u0D7B \u0D06\u0D17\u0D4D\u0D30\u0D39\u0D3F\u0D15\u0D4D\u0D15\u0D41\u0D28\u0D4D\u0D28\u0D24\u0D4D \u0D24\u0D3F\u0D30\u0D1E\u0D4D\u0D1E\u0D46\u0D1F\u0D41\u0D15\u0D4D\u0D15\u0D41\u0D15.",
|
|
5180
|
+
userIdLabel: "\u0D09\u0D2A\u0D2F\u0D4B\u0D15\u0D4D\u0D24\u0D43 \u0D10\u0D21\u0D3F: {{id}}",
|
|
5181
|
+
signingInEllipsis: "\u0D38\u0D48\u0D7B \u0D07\u0D7B \u0D1A\u0D46\u0D2F\u0D4D\u0D2F\u0D41\u0D28\u0D4D\u0D28\u0D41\u2026",
|
|
5182
|
+
switchProfile: "\u0D2A\u0D4D\u0D30\u0D4A\u0D2B\u0D48\u0D7D \u0D2E\u0D3E\u0D31\u0D4D\u0D31\u0D41\u0D15"
|
|
5099
5183
|
};
|
|
5100
5184
|
|
|
5101
5185
|
// src/RedactoPrivacyCenter/locales/mni-Mtei/translation.json
|
|
@@ -5509,7 +5593,14 @@ var translation_default13 = {
|
|
|
5509
5593
|
submittingAs: "{{email}} \uABD1\uABE3\uABCF\uABC5 \uABCA\uABE5\uABD2\uABE0\uABC2\uABE4",
|
|
5510
5594
|
tapToChooseFile: "\uABD0\uABE5\uABCF\uABDC \uABC8\uABDF\uABC5\uABD5 \uABC7\uABE6\uABDE \uABC7\uABE7",
|
|
5511
5595
|
view: "\uABCC\uABE6\uABE1\uABCE",
|
|
5512
|
-
whatDoYouNeed: "\uABD1\uABD7\uABE3\uABDD\uABD7 \uABC0\uABD4\uABE4 \uABC7\uABC9\uABE5\uABCF\uABD0\uABD7\uABD5\uABD2\uABE6?"
|
|
5596
|
+
whatDoYouNeed: "\uABD1\uABD7\uABE3\uABDD\uABD7 \uABC0\uABD4\uABE4 \uABC7\uABC9\uABE5\uABCF\uABD0\uABD7\uABD5\uABD2\uABE6?",
|
|
5597
|
+
sessionExpiredTitle: "\uABD1\uABD7\uABE3\uABDD\uABD2\uABE4 \uABC1\uABE6\uABC1\uABDF \uABC2\uABE3\uABCF\uABD4\uABE6",
|
|
5598
|
+
sessionExpiredDescription: "\uABC3\uABC8\uABE5 \uABC6\uABE0\uABCA\uABD4\uABDB\uABC5\uABD5 \uABC6\uABE5\uABC5\uABD5\uABE4\uABD7\uABE8\uABC5 \uABD1\uABC3\uABE8\uABDB \uABCD\uABDF\uABC5 \uABC1\uABE5\uABCF\uABDF \uABCF\uABDF \uABC7\uABE7\uABD5\uABE4\uABCC\uABE8\uABEB",
|
|
5599
|
+
chooseYourProfile: "\u09A8\u09B9\u09BE\u0995\u09CD\u0995\u09C0 \u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u0996\u09A8\u09AC\u09BF\u09AF\u09BC\u09C1",
|
|
5600
|
+
loginIdentifierLinkedToMultipleProfiles: "\u09B2\u0997\u0987\u09A8 \u0986\u0987\u09A1\u09BF \u0985\u09B8\u09BF \u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u0985\u09AE\u09A6\u0997\u09C0 \u09B9\u09C7\u09A8\u09CD\u09A8\u09BE \u09B2\u09CB\u0987\u09A8\u09A8\u09AC\u09BE \u09B2\u09C8\u0964 \u09A8\u09B9\u09BE\u0995\u09CD\u09A8\u09BE \u09AF\u09BC\u09C7\u0982\u09A8\u09BF\u0982\u09AC\u09BE \u0985\u09A6\u09C1 \u0996\u09A8\u09AC\u09BF\u09AF\u09BC\u09C1\u0964",
|
|
5601
|
+
userIdLabel: "\uABC3\uABE4\uABD1\uABE3\uABCF\uABD5 \uABD1\uABE5\uABCF\uABD7\uABE4: {{id}}",
|
|
5602
|
+
signingInEllipsis: "\u09B8\u09BE\u0987\u09A8 \u0987\u09A8 \u09A4\u09CC\u09B0\u09BF\u2026",
|
|
5603
|
+
switchProfile: "\u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u09B9\u09CB\u0982\u09A6\u09CB\u0995-\u0989"
|
|
5513
5604
|
};
|
|
5514
5605
|
|
|
5515
5606
|
// src/RedactoPrivacyCenter/locales/mr/translation.json
|
|
@@ -5923,7 +6014,14 @@ var translation_default14 = {
|
|
|
5923
6014
|
submittingAs: "{{email}} \u092E\u094D\u0939\u0923\u0942\u0928 \u0938\u092C\u092E\u093F\u091F \u0915\u0930\u0924 \u0906\u0939\u0947",
|
|
5924
6015
|
tapToChooseFile: "\u092B\u093E\u0907\u0932 \u0928\u093F\u0935\u0921\u0923\u094D\u092F\u093E\u0938\u093E\u0920\u0940 \u091F\u0945\u092A \u0915\u0930\u093E",
|
|
5925
6016
|
view: "\u092A\u0939\u093E",
|
|
5926
|
-
whatDoYouNeed: "\u0924\u0941\u092E\u094D\u0939\u093E\u0932\u093E \u0915\u093E\u092F \u0939\u0935\u0947 \u0906\u0939\u0947?"
|
|
6017
|
+
whatDoYouNeed: "\u0924\u0941\u092E\u094D\u0939\u093E\u0932\u093E \u0915\u093E\u092F \u0939\u0935\u0947 \u0906\u0939\u0947?",
|
|
6018
|
+
sessionExpiredTitle: "\u0924\u0941\u092E\u091A\u0947 \u0938\u0924\u094D\u0930 \u0938\u0902\u092A\u0932\u0947 \u0906\u0939\u0947",
|
|
6019
|
+
sessionExpiredDescription: "\u0938\u0941\u0930\u0942 \u0920\u0947\u0935\u0923\u094D\u092F\u093E\u0938\u093E\u0920\u0940 \u0915\u0943\u092A\u092F\u093E \u092A\u0941\u0928\u094D\u0939\u093E \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u093E.",
|
|
6020
|
+
chooseYourProfile: "\u0924\u0941\u092E\u091A\u0940 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u0928\u093F\u0935\u0921\u093E",
|
|
6021
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0932\u0949\u0917\u093F\u0928 \u0906\u092F\u0921\u0940 \u090F\u0915\u093E\u092A\u0947\u0915\u094D\u0937\u093E \u091C\u093E\u0938\u094D\u0924 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932\u0936\u0940 \u091C\u094B\u0921\u0932\u0947\u0932\u093E \u0906\u0939\u0947. \u0924\u0941\u092E\u094D\u0939\u093E\u0932\u093E \u091C\u0940 \u092A\u093E\u0939\u093E\u092F\u091A\u0940 \u0906\u0939\u0947 \u0924\u0940 \u0928\u093F\u0935\u0921\u093E.",
|
|
6022
|
+
userIdLabel: "\u0935\u093E\u092A\u0930\u0915\u0930\u094D\u0924\u093E \u0906\u092F\u0921\u0940: {{id}}",
|
|
6023
|
+
signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u0924 \u0906\u0939\u0947\u2026",
|
|
6024
|
+
switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u092C\u0926\u0932\u093E"
|
|
5927
6025
|
};
|
|
5928
6026
|
|
|
5929
6027
|
// src/RedactoPrivacyCenter/locales/ne/translation.json
|
|
@@ -6337,7 +6435,14 @@ var translation_default15 = {
|
|
|
6337
6435
|
submittingAs: "{{email}} \u0915\u094B \u0930\u0942\u092A\u092E\u093E \u092A\u0947\u0936 \u0917\u0930\u094D\u0926\u0948",
|
|
6338
6436
|
tapToChooseFile: "\u092B\u093E\u0907\u0932 \u091B\u093E\u0928\u094D\u0928 \u091F\u094D\u092F\u093E\u092A \u0917\u0930\u094D\u0928\u0941\u0939\u094B\u0938\u094D",
|
|
6339
6437
|
view: "\u0939\u0947\u0930\u094D\u0928\u0941\u0939\u094B\u0938\u094D",
|
|
6340
|
-
whatDoYouNeed: "\u0924\u092A\u093E\u0908\u0902\u0932\u093E\u0908 \u0915\u0947 \u091A\u093E\u0939\u093F\u0928\u094D\u091B?"
|
|
6438
|
+
whatDoYouNeed: "\u0924\u092A\u093E\u0908\u0902\u0932\u093E\u0908 \u0915\u0947 \u091A\u093E\u0939\u093F\u0928\u094D\u091B?",
|
|
6439
|
+
sessionExpiredTitle: "\u0924\u092A\u093E\u0908\u0902\u0915\u094B \u0938\u0924\u094D\u0930 \u0938\u092E\u093E\u092A\u094D\u0924 \u092D\u090F\u0915\u094B \u091B",
|
|
6440
|
+
sessionExpiredDescription: "\u091C\u093E\u0930\u0940 \u0930\u093E\u0916\u094D\u0928 \u0915\u0943\u092A\u092F\u093E \u092B\u0947\u0930\u093F \u0938\u093E\u0907\u0928 \u0907\u0928 \u0917\u0930\u094D\u0928\u0941\u0939\u094B\u0938\u094D\u0964",
|
|
6441
|
+
chooseYourProfile: "\u0906\u092B\u094D\u0928\u094B \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u091B\u093E\u0928\u094D\u0928\u0941\u0939\u094B\u0938\u094D",
|
|
6442
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0932\u0917\u0907\u0928 \u0906\u0908\u0921\u0940 \u090F\u0915\u092D\u0928\u094D\u0926\u093E \u092C\u0922\u0940 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932\u0938\u0901\u0917 \u091C\u094B\u0921\u093F\u090F\u0915\u094B \u091B\u0964 \u0924\u092A\u093E\u0908\u0902\u0932\u0947 \u0939\u0947\u0930\u094D\u0928 \u091A\u093E\u0939\u0928\u0941\u092D\u090F\u0915\u094B \u091B\u093E\u0928\u094D\u0928\u0941\u0939\u094B\u0938\u094D\u0964",
|
|
6443
|
+
userIdLabel: "\u092A\u094D\u0930\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0906\u0908\u0921\u0940: {{id}}",
|
|
6444
|
+
signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0939\u0941\u0901\u0926\u0948\u091B\u2026",
|
|
6445
|
+
switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u092C\u0926\u0932\u094D\u0928\u0941\u0939\u094B\u0938\u094D"
|
|
6341
6446
|
};
|
|
6342
6447
|
|
|
6343
6448
|
// src/RedactoPrivacyCenter/locales/or/translation.json
|
|
@@ -6751,7 +6856,14 @@ var translation_default16 = {
|
|
|
6751
6856
|
submittingAs: "{{email}} \u0B2D\u0B3E\u0B2C\u0B47 \u0B26\u0B3E\u0B16\u0B32 \u0B15\u0B30\u0B41\u0B1B\u0B28\u0B4D\u0B24\u0B3F",
|
|
6752
6857
|
tapToChooseFile: "\u0B2B\u0B3E\u0B07\u0B32 \u0B2C\u0B3E\u0B1B\u0B3F\u0B2C\u0B3E\u0B15\u0B41 \u0B1F\u0B4D\u0B5F\u0B3E\u0B2A \u0B15\u0B30\u0B28\u0B4D\u0B24\u0B41",
|
|
6753
6858
|
view: "\u0B26\u0B47\u0B16\u0B28\u0B4D\u0B24\u0B41",
|
|
6754
|
-
whatDoYouNeed: "\u0B06\u0B2A\u0B23 \u0B15\u0B23 \u0B1A\u0B3E\u0B39\u0B3E\u0B28\u0B4D\u0B24\u0B3F?"
|
|
6859
|
+
whatDoYouNeed: "\u0B06\u0B2A\u0B23 \u0B15\u0B23 \u0B1A\u0B3E\u0B39\u0B3E\u0B28\u0B4D\u0B24\u0B3F?",
|
|
6860
|
+
sessionExpiredTitle: "\u0B06\u0B2A\u0B23\u0B19\u0B4D\u0B15 \u0B38\u0B47\u0B38\u0B28\u0B4D \u0B38\u0B2E\u0B3E\u0B2A\u0B4D\u0B24 \u0B39\u0B4B\u0B07\u0B2F\u0B3E\u0B07\u0B1B\u0B3F",
|
|
6861
|
+
sessionExpiredDescription: "\u0B1C\u0B3E\u0B30\u0B3F \u0B30\u0B16\u0B3F\u0B2C\u0B3E\u0B15\u0B41 \u0B26\u0B5F\u0B3E\u0B15\u0B30\u0B3F \u0B2A\u0B41\u0B28\u0B30\u0B4D\u0B2C\u0B3E\u0B30 \u0B38\u0B3E\u0B07\u0B28\u0B4D \u0B07\u0B28\u0B4D \u0B15\u0B30\u0B28\u0B4D\u0B24\u0B41\u0964",
|
|
6862
|
+
chooseYourProfile: "\u0B06\u0B2A\u0B23\u0B19\u0B4D\u0B15 \u0B2A\u0B4D\u0B30\u0B4B\u0B2B\u0B3E\u0B07\u0B32\u0B4D \u0B2C\u0B3E\u0B1B\u0B28\u0B4D\u0B24\u0B41",
|
|
6863
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0B32\u0B17\u0B07\u0B28\u0B4D \u0B06\u0B07\u0B21\u0B3F \u0B0F\u0B15\u0B3E\u0B27\u0B3F\u0B15 \u0B2A\u0B4D\u0B30\u0B4B\u0B2B\u0B3E\u0B07\u0B32\u0B4D \u0B38\u0B39\u0B3F\u0B24 \u0B2F\u0B4B\u0B21\u0B3C\u0B3E\u0B2F\u0B3E\u0B07\u0B1B\u0B3F\u0964 \u0B06\u0B2A\u0B23 \u0B26\u0B47\u0B16\u0B3F\u0B2C\u0B3E\u0B15\u0B41 \u0B1A\u0B3E\u0B39\u0B41\u0B01\u0B25\u0B3F\u0B2C\u0B3E\u0B1F\u0B3F \u0B2C\u0B3E\u0B1B\u0B28\u0B4D\u0B24\u0B41\u0964",
|
|
6864
|
+
userIdLabel: "\u0B2C\u0B4D\u0B5F\u0B2C\u0B39\u0B3E\u0B30\u0B15\u0B3E\u0B30\u0B40 \u0B06\u0B07\u0B21\u0B3F: {{id}}",
|
|
6865
|
+
signingInEllipsis: "\u0B38\u0B3E\u0B07\u0B28\u0B4D \u0B07\u0B28\u0B4D \u0B39\u0B47\u0B09\u0B1B\u0B3F\u2026",
|
|
6866
|
+
switchProfile: "\u0B2A\u0B4D\u0B30\u0B4B\u0B2B\u0B3E\u0B07\u0B32\u0B4D \u0B2C\u0B26\u0B33\u0B3E\u0B28\u0B4D\u0B24\u0B41"
|
|
6755
6867
|
};
|
|
6756
6868
|
|
|
6757
6869
|
// src/RedactoPrivacyCenter/locales/pa/translation.json
|
|
@@ -7165,7 +7277,14 @@ var translation_default17 = {
|
|
|
7165
7277
|
submittingAs: "{{email}} \u0A35\u0A1C\u0A4B\u0A02 \u0A38\u0A2C\u0A2E\u0A3F\u0A1F \u0A15\u0A30 \u0A30\u0A39\u0A47 \u0A39\u0A4B",
|
|
7166
7278
|
tapToChooseFile: "\u0A2B\u0A3E\u0A08\u0A32 \u0A1A\u0A41\u0A23\u0A28 \u0A32\u0A08 \u0A1F\u0A48\u0A2A \u0A15\u0A30\u0A4B",
|
|
7167
7279
|
view: "\u0A26\u0A47\u0A16\u0A4B",
|
|
7168
|
-
whatDoYouNeed: "\u0A24\u0A41\u0A39\u0A3E\u0A28\u0A42\u0A70 \u0A15\u0A40 \u0A1A\u0A3E\u0A39\u0A40\u0A26\u0A3E \u0A39\u0A48?"
|
|
7280
|
+
whatDoYouNeed: "\u0A24\u0A41\u0A39\u0A3E\u0A28\u0A42\u0A70 \u0A15\u0A40 \u0A1A\u0A3E\u0A39\u0A40\u0A26\u0A3E \u0A39\u0A48?",
|
|
7281
|
+
sessionExpiredTitle: "\u0A24\u0A41\u0A39\u0A3E\u0A21\u0A3E \u0A38\u0A48\u0A38\u0A3C\u0A28 \u0A38\u0A2E\u0A3E\u0A2A\u0A24 \u0A39\u0A4B \u0A17\u0A3F\u0A06 \u0A39\u0A48",
|
|
7282
|
+
sessionExpiredDescription: "\u0A1C\u0A3E\u0A30\u0A40 \u0A30\u0A71\u0A16\u0A23 \u0A32\u0A08 \u0A15\u0A3F\u0A30\u0A2A\u0A3E \u0A15\u0A30\u0A15\u0A47 \u0A26\u0A41\u0A2C\u0A3E\u0A30\u0A3E \u0A38\u0A3E\u0A08\u0A28 \u0A07\u0A28 \u0A15\u0A30\u0A4B\u0964",
|
|
7283
|
+
chooseYourProfile: "\u0A06\u0A2A\u0A23\u0A40 \u0A2A\u0A4D\u0A30\u0A4B\u0A2B\u0A3E\u0A08\u0A32 \u0A1A\u0A41\u0A23\u0A4B",
|
|
7284
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0A32\u0A4C\u0A17\u0A07\u0A28 \u0A06\u0A08\u0A21\u0A40 \u0A07\u0A71\u0A15 \u0A24\u0A4B\u0A02 \u0A35\u0A71\u0A27 \u0A2A\u0A4D\u0A30\u0A4B\u0A2B\u0A3E\u0A08\u0A32\u0A3E\u0A02 \u0A28\u0A3E\u0A32 \u0A1C\u0A41\u0A5C\u0A3F\u0A06 \u0A39\u0A4B\u0A07\u0A06 \u0A39\u0A48\u0964 \u0A1C\u0A4B \u0A24\u0A41\u0A38\u0A40\u0A02 \u0A35\u0A47\u0A16\u0A23\u0A3E \u0A1A\u0A3E\u0A39\u0A41\u0A70\u0A26\u0A47 \u0A39\u0A4B \u0A09\u0A39 \u0A1A\u0A41\u0A23\u0A4B\u0964",
|
|
7285
|
+
userIdLabel: "\u0A09\u0A2A\u0A2F\u0A4B\u0A17\u0A15\u0A30\u0A24\u0A3E \u0A06\u0A08\u0A21\u0A40: {{id}}",
|
|
7286
|
+
signingInEllipsis: "\u0A38\u0A3E\u0A08\u0A28 \u0A07\u0A28 \u0A39\u0A4B \u0A30\u0A3F\u0A39\u0A3E \u0A39\u0A48\u2026",
|
|
7287
|
+
switchProfile: "\u0A2A\u0A4D\u0A30\u0A4B\u0A2B\u0A3E\u0A08\u0A32 \u0A2C\u0A26\u0A32\u0A4B"
|
|
7169
7288
|
};
|
|
7170
7289
|
|
|
7171
7290
|
// src/RedactoPrivacyCenter/locales/sa/translation.json
|
|
@@ -7579,7 +7698,14 @@ var translation_default18 = {
|
|
|
7579
7698
|
submittingAs: "{{email}} \u0907\u0924\u093F \u0938\u092E\u0930\u094D\u092A\u092F\u0928\u094D",
|
|
7580
7699
|
tapToChooseFile: "\u0938\u091E\u094D\u091A\u093F\u0915\u093E\u0902 \u091A\u0947\u0924\u0941\u0902 \u0938\u094D\u092A\u0943\u0936\u0924\u0941",
|
|
7581
7700
|
view: "\u092A\u0936\u094D\u092F",
|
|
7582
|
-
whatDoYouNeed: "\u092D\u0935\u0924\u0903 \u0915\u093F\u092E\u094D \u0906\u0935\u0936\u094D\u092F\u0915\u092E\u094D?"
|
|
7701
|
+
whatDoYouNeed: "\u092D\u0935\u0924\u0903 \u0915\u093F\u092E\u094D \u0906\u0935\u0936\u094D\u092F\u0915\u092E\u094D?",
|
|
7702
|
+
sessionExpiredTitle: "\u092D\u0935\u0924\u0903 \u0938\u0924\u094D\u0930\u0902 \u0938\u092E\u093E\u092A\u094D\u0924\u092E\u094D",
|
|
7703
|
+
sessionExpiredDescription: "\u0905\u0928\u0941\u0935\u0930\u094D\u0924\u0928\u093E\u0930\u094D\u0925\u0902 \u0915\u0943\u092A\u092F\u093E \u092A\u0941\u0928\u0903 \u092A\u094D\u0930\u0935\u0947\u0936\u0902 \u0915\u0930\u094B\u0924\u0941\u0964",
|
|
7704
|
+
chooseYourProfile: "\u0938\u094D\u0935\u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932\u0902 \u091A\u093F\u0928\u094B\u0924\u0941",
|
|
7705
|
+
loginIdentifierLinkedToMultipleProfiles: "\u092A\u094D\u0930\u0935\u0947\u0936-\u0906\u092F\u0921\u0940 \u090F\u0915\u093E\u0927\u093F\u0915\u0948\u0903 \u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932\u0948\u0903 \u0938\u0939 \u0938\u092E\u094D\u092C\u0926\u094D\u0927\u0903 \u0905\u0938\u094D\u0924\u093F\u0964 \u092F\u0924\u094D \u0926\u094D\u0930\u0937\u094D\u091F\u0941\u092E\u094D \u0907\u091A\u094D\u091B\u0924\u093F \u0924\u0924\u094D \u091A\u093F\u0928\u094B\u0924\u0941\u0964",
|
|
7706
|
+
userIdLabel: "\u0909\u092A\u092F\u094B\u0915\u094D\u0924\u0943-\u0906\u092F\u0921\u0940: {{id}}",
|
|
7707
|
+
signingInEllipsis: "\u092A\u094D\u0930\u0935\u0947\u0936\u0903 \u0915\u094D\u0930\u093F\u092F\u0924\u0947\u2026",
|
|
7708
|
+
switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932\u0902 \u092A\u0930\u093F\u0935\u0930\u094D\u0924\u092F\u0924\u0941"
|
|
7583
7709
|
};
|
|
7584
7710
|
|
|
7585
7711
|
// src/RedactoPrivacyCenter/locales/sat/translation.json
|
|
@@ -7993,7 +8119,14 @@ var translation_default19 = {
|
|
|
7993
8119
|
submittingAs: "{{email}} \u1C5E\u1C6E\u1C60\u1C5F\u1C5B\u1C6E \u1C61\u1C5A\u1C62\u1C5F \u1C6E\u1C6B\u1C5F",
|
|
7994
8120
|
tapToChooseFile: "\u1C6F\u1C77\u1C5F\u1C6D\u1C64\u1C5E \u1C75\u1C5F\u1C6A\u1C77\u1C5F\u1C63 \u1C5E\u1C5F\u1C79\u1C5C\u1C64\u1C6B \u1C74\u1C6E\u1C6F \u1C62\u1C6E",
|
|
7995
8121
|
view: "\u1C67\u1C6E\u1C5E \u1C62\u1C6E",
|
|
7996
|
-
whatDoYouNeed: "\u1C5F\u1C62 \u1C6A\u1C6E\u1C6B \u1C5E\u1C5F\u1C79\u1C60\u1C5B\u1C64?"
|
|
8122
|
+
whatDoYouNeed: "\u1C5F\u1C62 \u1C6A\u1C6E\u1C6B \u1C5E\u1C5F\u1C79\u1C60\u1C5B\u1C64?",
|
|
8123
|
+
sessionExpiredTitle: "\u1C5F\u1C62\u1C5F\u1C5C \u1C65\u1C6E\u1C65\u1C5A\u1C71 \u1C62\u1C69\u1C6A\u1C5F\u1C79\u1C6B\u1C6E\u1C71\u1C5F",
|
|
8124
|
+
sessionExpiredDescription: "\u1C5E\u1C5F\u1C66\u1C5F \u1C6A\u1C5F\u1C5E\u1C5F\u1C63 \u1C5E\u1C5F\u1C79\u1C5C\u1C64\u1C6B \u1C6B\u1C5F\u1C6D\u1C5F \u1C60\u1C5F\u1C5B\u1C6E \u1C6B\u1C73\u1C66\u1C72\u1C5F \u1C65\u1C5F\u1C6D\u1C71 \u1C64\u1C71 \u1C62\u1C6E\u1C7E",
|
|
8125
|
+
chooseYourProfile: "\u1C5F\u1C62\u1C5F\u1C5C \u1C6F\u1C68\u1C73\u1C6F\u1C77\u1C5F\u1C6D\u1C64\u1C5E \u1C75\u1C5F\u1C6A\u1C77\u1C5F\u1C63 \u1C62\u1C6E",
|
|
8126
|
+
loginIdentifierLinkedToMultipleProfiles: "\u1C5E\u1C5A\u1C5C\u1C64\u1C71 \u1C5F\u1C6D\u1C70\u1C64 \u1C6B\u1C5A \u1C62\u1C64\u1C6B \u1C60\u1C77\u1C5A\u1C71 \u1C70\u1C77\u1C6E\u1C68 \u1C6F\u1C68\u1C73\u1C6F\u1C77\u1C5F\u1C6D\u1C64\u1C5E \u1C65\u1C5F\u1C76 \u1C61\u1C69\u1C70\u1C5F\u1C79\u1C63 \u1C5F\u1C60\u1C5F\u1C71\u1C5F\u1C7E \u1C5F\u1C62 \u1C67\u1C6E\u1C5E \u1C65\u1C5F\u1C71\u1C5F\u1C62 \u1C5A\u1C71\u1C5F \u1C75\u1C5F\u1C6A\u1C77\u1C5F\u1C63 \u1C62\u1C6E\u1C7E",
|
|
8127
|
+
userIdLabel: "\u1C75\u1C6E\u1C75\u1C77\u1C5F\u1C68\u1C64\u1C6D\u1C5F\u1C79 \u1C5F\u1C6D\u1C70\u1C64: {{id}}",
|
|
8128
|
+
signingInEllipsis: "\u1C65\u1C5F\u1C6D\u1C64\u1C71 \u1C64\u1C71 \u1C6E\u1C6B\u1C5F\u1C6D\u2026",
|
|
8129
|
+
switchProfile: "\u1C6F\u1C68\u1C73\u1C6F\u1C77\u1C5F\u1C6D\u1C64\u1C5E \u1C75\u1C5A\u1C6B\u1C5A\u1C5E \u1C62\u1C6E"
|
|
7997
8130
|
};
|
|
7998
8131
|
|
|
7999
8132
|
// src/RedactoPrivacyCenter/locales/sd/translation.json
|
|
@@ -8407,7 +8540,14 @@ var translation_default20 = {
|
|
|
8407
8540
|
submittingAs: "{{email}} \u0637\u0648\u0631 \u062C\u0645\u0639 \u06AA\u0631\u064A \u0631\u0647\u064A\u0627 \u0622\u0647\u064A\u0648",
|
|
8408
8541
|
tapToChooseFile: "\u0641\u0627\u0626\u0644 \u0686\u0648\u0646\u068A\u06BB \u0644\u0627\u0621\u0650 \u067D\u064A\u067E \u06AA\u0631\u064A\u0648",
|
|
8409
8542
|
view: "\u068F\u0633\u0648",
|
|
8410
|
-
whatDoYouNeed: "\u062A\u0648\u0647\u0627\u0646 \u06A9\u064A \u0687\u0627 \u06AF\u0647\u0631\u062C\u064A\u061F"
|
|
8543
|
+
whatDoYouNeed: "\u062A\u0648\u0647\u0627\u0646 \u06A9\u064A \u0687\u0627 \u06AF\u0647\u0631\u062C\u064A\u061F",
|
|
8544
|
+
sessionExpiredTitle: "\u062A\u0648\u0647\u0627\u0646 \u062C\u0648 \u0633\u064A\u0634\u0646 \u062E\u062A\u0645 \u067F\u064A \u0648\u064A\u0648 \u0622\u0647\u064A",
|
|
8545
|
+
sessionExpiredDescription: "\u062C\u0627\u0631\u064A \u0631\u06A9\u06BB \u0644\u0627\u0621\u0650 \u0645\u0647\u0631\u0628\u0627\u0646\u064A \u06AA\u0631\u064A \u067B\u064A\u0647\u0631 \u0633\u0627\u0626\u0646 \u0627\u0646 \u06AA\u0631\u064A\u0648.",
|
|
8546
|
+
chooseYourProfile: "\u067E\u0646\u0647\u0646\u062C\u0648 \u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u0686\u0648\u0646\u068A\u064A\u0648",
|
|
8547
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0644\u0627\u06AF \u0627\u0646 \u0622\u0626\u064A\u068A\u064A \u0647\u06AA \u06A9\u0627\u0646 \u0648\u068C\u064A\u06AA \u067E\u0631\u0648\u0641\u0627\u0626\u0644\u0646 \u0633\u0627\u0646 \u06B3\u0646\u068D\u064A\u0644 \u0622\u0647\u064A. \u062C\u064A\u06AA\u0648 \u062A\u0648\u0647\u0627\u0646 \u068F\u0633\u06BB \u0686\u0627\u0647\u064A\u0648 \u067F\u0627 \u0627\u0647\u0648 \u0686\u0648\u0646\u068A\u064A\u0648.",
|
|
8548
|
+
userIdLabel: "\u064A\u0648\u0632\u0631 \u0622\u0626\u064A\u068A\u064A: {{id}}",
|
|
8549
|
+
signingInEllipsis: "\u0633\u0627\u0626\u0646 \u0627\u0646 \u067F\u064A \u0631\u0647\u064A\u0648 \u0622\u0647\u064A\u2026",
|
|
8550
|
+
switchProfile: "\u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u062A\u0628\u062F\u064A\u0644 \u06AA\u0631\u064A\u0648"
|
|
8411
8551
|
};
|
|
8412
8552
|
|
|
8413
8553
|
// src/RedactoPrivacyCenter/locales/ta/translation.json
|
|
@@ -8821,7 +8961,14 @@ var translation_default21 = {
|
|
|
8821
8961
|
submittingAs: "{{email}} \u0B86\u0B95 \u0B9A\u0BAE\u0BB0\u0BCD\u0BAA\u0BCD\u0BAA\u0BBF\u0B95\u0BCD\u0B95\u0BBF\u0BB1\u0BC0\u0BB0\u0BCD\u0B95\u0BB3\u0BCD",
|
|
8822
8962
|
tapToChooseFile: "\u0B95\u0BCB\u0BAA\u0BCD\u0BAA\u0BC8\u0BA4\u0BCD \u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95 \u0BA4\u0B9F\u0BCD\u0B9F\u0BB5\u0BC1\u0BAE\u0BCD",
|
|
8823
8963
|
view: "\u0BAA\u0BBE\u0BB0\u0BCD",
|
|
8824
|
-
whatDoYouNeed: "\u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BC1 \u0B8E\u0BA9\u0BCD\u0BA9 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD?"
|
|
8964
|
+
whatDoYouNeed: "\u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BC1 \u0B8E\u0BA9\u0BCD\u0BA9 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD?",
|
|
8965
|
+
sessionExpiredTitle: "\u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B85\u0BAE\u0BB0\u0BCD\u0BB5\u0BC1 \u0B95\u0BBE\u0BB2\u0BBE\u0BB5\u0BA4\u0BBF\u0BAF\u0BBE\u0B95\u0BBF\u0BB5\u0BBF\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1",
|
|
8966
|
+
sessionExpiredDescription: "\u0BA4\u0BCA\u0B9F\u0BB0\u0BCD\u0BB5\u0BA4\u0BB1\u0BCD\u0B95\u0BC1 \u0BA4\u0BAF\u0BB5\u0BC1\u0B9A\u0BC6\u0BAF\u0BCD\u0BA4\u0BC1 \u0BAE\u0BC0\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD \u0B89\u0BB3\u0BCD\u0BA8\u0BC1\u0BB4\u0BC8\u0BAF\u0BB5\u0BC1\u0BAE\u0BCD.",
|
|
8967
|
+
chooseYourProfile: "\u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B9A\u0BC1\u0BAF\u0BB5\u0BBF\u0BB5\u0BB0\u0BA4\u0BCD\u0BA4\u0BC8\u0BA4\u0BCD \u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BB5\u0BC1\u0BAE\u0BCD",
|
|
8968
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0B89\u0BB3\u0BCD\u0BA8\u0BC1\u0BB4\u0BC8\u0BB5\u0BC1 \u0B90\u0B9F\u0BBF \u0B92\u0BA9\u0BCD\u0BB1\u0BC1\u0B95\u0BCD\u0B95\u0BC1 \u0BAE\u0BC7\u0BB1\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F \u0B9A\u0BC1\u0BAF\u0BB5\u0BBF\u0BB5\u0BB0\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B9F\u0BA9\u0BCD \u0B87\u0BA3\u0BC8\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BC1\u0BB3\u0BCD\u0BB3\u0BA4\u0BC1. \u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAE\u0BCD\u0BAA\u0BC1\u0BB5\u0BA4\u0BC8\u0BA4\u0BCD \u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BB5\u0BC1\u0BAE\u0BCD.",
|
|
8969
|
+
userIdLabel: "\u0BAA\u0BAF\u0BA9\u0BB0\u0BCD \u0B90\u0B9F\u0BBF: {{id}}",
|
|
8970
|
+
signingInEllipsis: "\u0B89\u0BB3\u0BCD\u0BA8\u0BC1\u0BB4\u0BC8\u0B95\u0BBF\u0BB1\u0BA4\u0BC1\u2026",
|
|
8971
|
+
switchProfile: "\u0B9A\u0BC1\u0BAF\u0BB5\u0BBF\u0BB5\u0BB0\u0BA4\u0BCD\u0BA4\u0BC8 \u0BAE\u0BBE\u0BB1\u0BCD\u0BB1\u0BC1"
|
|
8825
8972
|
};
|
|
8826
8973
|
|
|
8827
8974
|
// src/RedactoPrivacyCenter/locales/te/translation.json
|
|
@@ -9235,7 +9382,14 @@ var translation_default22 = {
|
|
|
9235
9382
|
submittingAs: "{{email}} \u0C17\u0C3E \u0C38\u0C2E\u0C30\u0C4D\u0C2A\u0C3F\u0C38\u0C4D\u0C24\u0C41\u0C28\u0C4D\u0C28\u0C3E\u0C30\u0C41",
|
|
9236
9383
|
tapToChooseFile: "\u0C2B\u0C48\u0C32\u0C4D\u200C\u0C28\u0C41 \u0C0E\u0C02\u0C1A\u0C41\u0C15\u0C4B\u0C35\u0C21\u0C3E\u0C28\u0C3F\u0C15\u0C3F \u0C28\u0C4A\u0C15\u0C4D\u0C15\u0C02\u0C21\u0C3F",
|
|
9237
9384
|
view: "\u0C35\u0C40\u0C15\u0C4D\u0C37\u0C3F\u0C02\u0C1A\u0C02\u0C21\u0C3F",
|
|
9238
|
-
whatDoYouNeed: "\u0C2E\u0C40\u0C15\u0C41 \u0C0F\u0C2E\u0C3F \u0C15\u0C3E\u0C35\u0C3E\u0C32\u0C3F?"
|
|
9385
|
+
whatDoYouNeed: "\u0C2E\u0C40\u0C15\u0C41 \u0C0F\u0C2E\u0C3F \u0C15\u0C3E\u0C35\u0C3E\u0C32\u0C3F?",
|
|
9386
|
+
sessionExpiredTitle: "\u0C2E\u0C40 \u0C38\u0C46\u0C37\u0C28\u0C4D \u0C17\u0C21\u0C41\u0C35\u0C41 \u0C2E\u0C41\u0C17\u0C3F\u0C38\u0C3F\u0C02\u0C26\u0C3F",
|
|
9387
|
+
sessionExpiredDescription: "\u0C15\u0C4A\u0C28\u0C38\u0C3E\u0C17\u0C3F\u0C02\u0C1A\u0C21\u0C3E\u0C28\u0C3F\u0C15\u0C3F \u0C26\u0C2F\u0C1A\u0C47\u0C38\u0C3F \u0C2E\u0C33\u0C4D\u0C32\u0C40 \u0C38\u0C48\u0C28\u0C4D \u0C07\u0C28\u0C4D \u0C1A\u0C47\u0C2F\u0C02\u0C21\u0C3F.",
|
|
9388
|
+
chooseYourProfile: "\u0C2E\u0C40 \u0C2A\u0C4D\u0C30\u0C4A\u0C2B\u0C48\u0C32\u0C4D\u200C\u0C28\u0C41 \u0C0E\u0C02\u0C1A\u0C41\u0C15\u0C4B\u0C02\u0C21\u0C3F",
|
|
9389
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0C32\u0C3E\u0C17\u0C3F\u0C28\u0C4D \u0C10\u0C21\u0C3F \u0C12\u0C15\u0C1F\u0C3F \u0C15\u0C02\u0C1F\u0C47 \u0C0E\u0C15\u0C4D\u0C15\u0C41\u0C35 \u0C2A\u0C4D\u0C30\u0C4A\u0C2B\u0C48\u0C32\u0C4D\u200C\u0C32\u0C24\u0C4B \u0C05\u0C28\u0C41\u0C38\u0C02\u0C27\u0C3E\u0C28\u0C3F\u0C02\u0C1A\u0C2C\u0C21\u0C3F\u0C02\u0C26\u0C3F. \u0C2E\u0C40\u0C30\u0C41 \u0C1A\u0C42\u0C21\u0C3E\u0C32\u0C28\u0C41\u0C15\u0C41\u0C02\u0C1F\u0C41\u0C28\u0C4D\u0C28\u0C26\u0C3E\u0C28\u0C4D\u0C28\u0C3F \u0C0E\u0C02\u0C1A\u0C41\u0C15\u0C4B\u0C02\u0C21\u0C3F.",
|
|
9390
|
+
userIdLabel: "\u0C35\u0C3F\u0C28\u0C3F\u0C2F\u0C4B\u0C17\u0C26\u0C3E\u0C30\u0C41 \u0C10\u0C21\u0C3F: {{id}}",
|
|
9391
|
+
signingInEllipsis: "\u0C38\u0C48\u0C28\u0C4D \u0C07\u0C28\u0C4D \u0C05\u0C35\u0C41\u0C24\u0C4B\u0C02\u0C26\u0C3F\u2026",
|
|
9392
|
+
switchProfile: "\u0C2A\u0C4D\u0C30\u0C4A\u0C2B\u0C48\u0C32\u0C4D\u200C\u0C28\u0C41 \u0C2E\u0C3E\u0C30\u0C4D\u0C1A\u0C02\u0C21\u0C3F"
|
|
9239
9393
|
};
|
|
9240
9394
|
|
|
9241
9395
|
// src/RedactoPrivacyCenter/locales/ur/translation.json
|
|
@@ -9649,7 +9803,14 @@ var translation_default23 = {
|
|
|
9649
9803
|
submittingAs: "{{email}} \u06A9\u06D2 \u0637\u0648\u0631 \u067E\u0631 \u062C\u0645\u0639 \u06A9\u0631 \u0631\u06C1\u06D2 \u06C1\u06CC\u06BA",
|
|
9650
9804
|
tapToChooseFile: "\u0641\u0627\u0626\u0644 \u0645\u0646\u062A\u062E\u0628 \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0679\u06CC\u067E \u06A9\u0631\u06CC\u06BA",
|
|
9651
9805
|
view: "\u062F\u06CC\u06A9\u06BE\u06CC\u06BA",
|
|
9652
|
-
whatDoYouNeed: "\u0622\u067E \u06A9\u0648 \u06A9\u06CC\u0627 \u0686\u0627\u06C1\u06CC\u06D2\u061F"
|
|
9806
|
+
whatDoYouNeed: "\u0622\u067E \u06A9\u0648 \u06A9\u06CC\u0627 \u0686\u0627\u06C1\u06CC\u06D2\u061F",
|
|
9807
|
+
sessionExpiredTitle: "\u0622\u067E \u06A9\u0627 \u0633\u06CC\u0634\u0646 \u062E\u062A\u0645 \u06C1\u0648 \u06AF\u06CC\u0627 \u06C1\u06D2",
|
|
9808
|
+
sessionExpiredDescription: "\u062C\u0627\u0631\u06CC \u0631\u06A9\u06BE\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0628\u0631\u0627\u06C1 \u06A9\u0631\u0645 \u062F\u0648\u0628\u0627\u0631\u06C1 \u0633\u0627\u0626\u0646 \u0627\u0650\u0646 \u06A9\u0631\u06CC\u06BA\u06D4",
|
|
9809
|
+
chooseYourProfile: "\u0627\u067E\u0646\u06CC \u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u0645\u0646\u062A\u062E\u0628 \u06A9\u0631\u06CC\u06BA",
|
|
9810
|
+
loginIdentifierLinkedToMultipleProfiles: "\u0644\u0627\u06AF \u0627\u0646 \u0622\u0626\u06CC \u0688\u06CC \u0627\u06CC\u06A9 \u0633\u06D2 \u0632\u06CC\u0627\u062F\u06C1 \u067E\u0631\u0648\u0641\u0627\u0626\u0644\u0632 \u0633\u06D2 \u0645\u0646\u0633\u0644\u06A9 \u06C1\u06D2\u06D4 \u062C\u0633\u06D2 \u0622\u067E \u062F\u06CC\u06A9\u06BE\u0646\u0627 \u0686\u0627\u06C1\u062A\u06D2 \u06C1\u06CC\u06BA \u0627\u0633\u06D2 \u0645\u0646\u062A\u062E\u0628 \u06A9\u0631\u06CC\u06BA\u06D4",
|
|
9811
|
+
userIdLabel: "\u0635\u0627\u0631\u0641 \u0622\u0626\u06CC \u0688\u06CC: {{id}}",
|
|
9812
|
+
signingInEllipsis: "\u0633\u0627\u0626\u0646 \u0627\u0646 \u06C1\u0648 \u0631\u06C1\u0627 \u06C1\u06D2\u2026",
|
|
9813
|
+
switchProfile: "\u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u062A\u0628\u062F\u06CC\u0644 \u06A9\u0631\u06CC\u06BA"
|
|
9653
9814
|
};
|
|
9654
9815
|
|
|
9655
9816
|
// src/RedactoPrivacyCenter/lib/locales.ts
|
|
@@ -9863,7 +10024,57 @@ function useSafeInsets() {
|
|
|
9863
10024
|
// src/RedactoPrivacyCenter/context/BaseUrlContext.tsx
|
|
9864
10025
|
var import_react2 = require("react");
|
|
9865
10026
|
|
|
10027
|
+
// src/shared/sandbox.ts
|
|
10028
|
+
var SANDBOX_TOKEN_HEADER = "X-Consent-Token";
|
|
10029
|
+
|
|
10030
|
+
// src/RedactoPrivacyCenter/lib/sandbox.ts
|
|
10031
|
+
var sandboxConfig = null;
|
|
10032
|
+
var setSandboxConfig = (config) => {
|
|
10033
|
+
sandboxConfig = config;
|
|
10034
|
+
};
|
|
10035
|
+
var getSandboxConfig = () => sandboxConfig;
|
|
10036
|
+
var isSandboxMode = () => sandboxConfig !== null;
|
|
10037
|
+
var sandboxAuthHeaders = () => {
|
|
10038
|
+
if (!sandboxConfig) {
|
|
10039
|
+
return null;
|
|
10040
|
+
}
|
|
10041
|
+
return {
|
|
10042
|
+
[SANDBOX_TOKEN_HEADER]: sandboxConfig.token
|
|
10043
|
+
};
|
|
10044
|
+
};
|
|
10045
|
+
var sandboxBodyIdentity = () => {
|
|
10046
|
+
if (!sandboxConfig) {
|
|
10047
|
+
return null;
|
|
10048
|
+
}
|
|
10049
|
+
if (sandboxConfig.ucic) {
|
|
10050
|
+
return { org_user_id: sandboxConfig.ucic };
|
|
10051
|
+
}
|
|
10052
|
+
return sandboxConfig.subject.includes("@") ? { primary_email: sandboxConfig.subject } : { primary_mobile: sandboxConfig.subject };
|
|
10053
|
+
};
|
|
10054
|
+
var sandboxQueryIdentity = () => sandboxBodyIdentity();
|
|
10055
|
+
var sandboxContact = () => sandboxConfig ? sandboxConfig.ucic || sandboxConfig.subject : null;
|
|
10056
|
+
|
|
9866
10057
|
// src/RedactoPrivacyCenter/api/fetcher.ts
|
|
10058
|
+
var ApiError = class _ApiError extends Error {
|
|
10059
|
+
constructor(message, options = {}) {
|
|
10060
|
+
super(message);
|
|
10061
|
+
this.name = "ApiError";
|
|
10062
|
+
this.status = options.status;
|
|
10063
|
+
this.detail = options.detail;
|
|
10064
|
+
Object.setPrototypeOf(this, _ApiError.prototype);
|
|
10065
|
+
}
|
|
10066
|
+
};
|
|
10067
|
+
var TERMINAL_REFRESH_STATUSES = /* @__PURE__ */ new Set([400, 401, 403, 422]);
|
|
10068
|
+
function isTerminalRefreshError(error) {
|
|
10069
|
+
const e = error;
|
|
10070
|
+
if (!e) return false;
|
|
10071
|
+
if (typeof e.status === "number") {
|
|
10072
|
+
return TERMINAL_REFRESH_STATUSES.has(e.status);
|
|
10073
|
+
}
|
|
10074
|
+
const message = (typeof e.message === "string" ? e.message : "").toLowerCase();
|
|
10075
|
+
if (!message) return false;
|
|
10076
|
+
return message.includes("expired") || message.includes("revoked") || message.includes("not found") || message.includes("already used") || message.includes("invalid refresh token") || message.includes("unauthorized") || message.includes("[401]") || message.includes("[403]");
|
|
10077
|
+
}
|
|
9867
10078
|
async function apiFetch(url, options = {}) {
|
|
9868
10079
|
const { getAuthToken, headers = {}, ...fetchOptions } = options;
|
|
9869
10080
|
const requestHeaders = new Headers();
|
|
@@ -9888,11 +10099,18 @@ async function apiFetch(url, options = {}) {
|
|
|
9888
10099
|
}
|
|
9889
10100
|
}
|
|
9890
10101
|
if (getAuthToken) {
|
|
9891
|
-
const
|
|
9892
|
-
if (
|
|
9893
|
-
|
|
9894
|
-
|
|
9895
|
-
|
|
10102
|
+
const sandboxHeaders = sandboxAuthHeaders();
|
|
10103
|
+
if (sandboxHeaders) {
|
|
10104
|
+
Object.entries(sandboxHeaders).forEach(([key, value]) => {
|
|
10105
|
+
requestHeaders.set(key, value);
|
|
10106
|
+
});
|
|
10107
|
+
} else {
|
|
10108
|
+
const token = await getAuthToken();
|
|
10109
|
+
if (token) {
|
|
10110
|
+
const trimmedToken = token.trim();
|
|
10111
|
+
requestHeaders.set("X-Auth-Token", trimmedToken);
|
|
10112
|
+
requestHeaders.set("x-auth-token", trimmedToken);
|
|
10113
|
+
}
|
|
9896
10114
|
}
|
|
9897
10115
|
}
|
|
9898
10116
|
const fetchOptionsFinal = {
|
|
@@ -9921,7 +10139,7 @@ async function apiFetch(url, options = {}) {
|
|
|
9921
10139
|
} catch {
|
|
9922
10140
|
}
|
|
9923
10141
|
}
|
|
9924
|
-
throw new
|
|
10142
|
+
throw new ApiError(errorMessage, { status: response.status });
|
|
9925
10143
|
}
|
|
9926
10144
|
const contentLength = response.headers.get("Content-Length");
|
|
9927
10145
|
const contentType = response.headers.get("Content-Type") || "";
|
|
@@ -9983,14 +10201,29 @@ function arrayBufferToBase64(buffer) {
|
|
|
9983
10201
|
return result;
|
|
9984
10202
|
}
|
|
9985
10203
|
function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
9986
|
-
const
|
|
10204
|
+
const ledgerConfigured = Boolean(ledgerBaseUrl);
|
|
10205
|
+
const useLedger = () => ledgerConfigured && !isSandboxMode();
|
|
9987
10206
|
const ledgerBase = (ledgerBaseUrl != null ? ledgerBaseUrl : "").replace(/\/$/, "");
|
|
9988
10207
|
function ledgerUrl(baseRequest, path) {
|
|
9989
|
-
if (!useLedger) {
|
|
10208
|
+
if (!useLedger()) {
|
|
9990
10209
|
throw new Error("ledgerUrl called without a configured ledgerBaseUrl");
|
|
9991
10210
|
}
|
|
9992
10211
|
return `${ledgerBase}/public/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}${path}`;
|
|
9993
10212
|
}
|
|
10213
|
+
function appendSandboxIdentity(queryParams) {
|
|
10214
|
+
const identity = sandboxQueryIdentity();
|
|
10215
|
+
if (identity) {
|
|
10216
|
+
Object.entries(identity).forEach(([key, value]) => {
|
|
10217
|
+
queryParams.append(key, value);
|
|
10218
|
+
});
|
|
10219
|
+
}
|
|
10220
|
+
}
|
|
10221
|
+
function sandboxIdentitySuffix() {
|
|
10222
|
+
const queryParams = new URLSearchParams();
|
|
10223
|
+
appendSandboxIdentity(queryParams);
|
|
10224
|
+
const queryString = queryParams.toString();
|
|
10225
|
+
return queryString ? `?${queryString}` : "";
|
|
10226
|
+
}
|
|
9994
10227
|
async function privacyCenterApiFetch(url, options) {
|
|
9995
10228
|
const { authToken, getAuthToken, headers = {}, ...fetchOptions } = options;
|
|
9996
10229
|
const requestHeaders = new Headers();
|
|
@@ -10014,11 +10247,18 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10014
10247
|
);
|
|
10015
10248
|
}
|
|
10016
10249
|
}
|
|
10017
|
-
const
|
|
10018
|
-
if (
|
|
10019
|
-
|
|
10020
|
-
|
|
10021
|
-
|
|
10250
|
+
const sandboxHeaders = sandboxAuthHeaders();
|
|
10251
|
+
if (sandboxHeaders) {
|
|
10252
|
+
Object.entries(sandboxHeaders).forEach(([key, value]) => {
|
|
10253
|
+
requestHeaders.set(key, value);
|
|
10254
|
+
});
|
|
10255
|
+
} else {
|
|
10256
|
+
const token = authToken || (getAuthToken ? await getAuthToken() : null);
|
|
10257
|
+
if (token) {
|
|
10258
|
+
const trimmedToken = token.trim();
|
|
10259
|
+
const bearerToken = trimmedToken.startsWith("Bearer ") ? trimmedToken : `Bearer ${trimmedToken}`;
|
|
10260
|
+
requestHeaders.set("Authorization", bearerToken);
|
|
10261
|
+
}
|
|
10022
10262
|
}
|
|
10023
10263
|
const fetchOptionsFinal = {
|
|
10024
10264
|
...fetchOptions,
|
|
@@ -10099,18 +10339,20 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10099
10339
|
async createCaseRequest(baseRequest, payload, authToken, options) {
|
|
10100
10340
|
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/case`;
|
|
10101
10341
|
const { useSessionAuth = false, getAuthToken, ...fetchOptions } = options || {};
|
|
10342
|
+
const contact = sandboxContact();
|
|
10343
|
+
const requestPayload = contact && payload && typeof payload === "object" ? { ...payload, contact } : payload;
|
|
10102
10344
|
if (useSessionAuth) {
|
|
10103
10345
|
return apiFetch(url, {
|
|
10104
10346
|
...fetchOptions,
|
|
10105
10347
|
method: "POST",
|
|
10106
|
-
body: JSON.stringify(
|
|
10348
|
+
body: JSON.stringify(requestPayload),
|
|
10107
10349
|
getAuthToken
|
|
10108
10350
|
});
|
|
10109
10351
|
}
|
|
10110
10352
|
return privacyCenterApiFetch(url, {
|
|
10111
10353
|
...fetchOptions,
|
|
10112
10354
|
method: "POST",
|
|
10113
|
-
body: JSON.stringify(
|
|
10355
|
+
body: JSON.stringify(requestPayload),
|
|
10114
10356
|
authToken: authToken || baseRequest.authToken
|
|
10115
10357
|
});
|
|
10116
10358
|
},
|
|
@@ -10191,9 +10433,10 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10191
10433
|
if (params.status) queryParams.append("status", params.status);
|
|
10192
10434
|
if (params.product_uuid) queryParams.append("product_uuid", params.product_uuid);
|
|
10193
10435
|
if (params.language) queryParams.append("language", params.language);
|
|
10436
|
+
appendSandboxIdentity(queryParams);
|
|
10194
10437
|
const queryString = queryParams.toString();
|
|
10195
10438
|
const consentsSuffix = `/user-consents${queryString ? `?${queryString}` : ""}`;
|
|
10196
|
-
const url = useLedger ? ledgerUrl(baseRequest, consentsSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${consentsSuffix}`;
|
|
10439
|
+
const url = useLedger() ? ledgerUrl(baseRequest, consentsSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${consentsSuffix}`;
|
|
10197
10440
|
return privacyCenterApiFetch(url, {
|
|
10198
10441
|
...options,
|
|
10199
10442
|
method: "GET",
|
|
@@ -10212,9 +10455,10 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10212
10455
|
if (params.search) queryParams.append("search", params.search);
|
|
10213
10456
|
if (params.language) queryParams.append("language", params.language);
|
|
10214
10457
|
if (params.nominator_uuid) queryParams.append("nominator_uuid", params.nominator_uuid);
|
|
10458
|
+
appendSandboxIdentity(queryParams);
|
|
10215
10459
|
const queryString = queryParams.toString();
|
|
10216
10460
|
const purposesSuffix = `/user-consents/${productUuid}/purposes${queryString ? `?${queryString}` : ""}`;
|
|
10217
|
-
const url = useLedger ? ledgerUrl(baseRequest, purposesSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${purposesSuffix}`;
|
|
10461
|
+
const url = useLedger() ? ledgerUrl(baseRequest, purposesSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${purposesSuffix}`;
|
|
10218
10462
|
return privacyCenterApiFetch(url, {
|
|
10219
10463
|
...options,
|
|
10220
10464
|
method: "GET",
|
|
@@ -10235,16 +10479,23 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10235
10479
|
* Without a ledger, the legacy Python `/manage-consent?status=` endpoint is
|
|
10236
10480
|
* used with its `{ purpose_uuid, contact, ... }` payload.
|
|
10237
10481
|
*/
|
|
10238
|
-
async manageConsent(baseRequest, purposeId, contact, status, authToken, options, nominatorContact, dataElementUuids, noticeUuid, dataElements) {
|
|
10239
|
-
if (!useLedger) {
|
|
10482
|
+
async manageConsent(baseRequest, purposeId, contact, status, authToken, options, nominatorContact, dataElementUuids, noticeUuid, dataElements, language) {
|
|
10483
|
+
if (!useLedger()) {
|
|
10240
10484
|
const url2 = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/manage-consent?status=${status}`;
|
|
10241
|
-
const
|
|
10485
|
+
const sandboxSingleContact = sandboxContact();
|
|
10486
|
+
const body2 = {
|
|
10487
|
+
purpose_uuid: purposeId,
|
|
10488
|
+
contact: sandboxSingleContact != null ? sandboxSingleContact : contact
|
|
10489
|
+
};
|
|
10242
10490
|
if (nominatorContact) {
|
|
10243
10491
|
body2.nominator_contact = nominatorContact;
|
|
10244
10492
|
}
|
|
10245
10493
|
if (Array.isArray(dataElementUuids) && dataElementUuids.length > 0) {
|
|
10246
10494
|
body2.data_element_uuids = dataElementUuids;
|
|
10247
10495
|
}
|
|
10496
|
+
if (language) {
|
|
10497
|
+
body2.language = language;
|
|
10498
|
+
}
|
|
10248
10499
|
return privacyCenterApiFetch(url2, {
|
|
10249
10500
|
...options,
|
|
10250
10501
|
method: "POST",
|
|
@@ -10279,7 +10530,8 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10279
10530
|
selected: purposeSelected,
|
|
10280
10531
|
data_elements: elements
|
|
10281
10532
|
}
|
|
10282
|
-
]
|
|
10533
|
+
],
|
|
10534
|
+
...language ? { language } : {}
|
|
10283
10535
|
};
|
|
10284
10536
|
const url = ledgerUrl(baseRequest, "/submit-consent");
|
|
10285
10537
|
return privacyCenterApiFetch(url, {
|
|
@@ -10297,6 +10549,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10297
10549
|
if (offset !== void 0) queryParams.append("offset", offset.toString());
|
|
10298
10550
|
if (limit !== void 0) queryParams.append("limit", limit.toString());
|
|
10299
10551
|
if (language) queryParams.append("language", language);
|
|
10552
|
+
appendSandboxIdentity(queryParams);
|
|
10300
10553
|
const queryString = queryParams.toString();
|
|
10301
10554
|
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/activities${queryString ? `?${queryString}` : ""}`;
|
|
10302
10555
|
return privacyCenterApiFetch(url, {
|
|
@@ -10304,6 +10557,32 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10304
10557
|
authToken: authToken || baseRequest.authToken
|
|
10305
10558
|
});
|
|
10306
10559
|
},
|
|
10560
|
+
/**
|
|
10561
|
+
* List all data principals that share this session's contact
|
|
10562
|
+
* (shared-contact profile picker). Identity is derived server-side from the
|
|
10563
|
+
* JWT — the caller sends nothing but its bearer token.
|
|
10564
|
+
*/
|
|
10565
|
+
async listIdentities(baseRequest, authToken, options) {
|
|
10566
|
+
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/identities`;
|
|
10567
|
+
return privacyCenterApiFetch(url, {
|
|
10568
|
+
...options,
|
|
10569
|
+
authToken: authToken || baseRequest.authToken
|
|
10570
|
+
});
|
|
10571
|
+
},
|
|
10572
|
+
/**
|
|
10573
|
+
* Re-scope the session to a chosen principal uuid (must be one of the
|
|
10574
|
+
* principals sharing this session's contact). Returns fresh access/refresh
|
|
10575
|
+
* tokens scoped to that principal.
|
|
10576
|
+
*/
|
|
10577
|
+
async selectPrincipal(baseRequest, principalUuid, authToken, options) {
|
|
10578
|
+
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/identities/select`;
|
|
10579
|
+
return privacyCenterApiFetch(url, {
|
|
10580
|
+
...options,
|
|
10581
|
+
method: "POST",
|
|
10582
|
+
body: JSON.stringify({ uuid: principalUuid }),
|
|
10583
|
+
authToken: authToken || baseRequest.authToken
|
|
10584
|
+
});
|
|
10585
|
+
},
|
|
10307
10586
|
/**
|
|
10308
10587
|
* Get receipts (privacy center)
|
|
10309
10588
|
*/
|
|
@@ -10317,9 +10596,10 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10317
10596
|
if (params.created_before) queryParams.append("created_before", params.created_before);
|
|
10318
10597
|
if (params.notice_uuid) queryParams.append("notice_uuid", params.notice_uuid);
|
|
10319
10598
|
if (params.language) queryParams.append("language", params.language);
|
|
10599
|
+
appendSandboxIdentity(queryParams);
|
|
10320
10600
|
const queryString = queryParams.toString();
|
|
10321
10601
|
const receiptsSuffix = `/receipts${queryString ? `?${queryString}` : ""}`;
|
|
10322
|
-
const url = useLedger ? ledgerUrl(baseRequest, receiptsSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${receiptsSuffix}`;
|
|
10602
|
+
const url = useLedger() ? ledgerUrl(baseRequest, receiptsSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${receiptsSuffix}`;
|
|
10323
10603
|
return privacyCenterApiFetch(url, {
|
|
10324
10604
|
...options,
|
|
10325
10605
|
method: "GET",
|
|
@@ -10333,11 +10613,16 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10333
10613
|
* the RN UI writes to a temp file to open/share. 404 => not found.
|
|
10334
10614
|
*/
|
|
10335
10615
|
async getReceiptPdf(baseRequest, receiptUuid, authToken) {
|
|
10336
|
-
const url = useLedger ? ledgerUrl(baseRequest, `/receipts/${receiptUuid}/download`) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/receipts/${receiptUuid}/pdf`;
|
|
10616
|
+
const url = useLedger() ? ledgerUrl(baseRequest, `/receipts/${receiptUuid}/download`) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/receipts/${receiptUuid}/pdf`;
|
|
10337
10617
|
const token = authToken || baseRequest.authToken;
|
|
10338
10618
|
const requestHeaders = new Headers();
|
|
10339
10619
|
requestHeaders.set("Accept", "application/pdf");
|
|
10340
|
-
|
|
10620
|
+
const sandboxHeaders = sandboxAuthHeaders();
|
|
10621
|
+
if (sandboxHeaders) {
|
|
10622
|
+
Object.entries(sandboxHeaders).forEach(([key, value]) => {
|
|
10623
|
+
requestHeaders.set(key, value);
|
|
10624
|
+
});
|
|
10625
|
+
} else if (token) {
|
|
10341
10626
|
const trimmedToken = token.trim();
|
|
10342
10627
|
const bearerToken = trimmedToken.startsWith("Bearer ") ? trimmedToken : `Bearer ${trimmedToken}`;
|
|
10343
10628
|
requestHeaders.set("Authorization", bearerToken);
|
|
@@ -10363,6 +10648,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10363
10648
|
if (offset !== void 0) queryParams.append("offset", offset.toString());
|
|
10364
10649
|
if (limit !== void 0) queryParams.append("limit", limit.toString());
|
|
10365
10650
|
if (language) queryParams.append("language", language);
|
|
10651
|
+
appendSandboxIdentity(queryParams);
|
|
10366
10652
|
const queryString = queryParams.toString();
|
|
10367
10653
|
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases?${queryString}`;
|
|
10368
10654
|
return privacyCenterApiFetch(url, {
|
|
@@ -10374,7 +10660,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10374
10660
|
* Get case messages (privacy center)
|
|
10375
10661
|
*/
|
|
10376
10662
|
async getCaseMessages(baseRequest, caseUuid, authToken, options) {
|
|
10377
|
-
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/messages`;
|
|
10663
|
+
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/messages${sandboxIdentitySuffix()}`;
|
|
10378
10664
|
return privacyCenterApiFetch(url, {
|
|
10379
10665
|
...options,
|
|
10380
10666
|
authToken: authToken || baseRequest.authToken
|
|
@@ -10384,7 +10670,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10384
10670
|
* Send a message in a case (privacy center)
|
|
10385
10671
|
*/
|
|
10386
10672
|
async sendCaseMessage(baseRequest, caseUuid, body, documentUuids, authToken, options) {
|
|
10387
|
-
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/messages`;
|
|
10673
|
+
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/messages${sandboxIdentitySuffix()}`;
|
|
10388
10674
|
return privacyCenterApiFetch(url, {
|
|
10389
10675
|
...options,
|
|
10390
10676
|
method: "POST",
|
|
@@ -10396,7 +10682,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10396
10682
|
* Upload a document for a case (privacy center)
|
|
10397
10683
|
*/
|
|
10398
10684
|
async uploadCaseDocument(baseRequest, caseUuid, formData, authToken, options) {
|
|
10399
|
-
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/upload-document`;
|
|
10685
|
+
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/upload-document${sandboxIdentitySuffix()}`;
|
|
10400
10686
|
return privacyCenterApiFetch(url, {
|
|
10401
10687
|
...options,
|
|
10402
10688
|
method: "POST",
|
|
@@ -10429,6 +10715,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10429
10715
|
if ((params == null ? void 0 : params.limit) !== void 0) queryParams.append("limit", params.limit.toString());
|
|
10430
10716
|
if (params == null ? void 0 : params.include_summary) queryParams.append("include_summary", "true");
|
|
10431
10717
|
if (params == null ? void 0 : params.language) queryParams.append("language", params.language);
|
|
10718
|
+
appendSandboxIdentity(queryParams);
|
|
10432
10719
|
const queryString = queryParams.toString();
|
|
10433
10720
|
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${queryString ? `?${queryString}` : ""}`;
|
|
10434
10721
|
return privacyCenterApiFetch(url, {
|
|
@@ -10440,7 +10727,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10440
10727
|
* Get notification summary (aggregated counts only)
|
|
10441
10728
|
*/
|
|
10442
10729
|
async getNotificationSummary(baseRequest, authToken) {
|
|
10443
|
-
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/summary`;
|
|
10730
|
+
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/summary${sandboxIdentitySuffix()}`;
|
|
10444
10731
|
return privacyCenterApiFetch(url, {
|
|
10445
10732
|
method: "GET",
|
|
10446
10733
|
authToken: authToken || baseRequest.authToken
|
|
@@ -10450,7 +10737,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10450
10737
|
* Get unread notification count (lightweight, for the header badge)
|
|
10451
10738
|
*/
|
|
10452
10739
|
async getUnreadCount(baseRequest, authToken) {
|
|
10453
|
-
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/unread-count`;
|
|
10740
|
+
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/unread-count${sandboxIdentitySuffix()}`;
|
|
10454
10741
|
return privacyCenterApiFetch(url, {
|
|
10455
10742
|
method: "GET",
|
|
10456
10743
|
authToken: authToken || baseRequest.authToken
|
|
@@ -10460,7 +10747,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10460
10747
|
* Mark a single notification as read
|
|
10461
10748
|
*/
|
|
10462
10749
|
async markNotificationRead(baseRequest, notificationUuid, authToken) {
|
|
10463
|
-
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${notificationUuid}/read`;
|
|
10750
|
+
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${notificationUuid}/read${sandboxIdentitySuffix()}`;
|
|
10464
10751
|
return privacyCenterApiFetch(url, {
|
|
10465
10752
|
method: "PATCH",
|
|
10466
10753
|
authToken: authToken || baseRequest.authToken
|
|
@@ -10470,7 +10757,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10470
10757
|
* Mark all notifications as read
|
|
10471
10758
|
*/
|
|
10472
10759
|
async markAllNotificationsRead(baseRequest, authToken) {
|
|
10473
|
-
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/mark-all-read`;
|
|
10760
|
+
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/mark-all-read${sandboxIdentitySuffix()}`;
|
|
10474
10761
|
return privacyCenterApiFetch(url, {
|
|
10475
10762
|
method: "POST",
|
|
10476
10763
|
authToken: authToken || baseRequest.authToken
|
|
@@ -10480,7 +10767,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
|
|
|
10480
10767
|
* Acknowledge a notification (sets is_read and is_acknowledged to true)
|
|
10481
10768
|
*/
|
|
10482
10769
|
async acknowledgeNotification(baseRequest, notificationUuid, authToken) {
|
|
10483
|
-
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${notificationUuid}/acknowledge`;
|
|
10770
|
+
const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${notificationUuid}/acknowledge${sandboxIdentitySuffix()}`;
|
|
10484
10771
|
return privacyCenterApiFetch(url, {
|
|
10485
10772
|
method: "POST",
|
|
10486
10773
|
authToken: authToken || baseRequest.authToken
|
|
@@ -10719,7 +11006,8 @@ async function manageConsentServer(params) {
|
|
|
10719
11006
|
params.nominatorContact,
|
|
10720
11007
|
params.dataElementUuids,
|
|
10721
11008
|
params.noticeUuid,
|
|
10722
|
-
params.dataElements
|
|
11009
|
+
params.dataElements,
|
|
11010
|
+
params.language
|
|
10723
11011
|
);
|
|
10724
11012
|
if (result && typeof result === "object" && "success" in result) {
|
|
10725
11013
|
return Boolean(result.success);
|
|
@@ -11210,7 +11498,8 @@ var manageConsent = async ({
|
|
|
11210
11498
|
nominatorContact,
|
|
11211
11499
|
dataElementUuids,
|
|
11212
11500
|
noticeUuid,
|
|
11213
|
-
dataElements
|
|
11501
|
+
dataElements,
|
|
11502
|
+
language
|
|
11214
11503
|
}) => {
|
|
11215
11504
|
try {
|
|
11216
11505
|
const accessToken = await ensureValidToken(organizationId, workspaceId, void 0, authContext, consentClient);
|
|
@@ -11228,7 +11517,8 @@ var manageConsent = async ({
|
|
|
11228
11517
|
nominatorContact,
|
|
11229
11518
|
dataElementUuids,
|
|
11230
11519
|
noticeUuid,
|
|
11231
|
-
dataElements
|
|
11520
|
+
dataElements,
|
|
11521
|
+
language
|
|
11232
11522
|
});
|
|
11233
11523
|
return result;
|
|
11234
11524
|
} catch (error) {
|
|
@@ -11249,7 +11539,8 @@ var manageConsent = async ({
|
|
|
11249
11539
|
nominatorContact,
|
|
11250
11540
|
dataElementUuids,
|
|
11251
11541
|
noticeUuid,
|
|
11252
|
-
dataElements
|
|
11542
|
+
dataElements,
|
|
11543
|
+
language
|
|
11253
11544
|
});
|
|
11254
11545
|
}
|
|
11255
11546
|
console.error(`Error ${action} consent:`, error);
|
|
@@ -11588,6 +11879,40 @@ var acknowledgeNotification = async (organizationId, workspaceId, notificationUu
|
|
|
11588
11879
|
var isRefreshing = false;
|
|
11589
11880
|
var refreshPromise = null;
|
|
11590
11881
|
var TOKEN_EXPIRY_BUFFER_SECONDS = 30;
|
|
11882
|
+
var deadRefreshToken = null;
|
|
11883
|
+
var transientRefreshFailureUntil = 0;
|
|
11884
|
+
var transientRefreshBackoffMs = 0;
|
|
11885
|
+
var MIN_REFRESH_BACKOFF_MS = 3e4;
|
|
11886
|
+
var MAX_REFRESH_BACKOFF_MS = 3e5;
|
|
11887
|
+
var sessionExpiredListener = null;
|
|
11888
|
+
var setSessionExpiredListener = (fn) => {
|
|
11889
|
+
sessionExpiredListener = fn;
|
|
11890
|
+
};
|
|
11891
|
+
var notifySessionExpired = () => {
|
|
11892
|
+
sessionExpiredListener == null ? void 0 : sessionExpiredListener();
|
|
11893
|
+
};
|
|
11894
|
+
var activeRefreshToken = (authContext) => (authContext == null ? void 0 : authContext.refreshToken) || getStoredValue("refresh_token") || null;
|
|
11895
|
+
var isRefreshBlocked = (authContext) => {
|
|
11896
|
+
const active = activeRefreshToken(authContext);
|
|
11897
|
+
if (active !== null && active === deadRefreshToken) return true;
|
|
11898
|
+
return Date.now() < transientRefreshFailureUntil;
|
|
11899
|
+
};
|
|
11900
|
+
var noteTransientRefreshFailure = () => {
|
|
11901
|
+
transientRefreshBackoffMs = Math.min(
|
|
11902
|
+
Math.max(transientRefreshBackoffMs * 2, MIN_REFRESH_BACKOFF_MS),
|
|
11903
|
+
MAX_REFRESH_BACKOFF_MS
|
|
11904
|
+
);
|
|
11905
|
+
transientRefreshFailureUntil = Date.now() + transientRefreshBackoffMs;
|
|
11906
|
+
};
|
|
11907
|
+
var markRefreshTokenDead = (token) => {
|
|
11908
|
+
if (token) deadRefreshToken = token;
|
|
11909
|
+
notifySessionExpired();
|
|
11910
|
+
};
|
|
11911
|
+
var resetRefreshCircuit = () => {
|
|
11912
|
+
deadRefreshToken = null;
|
|
11913
|
+
transientRefreshFailureUntil = 0;
|
|
11914
|
+
transientRefreshBackoffMs = 0;
|
|
11915
|
+
};
|
|
11591
11916
|
var tokenStore = {};
|
|
11592
11917
|
var getStoredValue = (key) => {
|
|
11593
11918
|
var _a3;
|
|
@@ -11643,6 +11968,18 @@ var decodeJwtToken = (token) => {
|
|
|
11643
11968
|
return null;
|
|
11644
11969
|
}
|
|
11645
11970
|
};
|
|
11971
|
+
var resolveContactFromJwt = (decoded) => {
|
|
11972
|
+
if (!decoded) {
|
|
11973
|
+
return null;
|
|
11974
|
+
}
|
|
11975
|
+
const userData = decoded.user_data || {};
|
|
11976
|
+
const candidate = decoded.contact || decoded.primary_email || userData.primary_email || userData.primary_mobile || userData.org_user_id;
|
|
11977
|
+
if (typeof candidate !== "string") {
|
|
11978
|
+
return null;
|
|
11979
|
+
}
|
|
11980
|
+
const contact = candidate.trim();
|
|
11981
|
+
return contact === "" ? null : contact;
|
|
11982
|
+
};
|
|
11646
11983
|
var isJwtExpired = (token, bufferSeconds = 30) => {
|
|
11647
11984
|
if (!token || typeof token !== "string") return true;
|
|
11648
11985
|
try {
|
|
@@ -11669,11 +12006,16 @@ var compareEmails = (email1, email2) => {
|
|
|
11669
12006
|
return decodeURIComponent(email1.trim()).toLowerCase() === email2.trim().toLowerCase();
|
|
11670
12007
|
};
|
|
11671
12008
|
var ensureValidToken = async (organizationId, workspaceId, _slug, authContext, consentClient) => {
|
|
12009
|
+
const sandbox = getSandboxConfig();
|
|
12010
|
+
if (sandbox) {
|
|
12011
|
+
return sandbox.token;
|
|
12012
|
+
}
|
|
11672
12013
|
const accessToken = (authContext == null ? void 0 : authContext.accessToken) || getStoredValue("access_token");
|
|
11673
12014
|
if (accessToken && typeof accessToken === "string" && accessToken.trim() !== "" && !isJwtExpired(accessToken, TOKEN_EXPIRY_BUFFER_SECONDS)) {
|
|
11674
12015
|
return accessToken;
|
|
11675
12016
|
}
|
|
11676
12017
|
if (isRefreshing && refreshPromise) return refreshPromise;
|
|
12018
|
+
if (isRefreshBlocked(authContext)) return null;
|
|
11677
12019
|
isRefreshing = true;
|
|
11678
12020
|
refreshPromise = performTokenRefresh(
|
|
11679
12021
|
organizationId,
|
|
@@ -11701,6 +12043,7 @@ var performTokenRefresh = async (organizationId, workspaceId, authContext, conse
|
|
|
11701
12043
|
if (!refreshToken || typeof refreshToken !== "string" || refreshToken.trim() === "") {
|
|
11702
12044
|
if (authContext == null ? void 0 : authContext.onError)
|
|
11703
12045
|
authContext.onError(new Error("No refresh token available"));
|
|
12046
|
+
notifySessionExpired();
|
|
11704
12047
|
signOutPrivacyCenter();
|
|
11705
12048
|
return null;
|
|
11706
12049
|
}
|
|
@@ -11730,11 +12073,13 @@ var performTokenRefresh = async (organizationId, workspaceId, authContext, conse
|
|
|
11730
12073
|
if (newRefreshToken)
|
|
11731
12074
|
setStoredValue("refresh_token", newRefreshToken);
|
|
11732
12075
|
}
|
|
12076
|
+
resetRefreshCircuit();
|
|
11733
12077
|
return newAccessToken;
|
|
11734
12078
|
}
|
|
11735
12079
|
}
|
|
11736
12080
|
if (authContext == null ? void 0 : authContext.onError)
|
|
11737
12081
|
authContext.onError(new Error("Refresh token expired or revoked"));
|
|
12082
|
+
markRefreshTokenDead(refreshToken);
|
|
11738
12083
|
signOutPrivacyCenter();
|
|
11739
12084
|
return null;
|
|
11740
12085
|
} catch (error) {
|
|
@@ -11742,7 +12087,12 @@ var performTokenRefresh = async (organizationId, workspaceId, authContext, conse
|
|
|
11742
12087
|
authContext.onError(
|
|
11743
12088
|
error instanceof Error ? error : new Error(String(error))
|
|
11744
12089
|
);
|
|
11745
|
-
|
|
12090
|
+
if (isTerminalRefreshError(error)) {
|
|
12091
|
+
markRefreshTokenDead(refreshToken);
|
|
12092
|
+
signOutPrivacyCenter();
|
|
12093
|
+
} else {
|
|
12094
|
+
noteTransientRefreshFailure();
|
|
12095
|
+
}
|
|
11746
12096
|
return null;
|
|
11747
12097
|
}
|
|
11748
12098
|
};
|
|
@@ -11770,6 +12120,23 @@ var formatDateTime = (timestamp) => {
|
|
|
11770
12120
|
hours = hours % 12 || 12;
|
|
11771
12121
|
return `${month} ${day}, ${year} at ${hours}:${minutes} ${ampm}`;
|
|
11772
12122
|
};
|
|
12123
|
+
var extractCaseRef = (response) => {
|
|
12124
|
+
if (!response || typeof response !== "object") {
|
|
12125
|
+
return null;
|
|
12126
|
+
}
|
|
12127
|
+
const wrapper = response;
|
|
12128
|
+
const candidates = [wrapper.detail, response];
|
|
12129
|
+
for (const candidate of candidates) {
|
|
12130
|
+
if (!candidate || typeof candidate !== "object") {
|
|
12131
|
+
continue;
|
|
12132
|
+
}
|
|
12133
|
+
const { case_id: caseId, uuid } = candidate;
|
|
12134
|
+
if (caseId || uuid) {
|
|
12135
|
+
return { case_id: caseId != null ? caseId : "", uuid: uuid != null ? uuid : "" };
|
|
12136
|
+
}
|
|
12137
|
+
}
|
|
12138
|
+
return null;
|
|
12139
|
+
};
|
|
11773
12140
|
var generateUuid = () => {
|
|
11774
12141
|
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
|
11775
12142
|
const r = Math.random() * 16 | 0;
|
|
@@ -11789,10 +12156,10 @@ function extractJwtAuthData(token) {
|
|
|
11789
12156
|
if (!decoded) {
|
|
11790
12157
|
return { email: null, organizationId: null, workspaceId: null, organizationName: null };
|
|
11791
12158
|
}
|
|
11792
|
-
const
|
|
11793
|
-
const userEmail = decoded.contact || decoded.primary_email || decoded.email || decoded.user_uuid || decoded.sub || (userData && typeof userData === "object" ? userData.primary_email || userData.email || userData.contact : null) || null;
|
|
12159
|
+
const contact = resolveContactFromJwt(decoded);
|
|
11794
12160
|
return {
|
|
11795
|
-
|
|
12161
|
+
// `resolveContactFromJwt` already returns a trimmed, non-empty string or null.
|
|
12162
|
+
email: contact,
|
|
11796
12163
|
organizationId: decoded.organisation_uuid || null,
|
|
11797
12164
|
workspaceId: decoded.workspace_uuid || null,
|
|
11798
12165
|
organizationName: decoded.organisation_name || null
|
|
@@ -11801,20 +12168,82 @@ function extractJwtAuthData(token) {
|
|
|
11801
12168
|
function syncJwtDataToStore(token) {
|
|
11802
12169
|
const authData = extractJwtAuthData(token);
|
|
11803
12170
|
setStoredValue("access_token", token);
|
|
11804
|
-
if (authData.email)
|
|
12171
|
+
if (authData.email) {
|
|
12172
|
+
setStoredValue("email", authData.email);
|
|
12173
|
+
} else {
|
|
12174
|
+
removeStoredValue("email");
|
|
12175
|
+
}
|
|
11805
12176
|
if (authData.organizationId) setStoredValue("pc_org_id", authData.organizationId);
|
|
11806
12177
|
if (authData.workspaceId) setStoredValue("pc_workspace_id", authData.workspaceId);
|
|
11807
12178
|
return authData;
|
|
11808
12179
|
}
|
|
11809
|
-
function
|
|
11810
|
-
|
|
12180
|
+
function configureSandbox(props) {
|
|
12181
|
+
var _a3, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
12182
|
+
const token = (_a3 = props.token) == null ? void 0 : _a3.trim();
|
|
12183
|
+
if (!token) {
|
|
12184
|
+
setSandboxConfig(null);
|
|
12185
|
+
return null;
|
|
12186
|
+
}
|
|
12187
|
+
const organisationUuid = (_c = (_b = props.organisationUuid) == null ? void 0 : _b.trim()) != null ? _c : "";
|
|
12188
|
+
const workspaceUuid = (_e = (_d = props.workspaceUuid) == null ? void 0 : _d.trim()) != null ? _e : "";
|
|
12189
|
+
const ucic = (_g = (_f = props.sandboxUcic) == null ? void 0 : _f.trim()) != null ? _g : "";
|
|
12190
|
+
const subject = (_i = (_h = props.sandboxSubject) == null ? void 0 : _h.trim()) != null ? _i : "";
|
|
12191
|
+
const slug = (_k = (_j = props.slug) == null ? void 0 : _j.trim()) != null ? _k : "";
|
|
12192
|
+
if (!organisationUuid || !workspaceUuid) {
|
|
12193
|
+
throw new Error("Sandbox mode requires organisationUuid and workspaceUuid props");
|
|
12194
|
+
}
|
|
12195
|
+
if (!ucic && !subject) {
|
|
12196
|
+
throw new Error("Sandbox mode requires a UCIC, email, or mobile");
|
|
12197
|
+
}
|
|
12198
|
+
setSandboxConfig({
|
|
12199
|
+
token,
|
|
12200
|
+
ucic: ucic || void 0,
|
|
12201
|
+
subject,
|
|
12202
|
+
organisationUuid,
|
|
12203
|
+
workspaceUuid,
|
|
12204
|
+
slug
|
|
12205
|
+
});
|
|
12206
|
+
const contact = ucic || subject;
|
|
12207
|
+
setStoredValue("access_token", token);
|
|
12208
|
+
if (organisationUuid) setStoredValue("pc_org_id", organisationUuid);
|
|
12209
|
+
if (workspaceUuid) setStoredValue("pc_workspace_id", workspaceUuid);
|
|
12210
|
+
if (contact) setStoredValue("email", contact);
|
|
12211
|
+
return {
|
|
12212
|
+
email: contact || null,
|
|
12213
|
+
organizationId: organisationUuid || null,
|
|
12214
|
+
workspaceId: workspaceUuid || null,
|
|
12215
|
+
organizationName: null
|
|
12216
|
+
};
|
|
12217
|
+
}
|
|
12218
|
+
function AuthProvider(props) {
|
|
12219
|
+
const {
|
|
12220
|
+
children,
|
|
12221
|
+
accessToken: initialAccessToken,
|
|
12222
|
+
refreshToken: initialRefreshToken,
|
|
12223
|
+
token: sandboxToken,
|
|
12224
|
+
sandboxUcic,
|
|
12225
|
+
sandboxSubject,
|
|
12226
|
+
organisationUuid,
|
|
12227
|
+
workspaceUuid,
|
|
12228
|
+
slug,
|
|
12229
|
+
onError
|
|
12230
|
+
} = props;
|
|
12231
|
+
const [sandboxAuth] = (0, import_react3.useState)(() => configureSandbox(props));
|
|
12232
|
+
const sandboxActive = sandboxAuth !== null;
|
|
12233
|
+
const initialAuth = sandboxAuth != null ? sandboxAuth : extractJwtAuthData(initialAccessToken);
|
|
11811
12234
|
const [accessToken, setAccessToken] = (0, import_react3.useState)(() => {
|
|
12235
|
+
if (sandboxActive) {
|
|
12236
|
+
return sandboxToken != null ? sandboxToken : "";
|
|
12237
|
+
}
|
|
11812
12238
|
if (initialAccessToken && initialAccessToken.trim() !== "") {
|
|
11813
12239
|
syncJwtDataToStore(initialAccessToken);
|
|
11814
12240
|
}
|
|
11815
12241
|
return initialAccessToken;
|
|
11816
12242
|
});
|
|
11817
12243
|
const [refreshToken, setRefreshToken] = (0, import_react3.useState)(() => {
|
|
12244
|
+
if (sandboxActive) {
|
|
12245
|
+
return "";
|
|
12246
|
+
}
|
|
11818
12247
|
if (initialRefreshToken && initialRefreshToken.trim() !== "") {
|
|
11819
12248
|
setStoredValue("refresh_token", initialRefreshToken);
|
|
11820
12249
|
}
|
|
@@ -11825,6 +12254,20 @@ function AuthProvider({ children, accessToken: initialAccessToken, refreshToken:
|
|
|
11825
12254
|
const [workspaceId, setWorkspaceId] = (0, import_react3.useState)(initialAuth.workspaceId);
|
|
11826
12255
|
const [organizationName, setOrganizationName] = (0, import_react3.useState)(initialAuth.organizationName);
|
|
11827
12256
|
(0, import_react3.useEffect)(() => {
|
|
12257
|
+
if (!sandboxActive) {
|
|
12258
|
+
return;
|
|
12259
|
+
}
|
|
12260
|
+
const seeded = configureSandbox(props);
|
|
12261
|
+
if (seeded) {
|
|
12262
|
+
setEmail(seeded.email);
|
|
12263
|
+
setOrganizationId(seeded.organizationId);
|
|
12264
|
+
setWorkspaceId(seeded.workspaceId);
|
|
12265
|
+
setOrganizationName(seeded.organizationName);
|
|
12266
|
+
}
|
|
12267
|
+
return () => setSandboxConfig(null);
|
|
12268
|
+
}, [sandboxActive, sandboxToken, sandboxUcic, sandboxSubject, organisationUuid, workspaceUuid, slug]);
|
|
12269
|
+
(0, import_react3.useEffect)(() => {
|
|
12270
|
+
if (sandboxActive) return;
|
|
11828
12271
|
if (accessToken) {
|
|
11829
12272
|
const authData = syncJwtDataToStore(accessToken);
|
|
11830
12273
|
setEmail(authData.email);
|
|
@@ -11832,11 +12275,13 @@ function AuthProvider({ children, accessToken: initialAccessToken, refreshToken:
|
|
|
11832
12275
|
setWorkspaceId(authData.workspaceId);
|
|
11833
12276
|
setOrganizationName(authData.organizationName);
|
|
11834
12277
|
}
|
|
11835
|
-
}, [accessToken]);
|
|
12278
|
+
}, [accessToken, sandboxActive]);
|
|
11836
12279
|
(0, import_react3.useEffect)(() => {
|
|
12280
|
+
if (sandboxActive) return;
|
|
11837
12281
|
if (refreshToken) setStoredValue("refresh_token", refreshToken);
|
|
11838
|
-
}, [refreshToken]);
|
|
12282
|
+
}, [refreshToken, sandboxActive]);
|
|
11839
12283
|
(0, import_react3.useEffect)(() => {
|
|
12284
|
+
if (sandboxActive) return;
|
|
11840
12285
|
setAccessToken(initialAccessToken);
|
|
11841
12286
|
if (initialAccessToken && initialAccessToken.trim() !== "") {
|
|
11842
12287
|
const authData = syncJwtDataToStore(initialAccessToken);
|
|
@@ -11845,10 +12290,11 @@ function AuthProvider({ children, accessToken: initialAccessToken, refreshToken:
|
|
|
11845
12290
|
setWorkspaceId(authData.workspaceId);
|
|
11846
12291
|
setOrganizationName(authData.organizationName);
|
|
11847
12292
|
}
|
|
11848
|
-
}, [initialAccessToken]);
|
|
12293
|
+
}, [initialAccessToken, sandboxActive]);
|
|
11849
12294
|
(0, import_react3.useEffect)(() => {
|
|
12295
|
+
if (sandboxActive) return;
|
|
11850
12296
|
setRefreshToken(initialRefreshToken);
|
|
11851
|
-
}, [initialRefreshToken]);
|
|
12297
|
+
}, [initialRefreshToken, sandboxActive]);
|
|
11852
12298
|
const updateTokens = (0, import_react3.useCallback)((newAccessToken, newRefreshToken) => {
|
|
11853
12299
|
setAccessToken(newAccessToken);
|
|
11854
12300
|
if (newRefreshToken) setRefreshToken(newRefreshToken);
|
|
@@ -12091,8 +12537,17 @@ function DataAvailabilityProvider({ children }) {
|
|
|
12091
12537
|
mountedRef.current = false;
|
|
12092
12538
|
};
|
|
12093
12539
|
}, []);
|
|
12540
|
+
(0, import_react7.useEffect)(() => {
|
|
12541
|
+
setSessionExpiredListener(() => {
|
|
12542
|
+
if (!mountedRef.current) return;
|
|
12543
|
+
runIdRef.current += 1;
|
|
12544
|
+
setStatus("session-expired");
|
|
12545
|
+
});
|
|
12546
|
+
return () => setSessionExpiredListener(null);
|
|
12547
|
+
}, []);
|
|
12094
12548
|
const runCheck = (0, import_react7.useCallback)(async () => {
|
|
12095
12549
|
if (!organizationId || !workspaceId) return;
|
|
12550
|
+
if (isRefreshBlocked(authContext)) return;
|
|
12096
12551
|
const runId = ++runIdRef.current;
|
|
12097
12552
|
setStatus("checking");
|
|
12098
12553
|
const contact = email;
|
|
@@ -14120,7 +14575,7 @@ var import_react_i18next11 = require("react-i18next");
|
|
|
14120
14575
|
|
|
14121
14576
|
// src/RedactoPrivacyCenter/lib/consentManagerUtils.ts
|
|
14122
14577
|
function purposeItemToUserConsent(purpose, group) {
|
|
14123
|
-
var _a3, _b, _c, _d;
|
|
14578
|
+
var _a3, _b, _c, _d, _e;
|
|
14124
14579
|
return {
|
|
14125
14580
|
purpose_uuid: purpose.purpose_uuid,
|
|
14126
14581
|
purpose: purpose.name,
|
|
@@ -14133,7 +14588,9 @@ function purposeItemToUserConsent(purpose, group) {
|
|
|
14133
14588
|
product_uuid: group.product_uuid,
|
|
14134
14589
|
product_name: group.product_name,
|
|
14135
14590
|
product_description: group.product_description,
|
|
14136
|
-
nominator_info: (_d = group.nominator) != null ? _d : void 0
|
|
14591
|
+
nominator_info: (_d = group.nominator) != null ? _d : void 0,
|
|
14592
|
+
revoke_warning_message: (_e = purpose.revoke_warning_message) != null ? _e : null,
|
|
14593
|
+
notice_uuid: purpose.notice_uuid
|
|
14137
14594
|
};
|
|
14138
14595
|
}
|
|
14139
14596
|
function getDisplayProductGroups(detail, tab) {
|
|
@@ -14211,7 +14668,7 @@ var ConsentStatusEnum = /* @__PURE__ */ ((ConsentStatusEnum2) => {
|
|
|
14211
14668
|
return ConsentStatusEnum2;
|
|
14212
14669
|
})(ConsentStatusEnum || {});
|
|
14213
14670
|
|
|
14214
|
-
// src/
|
|
14671
|
+
// src/shared/languages.ts
|
|
14215
14672
|
var languageOptions = [
|
|
14216
14673
|
{ value: "en", label: "English" },
|
|
14217
14674
|
{ value: "hi", label: "\u0939\u093F\u0928\u094D\u0926\u0940 (Hindi)" },
|
|
@@ -14237,6 +14694,17 @@ var languageOptions = [
|
|
|
14237
14694
|
{ value: "ks", label: "\u0643\u0672\u0634\u064F\u0631 (Kashmiri)" },
|
|
14238
14695
|
{ value: "sat", label: "\u1C65\u1C5F\u1C71\u1C5B\u1C5F\u1C72\u1C64 (Santali)" }
|
|
14239
14696
|
];
|
|
14697
|
+
var codeByLabel = new Map(languageOptions.map((o) => [o.label, o.value]));
|
|
14698
|
+
var codeByLower = new Map(languageOptions.map((o) => [o.value.toLowerCase(), o.value]));
|
|
14699
|
+
var englishName = (label) => {
|
|
14700
|
+
var _a3, _b;
|
|
14701
|
+
return (_b = (_a3 = label.match(/\(([^)]+)\)\s*$/)) == null ? void 0 : _a3[1]) != null ? _b : label;
|
|
14702
|
+
};
|
|
14703
|
+
var codeByName = new Map(
|
|
14704
|
+
languageOptions.map((o) => [englishName(o.label).toLowerCase(), o.value])
|
|
14705
|
+
);
|
|
14706
|
+
|
|
14707
|
+
// src/RedactoPrivacyCenter/lib/constants.ts
|
|
14240
14708
|
var PAGE_CHROME_BY_PAGE = {
|
|
14241
14709
|
home: {
|
|
14242
14710
|
titleKey: "privacyCenter",
|
|
@@ -14314,7 +14782,14 @@ var useTimePeriodOptions = () => {
|
|
|
14314
14782
|
);
|
|
14315
14783
|
};
|
|
14316
14784
|
var MAX_DISPLAYED_PURPOSE_NAMES_IN_ERASURE_MODAL = 3;
|
|
14785
|
+
var PRODUCT_SCOPED_REQUEST_TYPES = [
|
|
14786
|
+
"ACCESS" /* ACCESS */,
|
|
14787
|
+
"erasure" /* ERASURE */,
|
|
14788
|
+
"CORRECTION" /* CORRECTION */
|
|
14789
|
+
];
|
|
14317
14790
|
var SEARCH_DEBOUNCE_DELAY = 500;
|
|
14791
|
+
var FORM_PICKER_GROUP_LIMIT = 100;
|
|
14792
|
+
var LEGACY_PRODUCT_GROUP_UUID = "__legacy_flat_purposes__";
|
|
14318
14793
|
var POLL_INTERVAL = 3e4;
|
|
14319
14794
|
var NOTIFICATION_PAGE_SIZE = 10;
|
|
14320
14795
|
var TAB_TO_CATEGORY = {
|
|
@@ -14417,7 +14892,7 @@ var ModifyConsentModal = ({
|
|
|
14417
14892
|
action: "revoke",
|
|
14418
14893
|
buttonLabel: t("revokeConsent"),
|
|
14419
14894
|
buttonColor: colors.error,
|
|
14420
|
-
warningMessage: t("revokeConsentWarning"),
|
|
14895
|
+
warningMessage: selectedRecord.revoke_warning_message || t("revokeConsentWarning"),
|
|
14421
14896
|
description: nominatorLabel ? t("aboutToModifyConsentOnBehalf", { nominator: nominatorLabel }) : t("aboutToModifyConsent")
|
|
14422
14897
|
};
|
|
14423
14898
|
}
|
|
@@ -15088,7 +15563,8 @@ function ConsentManager() {
|
|
|
15088
15563
|
dataElements: (_b = selectedRecord == null ? void 0 : selectedRecord.data_elements) == null ? void 0 : _b.map((de) => ({
|
|
15089
15564
|
uuid: de.uuid,
|
|
15090
15565
|
selected: de.selected
|
|
15091
|
-
}))
|
|
15566
|
+
})),
|
|
15567
|
+
language: langParam
|
|
15092
15568
|
});
|
|
15093
15569
|
setIsModalOpen(false);
|
|
15094
15570
|
setSelectedRecord(null);
|
|
@@ -15100,7 +15576,7 @@ function ConsentManager() {
|
|
|
15100
15576
|
setIsManageLoading(false);
|
|
15101
15577
|
}
|
|
15102
15578
|
},
|
|
15103
|
-
[organizationId, workspaceId, email, authContext, consentClient, selectedRecord, fetchData, t]
|
|
15579
|
+
[organizationId, workspaceId, email, authContext, consentClient, selectedRecord, langParam, fetchData, t]
|
|
15104
15580
|
);
|
|
15105
15581
|
const handleExport = (0, import_react25.useCallback)(async () => {
|
|
15106
15582
|
if (!consentData.length) return;
|
|
@@ -15463,6 +15939,7 @@ function ActivitiesList() {
|
|
|
15463
15939
|
() => ({ accessToken, refreshToken, onError, updateTokens }),
|
|
15464
15940
|
[accessToken, refreshToken, onError, updateTokens]
|
|
15465
15941
|
);
|
|
15942
|
+
const { langParam } = useCurrentLanguage();
|
|
15466
15943
|
const [activities, setActivities] = (0, import_react26.useState)([]);
|
|
15467
15944
|
const [totalCount, setTotalCount] = (0, import_react26.useState)(0);
|
|
15468
15945
|
const [isLoading, setIsLoading] = (0, import_react26.useState)(true);
|
|
@@ -15474,7 +15951,7 @@ function ActivitiesList() {
|
|
|
15474
15951
|
var _a3, _b, _c;
|
|
15475
15952
|
if (!organizationId || !workspaceId) return;
|
|
15476
15953
|
try {
|
|
15477
|
-
const response = await fetchActivities(organizationId, workspaceId, nextOffset, PAGE_SIZE, authContext, consentClient);
|
|
15954
|
+
const response = await fetchActivities(organizationId, workspaceId, nextOffset, PAGE_SIZE, authContext, consentClient, langParam);
|
|
15478
15955
|
if (!response) return;
|
|
15479
15956
|
const rows = (_a3 = response.data) != null ? _a3 : [];
|
|
15480
15957
|
setActivities((prev) => append ? [...prev, ...rows] : rows);
|
|
@@ -15485,7 +15962,7 @@ function ActivitiesList() {
|
|
|
15485
15962
|
if (!append) setActivities([]);
|
|
15486
15963
|
}
|
|
15487
15964
|
},
|
|
15488
|
-
[organizationId, workspaceId, authContext, consentClient]
|
|
15965
|
+
[organizationId, workspaceId, authContext, consentClient, langParam]
|
|
15489
15966
|
);
|
|
15490
15967
|
(0, import_react26.useEffect)(() => {
|
|
15491
15968
|
setIsLoading(true);
|
|
@@ -15615,10 +16092,10 @@ var import_react_i18next14 = require("react-i18next");
|
|
|
15615
16092
|
// src/RedactoPrivacyCenter/lib/dateGroup.ts
|
|
15616
16093
|
var import_react27 = require("react");
|
|
15617
16094
|
var import_react_i18next13 = require("react-i18next");
|
|
15618
|
-
function monthKey(ts) {
|
|
16095
|
+
function monthKey(ts, locale) {
|
|
15619
16096
|
if (!ts) return "";
|
|
15620
16097
|
try {
|
|
15621
|
-
return new Date(ts).toLocaleDateString(void 0, { month: "long", year: "numeric" });
|
|
16098
|
+
return new Date(ts).toLocaleDateString(locale || void 0, { month: "long", year: "numeric" });
|
|
15622
16099
|
} catch {
|
|
15623
16100
|
return "";
|
|
15624
16101
|
}
|
|
@@ -15694,7 +16171,7 @@ function groupByTime(items, getTs, classify) {
|
|
|
15694
16171
|
);
|
|
15695
16172
|
}
|
|
15696
16173
|
function useRelativeDate() {
|
|
15697
|
-
const { t } = (0, import_react_i18next13.useTranslation)();
|
|
16174
|
+
const { t, i18n: i18n2 } = (0, import_react_i18next13.useTranslation)();
|
|
15698
16175
|
return (0, import_react27.useCallback)(
|
|
15699
16176
|
(ts) => {
|
|
15700
16177
|
if (!ts) return "";
|
|
@@ -15707,7 +16184,7 @@ function useRelativeDate() {
|
|
|
15707
16184
|
if (dayDiff <= 0) return t("today", { defaultValue: "Today" });
|
|
15708
16185
|
if (dayDiff === 1) return t("yesterday", { defaultValue: "Yesterday" });
|
|
15709
16186
|
if (dayDiff < 7) return t("daysAgo", { count: dayDiff, defaultValue: "{{count}} days ago" });
|
|
15710
|
-
return d.toLocaleDateString(void 0, {
|
|
16187
|
+
return d.toLocaleDateString(i18n2.language || void 0, {
|
|
15711
16188
|
month: "short",
|
|
15712
16189
|
day: "numeric",
|
|
15713
16190
|
...d.getFullYear() !== now.getFullYear() ? { year: "numeric" } : {}
|
|
@@ -15716,10 +16193,28 @@ function useRelativeDate() {
|
|
|
15716
16193
|
return ts;
|
|
15717
16194
|
}
|
|
15718
16195
|
},
|
|
15719
|
-
[t]
|
|
16196
|
+
[t, i18n2.language]
|
|
15720
16197
|
);
|
|
15721
16198
|
}
|
|
15722
16199
|
|
|
16200
|
+
// src/RedactoPrivacyCenter/lib/receiptEvent.ts
|
|
16201
|
+
function eventLabelKey(eventType) {
|
|
16202
|
+
const v = String(eventType || "").toUpperCase();
|
|
16203
|
+
if (v.includes("GRANT")) {
|
|
16204
|
+
return "consentGranted";
|
|
16205
|
+
}
|
|
16206
|
+
if (v.includes("WITHDRAW") || v.includes("REVOK")) {
|
|
16207
|
+
return "consentRevoked";
|
|
16208
|
+
}
|
|
16209
|
+
if (v.includes("DECLIN")) {
|
|
16210
|
+
return "consentDeclined";
|
|
16211
|
+
}
|
|
16212
|
+
if (v.includes("EXPIR")) {
|
|
16213
|
+
return "consentExpired";
|
|
16214
|
+
}
|
|
16215
|
+
return void 0;
|
|
16216
|
+
}
|
|
16217
|
+
|
|
15723
16218
|
// src/RedactoPrivacyCenter/components/ReceiptsList.tsx
|
|
15724
16219
|
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
15725
16220
|
var PAGE_SIZE2 = 10;
|
|
@@ -15755,11 +16250,10 @@ function receiptBadgeStatus(eventType) {
|
|
|
15755
16250
|
if (v.includes("EXPIR")) return "warning";
|
|
15756
16251
|
return "secondary";
|
|
15757
16252
|
}
|
|
15758
|
-
var ReceiptRow = import_react28.default.memo(({ item, colors, downloading, onDownload, downloadLabel, dateLabel }) => {
|
|
16253
|
+
var ReceiptRow = import_react28.default.memo(({ item, colors, downloading, onDownload, downloadLabel, dateLabel, eventLabel }) => {
|
|
15759
16254
|
const product = item.product_name_display || item.product_name || "";
|
|
15760
|
-
const
|
|
15761
|
-
const
|
|
15762
|
-
const badgeLabel = event || "-";
|
|
16255
|
+
const primary = product || eventLabel || "-";
|
|
16256
|
+
const badgeLabel = eventLabel || "-";
|
|
15763
16257
|
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_react_native41.View, { style: styles31.row, children: [
|
|
15764
16258
|
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(NameAvatar, { name: primary, seed: item.uuid || primary, size: "sm" }),
|
|
15765
16259
|
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_react_native41.View, { style: styles31.body, children: [
|
|
@@ -15786,7 +16280,7 @@ var ReceiptRow = import_react28.default.memo(({ item, colors, downloading, onDow
|
|
|
15786
16280
|
});
|
|
15787
16281
|
ReceiptRow.displayName = "ReceiptRow";
|
|
15788
16282
|
function ReceiptsList() {
|
|
15789
|
-
const { t } = (0, import_react_i18next14.useTranslation)();
|
|
16283
|
+
const { t, i18n: i18n2 } = (0, import_react_i18next14.useTranslation)();
|
|
15790
16284
|
const { accessToken, refreshToken, organizationId, workspaceId, updateTokens, onError } = useAuth();
|
|
15791
16285
|
const { consentClient } = useBaseUrl();
|
|
15792
16286
|
const { colors } = useTheme();
|
|
@@ -15871,14 +16365,18 @@ function ReceiptsList() {
|
|
|
15871
16365
|
const sections = (0, import_react28.useMemo)(() => {
|
|
15872
16366
|
const map = /* @__PURE__ */ new Map();
|
|
15873
16367
|
for (const r of receipts) {
|
|
15874
|
-
const key = monthKey(r.created_at);
|
|
16368
|
+
const key = monthKey(r.created_at, i18n2.language);
|
|
15875
16369
|
const arr = map.get(key);
|
|
15876
16370
|
if (arr) arr.push(r);
|
|
15877
16371
|
else map.set(key, [r]);
|
|
15878
16372
|
}
|
|
15879
16373
|
return Array.from(map, ([title, data]) => ({ title, data }));
|
|
15880
|
-
}, [receipts]);
|
|
16374
|
+
}, [receipts, i18n2.language]);
|
|
15881
16375
|
const downloadLabel = t("download") || "Download";
|
|
16376
|
+
const eventLabelFor = (r) => {
|
|
16377
|
+
const key = eventLabelKey(r.event_type);
|
|
16378
|
+
return key ? t(key) : r.event_type_display || r.event_type || "-";
|
|
16379
|
+
};
|
|
15882
16380
|
const handleScroll = (0, import_react28.useCallback)(
|
|
15883
16381
|
(e) => {
|
|
15884
16382
|
const { layoutMeasurement, contentOffset, contentSize } = e.nativeEvent;
|
|
@@ -15960,7 +16458,8 @@ function ReceiptsList() {
|
|
|
15960
16458
|
downloading: downloadingUuid === item.uuid,
|
|
15961
16459
|
onDownload: handleDownload,
|
|
15962
16460
|
downloadLabel,
|
|
15963
|
-
dateLabel: relativeLabel(item.created_at)
|
|
16461
|
+
dateLabel: relativeLabel(item.created_at),
|
|
16462
|
+
eventLabel: eventLabelFor(item)
|
|
15964
16463
|
}
|
|
15965
16464
|
)
|
|
15966
16465
|
] }, `${item.uuid || item.created_at}-${index}`)) }, section2.title)),
|
|
@@ -16108,6 +16607,25 @@ var uploadFileWithS2S = async ({
|
|
|
16108
16607
|
}
|
|
16109
16608
|
};
|
|
16110
16609
|
|
|
16610
|
+
// src/RedactoPrivacyCenter/lib/requestType.ts
|
|
16611
|
+
var isRequestType = (requestType, expected) => typeof requestType === "string" && requestType.toLowerCase() === expected.toLowerCase();
|
|
16612
|
+
var isProductScopedRequestType = (requestType) => PRODUCT_SCOPED_REQUEST_TYPES.some((type) => isRequestType(requestType, type));
|
|
16613
|
+
|
|
16614
|
+
// src/RedactoPrivacyCenter/lib/erasureConsent.ts
|
|
16615
|
+
var isErasureRequestType = (requestType) => isRequestType(requestType, "erasure" /* ERASURE */);
|
|
16616
|
+
var resolveErasurePurposeNames = (purposeNames, fallback) => {
|
|
16617
|
+
if (purposeNames.length === 0 || purposeNames.length > MAX_DISPLAYED_PURPOSE_NAMES_IN_ERASURE_MODAL) {
|
|
16618
|
+
return fallback;
|
|
16619
|
+
}
|
|
16620
|
+
return purposeNames.join(", ");
|
|
16621
|
+
};
|
|
16622
|
+
var erasureConsentPayload = (requestType, revokeConsentOnFulfilment) => {
|
|
16623
|
+
if (!isErasureRequestType(requestType)) {
|
|
16624
|
+
return {};
|
|
16625
|
+
}
|
|
16626
|
+
return { revoke_consent_on_fulfilment: revokeConsentOnFulfilment };
|
|
16627
|
+
};
|
|
16628
|
+
|
|
16111
16629
|
// src/RedactoPrivacyCenter/lib/filePicker.ts
|
|
16112
16630
|
var import_react_native42 = require("react-native");
|
|
16113
16631
|
async function pickFile() {
|
|
@@ -16271,6 +16789,54 @@ var styles32 = import_react_native43.StyleSheet.create({
|
|
|
16271
16789
|
|
|
16272
16790
|
// src/RedactoPrivacyCenter/components/groupHelpers.ts
|
|
16273
16791
|
var productGroupKey = (group) => group.nominator ? `${group.product_uuid}:${group.nominator.uuid}` : group.product_uuid;
|
|
16792
|
+
var consentGroupToFormProductGroup = (group) => {
|
|
16793
|
+
var _a3;
|
|
16794
|
+
return {
|
|
16795
|
+
product_uuid: group.product_uuid,
|
|
16796
|
+
product_name: group.product_name,
|
|
16797
|
+
product_description: group.product_description,
|
|
16798
|
+
nominator: group.nominator,
|
|
16799
|
+
purposes: ((_a3 = group.purposes) != null ? _a3 : []).map(purposeItemToFormPurpose)
|
|
16800
|
+
};
|
|
16801
|
+
};
|
|
16802
|
+
var purposeItemToFormPurpose = (purpose) => {
|
|
16803
|
+
var _a3, _b, _c, _d, _e, _f;
|
|
16804
|
+
return {
|
|
16805
|
+
// The ledger keys purposes as `purpose_uuid`; the legacy Python
|
|
16806
|
+
// user-consents payload keys some of them as `uuid`. Accept either so the
|
|
16807
|
+
// picker and the submitted `purpose_uuid` resolve on both backends.
|
|
16808
|
+
uuid: (_b = (_a3 = purpose.purpose_uuid) != null ? _a3 : purpose.uuid) != null ? _b : "",
|
|
16809
|
+
purpose_uuid: (_d = (_c = purpose.purpose_uuid) != null ? _c : purpose.uuid) != null ? _d : "",
|
|
16810
|
+
name: purpose.name,
|
|
16811
|
+
description: (_e = purpose.description) != null ? _e : "",
|
|
16812
|
+
industries: "",
|
|
16813
|
+
selected: false,
|
|
16814
|
+
given_consent: false,
|
|
16815
|
+
status: purpose.status,
|
|
16816
|
+
validity: null,
|
|
16817
|
+
enabled: true,
|
|
16818
|
+
data_elements: ((_f = purpose.data_elements) != null ? _f : []).map(consentDataElementToFormDataElement)
|
|
16819
|
+
};
|
|
16820
|
+
};
|
|
16821
|
+
var legacyFlatGroup = (form, label) => {
|
|
16822
|
+
var _a3;
|
|
16823
|
+
return {
|
|
16824
|
+
product_uuid: LEGACY_PRODUCT_GROUP_UUID,
|
|
16825
|
+
product_name: label,
|
|
16826
|
+
product_description: null,
|
|
16827
|
+
nominator: null,
|
|
16828
|
+
purposes: ((_a3 = form.purposes) != null ? _a3 : []).map((wrapper) => wrapper == null ? void 0 : wrapper.purpose).filter((purpose) => Boolean(purpose))
|
|
16829
|
+
};
|
|
16830
|
+
};
|
|
16831
|
+
var consentDataElementToFormDataElement = (element) => ({
|
|
16832
|
+
uuid: element.uuid,
|
|
16833
|
+
name: element.name,
|
|
16834
|
+
description: "",
|
|
16835
|
+
enabled: element.enabled,
|
|
16836
|
+
required: element.required,
|
|
16837
|
+
given_consent: element.selected,
|
|
16838
|
+
selected: element.selected
|
|
16839
|
+
});
|
|
16274
16840
|
var buildGroupPurposes = (group) => group.purposes.filter((p) => p !== null && p !== void 0).map((p) => {
|
|
16275
16841
|
const validDataElements = Array.isArray(p.data_elements) ? p.data_elements.filter((de) => de !== null && de !== void 0 && Boolean(de.uuid)).map((de) => ({ ...de, selected: false })) : [];
|
|
16276
16842
|
return {
|
|
@@ -16296,12 +16862,6 @@ var buildGroupDataElements = (group) => {
|
|
|
16296
16862
|
// src/RedactoPrivacyCenter/components/Form.tsx
|
|
16297
16863
|
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
16298
16864
|
var TOTAL_STEPS = 3;
|
|
16299
|
-
var PRODUCT_SCOPED_REQUEST_TYPES = /* @__PURE__ */ new Set([
|
|
16300
|
-
"ACCESS" /* ACCESS */,
|
|
16301
|
-
"erasure" /* ERASURE */,
|
|
16302
|
-
"CORRECTION" /* CORRECTION */
|
|
16303
|
-
]);
|
|
16304
|
-
var isProductScopedRequestType = (rt) => PRODUCT_SCOPED_REQUEST_TYPES.has(rt);
|
|
16305
16865
|
function Form({ onCreateRequest }) {
|
|
16306
16866
|
const { t } = (0, import_react_i18next16.useTranslation)();
|
|
16307
16867
|
const { accessToken, refreshToken, email, organizationId, workspaceId, updateTokens, onError } = useAuth();
|
|
@@ -16342,23 +16902,78 @@ function Form({ onCreateRequest }) {
|
|
|
16342
16902
|
});
|
|
16343
16903
|
const [uploadedDocs, setUploadedDocs] = (0, import_react29.useState)([]);
|
|
16344
16904
|
const [isUploading, setIsUploading] = (0, import_react29.useState)(false);
|
|
16905
|
+
const withUserConsentPickerGroups = (0, import_react29.useCallback)(
|
|
16906
|
+
async (form, language) => {
|
|
16907
|
+
var _a3, _b;
|
|
16908
|
+
if (!organizationId || !workspaceId) {
|
|
16909
|
+
return form;
|
|
16910
|
+
}
|
|
16911
|
+
const consents = await fetchUserConsents({
|
|
16912
|
+
organizationId,
|
|
16913
|
+
workspaceId,
|
|
16914
|
+
// No status filter: include every status (active / expired / withdrawn
|
|
16915
|
+
// / declined), matching Python form/data, so a DSAR can target products
|
|
16916
|
+
// the user no longer actively consents to.
|
|
16917
|
+
limit: FORM_PICKER_GROUP_LIMIT,
|
|
16918
|
+
nominatedLimit: FORM_PICKER_GROUP_LIMIT,
|
|
16919
|
+
language,
|
|
16920
|
+
authContext,
|
|
16921
|
+
consentClient
|
|
16922
|
+
});
|
|
16923
|
+
const direct = (_a3 = consents == null ? void 0 : consents.direct) != null ? _a3 : [];
|
|
16924
|
+
const nominated = (_b = consents == null ? void 0 : consents.nominated) != null ? _b : [];
|
|
16925
|
+
if (direct.length === 0 && nominated.length === 0) {
|
|
16926
|
+
return form;
|
|
16927
|
+
}
|
|
16928
|
+
return {
|
|
16929
|
+
...form,
|
|
16930
|
+
direct_groups: direct.map(consentGroupToFormProductGroup),
|
|
16931
|
+
nominated_groups: nominated.map(consentGroupToFormProductGroup)
|
|
16932
|
+
};
|
|
16933
|
+
},
|
|
16934
|
+
[organizationId, workspaceId, authContext, consentClient]
|
|
16935
|
+
);
|
|
16345
16936
|
(0, import_react29.useEffect)(() => {
|
|
16346
16937
|
if (!organizationId || !workspaceId || !contact) return;
|
|
16938
|
+
let isCancelled = false;
|
|
16347
16939
|
setIsLoading(true);
|
|
16348
|
-
getFormData(organizationId, workspaceId, contact, false, false, authContext, consentClient, langParam).then((data) => {
|
|
16349
|
-
if (data)
|
|
16940
|
+
getFormData(organizationId, workspaceId, contact, false, false, authContext, consentClient, langParam).then(async (data) => {
|
|
16941
|
+
if (!data) return;
|
|
16942
|
+
const withGroups = await withUserConsentPickerGroups(data, langParam);
|
|
16943
|
+
if (!isCancelled) setFormDataResponse(withGroups);
|
|
16350
16944
|
}).catch((error) => {
|
|
16351
16945
|
console.warn("Error fetching form data:", error);
|
|
16352
|
-
}).finally(() =>
|
|
16353
|
-
|
|
16946
|
+
}).finally(() => {
|
|
16947
|
+
if (!isCancelled) setIsLoading(false);
|
|
16948
|
+
});
|
|
16949
|
+
return () => {
|
|
16950
|
+
isCancelled = true;
|
|
16951
|
+
};
|
|
16952
|
+
}, [
|
|
16953
|
+
organizationId,
|
|
16954
|
+
workspaceId,
|
|
16955
|
+
contact,
|
|
16956
|
+
authContext,
|
|
16957
|
+
consentClient,
|
|
16958
|
+
langParam,
|
|
16959
|
+
withUserConsentPickerGroups
|
|
16960
|
+
]);
|
|
16354
16961
|
const allGroups = (0, import_react29.useMemo)(() => {
|
|
16355
16962
|
var _a3, _b;
|
|
16356
16963
|
if (!formDataResponse) return [];
|
|
16357
|
-
|
|
16964
|
+
const groups = [
|
|
16358
16965
|
...(_a3 = formDataResponse.direct_groups) != null ? _a3 : [],
|
|
16359
16966
|
...(_b = formDataResponse.nominated_groups) != null ? _b : []
|
|
16360
16967
|
];
|
|
16361
|
-
|
|
16968
|
+
if (groups.length > 0) {
|
|
16969
|
+
return groups;
|
|
16970
|
+
}
|
|
16971
|
+
const flatGroup = legacyFlatGroup(formDataResponse, t("yourData"));
|
|
16972
|
+
if (buildGroupPurposes(flatGroup).length === 0) {
|
|
16973
|
+
return [];
|
|
16974
|
+
}
|
|
16975
|
+
return [flatGroup];
|
|
16976
|
+
}, [formDataResponse, t]);
|
|
16362
16977
|
const skipProductStep = allGroups.length === 1;
|
|
16363
16978
|
const selectedGroup = (0, import_react29.useMemo)(() => {
|
|
16364
16979
|
var _a3, _b;
|
|
@@ -16390,7 +17005,7 @@ function Form({ onCreateRequest }) {
|
|
|
16390
17005
|
setSelectedProductKey(null);
|
|
16391
17006
|
}
|
|
16392
17007
|
setNominationData({ nominee_email: "", nominee_mobile: "" });
|
|
16393
|
-
if (requestType
|
|
17008
|
+
if (isRequestType(requestType, "grievance" /* GRIEVANCE */) && grievanceOptions.length > 0) {
|
|
16394
17009
|
const resetGrievances = grievanceOptions.reduce(
|
|
16395
17010
|
(acc, option) => {
|
|
16396
17011
|
acc[option.value] = false;
|
|
@@ -16419,12 +17034,10 @@ function Form({ onCreateRequest }) {
|
|
|
16419
17034
|
() => groupPurposes.filter((p) => selectedPurposes.has(p.uuid)).map((p) => p.name).filter(Boolean),
|
|
16420
17035
|
[groupPurposes, selectedPurposes]
|
|
16421
17036
|
);
|
|
16422
|
-
const selectedErasurePurposeNames = (0, import_react29.useMemo)(
|
|
16423
|
-
|
|
16424
|
-
|
|
16425
|
-
|
|
16426
|
-
return selectedErasurePurposeList.join(", ");
|
|
16427
|
-
}, [selectedErasurePurposeList, t]);
|
|
17037
|
+
const selectedErasurePurposeNames = (0, import_react29.useMemo)(
|
|
17038
|
+
() => resolveErasurePurposeNames(selectedErasurePurposeList, t("revokeConsentModalYourPurposes")),
|
|
17039
|
+
[selectedErasurePurposeList, t]
|
|
17040
|
+
);
|
|
16428
17041
|
const togglePurpose = (0, import_react29.useCallback)(
|
|
16429
17042
|
(purpose) => {
|
|
16430
17043
|
const uuid = purpose.uuid;
|
|
@@ -16531,7 +17144,7 @@ function Form({ onCreateRequest }) {
|
|
|
16531
17144
|
if (isProductScopedRequestType(requestType)) {
|
|
16532
17145
|
if (allGroups.length === 0) return false;
|
|
16533
17146
|
if (!selectedGroup) return false;
|
|
16534
|
-
if (requestType
|
|
17147
|
+
if (isRequestType(requestType, "CORRECTION" /* CORRECTION */)) {
|
|
16535
17148
|
if (selectedCorrectionFields.size === 0) return false;
|
|
16536
17149
|
return Array.from(selectedCorrectionFields).every((fieldUuid) => {
|
|
16537
17150
|
var _a3, _b;
|
|
@@ -16539,15 +17152,15 @@ function Form({ onCreateRequest }) {
|
|
|
16539
17152
|
return Boolean(((_a3 = v == null ? void 0 : v.current) == null ? void 0 : _a3.trim()) && ((_b = v == null ? void 0 : v.updated) == null ? void 0 : _b.trim()));
|
|
16540
17153
|
});
|
|
16541
17154
|
}
|
|
16542
|
-
if (requestType
|
|
17155
|
+
if (isRequestType(requestType, "ACCESS" /* ACCESS */) || isErasureRequestType(requestType)) {
|
|
16543
17156
|
return selectedPurposes.size > 0;
|
|
16544
17157
|
}
|
|
16545
17158
|
return false;
|
|
16546
17159
|
}
|
|
16547
|
-
if (requestType
|
|
17160
|
+
if (isRequestType(requestType, "grievance" /* GRIEVANCE */)) {
|
|
16548
17161
|
return Object.values(selectedGrievances).some(Boolean);
|
|
16549
17162
|
}
|
|
16550
|
-
if (requestType
|
|
17163
|
+
if (isRequestType(requestType, "nomination" /* NOMINATION */)) {
|
|
16551
17164
|
return Boolean(nominationData.nominee_email);
|
|
16552
17165
|
}
|
|
16553
17166
|
return false;
|
|
@@ -16561,9 +17174,17 @@ function Form({ onCreateRequest }) {
|
|
|
16561
17174
|
selectedGrievances,
|
|
16562
17175
|
nominationData
|
|
16563
17176
|
]);
|
|
16564
|
-
const isFormValid = (0, import_react29.useMemo)(
|
|
17177
|
+
const isFormValid = (0, import_react29.useMemo)(
|
|
17178
|
+
() => Boolean(contact.trim()) && detailsValid && confirmChecked,
|
|
17179
|
+
[contact, detailsValid, confirmChecked]
|
|
17180
|
+
);
|
|
16565
17181
|
const handleUpload = (0, import_react29.useCallback)(async () => {
|
|
16566
17182
|
if (!organizationId || !workspaceId) return;
|
|
17183
|
+
const caseUuid = formDataResponse == null ? void 0 : formDataResponse.uuid;
|
|
17184
|
+
if (!caseUuid) {
|
|
17185
|
+
import_react_native44.Alert.alert(t("uploadFile"), t("unableToUpload") || "Unable to upload file. Please try again.");
|
|
17186
|
+
return;
|
|
17187
|
+
}
|
|
16567
17188
|
try {
|
|
16568
17189
|
const file = await pickFile();
|
|
16569
17190
|
if (!file) return;
|
|
@@ -16580,11 +17201,11 @@ function Form({ onCreateRequest }) {
|
|
|
16580
17201
|
"payload",
|
|
16581
17202
|
JSON.stringify({
|
|
16582
17203
|
organization_uuid: organizationId || "",
|
|
16583
|
-
space: `privacy/${
|
|
17204
|
+
space: `privacy/${caseUuid}`,
|
|
16584
17205
|
uuid: docUuid,
|
|
16585
17206
|
is_public: true,
|
|
16586
17207
|
allow_ai_processing: true,
|
|
16587
|
-
metadata: { group_by: "privacy", product: "privacy_center" }
|
|
17208
|
+
metadata: { group_by: "privacy", case_uuid: caseUuid, product: "privacy_center" }
|
|
16588
17209
|
})
|
|
16589
17210
|
);
|
|
16590
17211
|
const result = await uploadFileWithS2S({
|
|
@@ -16604,18 +17225,28 @@ function Form({ onCreateRequest }) {
|
|
|
16604
17225
|
} finally {
|
|
16605
17226
|
setIsUploading(false);
|
|
16606
17227
|
}
|
|
16607
|
-
}, [organizationId, workspaceId, authContext, consentClient, baseUrl, t]);
|
|
17228
|
+
}, [organizationId, workspaceId, authContext, consentClient, baseUrl, t, formDataResponse]);
|
|
16608
17229
|
const removeUploadedDoc = (0, import_react29.useCallback)((uuid) => {
|
|
16609
17230
|
setUploadedDocs((prev) => prev.filter((d) => d.uuid !== uuid));
|
|
16610
17231
|
}, []);
|
|
17232
|
+
const alertSubmitFailed = (0, import_react29.useCallback)(
|
|
17233
|
+
(message) => {
|
|
17234
|
+
import_react_native44.Alert.alert(t("submit"), message || t("unableToSubmit") || "Unable to submit request. Please try again.");
|
|
17235
|
+
},
|
|
17236
|
+
[t]
|
|
17237
|
+
);
|
|
16611
17238
|
const handleSubmit = (0, import_react29.useCallback)(async (revoke = false) => {
|
|
16612
|
-
var _a3
|
|
16613
|
-
if (!organizationId || !workspaceId || !contact || !requestType || !formDataResponse)
|
|
17239
|
+
var _a3;
|
|
17240
|
+
if (!organizationId || !workspaceId || !contact || !requestType || !formDataResponse) {
|
|
17241
|
+
alertSubmitFailed();
|
|
17242
|
+
return;
|
|
17243
|
+
}
|
|
16614
17244
|
setRevokeConsentOnFulfilment(revoke);
|
|
16615
17245
|
setIsSubmitting(true);
|
|
16616
17246
|
try {
|
|
16617
17247
|
const isProductScoped = isProductScopedRequestType(requestType);
|
|
16618
|
-
const
|
|
17248
|
+
const isLegacyFlatSelection = (selectedGroup == null ? void 0 : selectedGroup.product_uuid) === LEGACY_PRODUCT_GROUP_UUID;
|
|
17249
|
+
const anchorGroup = isProductScoped && !isLegacyFlatSelection ? selectedGroup : null;
|
|
16619
17250
|
const updatePurposes = Array.from(selectedPurposes).map((uuid) => ({
|
|
16620
17251
|
purpose_uuid: uuid,
|
|
16621
17252
|
data_element_uuids: Array.from(selectedDataElements.get(uuid) || [])
|
|
@@ -16636,27 +17267,27 @@ function Form({ onCreateRequest }) {
|
|
|
16636
17267
|
purposes: updatePurposes,
|
|
16637
17268
|
correction_data: correctionData,
|
|
16638
17269
|
grievance_types: grievanceTypes,
|
|
16639
|
-
...requestType
|
|
17270
|
+
...isRequestType(requestType, "nomination" /* NOMINATION */) ? { nomination_data: nominationData } : {}
|
|
16640
17271
|
},
|
|
16641
|
-
time_period: requestType
|
|
17272
|
+
time_period: isRequestType(requestType, "ACCESS" /* ACCESS */) ? parseInt(timePeriod || "30", 10) : 0,
|
|
16642
17273
|
requestor_note: additionalNote || "",
|
|
16643
|
-
...requestType
|
|
17274
|
+
...erasureConsentPayload(requestType, revoke),
|
|
16644
17275
|
...anchorGroup ? { product_uuid: anchorGroup.product_uuid } : {},
|
|
16645
17276
|
...(anchorGroup == null ? void 0 : anchorGroup.nominator) ? { data_principal_uuid: anchorGroup.nominator.uuid } : {}
|
|
16646
17277
|
};
|
|
16647
17278
|
const response = await createCaseRequest(organizationId, workspaceId, request, false, false, authContext, consentClient);
|
|
16648
|
-
const
|
|
16649
|
-
const newCaseId = (
|
|
17279
|
+
const caseRef = extractCaseRef(response);
|
|
17280
|
+
const newCaseId = (caseRef == null ? void 0 : caseRef.case_id) || (caseRef == null ? void 0 : caseRef.uuid) || null;
|
|
16650
17281
|
if (newCaseId) {
|
|
16651
17282
|
setCaseId(newCaseId);
|
|
16652
|
-
setSubmittedProductName((
|
|
17283
|
+
setSubmittedProductName((_a3 = anchorGroup == null ? void 0 : anchorGroup.product_name) != null ? _a3 : "");
|
|
16653
17284
|
setIsSubmitted(true);
|
|
16654
17285
|
} else {
|
|
16655
|
-
|
|
17286
|
+
alertSubmitFailed();
|
|
16656
17287
|
}
|
|
16657
17288
|
} catch (error) {
|
|
16658
17289
|
console.warn("Error submitting request:", error);
|
|
16659
|
-
|
|
17290
|
+
alertSubmitFailed(error == null ? void 0 : error.message);
|
|
16660
17291
|
} finally {
|
|
16661
17292
|
setIsSubmitting(false);
|
|
16662
17293
|
}
|
|
@@ -16679,11 +17310,13 @@ function Form({ onCreateRequest }) {
|
|
|
16679
17310
|
consentClient,
|
|
16680
17311
|
groupDataElements,
|
|
16681
17312
|
uploadedDocs,
|
|
16682
|
-
|
|
17313
|
+
alertSubmitFailed
|
|
16683
17314
|
]);
|
|
16684
17315
|
const handleSubmitClick = (0, import_react29.useCallback)(() => {
|
|
16685
|
-
if (!isFormValid)
|
|
16686
|
-
|
|
17316
|
+
if (!isFormValid) {
|
|
17317
|
+
return;
|
|
17318
|
+
}
|
|
17319
|
+
if (isErasureRequestType(requestType)) {
|
|
16687
17320
|
setIsErasureConsentModalOpen(true);
|
|
16688
17321
|
return;
|
|
16689
17322
|
}
|
|
@@ -16772,7 +17405,7 @@ function Form({ onCreateRequest }) {
|
|
|
16772
17405
|
if (groupPurposes.length === 0) {
|
|
16773
17406
|
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native44.Text, { style: [styles33.placeholder, { color: colors.textSecondary }], children: t("noPurposesAvailable") || "No purposes available" });
|
|
16774
17407
|
}
|
|
16775
|
-
const isErasure = requestType
|
|
17408
|
+
const isErasure = isErasureRequestType(requestType);
|
|
16776
17409
|
const allPurposesSelected = groupPurposes.every(
|
|
16777
17410
|
(p) => (p.data_elements || []).every((de) => {
|
|
16778
17411
|
var _a3;
|
|
@@ -16892,18 +17525,18 @@ function Form({ onCreateRequest }) {
|
|
|
16892
17525
|
] }),
|
|
16893
17526
|
selectedGroup ? /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_react_native44.View, { style: styles33.section, children: [
|
|
16894
17527
|
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native44.Text, { style: [styles33.sectionLabel, { color: colors.textSecondary }], children: t("requestDetails") }),
|
|
16895
|
-
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native44.View, { style: [styles33.sectionCard, elevation.card, { backgroundColor: colors.surface }], children: requestType
|
|
17528
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native44.View, { style: [styles33.sectionCard, elevation.card, { backgroundColor: colors.surface }], children: isRequestType(requestType, "CORRECTION" /* CORRECTION */) ? renderCorrectionFields() : renderPurposeFields() })
|
|
16896
17529
|
] }) : /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_react_native44.View, { style: [styles33.hintCard, { backgroundColor: colors.surfaceAlt }], children: [
|
|
16897
17530
|
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon, { name: "circle-alert", size: 18, color: colors.textSecondary }),
|
|
16898
17531
|
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native44.Text, { style: [styles33.hintText, { color: colors.textSecondary }], children: t("selectProductFirst", { defaultValue: "Select a product to continue" }) })
|
|
16899
17532
|
] }),
|
|
16900
|
-
requestType
|
|
17533
|
+
isRequestType(requestType, "ACCESS" /* ACCESS */) && selectedGroup ? /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_react_native44.View, { style: styles33.section, children: [
|
|
16901
17534
|
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native44.Text, { style: [styles33.sectionLabel, { color: colors.textSecondary }], children: t("timePeriod") }),
|
|
16902
17535
|
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(PCSelect, { value: timePeriod, options: timePeriodOptions, onChange: setTimePeriod, placeholder: t("timePeriod") })
|
|
16903
17536
|
] }) : null
|
|
16904
17537
|
] });
|
|
16905
17538
|
}
|
|
16906
|
-
if (requestType
|
|
17539
|
+
if (isRequestType(requestType, "grievance" /* GRIEVANCE */)) {
|
|
16907
17540
|
if (grievanceOptions.length === 0) {
|
|
16908
17541
|
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native44.View, { style: styles33.stepBody, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native44.Text, { style: [styles33.placeholder, { color: colors.textSecondary }], children: t("noPurposesAvailable") || "No grievance types available" }) });
|
|
16909
17542
|
}
|
|
@@ -16919,7 +17552,7 @@ function Form({ onCreateRequest }) {
|
|
|
16919
17552
|
] })
|
|
16920
17553
|
] }) });
|
|
16921
17554
|
}
|
|
16922
|
-
if (requestType
|
|
17555
|
+
if (isRequestType(requestType, "nomination" /* NOMINATION */)) {
|
|
16923
17556
|
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native44.View, { style: styles33.stepBody, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_react_native44.View, { style: styles33.section, children: [
|
|
16924
17557
|
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native44.Text, { style: [styles33.sectionLabel, { color: colors.textSecondary }], children: t("enterNomineeDetails") }),
|
|
16925
17558
|
/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_react_native44.View, { style: [styles33.sectionCard, elevation.card, { backgroundColor: colors.surface }], children: [
|
|
@@ -17984,6 +18617,7 @@ function useUnreadCount() {
|
|
|
17984
18617
|
const loadRef = (0, import_react32.useRef)();
|
|
17985
18618
|
loadRef.current = async () => {
|
|
17986
18619
|
if (!organizationId || !workspaceId) return;
|
|
18620
|
+
if (isRefreshBlocked(authContext)) return;
|
|
17987
18621
|
const res = await fetchUnreadCount(organizationId, workspaceId, authContext, consentClient);
|
|
17988
18622
|
if (res && typeof res.count === "number") setCount(res.count);
|
|
17989
18623
|
};
|
|
@@ -18309,17 +18943,255 @@ function PrivacyCenterEmptyState() {
|
|
|
18309
18943
|
return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(PCEmpty, { iconName: "shield", title: t("noDataTitle"), description: t("noDataDescription") });
|
|
18310
18944
|
}
|
|
18311
18945
|
|
|
18946
|
+
// src/RedactoPrivacyCenter/components/PrivacyCenterSessionExpired.tsx
|
|
18947
|
+
var import_react_i18next21 = require("react-i18next");
|
|
18948
|
+
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
18949
|
+
function PrivacyCenterSessionExpired() {
|
|
18950
|
+
const { t } = (0, import_react_i18next21.useTranslation)();
|
|
18951
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
18952
|
+
PCEmpty,
|
|
18953
|
+
{
|
|
18954
|
+
iconName: "shield",
|
|
18955
|
+
title: t("sessionExpiredTitle"),
|
|
18956
|
+
description: t("sessionExpiredDescription")
|
|
18957
|
+
}
|
|
18958
|
+
);
|
|
18959
|
+
}
|
|
18960
|
+
|
|
18961
|
+
// src/RedactoPrivacyCenter/components/SelectUserGate.tsx
|
|
18962
|
+
var import_react36 = require("react");
|
|
18963
|
+
var import_react_native51 = require("react-native");
|
|
18964
|
+
|
|
18965
|
+
// src/RedactoPrivacyCenter/context/ProfileSwitchContext.tsx
|
|
18966
|
+
var import_react35 = require("react");
|
|
18967
|
+
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
18968
|
+
var ProfileSwitchContext = (0, import_react35.createContext)({
|
|
18969
|
+
switchProfile: null
|
|
18970
|
+
});
|
|
18971
|
+
function ProfileSwitchProvider({
|
|
18972
|
+
switchProfile,
|
|
18973
|
+
children
|
|
18974
|
+
}) {
|
|
18975
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ProfileSwitchContext.Provider, { value: { switchProfile }, children });
|
|
18976
|
+
}
|
|
18977
|
+
function useProfileSwitch() {
|
|
18978
|
+
return (0, import_react35.useContext)(ProfileSwitchContext);
|
|
18979
|
+
}
|
|
18980
|
+
|
|
18981
|
+
// src/RedactoPrivacyCenter/components/SelectUser.tsx
|
|
18982
|
+
var import_react_native50 = require("react-native");
|
|
18983
|
+
var import_react_i18next22 = require("react-i18next");
|
|
18984
|
+
|
|
18985
|
+
// src/RedactoPrivacyCenter/lib/identityLabels.ts
|
|
18986
|
+
var identityPrimaryValue = (candidate) => {
|
|
18987
|
+
const orgUserId = candidate.org_user_id || "";
|
|
18988
|
+
const email = candidate.primary_email || "";
|
|
18989
|
+
const mobile = candidate.primary_mobile || "";
|
|
18990
|
+
return { orgUserId, fallback: email || mobile || candidate.uuid };
|
|
18991
|
+
};
|
|
18992
|
+
var identitySecondaryLabels = (candidate, primaryLabel) => {
|
|
18993
|
+
const email = candidate.primary_email || "";
|
|
18994
|
+
const mobile = candidate.primary_mobile || "";
|
|
18995
|
+
return [email, mobile].filter(
|
|
18996
|
+
(value, index, all) => value !== "" && value !== primaryLabel && all.indexOf(value) === index
|
|
18997
|
+
);
|
|
18998
|
+
};
|
|
18999
|
+
var selectableIdentities = (candidates) => candidates.filter((candidate) => Boolean(candidate.uuid));
|
|
19000
|
+
|
|
19001
|
+
// src/RedactoPrivacyCenter/components/SelectUser.tsx
|
|
19002
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
19003
|
+
var SelectUser = ({
|
|
19004
|
+
candidates,
|
|
19005
|
+
onSelect,
|
|
19006
|
+
busyUuid,
|
|
19007
|
+
error
|
|
19008
|
+
}) => {
|
|
19009
|
+
const { t } = (0, import_react_i18next22.useTranslation)();
|
|
19010
|
+
const { colors } = useTheme();
|
|
19011
|
+
const selectable = selectableIdentities(candidates);
|
|
19012
|
+
const busy = busyUuid !== null;
|
|
19013
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_react_native50.ScrollView, { contentContainerStyle: styles39.container, children: [
|
|
19014
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.Text, { style: [typography.title, styles39.heading, { color: colors.text }], children: t("chooseYourProfile") }),
|
|
19015
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.Text, { style: [typography.body, styles39.subtitle, { color: colors.textSecondary }], children: t("loginIdentifierLinkedToMultipleProfiles") }),
|
|
19016
|
+
error ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.Text, { style: [typography.caption, styles39.error, { color: colors.error }], children: error }) : null,
|
|
19017
|
+
selectable.map((candidate) => {
|
|
19018
|
+
const { orgUserId, fallback } = identityPrimaryValue(candidate);
|
|
19019
|
+
const primaryLabel = orgUserId ? t("userIdLabel", { id: orgUserId }) : fallback;
|
|
19020
|
+
const secondaryLabels = identitySecondaryLabels(candidate, primaryLabel);
|
|
19021
|
+
const isBusy = busyUuid === candidate.uuid;
|
|
19022
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
|
|
19023
|
+
import_react_native50.TouchableOpacity,
|
|
19024
|
+
{
|
|
19025
|
+
accessibilityRole: "button",
|
|
19026
|
+
disabled: busy,
|
|
19027
|
+
onPress: () => onSelect(candidate.uuid),
|
|
19028
|
+
style: [
|
|
19029
|
+
styles39.row,
|
|
19030
|
+
{
|
|
19031
|
+
backgroundColor: colors.surface,
|
|
19032
|
+
borderColor: isBusy ? colors.primary : colors.border
|
|
19033
|
+
}
|
|
19034
|
+
],
|
|
19035
|
+
children: [
|
|
19036
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_react_native50.View, { style: styles39.rowText, children: [
|
|
19037
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.Text, { style: [typography.label, { color: colors.text }], children: primaryLabel }),
|
|
19038
|
+
secondaryLabels.map((label) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
19039
|
+
import_react_native50.Text,
|
|
19040
|
+
{
|
|
19041
|
+
style: [typography.caption, styles39.secondary, { color: colors.textSecondary }],
|
|
19042
|
+
children: label
|
|
19043
|
+
},
|
|
19044
|
+
label
|
|
19045
|
+
))
|
|
19046
|
+
] }),
|
|
19047
|
+
isBusy ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.Text, { style: [typography.caption, { color: colors.textSecondary }], children: t("signingInEllipsis") }) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Icon, { name: "chevron-right", size: 18, color: colors.textSecondary })
|
|
19048
|
+
]
|
|
19049
|
+
},
|
|
19050
|
+
candidate.uuid
|
|
19051
|
+
);
|
|
19052
|
+
})
|
|
19053
|
+
] });
|
|
19054
|
+
};
|
|
19055
|
+
var styles39 = import_react_native50.StyleSheet.create({
|
|
19056
|
+
container: { padding: spacing.lg },
|
|
19057
|
+
heading: { textAlign: "center" },
|
|
19058
|
+
subtitle: { textAlign: "center", marginTop: spacing.xs, marginBottom: spacing.lg },
|
|
19059
|
+
error: { textAlign: "center", marginBottom: spacing.md },
|
|
19060
|
+
row: {
|
|
19061
|
+
flexDirection: "row",
|
|
19062
|
+
alignItems: "center",
|
|
19063
|
+
borderWidth: 1,
|
|
19064
|
+
borderRadius: radii.md,
|
|
19065
|
+
padding: spacing.md,
|
|
19066
|
+
marginBottom: spacing.sm
|
|
19067
|
+
},
|
|
19068
|
+
rowText: { flex: 1 },
|
|
19069
|
+
secondary: { marginTop: 2 }
|
|
19070
|
+
});
|
|
19071
|
+
|
|
19072
|
+
// src/RedactoPrivacyCenter/components/SelectUserGate.tsx
|
|
19073
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
19074
|
+
function SelectUserGate({ children }) {
|
|
19075
|
+
var _a3, _b;
|
|
19076
|
+
const { accessToken, organizationId, workspaceId, updateTokens } = useAuth();
|
|
19077
|
+
const { consentClient } = useBaseUrl();
|
|
19078
|
+
const { colors } = useTheme();
|
|
19079
|
+
const insets = useSafeInsets();
|
|
19080
|
+
const [phase, setPhase] = (0, import_react36.useState)("checking");
|
|
19081
|
+
const [candidates, setCandidates] = (0, import_react36.useState)([]);
|
|
19082
|
+
const [busyUuid, setBusyUuid] = (0, import_react36.useState)(null);
|
|
19083
|
+
const [selectError, setSelectError] = (0, import_react36.useState)(null);
|
|
19084
|
+
const [pinnedOrgUserId, setPinnedOrgUserId] = (0, import_react36.useState)(null);
|
|
19085
|
+
const tokenOrgUserId = ((_b = (_a3 = decodeJwtToken(accessToken)) == null ? void 0 : _a3.user_data) == null ? void 0 : _b.org_user_id) || "";
|
|
19086
|
+
(0, import_react36.useEffect)(() => {
|
|
19087
|
+
let cancelled = false;
|
|
19088
|
+
if (isSandboxMode() || !organizationId || !workspaceId || !accessToken) {
|
|
19089
|
+
setPhase("resolved");
|
|
19090
|
+
return;
|
|
19091
|
+
}
|
|
19092
|
+
const isPinned = Boolean(pinnedOrgUserId) && pinnedOrgUserId === tokenOrgUserId;
|
|
19093
|
+
setPhase(isPinned ? "resolved" : "checking");
|
|
19094
|
+
(async () => {
|
|
19095
|
+
var _a4;
|
|
19096
|
+
try {
|
|
19097
|
+
const res = await consentClient.listIdentities({
|
|
19098
|
+
organisationUuid: organizationId,
|
|
19099
|
+
workspaceUuid: workspaceId,
|
|
19100
|
+
authToken: accessToken
|
|
19101
|
+
});
|
|
19102
|
+
if (cancelled) return;
|
|
19103
|
+
const list = (_a4 = res == null ? void 0 : res.identities) != null ? _a4 : [];
|
|
19104
|
+
setCandidates(list);
|
|
19105
|
+
setPhase(list.length > 1 && !isPinned ? "picking" : "resolved");
|
|
19106
|
+
} catch {
|
|
19107
|
+
if (cancelled) return;
|
|
19108
|
+
setCandidates([]);
|
|
19109
|
+
setPhase("resolved");
|
|
19110
|
+
}
|
|
19111
|
+
})();
|
|
19112
|
+
return () => {
|
|
19113
|
+
cancelled = true;
|
|
19114
|
+
};
|
|
19115
|
+
}, [organizationId, workspaceId, tokenOrgUserId]);
|
|
19116
|
+
const handleSelect = (0, import_react36.useCallback)(
|
|
19117
|
+
async (principalUuid) => {
|
|
19118
|
+
var _a4, _b2;
|
|
19119
|
+
if (!principalUuid || busyUuid || !organizationId || !workspaceId) return;
|
|
19120
|
+
setBusyUuid(principalUuid);
|
|
19121
|
+
setSelectError(null);
|
|
19122
|
+
try {
|
|
19123
|
+
const res = await consentClient.selectPrincipal(
|
|
19124
|
+
{
|
|
19125
|
+
organisationUuid: organizationId,
|
|
19126
|
+
workspaceUuid: workspaceId,
|
|
19127
|
+
authToken: accessToken
|
|
19128
|
+
},
|
|
19129
|
+
principalUuid
|
|
19130
|
+
);
|
|
19131
|
+
if (!(res == null ? void 0 : res.token) || !(res == null ? void 0 : res.refresh_token)) {
|
|
19132
|
+
throw new Error("select-principal returned no tokens");
|
|
19133
|
+
}
|
|
19134
|
+
const pinned = ((_b2 = (_a4 = decodeJwtToken(res.token)) == null ? void 0 : _a4.user_data) == null ? void 0 : _b2.org_user_id) || null;
|
|
19135
|
+
setPinnedOrgUserId(pinned);
|
|
19136
|
+
setPhase("resolved");
|
|
19137
|
+
updateTokens(res.token, res.refresh_token);
|
|
19138
|
+
} catch (error) {
|
|
19139
|
+
setSelectError(
|
|
19140
|
+
error instanceof Error ? error.message : "Failed to switch profile"
|
|
19141
|
+
);
|
|
19142
|
+
} finally {
|
|
19143
|
+
setBusyUuid(null);
|
|
19144
|
+
}
|
|
19145
|
+
},
|
|
19146
|
+
[accessToken, busyUuid, consentClient, organizationId, workspaceId, updateTokens]
|
|
19147
|
+
);
|
|
19148
|
+
const canSwitch = candidates.length > 1;
|
|
19149
|
+
const switchProfile = (0, import_react36.useCallback)(() => {
|
|
19150
|
+
if (!canSwitch) return;
|
|
19151
|
+
setSelectError(null);
|
|
19152
|
+
setPhase("picking");
|
|
19153
|
+
}, [canSwitch]);
|
|
19154
|
+
if (phase === "checking" || phase === "picking") {
|
|
19155
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
19156
|
+
import_react_native51.View,
|
|
19157
|
+
{
|
|
19158
|
+
style: [
|
|
19159
|
+
styles40.screen,
|
|
19160
|
+
{
|
|
19161
|
+
backgroundColor: colors.canvasSubtle,
|
|
19162
|
+
paddingTop: insets.top,
|
|
19163
|
+
paddingBottom: insets.bottom
|
|
19164
|
+
}
|
|
19165
|
+
],
|
|
19166
|
+
children: phase === "checking" ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(PCLoader, {}) : /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
19167
|
+
SelectUser,
|
|
19168
|
+
{
|
|
19169
|
+
candidates,
|
|
19170
|
+
onSelect: handleSelect,
|
|
19171
|
+
busyUuid,
|
|
19172
|
+
error: selectError
|
|
19173
|
+
}
|
|
19174
|
+
)
|
|
19175
|
+
}
|
|
19176
|
+
);
|
|
19177
|
+
}
|
|
19178
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ProfileSwitchProvider, { switchProfile: canSwitch ? switchProfile : null, children });
|
|
19179
|
+
}
|
|
19180
|
+
var styles40 = import_react_native51.StyleSheet.create({
|
|
19181
|
+
screen: { flex: 1 }
|
|
19182
|
+
});
|
|
19183
|
+
|
|
18312
19184
|
// src/RedactoPrivacyCenter/components/CaseDetails/CaseDetailsPage.tsx
|
|
18313
|
-
var
|
|
18314
|
-
var
|
|
18315
|
-
var
|
|
19185
|
+
var import_react41 = require("react");
|
|
19186
|
+
var import_react_native59 = require("react-native");
|
|
19187
|
+
var import_react_i18next28 = require("react-i18next");
|
|
18316
19188
|
|
|
18317
19189
|
// src/RedactoPrivacyCenter/components/CaseDetails/RequestDetailsTab.tsx
|
|
18318
|
-
var
|
|
18319
|
-
var
|
|
18320
|
-
var
|
|
19190
|
+
var import_react_native52 = require("react-native");
|
|
19191
|
+
var import_react_i18next23 = require("react-i18next");
|
|
19192
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
18321
19193
|
function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
|
|
18322
|
-
const { t } = (0,
|
|
19194
|
+
const { t } = (0, import_react_i18next23.useTranslation)();
|
|
18323
19195
|
const { colors } = useTheme();
|
|
18324
19196
|
const { listBottom } = usePrivacyCenterInsets({ hasFooter: true });
|
|
18325
19197
|
const details = selectedCase.request_details;
|
|
@@ -18351,36 +19223,36 @@ function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
|
|
|
18351
19223
|
}
|
|
18352
19224
|
const description = selectedCase.description_display || selectedCase.description;
|
|
18353
19225
|
const hasDetails = description || details && (details.purposes && details.purposes.length > 0 || details.correction_data && details.correction_data.length > 0 || details.grievance_types && details.grievance_types.length > 0 || details.nomination_data);
|
|
18354
|
-
return /* @__PURE__ */ (0,
|
|
18355
|
-
/* @__PURE__ */ (0,
|
|
19226
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.ScrollView, { style: [styles41.container, { backgroundColor: colors.canvasSubtle }], contentContainerStyle: [styles41.content, { flexGrow: 1, paddingBottom: listBottom }], showsVerticalScrollIndicator: false, children: [
|
|
19227
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.View, { style: styles41.timeline, children: steps.map((step, i) => {
|
|
18356
19228
|
const isLast = i === steps.length - 1;
|
|
18357
|
-
return /* @__PURE__ */ (0,
|
|
18358
|
-
/* @__PURE__ */ (0,
|
|
18359
|
-
/* @__PURE__ */ (0,
|
|
18360
|
-
|
|
19229
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.stepRow, children: [
|
|
19230
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.gutter, children: [
|
|
19231
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
19232
|
+
import_react_native52.View,
|
|
18361
19233
|
{
|
|
18362
19234
|
style: [
|
|
18363
|
-
|
|
19235
|
+
styles41.dot,
|
|
18364
19236
|
step.state === "upcoming" ? { backgroundColor: colors.canvasSubtle, borderWidth: 2, borderColor: step.danger ? colors.error : colors.border } : { backgroundColor: step.color }
|
|
18365
19237
|
],
|
|
18366
|
-
children: step.state === "done" ? /* @__PURE__ */ (0,
|
|
19238
|
+
children: step.state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Icon, { name: "check", size: 11, color: colors.primaryText, strokeWidth: 3 }) : step.state === "current" ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.View, { style: [styles41.dotInner, { backgroundColor: colors.primaryText }] }) : null
|
|
18367
19239
|
}
|
|
18368
19240
|
),
|
|
18369
|
-
!isLast ? /* @__PURE__ */ (0,
|
|
19241
|
+
!isLast ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.View, { style: [styles41.connector, { backgroundColor: colors.border }] }) : null
|
|
18370
19242
|
] }),
|
|
18371
|
-
/* @__PURE__ */ (0,
|
|
18372
|
-
/* @__PURE__ */ (0,
|
|
18373
|
-
step.date ? /* @__PURE__ */ (0,
|
|
19243
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: [styles41.stepContent, isLast && styles41.stepContentLast], children: [
|
|
19244
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.stepLabel, { color: step.danger ? colors.error : colors.text }], children: step.label }),
|
|
19245
|
+
step.date ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.stepDate, { color: step.danger ? colors.error : colors.textSecondary }], children: step.date }) : null
|
|
18374
19246
|
] })
|
|
18375
19247
|
] }, `${step.label}-${i}`);
|
|
18376
19248
|
}) }),
|
|
18377
|
-
hasDetails ? /* @__PURE__ */ (0,
|
|
18378
|
-
description ? /* @__PURE__ */ (0,
|
|
18379
|
-
/* @__PURE__ */ (0,
|
|
18380
|
-
/* @__PURE__ */ (0,
|
|
19249
|
+
hasDetails ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: [styles41.card, elevation.card, { backgroundColor: colors.surface }], children: [
|
|
19250
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.block, children: [
|
|
19251
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("descriptionLabel") || "Description" }),
|
|
19252
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.descriptionText, { color: colors.text }], children: description })
|
|
18381
19253
|
] }) : null,
|
|
18382
|
-
(details == null ? void 0 : details.purposes) && details.purposes.length > 0 ? /* @__PURE__ */ (0,
|
|
18383
|
-
/* @__PURE__ */ (0,
|
|
19254
|
+
(details == null ? void 0 : details.purposes) && details.purposes.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.block, children: [
|
|
19255
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("purposesInvolved") || t("purposes") || "Purposes" }),
|
|
18384
19256
|
details.purposes.map((rawP, idx) => {
|
|
18385
19257
|
const p = (rawP == null ? void 0 : rawP.purpose) ? rawP.purpose : rawP;
|
|
18386
19258
|
const purposeId = (p == null ? void 0 : p.uuid) || (p == null ? void 0 : p.purpose_uuid) || (rawP == null ? void 0 : rawP.purpose_uuid) || idx;
|
|
@@ -18388,10 +19260,10 @@ function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
|
|
|
18388
19260
|
const purposeDescription = (p == null ? void 0 : p.description) || (rawP == null ? void 0 : rawP.description);
|
|
18389
19261
|
const dataElements = Array.isArray(p == null ? void 0 : p.data_elements) ? p.data_elements.filter((de) => (de == null ? void 0 : de.selected) || (de == null ? void 0 : de.given_consent)) : [];
|
|
18390
19262
|
const dataElementUuids = Array.isArray(rawP == null ? void 0 : rawP.data_element_uuids) ? rawP.data_element_uuids : Array.isArray(p == null ? void 0 : p.data_element_uuids) ? p.data_element_uuids : [];
|
|
18391
|
-
return /* @__PURE__ */ (0,
|
|
18392
|
-
/* @__PURE__ */ (0,
|
|
18393
|
-
purposeDescription ? /* @__PURE__ */ (0,
|
|
18394
|
-
dataElements.length > 0 ? /* @__PURE__ */ (0,
|
|
19263
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: [styles41.itemRow, idx > 0 && { borderTopColor: colors.hairline, borderTopWidth: import_react_native52.StyleSheet.hairlineWidth }], children: [
|
|
19264
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.itemTitle, { color: colors.text }], children: purposeName }),
|
|
19265
|
+
purposeDescription ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.itemDesc, { color: colors.textSecondary }], numberOfLines: 3, children: purposeDescription }) : null,
|
|
19266
|
+
dataElements.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.View, { style: styles41.chipRow, children: dataElements.map((de) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(PCBadge, { status: "info", label: de.name }, de.uuid)) }) : dataElementUuids.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.Text, { style: [styles41.itemDesc, { color: colors.textSecondary }], children: [
|
|
18395
19267
|
dataElementUuids.length,
|
|
18396
19268
|
" ",
|
|
18397
19269
|
t("dataElements") || "data elements"
|
|
@@ -18399,44 +19271,44 @@ function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
|
|
|
18399
19271
|
] }, purposeId);
|
|
18400
19272
|
})
|
|
18401
19273
|
] }) : null,
|
|
18402
|
-
(details == null ? void 0 : details.correction_data) && details.correction_data.length > 0 ? /* @__PURE__ */ (0,
|
|
18403
|
-
/* @__PURE__ */ (0,
|
|
18404
|
-
details.correction_data.map((item, idx) => /* @__PURE__ */ (0,
|
|
18405
|
-
/* @__PURE__ */ (0,
|
|
18406
|
-
/* @__PURE__ */ (0,
|
|
18407
|
-
/* @__PURE__ */ (0,
|
|
18408
|
-
/* @__PURE__ */ (0,
|
|
18409
|
-
/* @__PURE__ */ (0,
|
|
19274
|
+
(details == null ? void 0 : details.correction_data) && details.correction_data.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.block, children: [
|
|
19275
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("correctionData") || "Correction" }),
|
|
19276
|
+
details.correction_data.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: [styles41.itemRow, idx > 0 && { borderTopColor: colors.hairline, borderTopWidth: import_react_native52.StyleSheet.hairlineWidth }], children: [
|
|
19277
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.itemTitle, { color: colors.text }], children: item.name }),
|
|
19278
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.correctionValues, children: [
|
|
19279
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.correctionValue, children: [
|
|
19280
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.correctionLabel, { color: colors.textSecondary }], children: t("currentValue") || "Current" }),
|
|
19281
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.correctionText, { color: colors.text }], children: item.curr_value || "-" })
|
|
18410
19282
|
] }),
|
|
18411
|
-
/* @__PURE__ */ (0,
|
|
18412
|
-
/* @__PURE__ */ (0,
|
|
18413
|
-
/* @__PURE__ */ (0,
|
|
18414
|
-
/* @__PURE__ */ (0,
|
|
19283
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Icon, { name: "chevron-right", size: 16, color: colors.textSecondary, strokeWidth: 2.2 }),
|
|
19284
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.correctionValue, children: [
|
|
19285
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.correctionLabel, { color: colors.textSecondary }], children: t("newValue") || "New" }),
|
|
19286
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.correctionText, { color: colors.primary }], children: item.new_value || "-" })
|
|
18415
19287
|
] })
|
|
18416
19288
|
] })
|
|
18417
19289
|
] }, idx))
|
|
18418
19290
|
] }) : null,
|
|
18419
|
-
(details == null ? void 0 : details.grievance_types) && details.grievance_types.length > 0 ? /* @__PURE__ */ (0,
|
|
18420
|
-
/* @__PURE__ */ (0,
|
|
18421
|
-
/* @__PURE__ */ (0,
|
|
19291
|
+
(details == null ? void 0 : details.grievance_types) && details.grievance_types.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.block, children: [
|
|
19292
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("grievanceTypes") || "Grievance" }),
|
|
19293
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.View, { style: styles41.chipRow, children: details.grievance_types.map((g, idx) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(PCBadge, { status: "warning", label: (g.grievance || "").replace(/_/g, " ") }, idx)) })
|
|
18422
19294
|
] }) : null,
|
|
18423
|
-
(details == null ? void 0 : details.nomination_data) ? /* @__PURE__ */ (0,
|
|
18424
|
-
/* @__PURE__ */ (0,
|
|
18425
|
-
details.nomination_data.nominee_email ? /* @__PURE__ */ (0,
|
|
18426
|
-
/* @__PURE__ */ (0,
|
|
18427
|
-
/* @__PURE__ */ (0,
|
|
19295
|
+
(details == null ? void 0 : details.nomination_data) ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.block, children: [
|
|
19296
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("nominationData") || "Nomination" }),
|
|
19297
|
+
details.nomination_data.nominee_email ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.kvRow, children: [
|
|
19298
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.kvLabel, { color: colors.textSecondary }], children: t("email") || "Email" }),
|
|
19299
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.kvValue, { color: colors.text }], children: details.nomination_data.nominee_email })
|
|
18428
19300
|
] }) : null,
|
|
18429
|
-
details.nomination_data.nominee_mobile ? /* @__PURE__ */ (0,
|
|
18430
|
-
/* @__PURE__ */ (0,
|
|
18431
|
-
/* @__PURE__ */ (0,
|
|
19301
|
+
details.nomination_data.nominee_mobile ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.kvRow, children: [
|
|
19302
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.kvLabel, { color: colors.textSecondary }], children: t("mobile") || "Mobile" }),
|
|
19303
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.kvValue, { color: colors.text }], children: details.nomination_data.nominee_mobile })
|
|
18432
19304
|
] }) : null
|
|
18433
19305
|
] }) : null
|
|
18434
19306
|
] }) : null,
|
|
18435
|
-
/* @__PURE__ */ (0,
|
|
19307
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.View, { style: { marginTop: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Footer, {}) })
|
|
18436
19308
|
] });
|
|
18437
19309
|
}
|
|
18438
19310
|
var DOT = 22;
|
|
18439
|
-
var
|
|
19311
|
+
var styles41 = import_react_native52.StyleSheet.create({
|
|
18440
19312
|
container: {
|
|
18441
19313
|
flex: 1
|
|
18442
19314
|
},
|
|
@@ -18557,51 +19429,51 @@ var styles39 = import_react_native50.StyleSheet.create({
|
|
|
18557
19429
|
});
|
|
18558
19430
|
|
|
18559
19431
|
// src/RedactoPrivacyCenter/components/CaseDetails/MessagesTab.tsx
|
|
18560
|
-
var
|
|
18561
|
-
var
|
|
18562
|
-
var
|
|
19432
|
+
var import_react40 = require("react");
|
|
19433
|
+
var import_react_native58 = require("react-native");
|
|
19434
|
+
var import_react_i18next27 = require("react-i18next");
|
|
18563
19435
|
|
|
18564
19436
|
// src/RedactoPrivacyCenter/components/CaseDetails/MessageItem.tsx
|
|
18565
|
-
var
|
|
18566
|
-
var
|
|
19437
|
+
var import_react38 = __toESM(require("react"));
|
|
19438
|
+
var import_react_i18next25 = require("react-i18next");
|
|
18567
19439
|
|
|
18568
19440
|
// src/RedactoPrivacyCenter/components/CaseDetails/ChatBubble.tsx
|
|
18569
|
-
var
|
|
18570
|
-
var
|
|
19441
|
+
var import_react37 = __toESM(require("react"));
|
|
19442
|
+
var import_react_native54 = require("react-native");
|
|
18571
19443
|
|
|
18572
19444
|
// src/RedactoPrivacyCenter/components/CaseDetails/AttachmentCard.tsx
|
|
18573
|
-
var
|
|
18574
|
-
var
|
|
19445
|
+
var import_react_native53 = require("react-native");
|
|
19446
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
18575
19447
|
function AttachmentCard({ doc }) {
|
|
18576
19448
|
const { colors } = useTheme();
|
|
18577
19449
|
const downloadUrl = getDownloadUrl(doc.file_url);
|
|
18578
19450
|
const handlePress = () => {
|
|
18579
19451
|
if (downloadUrl) {
|
|
18580
|
-
|
|
19452
|
+
import_react_native53.Linking.openURL(downloadUrl);
|
|
18581
19453
|
}
|
|
18582
19454
|
};
|
|
18583
|
-
return /* @__PURE__ */ (0,
|
|
18584
|
-
|
|
19455
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
|
|
19456
|
+
import_react_native53.TouchableOpacity,
|
|
18585
19457
|
{
|
|
18586
|
-
style: [
|
|
19458
|
+
style: [styles42.container, { backgroundColor: colors.surface, borderColor: colors.border }],
|
|
18587
19459
|
onPress: handlePress,
|
|
18588
19460
|
disabled: !downloadUrl,
|
|
18589
19461
|
activeOpacity: 0.7,
|
|
18590
19462
|
children: [
|
|
18591
|
-
/* @__PURE__ */ (0,
|
|
18592
|
-
/* @__PURE__ */ (0,
|
|
18593
|
-
/* @__PURE__ */ (0,
|
|
18594
|
-
doc.file_size ? /* @__PURE__ */ (0,
|
|
19463
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Icon, { name: "file-text", size: 18, color: colors.textSecondary }),
|
|
19464
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_react_native53.View, { style: styles42.info, children: [
|
|
19465
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react_native53.Text, { style: [styles42.fileName, { color: colors.text }], numberOfLines: 1, children: doc.file_name || "Document" }),
|
|
19466
|
+
doc.file_size ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react_native53.Text, { style: [styles42.fileSize, { color: colors.textSecondary }], children: formatFileSize(doc.file_size) }) : null
|
|
18595
19467
|
] })
|
|
18596
19468
|
]
|
|
18597
19469
|
}
|
|
18598
19470
|
);
|
|
18599
19471
|
}
|
|
18600
|
-
var
|
|
19472
|
+
var styles42 = import_react_native53.StyleSheet.create({
|
|
18601
19473
|
container: {
|
|
18602
19474
|
flexDirection: "row",
|
|
18603
19475
|
alignItems: "center",
|
|
18604
|
-
borderWidth:
|
|
19476
|
+
borderWidth: import_react_native53.StyleSheet.hairlineWidth,
|
|
18605
19477
|
borderRadius: radii.md,
|
|
18606
19478
|
paddingHorizontal: spacing.sm + 2,
|
|
18607
19479
|
paddingVertical: spacing.sm,
|
|
@@ -18621,11 +19493,11 @@ var styles40 = import_react_native51.StyleSheet.create({
|
|
|
18621
19493
|
});
|
|
18622
19494
|
|
|
18623
19495
|
// src/RedactoPrivacyCenter/components/CaseDetails/ChatBubble.tsx
|
|
18624
|
-
var
|
|
19496
|
+
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
18625
19497
|
var AVATAR_SIZE = 28;
|
|
18626
19498
|
var AVATAR_GUTTER = 36;
|
|
18627
19499
|
function TeamAvatar({ tint }) {
|
|
18628
|
-
return /* @__PURE__ */ (0,
|
|
19500
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native54.View, { style: [styles43.avatar, { backgroundColor: withAlpha(tint, 0.13) }], children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Icon, { name: "shield-check", size: 15, color: tint, strokeWidth: 2 }) });
|
|
18629
19501
|
}
|
|
18630
19502
|
function ChatBubbleImpl({
|
|
18631
19503
|
message,
|
|
@@ -18652,28 +19524,28 @@ function ChatBubbleImpl({
|
|
|
18652
19524
|
borderBottomRightRadius: BUBBLE_RADIUS,
|
|
18653
19525
|
borderBottomLeftRadius: tailRadius
|
|
18654
19526
|
};
|
|
18655
|
-
const bubble = /* @__PURE__ */ (0,
|
|
18656
|
-
!isPrincipal && isFirstInGroup ? /* @__PURE__ */ (0,
|
|
18657
|
-
message.body ? /* @__PURE__ */ (0,
|
|
18658
|
-
message.documents && message.documents.length > 0 ? /* @__PURE__ */ (0,
|
|
19527
|
+
const bubble = /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_react_native54.View, { style: [styles43.bubble, bubbleStyle], children: [
|
|
19528
|
+
!isPrincipal && isFirstInGroup ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native54.Text, { style: [styles43.bubbleSender, { color: colors.primary }], numberOfLines: 1, children: senderLabel }) : null,
|
|
19529
|
+
message.body ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native54.Text, { style: [styles43.body, { color: isPrincipal ? colors.primaryText : colors.text }], children: message.body }) : null,
|
|
19530
|
+
message.documents && message.documents.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native54.View, { style: styles43.attachments, children: message.documents.map((doc) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(AttachmentCard, { doc }, doc.uuid)) }) : null
|
|
18659
19531
|
] });
|
|
18660
|
-
return /* @__PURE__ */ (0,
|
|
18661
|
-
|
|
19532
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
|
|
19533
|
+
import_react_native54.View,
|
|
18662
19534
|
{
|
|
18663
19535
|
style: [
|
|
18664
|
-
|
|
18665
|
-
isPrincipal ?
|
|
19536
|
+
styles43.row,
|
|
19537
|
+
isPrincipal ? styles43.rowRight : styles43.rowLeft,
|
|
18666
19538
|
{ marginTop: isFirstInGroup ? spacing.md : 2 }
|
|
18667
19539
|
],
|
|
18668
19540
|
children: [
|
|
18669
|
-
!isPrincipal ? /* @__PURE__ */ (0,
|
|
18670
|
-
/* @__PURE__ */ (0,
|
|
19541
|
+
!isPrincipal ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native54.View, { style: styles43.avatarSlot, children: isFirstInGroup ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(TeamAvatar, { tint: colors.primary }) : null }) : null,
|
|
19542
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_react_native54.View, { style: [styles43.column, isPrincipal ? styles43.columnRight : styles43.columnLeft], children: [
|
|
18671
19543
|
bubble,
|
|
18672
|
-
isLastInGroup ? /* @__PURE__ */ (0,
|
|
18673
|
-
|
|
19544
|
+
isLastInGroup ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
19545
|
+
import_react_native54.Text,
|
|
18674
19546
|
{
|
|
18675
19547
|
style: [
|
|
18676
|
-
|
|
19548
|
+
styles43.timestamp,
|
|
18677
19549
|
{ color: colors.textSecondary, textAlign: isPrincipal ? "right" : "left" }
|
|
18678
19550
|
],
|
|
18679
19551
|
children: formatMessageTime(timestamp)
|
|
@@ -18684,8 +19556,8 @@ function ChatBubbleImpl({
|
|
|
18684
19556
|
}
|
|
18685
19557
|
);
|
|
18686
19558
|
}
|
|
18687
|
-
var ChatBubble =
|
|
18688
|
-
var
|
|
19559
|
+
var ChatBubble = import_react37.default.memo(ChatBubbleImpl);
|
|
19560
|
+
var styles43 = import_react_native54.StyleSheet.create({
|
|
18689
19561
|
row: {
|
|
18690
19562
|
flexDirection: "row",
|
|
18691
19563
|
paddingHorizontal: spacing.md,
|
|
@@ -18745,9 +19617,9 @@ var styles41 = import_react_native52.StyleSheet.create({
|
|
|
18745
19617
|
});
|
|
18746
19618
|
|
|
18747
19619
|
// src/RedactoPrivacyCenter/components/CaseDetails/DocumentRequestCard.tsx
|
|
18748
|
-
var
|
|
18749
|
-
var
|
|
18750
|
-
var
|
|
19620
|
+
var import_react_native55 = require("react-native");
|
|
19621
|
+
var import_react_i18next24 = require("react-i18next");
|
|
19622
|
+
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
18751
19623
|
var STATUS_BADGE_MAP = {
|
|
18752
19624
|
pending: "warning",
|
|
18753
19625
|
under_review: "info",
|
|
@@ -18767,20 +19639,20 @@ function humanize(value) {
|
|
|
18767
19639
|
}
|
|
18768
19640
|
function DocumentRequestCard({ message, onUpload, isSubmitting, isCaseFinalized = false }) {
|
|
18769
19641
|
var _a3;
|
|
18770
|
-
const { t } = (0,
|
|
19642
|
+
const { t } = (0, import_react_i18next24.useTranslation)();
|
|
18771
19643
|
const { colors } = useTheme();
|
|
18772
19644
|
const meta = message.document_request_metadata;
|
|
18773
19645
|
if (!meta) return null;
|
|
18774
19646
|
const status = meta.document_request_status;
|
|
18775
19647
|
const canUpload = (status === "pending" || status === "replacement_requested") && !isCaseFinalized;
|
|
18776
19648
|
const requestEventUuid = meta.document_request_uuid;
|
|
18777
|
-
return /* @__PURE__ */ (0,
|
|
18778
|
-
/* @__PURE__ */ (0,
|
|
18779
|
-
/* @__PURE__ */ (0,
|
|
18780
|
-
/* @__PURE__ */ (0,
|
|
18781
|
-
/* @__PURE__ */ (0,
|
|
19649
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native55.View, { style: [styles44.container, { borderColor: colors.border, backgroundColor: colors.surface }], children: [
|
|
19650
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native55.View, { style: styles44.header, children: [
|
|
19651
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native55.View, { style: styles44.titleRow, children: [
|
|
19652
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Icon, { name: "file-check", size: 16, color: colors.primary, strokeWidth: 2 }),
|
|
19653
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native55.Text, { style: [styles44.title, { color: colors.text }], children: meta.title || t("documentRequestedLabel") || "Document Requested" })
|
|
18782
19654
|
] }),
|
|
18783
|
-
/* @__PURE__ */ (0,
|
|
19655
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
18784
19656
|
PCBadge,
|
|
18785
19657
|
{
|
|
18786
19658
|
status: STATUS_BADGE_MAP[status] || "info",
|
|
@@ -18788,30 +19660,30 @@ function DocumentRequestCard({ message, onUpload, isSubmitting, isCaseFinalized
|
|
|
18788
19660
|
}
|
|
18789
19661
|
)
|
|
18790
19662
|
] }),
|
|
18791
|
-
meta.accepted_document ? /* @__PURE__ */ (0,
|
|
19663
|
+
meta.accepted_document ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native55.Text, { style: [styles44.accepted, { color: colors.textSecondary }], children: t("acceptedLabel", {
|
|
18792
19664
|
accepted: meta.accepted_document,
|
|
18793
19665
|
defaultValue: `Accepted: ${meta.accepted_document}`
|
|
18794
19666
|
}) }) : null,
|
|
18795
|
-
meta.rejection_reason ? /* @__PURE__ */ (0,
|
|
18796
|
-
/* @__PURE__ */ (0,
|
|
19667
|
+
meta.rejection_reason ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native55.View, { style: [styles44.rejectionBox, { backgroundColor: colors.errorSoft }], children: [
|
|
19668
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native55.Text, { style: [styles44.rejectionLabel, { color: colors.error }], children: [
|
|
18797
19669
|
t("rejectionReasonLabel") || "Rejection reason",
|
|
18798
19670
|
":"
|
|
18799
19671
|
] }),
|
|
18800
|
-
/* @__PURE__ */ (0,
|
|
19672
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native55.Text, { style: [styles44.rejectionText, { color: colors.error }], children: meta.rejection_reason })
|
|
18801
19673
|
] }) : null,
|
|
18802
|
-
canUpload && requestEventUuid ? /* @__PURE__ */ (0,
|
|
18803
|
-
|
|
19674
|
+
canUpload && requestEventUuid ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
19675
|
+
import_react_native55.TouchableOpacity,
|
|
18804
19676
|
{
|
|
18805
|
-
style: [
|
|
19677
|
+
style: [styles44.uploadButton, { backgroundColor: colors.primary }],
|
|
18806
19678
|
onPress: () => onUpload(requestEventUuid),
|
|
18807
19679
|
disabled: isSubmitting,
|
|
18808
19680
|
activeOpacity: 0.7,
|
|
18809
|
-
children: /* @__PURE__ */ (0,
|
|
19681
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native55.Text, { style: [styles44.uploadButtonText, { color: colors.primaryText }], children: isSubmitting ? t("loading") || "Loading..." : t("uploadAndSubmit") || "Upload & Submit" })
|
|
18810
19682
|
}
|
|
18811
19683
|
) : null
|
|
18812
19684
|
] });
|
|
18813
19685
|
}
|
|
18814
|
-
var
|
|
19686
|
+
var styles44 = import_react_native55.StyleSheet.create({
|
|
18815
19687
|
container: {
|
|
18816
19688
|
borderWidth: 1.5,
|
|
18817
19689
|
borderStyle: "dashed",
|
|
@@ -18864,20 +19736,20 @@ var styles42 = import_react_native53.StyleSheet.create({
|
|
|
18864
19736
|
});
|
|
18865
19737
|
|
|
18866
19738
|
// src/RedactoPrivacyCenter/components/CaseDetails/StatusEvent.tsx
|
|
18867
|
-
var
|
|
18868
|
-
var
|
|
19739
|
+
var import_react_native56 = require("react-native");
|
|
19740
|
+
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
18869
19741
|
function StatusEvent({ icon, color, bgColor, borderColor, text, subText, timestamp }) {
|
|
18870
19742
|
const { colors } = useTheme();
|
|
18871
|
-
return /* @__PURE__ */ (0,
|
|
18872
|
-
/* @__PURE__ */ (0,
|
|
18873
|
-
/* @__PURE__ */ (0,
|
|
18874
|
-
/* @__PURE__ */ (0,
|
|
18875
|
-
subText ? /* @__PURE__ */ (0,
|
|
19743
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_react_native56.View, { style: [styles45.container, { backgroundColor: bgColor }], children: [
|
|
19744
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native56.View, { style: [styles45.iconBubble, { backgroundColor: `${color}1F` }], children: icon }),
|
|
19745
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_react_native56.View, { style: styles45.textContainer, children: [
|
|
19746
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native56.Text, { style: [styles45.text, { color }], children: text }),
|
|
19747
|
+
subText ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native56.Text, { style: [styles45.subText, { color: colors.textSecondary }], numberOfLines: 2, children: subText }) : null
|
|
18876
19748
|
] }),
|
|
18877
|
-
/* @__PURE__ */ (0,
|
|
19749
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native56.Text, { style: [styles45.timestamp, { color: colors.textSecondary }], children: formatMessageTime(timestamp) })
|
|
18878
19750
|
] });
|
|
18879
19751
|
}
|
|
18880
|
-
var
|
|
19752
|
+
var styles45 = import_react_native56.StyleSheet.create({
|
|
18881
19753
|
container: {
|
|
18882
19754
|
flexDirection: "row",
|
|
18883
19755
|
alignItems: "center",
|
|
@@ -18916,10 +19788,10 @@ var styles43 = import_react_native54.StyleSheet.create({
|
|
|
18916
19788
|
});
|
|
18917
19789
|
|
|
18918
19790
|
// src/RedactoPrivacyCenter/components/CaseDetails/MessageItem.tsx
|
|
18919
|
-
var
|
|
18920
|
-
var CheckIcon = ({ color }) => /* @__PURE__ */ (0,
|
|
18921
|
-
var XIcon = ({ color }) => /* @__PURE__ */ (0,
|
|
18922
|
-
var RefreshIcon = ({ color }) => /* @__PURE__ */ (0,
|
|
19791
|
+
var import_jsx_runtime59 = require("react/jsx-runtime");
|
|
19792
|
+
var CheckIcon = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Icon, { name: "check", size: 14, color, strokeWidth: 2.6 });
|
|
19793
|
+
var XIcon = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Icon, { name: "x", size: 14, color, strokeWidth: 2.6 });
|
|
19794
|
+
var RefreshIcon = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Icon, { name: "refresh-cw", size: 14, color, strokeWidth: 2.2 });
|
|
18923
19795
|
function MessageItemImpl({
|
|
18924
19796
|
message,
|
|
18925
19797
|
onUploadForRequest,
|
|
@@ -18929,14 +19801,14 @@ function MessageItemImpl({
|
|
|
18929
19801
|
isLastInGroup = true
|
|
18930
19802
|
}) {
|
|
18931
19803
|
var _a3, _b;
|
|
18932
|
-
const { t } = (0,
|
|
19804
|
+
const { t } = (0, import_react_i18next25.useTranslation)();
|
|
18933
19805
|
const isPrincipal = message.sender_role === "data_principal";
|
|
18934
19806
|
const senderLabel = isPrincipal ? t("senderYou") || "You" : t("senderPrivacyTeam") || "Privacy Team";
|
|
18935
19807
|
switch (message.message_type) {
|
|
18936
19808
|
case "message_sent":
|
|
18937
19809
|
case "document_submitted":
|
|
18938
19810
|
case "document_replaced":
|
|
18939
|
-
return /* @__PURE__ */ (0,
|
|
19811
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
18940
19812
|
ChatBubble,
|
|
18941
19813
|
{
|
|
18942
19814
|
message,
|
|
@@ -18948,8 +19820,8 @@ function MessageItemImpl({
|
|
|
18948
19820
|
}
|
|
18949
19821
|
);
|
|
18950
19822
|
case "document_requested":
|
|
18951
|
-
return /* @__PURE__ */ (0,
|
|
18952
|
-
/* @__PURE__ */ (0,
|
|
19823
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_jsx_runtime59.Fragment, { children: [
|
|
19824
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
18953
19825
|
ChatBubble,
|
|
18954
19826
|
{
|
|
18955
19827
|
message,
|
|
@@ -18960,7 +19832,7 @@ function MessageItemImpl({
|
|
|
18960
19832
|
isLastInGroup
|
|
18961
19833
|
}
|
|
18962
19834
|
),
|
|
18963
|
-
/* @__PURE__ */ (0,
|
|
19835
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
18964
19836
|
DocumentRequestCard,
|
|
18965
19837
|
{
|
|
18966
19838
|
message,
|
|
@@ -18971,10 +19843,10 @@ function MessageItemImpl({
|
|
|
18971
19843
|
)
|
|
18972
19844
|
] });
|
|
18973
19845
|
case "document_approved":
|
|
18974
|
-
return /* @__PURE__ */ (0,
|
|
19846
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
18975
19847
|
StatusEvent,
|
|
18976
19848
|
{
|
|
18977
|
-
icon: /* @__PURE__ */ (0,
|
|
19849
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(CheckIcon, { color: "#059669" }),
|
|
18978
19850
|
color: "#059669",
|
|
18979
19851
|
bgColor: "rgba(16, 185, 129, 0.08)",
|
|
18980
19852
|
borderColor: "rgba(16, 185, 129, 0.2)",
|
|
@@ -18983,10 +19855,10 @@ function MessageItemImpl({
|
|
|
18983
19855
|
}
|
|
18984
19856
|
);
|
|
18985
19857
|
case "document_rejected":
|
|
18986
|
-
return /* @__PURE__ */ (0,
|
|
19858
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
18987
19859
|
StatusEvent,
|
|
18988
19860
|
{
|
|
18989
|
-
icon: /* @__PURE__ */ (0,
|
|
19861
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(XIcon, { color: "#DC2626" }),
|
|
18990
19862
|
color: "#DC2626",
|
|
18991
19863
|
bgColor: "rgba(220, 38, 38, 0.08)",
|
|
18992
19864
|
borderColor: "rgba(220, 38, 38, 0.2)",
|
|
@@ -18996,10 +19868,10 @@ function MessageItemImpl({
|
|
|
18996
19868
|
}
|
|
18997
19869
|
);
|
|
18998
19870
|
case "document_replacement_requested":
|
|
18999
|
-
return /* @__PURE__ */ (0,
|
|
19871
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
19000
19872
|
StatusEvent,
|
|
19001
19873
|
{
|
|
19002
|
-
icon: /* @__PURE__ */ (0,
|
|
19874
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(RefreshIcon, { color: "#D97706" }),
|
|
19003
19875
|
color: "#D97706",
|
|
19004
19876
|
bgColor: "rgba(245, 158, 11, 0.08)",
|
|
19005
19877
|
borderColor: "rgba(245, 158, 11, 0.2)",
|
|
@@ -19009,7 +19881,7 @@ function MessageItemImpl({
|
|
|
19009
19881
|
}
|
|
19010
19882
|
);
|
|
19011
19883
|
default:
|
|
19012
|
-
return /* @__PURE__ */ (0,
|
|
19884
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
19013
19885
|
ChatBubble,
|
|
19014
19886
|
{
|
|
19015
19887
|
message,
|
|
@@ -19022,13 +19894,13 @@ function MessageItemImpl({
|
|
|
19022
19894
|
);
|
|
19023
19895
|
}
|
|
19024
19896
|
}
|
|
19025
|
-
var MessageItem =
|
|
19897
|
+
var MessageItem = import_react38.default.memo(MessageItemImpl);
|
|
19026
19898
|
|
|
19027
19899
|
// src/RedactoPrivacyCenter/components/CaseDetails/MessageComposer.tsx
|
|
19028
|
-
var
|
|
19029
|
-
var
|
|
19030
|
-
var
|
|
19031
|
-
var
|
|
19900
|
+
var import_react39 = require("react");
|
|
19901
|
+
var import_react_native57 = require("react-native");
|
|
19902
|
+
var import_react_i18next26 = require("react-i18next");
|
|
19903
|
+
var import_jsx_runtime60 = require("react/jsx-runtime");
|
|
19032
19904
|
function MessageComposer({
|
|
19033
19905
|
messageText,
|
|
19034
19906
|
onMessageTextChange,
|
|
@@ -19040,15 +19912,15 @@ function MessageComposer({
|
|
|
19040
19912
|
isUploading,
|
|
19041
19913
|
isCaseFinalized = false
|
|
19042
19914
|
}) {
|
|
19043
|
-
const { t } = (0,
|
|
19915
|
+
const { t } = (0, import_react_i18next26.useTranslation)();
|
|
19044
19916
|
const { colors } = useTheme();
|
|
19045
19917
|
const canSend = (messageText.trim().length > 0 || pendingUpload) && !isSending && !isUploading && !isCaseFinalized;
|
|
19046
|
-
const activate = (0,
|
|
19047
|
-
(0,
|
|
19048
|
-
|
|
19918
|
+
const activate = (0, import_react39.useRef)(new import_react_native57.Animated.Value(canSend ? 1 : 0)).current;
|
|
19919
|
+
(0, import_react39.useEffect)(() => {
|
|
19920
|
+
import_react_native57.Animated.timing(activate, {
|
|
19049
19921
|
toValue: canSend ? 1 : 0,
|
|
19050
19922
|
duration: 180,
|
|
19051
|
-
easing:
|
|
19923
|
+
easing: import_react_native57.Easing.out(import_react_native57.Easing.quad),
|
|
19052
19924
|
useNativeDriver: false
|
|
19053
19925
|
}).start();
|
|
19054
19926
|
}, [canSend, activate]);
|
|
@@ -19056,30 +19928,30 @@ function MessageComposer({
|
|
|
19056
19928
|
inputRange: [0, 1],
|
|
19057
19929
|
outputRange: [colors.border, colors.primary]
|
|
19058
19930
|
});
|
|
19059
|
-
const pressScale = (0,
|
|
19931
|
+
const pressScale = (0, import_react39.useRef)(new import_react_native57.Animated.Value(1)).current;
|
|
19060
19932
|
const handlePressIn = () => {
|
|
19061
|
-
|
|
19933
|
+
import_react_native57.Animated.spring(pressScale, { toValue: 0.88, useNativeDriver: true, speed: 30, bounciness: 0 }).start();
|
|
19062
19934
|
};
|
|
19063
19935
|
const handlePressOut = () => {
|
|
19064
|
-
|
|
19936
|
+
import_react_native57.Animated.spring(pressScale, { toValue: 1, useNativeDriver: true, speed: 20, bounciness: 6 }).start();
|
|
19065
19937
|
};
|
|
19066
|
-
const pillIn = (0,
|
|
19067
|
-
(0,
|
|
19068
|
-
|
|
19938
|
+
const pillIn = (0, import_react39.useRef)(new import_react_native57.Animated.Value(0)).current;
|
|
19939
|
+
(0, import_react39.useEffect)(() => {
|
|
19940
|
+
import_react_native57.Animated.timing(pillIn, {
|
|
19069
19941
|
toValue: pendingUpload ? 1 : 0,
|
|
19070
19942
|
duration: 220,
|
|
19071
|
-
easing:
|
|
19943
|
+
easing: import_react_native57.Easing.out(import_react_native57.Easing.cubic),
|
|
19072
19944
|
useNativeDriver: true
|
|
19073
19945
|
}).start();
|
|
19074
19946
|
}, [pendingUpload, pillIn]);
|
|
19075
19947
|
const pillOpacity = pillIn;
|
|
19076
19948
|
const pillTranslateY = pillIn.interpolate({ inputRange: [0, 1], outputRange: [8, 0] });
|
|
19077
|
-
return /* @__PURE__ */ (0,
|
|
19078
|
-
pendingUpload && /* @__PURE__ */ (0,
|
|
19079
|
-
|
|
19949
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_react_native57.View, { style: [styles46.container, { borderTopColor: colors.hairline, backgroundColor: colors.canvasSubtle, paddingBottom: spacing.sm }], children: [
|
|
19950
|
+
pendingUpload && /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
|
|
19951
|
+
import_react_native57.Animated.View,
|
|
19080
19952
|
{
|
|
19081
19953
|
style: [
|
|
19082
|
-
|
|
19954
|
+
styles46.uploadPill,
|
|
19083
19955
|
{
|
|
19084
19956
|
backgroundColor: colors.primarySoft,
|
|
19085
19957
|
opacity: pillOpacity,
|
|
@@ -19087,34 +19959,34 @@ function MessageComposer({
|
|
|
19087
19959
|
}
|
|
19088
19960
|
],
|
|
19089
19961
|
children: [
|
|
19090
|
-
/* @__PURE__ */ (0,
|
|
19091
|
-
/* @__PURE__ */ (0,
|
|
19962
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { name: "file", size: 14, color: colors.primary }),
|
|
19963
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_react_native57.Text, { style: [styles46.uploadFileName, { color: colors.primary }], numberOfLines: 1, children: [
|
|
19092
19964
|
pendingUpload.file_name,
|
|
19093
19965
|
" (",
|
|
19094
19966
|
formatFileSize(pendingUpload.file_size),
|
|
19095
19967
|
")"
|
|
19096
19968
|
] }),
|
|
19097
|
-
/* @__PURE__ */ (0,
|
|
19969
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native57.TouchableOpacity, { onPress: onRemovePendingUpload, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { name: "x", size: 14, color: colors.textSecondary, strokeWidth: 2.4 }) })
|
|
19098
19970
|
]
|
|
19099
19971
|
}
|
|
19100
19972
|
),
|
|
19101
|
-
/* @__PURE__ */ (0,
|
|
19102
|
-
/* @__PURE__ */ (0,
|
|
19103
|
-
|
|
19973
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_react_native57.View, { style: [styles46.pill, { backgroundColor: colors.surface, borderColor: colors.border }, isCaseFinalized && styles46.pillDisabled], children: [
|
|
19974
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
19975
|
+
import_react_native57.TouchableOpacity,
|
|
19104
19976
|
{
|
|
19105
|
-
style:
|
|
19977
|
+
style: styles46.attachButton,
|
|
19106
19978
|
onPress: onAttachClick,
|
|
19107
19979
|
disabled: isUploading || isCaseFinalized,
|
|
19108
19980
|
activeOpacity: 0.6,
|
|
19109
19981
|
hitSlop: DEFAULT_HIT_SLOP,
|
|
19110
19982
|
accessibilityLabel: t("uploadFile") || "Attach file",
|
|
19111
|
-
children: isUploading ? /* @__PURE__ */ (0,
|
|
19983
|
+
children: isUploading ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native57.ActivityIndicator, { size: "small", color: colors.primary }) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { name: "paperclip", size: 20, color: colors.textSecondary })
|
|
19112
19984
|
}
|
|
19113
19985
|
),
|
|
19114
|
-
/* @__PURE__ */ (0,
|
|
19115
|
-
|
|
19986
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
19987
|
+
import_react_native57.TextInput,
|
|
19116
19988
|
{
|
|
19117
|
-
style: [
|
|
19989
|
+
style: [styles46.input, { color: colors.text }],
|
|
19118
19990
|
value: messageText,
|
|
19119
19991
|
onChangeText: onMessageTextChange,
|
|
19120
19992
|
placeholder: t("messageInputPlaceholder", { defaultValue: "Message\u2026" }),
|
|
@@ -19124,8 +19996,8 @@ function MessageComposer({
|
|
|
19124
19996
|
editable: !isSending && !isCaseFinalized
|
|
19125
19997
|
}
|
|
19126
19998
|
),
|
|
19127
|
-
/* @__PURE__ */ (0,
|
|
19128
|
-
|
|
19999
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native57.Animated.View, { style: { transform: [{ scale: pressScale }] }, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
20000
|
+
import_react_native57.TouchableOpacity,
|
|
19129
20001
|
{
|
|
19130
20002
|
onPress: onSend,
|
|
19131
20003
|
onPressIn: handlePressIn,
|
|
@@ -19133,15 +20005,15 @@ function MessageComposer({
|
|
|
19133
20005
|
disabled: !canSend,
|
|
19134
20006
|
activeOpacity: 0.85,
|
|
19135
20007
|
accessibilityLabel: t("send") || "Send",
|
|
19136
|
-
children: /* @__PURE__ */ (0,
|
|
20008
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native57.Animated.View, { style: [styles46.sendButton, { backgroundColor: sendBgColor }], children: isSending ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native57.ActivityIndicator, { size: "small", color: colors.primaryText }) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native57.View, { style: styles46.sendIcon, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { name: "send", size: 18, color: canSend ? colors.primaryText : colors.textSecondary }) }) })
|
|
19137
20009
|
}
|
|
19138
20010
|
) })
|
|
19139
20011
|
] })
|
|
19140
20012
|
] });
|
|
19141
20013
|
}
|
|
19142
|
-
var
|
|
20014
|
+
var styles46 = import_react_native57.StyleSheet.create({
|
|
19143
20015
|
container: {
|
|
19144
|
-
borderTopWidth:
|
|
20016
|
+
borderTopWidth: import_react_native57.StyleSheet.hairlineWidth,
|
|
19145
20017
|
paddingHorizontal: spacing.md,
|
|
19146
20018
|
paddingVertical: spacing.sm
|
|
19147
20019
|
},
|
|
@@ -19164,7 +20036,7 @@ var styles44 = import_react_native55.StyleSheet.create({
|
|
|
19164
20036
|
pill: {
|
|
19165
20037
|
flexDirection: "row",
|
|
19166
20038
|
alignItems: "center",
|
|
19167
|
-
borderWidth:
|
|
20039
|
+
borderWidth: import_react_native57.StyleSheet.hairlineWidth,
|
|
19168
20040
|
borderRadius: radii.xxl + 4,
|
|
19169
20041
|
paddingHorizontal: spacing.xs + 2,
|
|
19170
20042
|
paddingVertical: spacing.xs,
|
|
@@ -19203,7 +20075,7 @@ var styles44 = import_react_native55.StyleSheet.create({
|
|
|
19203
20075
|
});
|
|
19204
20076
|
|
|
19205
20077
|
// src/RedactoPrivacyCenter/components/CaseDetails/MessagesTab.tsx
|
|
19206
|
-
var
|
|
20078
|
+
var import_jsx_runtime61 = require("react/jsx-runtime");
|
|
19207
20079
|
var STREAK_GAP_MS = 5 * 60 * 1e3;
|
|
19208
20080
|
function isStreakBoundary(a, b) {
|
|
19209
20081
|
if (!a || !b) return true;
|
|
@@ -19233,11 +20105,11 @@ function sameDay(a, b) {
|
|
|
19233
20105
|
}
|
|
19234
20106
|
var MESSAGE_POLL_INTERVAL = 3e4;
|
|
19235
20107
|
function MessagesTab({ caseUuid, isCaseFinalized = false }) {
|
|
19236
|
-
const { t } = (0,
|
|
20108
|
+
const { t } = (0, import_react_i18next27.useTranslation)();
|
|
19237
20109
|
const { accessToken, refreshToken, email, organizationId, workspaceId, onError, updateTokens } = useAuth();
|
|
19238
20110
|
const { consentClient } = useBaseUrl();
|
|
19239
20111
|
const { colors } = useTheme();
|
|
19240
|
-
const authContext = (0,
|
|
20112
|
+
const authContext = (0, import_react40.useMemo)(() => ({
|
|
19241
20113
|
accessToken,
|
|
19242
20114
|
refreshToken,
|
|
19243
20115
|
onError,
|
|
@@ -19249,13 +20121,13 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
|
|
|
19249
20121
|
caseUuid,
|
|
19250
20122
|
authContext
|
|
19251
20123
|
);
|
|
19252
|
-
const [messageText, setMessageText] = (0,
|
|
19253
|
-
const [pendingUpload, setPendingUpload] = (0,
|
|
19254
|
-
const [isSending, setIsSending] = (0,
|
|
19255
|
-
const [isUploading, setIsUploading] = (0,
|
|
19256
|
-
const [isSubmittingForRequest, setIsSubmittingForRequest] = (0,
|
|
19257
|
-
const flatListRef = (0,
|
|
19258
|
-
(0,
|
|
20124
|
+
const [messageText, setMessageText] = (0, import_react40.useState)("");
|
|
20125
|
+
const [pendingUpload, setPendingUpload] = (0, import_react40.useState)(null);
|
|
20126
|
+
const [isSending, setIsSending] = (0, import_react40.useState)(false);
|
|
20127
|
+
const [isUploading, setIsUploading] = (0, import_react40.useState)(false);
|
|
20128
|
+
const [isSubmittingForRequest, setIsSubmittingForRequest] = (0, import_react40.useState)(false);
|
|
20129
|
+
const flatListRef = (0, import_react40.useRef)(null);
|
|
20130
|
+
(0, import_react40.useEffect)(() => {
|
|
19259
20131
|
if (messages && messages.length > 0) {
|
|
19260
20132
|
setTimeout(() => {
|
|
19261
20133
|
var _a3;
|
|
@@ -19263,16 +20135,19 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
|
|
|
19263
20135
|
}, 100);
|
|
19264
20136
|
}
|
|
19265
20137
|
}, [messages == null ? void 0 : messages.length]);
|
|
19266
|
-
const refetchRef = (0,
|
|
20138
|
+
const refetchRef = (0, import_react40.useRef)(refetch);
|
|
19267
20139
|
refetchRef.current = refetch;
|
|
19268
|
-
(0,
|
|
20140
|
+
const authContextRef = (0, import_react40.useRef)(authContext);
|
|
20141
|
+
authContextRef.current = authContext;
|
|
20142
|
+
(0, import_react40.useEffect)(() => {
|
|
19269
20143
|
if (isCaseFinalized) return;
|
|
19270
20144
|
const id = setInterval(() => {
|
|
20145
|
+
if (isRefreshBlocked(authContextRef.current)) return;
|
|
19271
20146
|
refetchRef.current();
|
|
19272
20147
|
}, MESSAGE_POLL_INTERVAL);
|
|
19273
20148
|
return () => clearInterval(id);
|
|
19274
20149
|
}, [isCaseFinalized]);
|
|
19275
|
-
const handleSend = (0,
|
|
20150
|
+
const handleSend = (0, import_react40.useCallback)(async () => {
|
|
19276
20151
|
if (isCaseFinalized) return;
|
|
19277
20152
|
if (!messageText.trim() && !pendingUpload) return;
|
|
19278
20153
|
if (!organizationId || !workspaceId) return;
|
|
@@ -19297,7 +20172,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
|
|
|
19297
20172
|
setIsSending(false);
|
|
19298
20173
|
}
|
|
19299
20174
|
}, [isCaseFinalized, messageText, pendingUpload, organizationId, workspaceId, caseUuid, authContext, consentClient, refetch]);
|
|
19300
|
-
const handleAttach = (0,
|
|
20175
|
+
const handleAttach = (0, import_react40.useCallback)(async () => {
|
|
19301
20176
|
if (isCaseFinalized) return;
|
|
19302
20177
|
if (!organizationId || !workspaceId) return;
|
|
19303
20178
|
try {
|
|
@@ -19332,10 +20207,10 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
|
|
|
19332
20207
|
setIsUploading(false);
|
|
19333
20208
|
}
|
|
19334
20209
|
}, [isCaseFinalized, organizationId, workspaceId, caseUuid, authContext, consentClient]);
|
|
19335
|
-
const handleUploadForRequest = (0,
|
|
20210
|
+
const handleUploadForRequest = (0, import_react40.useCallback)((_requestEventUuid) => {
|
|
19336
20211
|
handleAttach();
|
|
19337
20212
|
}, [handleAttach]);
|
|
19338
|
-
const messagesList = (0,
|
|
20213
|
+
const messagesList = (0, import_react40.useMemo)(() => {
|
|
19339
20214
|
const list = messages ? [...messages] : [];
|
|
19340
20215
|
list.sort((a, b) => {
|
|
19341
20216
|
const ta = new Date(a.created_at).getTime();
|
|
@@ -19344,17 +20219,17 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
|
|
|
19344
20219
|
});
|
|
19345
20220
|
return list;
|
|
19346
20221
|
}, [messages]);
|
|
19347
|
-
const keyExtractor = (0,
|
|
19348
|
-
const renderMessage = (0,
|
|
20222
|
+
const keyExtractor = (0, import_react40.useCallback)((item) => item.uuid, []);
|
|
20223
|
+
const renderMessage = (0, import_react40.useCallback)(
|
|
19349
20224
|
({ item, index }) => {
|
|
19350
20225
|
const prev = index > 0 ? messagesList[index - 1] : void 0;
|
|
19351
20226
|
const next = index < messagesList.length - 1 ? messagesList[index + 1] : void 0;
|
|
19352
20227
|
const isFirstInGroup = isStreakBoundary(prev, item);
|
|
19353
20228
|
const isLastInGroup = isStreakBoundary(item, next);
|
|
19354
20229
|
const dateSeparator = getDateSeparator(prev == null ? void 0 : prev.created_at, item.created_at, t);
|
|
19355
|
-
return /* @__PURE__ */ (0,
|
|
19356
|
-
dateSeparator ? /* @__PURE__ */ (0,
|
|
19357
|
-
/* @__PURE__ */ (0,
|
|
20230
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
|
|
20231
|
+
dateSeparator ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.View, { style: styles47.daySeparator, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.View, { style: [styles47.dayPill, { backgroundColor: colors.surfaceAlt }], children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.Text, { style: [styles47.dayPillText, { color: colors.textSecondary }], children: dateSeparator }) }) }) : null,
|
|
20232
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
19358
20233
|
MessageItem,
|
|
19359
20234
|
{
|
|
19360
20235
|
message: item,
|
|
@@ -19370,32 +20245,32 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
|
|
|
19370
20245
|
[messagesList, handleUploadForRequest, isSubmittingForRequest, isCaseFinalized, colors, t]
|
|
19371
20246
|
);
|
|
19372
20247
|
if (isLoading) {
|
|
19373
|
-
return /* @__PURE__ */ (0,
|
|
20248
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.View, { style: styles47.centered, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.ActivityIndicator, { size: "large", color: colors.primary }) });
|
|
19374
20249
|
}
|
|
19375
20250
|
if (error) {
|
|
19376
|
-
return /* @__PURE__ */ (0,
|
|
20251
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.View, { style: styles47.centered, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.Text, { style: [styles47.errorText, { color: colors.error }], children: t("errorLoadingMessages") || "Error loading messages" }) });
|
|
19377
20252
|
}
|
|
19378
|
-
return /* @__PURE__ */ (0,
|
|
19379
|
-
/* @__PURE__ */ (0,
|
|
19380
|
-
/* @__PURE__ */ (0,
|
|
19381
|
-
/* @__PURE__ */ (0,
|
|
20253
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_react_native58.View, { style: [styles47.container, { backgroundColor: colors.canvasSubtle }], children: [
|
|
20254
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_react_native58.View, { style: styles47.secureRow, children: [
|
|
20255
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Icon, { name: "lock", size: 12, color: colors.textSecondary, strokeWidth: 2.2 }),
|
|
20256
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.Text, { style: [styles47.secureText, { color: colors.textSecondary }], children: isCaseFinalized ? t("caseFinalizedMessagesTooltip") || "This case is finalized \u2014 messages can no longer be sent." : `${t("private", { defaultValue: "Private" })} \xB7 ${t("senderPrivacyTeam") || "Privacy Team"}` })
|
|
19382
20257
|
] }),
|
|
19383
|
-
/* @__PURE__ */ (0,
|
|
19384
|
-
|
|
20258
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
20259
|
+
import_react_native58.FlatList,
|
|
19385
20260
|
{
|
|
19386
20261
|
ref: flatListRef,
|
|
19387
|
-
style:
|
|
20262
|
+
style: styles47.list,
|
|
19388
20263
|
data: messagesList,
|
|
19389
20264
|
keyExtractor,
|
|
19390
20265
|
renderItem: renderMessage,
|
|
19391
20266
|
contentContainerStyle: [
|
|
19392
|
-
|
|
19393
|
-
messagesList.length ?
|
|
20267
|
+
styles47.messagesList,
|
|
20268
|
+
messagesList.length ? styles47.messagesListFill : styles47.messagesListCenter
|
|
19394
20269
|
],
|
|
19395
|
-
ListEmptyComponent: /* @__PURE__ */ (0,
|
|
19396
|
-
/* @__PURE__ */ (0,
|
|
19397
|
-
/* @__PURE__ */ (0,
|
|
19398
|
-
/* @__PURE__ */ (0,
|
|
20270
|
+
ListEmptyComponent: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_react_native58.View, { style: styles47.emptyContainer, children: [
|
|
20271
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.View, { style: [styles47.emptyIconWrap, { backgroundColor: colors.primarySoft }], children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Icon, { name: "messages-square", size: 28, color: colors.primary, strokeWidth: 2 }) }),
|
|
20272
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.Text, { style: [styles47.emptyTitle, { color: colors.text }], children: t("noMessagesYet") || "No messages yet" }),
|
|
20273
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.Text, { style: [styles47.emptySubtitle, { color: colors.textSecondary }], children: t("noMessagesYetSubtitle", "Start the conversation below") })
|
|
19399
20274
|
] }),
|
|
19400
20275
|
onContentSizeChange: () => {
|
|
19401
20276
|
var _a3;
|
|
@@ -19407,7 +20282,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
|
|
|
19407
20282
|
removeClippedSubviews: true
|
|
19408
20283
|
}
|
|
19409
20284
|
),
|
|
19410
|
-
/* @__PURE__ */ (0,
|
|
20285
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
19411
20286
|
MessageComposer,
|
|
19412
20287
|
{
|
|
19413
20288
|
messageText,
|
|
@@ -19423,7 +20298,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
|
|
|
19423
20298
|
)
|
|
19424
20299
|
] });
|
|
19425
20300
|
}
|
|
19426
|
-
var
|
|
20301
|
+
var styles47 = import_react_native58.StyleSheet.create({
|
|
19427
20302
|
container: {
|
|
19428
20303
|
flex: 1
|
|
19429
20304
|
},
|
|
@@ -19506,17 +20381,17 @@ var styles45 = import_react_native56.StyleSheet.create({
|
|
|
19506
20381
|
});
|
|
19507
20382
|
|
|
19508
20383
|
// src/RedactoPrivacyCenter/components/CaseDetails/CaseDetailsPage.tsx
|
|
19509
|
-
var
|
|
20384
|
+
var import_jsx_runtime62 = require("react/jsx-runtime");
|
|
19510
20385
|
function CaseDetailsPage() {
|
|
19511
20386
|
var _a3, _b;
|
|
19512
|
-
const { t } = (0,
|
|
20387
|
+
const { t } = (0, import_react_i18next28.useTranslation)();
|
|
19513
20388
|
const { navigateTo, selectedCase, setSelectedCase, pendingCaseUuid } = useInternalNavigation();
|
|
19514
20389
|
const { accessToken, refreshToken, email, organizationId, workspaceId, onError, updateTokens } = useAuth();
|
|
19515
20390
|
const { colors } = useTheme();
|
|
19516
20391
|
const { keyboardOffset } = usePrivacyCenterInsets();
|
|
19517
20392
|
const requestTypeLabels = useRequestTypeLabels();
|
|
19518
|
-
const [activeTab, setActiveTab] = (0,
|
|
19519
|
-
const authContext = (0,
|
|
20393
|
+
const [activeTab, setActiveTab] = (0, import_react41.useState)("request-details");
|
|
20394
|
+
const authContext = (0, import_react41.useMemo)(() => ({
|
|
19520
20395
|
accessToken,
|
|
19521
20396
|
refreshToken,
|
|
19522
20397
|
onError,
|
|
@@ -19529,7 +20404,7 @@ function CaseDetailsPage() {
|
|
|
19529
20404
|
email != null ? email : void 0,
|
|
19530
20405
|
authContext
|
|
19531
20406
|
);
|
|
19532
|
-
(0,
|
|
20407
|
+
(0, import_react41.useEffect)(() => {
|
|
19533
20408
|
if (!cases) return;
|
|
19534
20409
|
if (cases.length === 0) {
|
|
19535
20410
|
navigateTo("form");
|
|
@@ -19543,33 +20418,33 @@ function CaseDetailsPage() {
|
|
|
19543
20418
|
navigateTo("form");
|
|
19544
20419
|
}
|
|
19545
20420
|
}, [cases, targetUuid, setSelectedCase, navigateTo]);
|
|
19546
|
-
(0,
|
|
20421
|
+
(0, import_react41.useEffect)(() => {
|
|
19547
20422
|
if (!selectedCase && !targetUuid && !isLoading) {
|
|
19548
20423
|
navigateTo("form");
|
|
19549
20424
|
}
|
|
19550
20425
|
}, [selectedCase, targetUuid, isLoading, navigateTo]);
|
|
19551
20426
|
if (!selectedCase) {
|
|
19552
|
-
return /* @__PURE__ */ (0,
|
|
20427
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.View, { style: styles48.centered, children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.ActivityIndicator, { size: "large", color: colors.primary }) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.Text, { style: [styles48.emptyText, { color: colors.textSecondary }], children: t("noCasesYet") || "No case selected" }) });
|
|
19553
20428
|
}
|
|
19554
20429
|
const requestTypeLabel = requestTypeLabels[(_b = selectedCase.request_type) == null ? void 0 : _b.toUpperCase()] || selectedCase.request_type_display || formatCaseStatus(selectedCase.request_type || "");
|
|
19555
20430
|
const tabs = [
|
|
19556
20431
|
{ id: "request-details", label: t("requestDetails") || "Request Details" },
|
|
19557
20432
|
{ id: "messages", label: t("messages") || "Messages" }
|
|
19558
20433
|
];
|
|
19559
|
-
return /* @__PURE__ */ (0,
|
|
20434
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
|
|
19560
20435
|
KeyboardAvoidingViewCompat,
|
|
19561
20436
|
{
|
|
19562
|
-
style: [
|
|
20437
|
+
style: [styles48.container, { backgroundColor: colors.canvasSubtle }],
|
|
19563
20438
|
behavior: "padding",
|
|
19564
|
-
keyboardVerticalOffset:
|
|
20439
|
+
keyboardVerticalOffset: import_react_native59.Platform.OS === "ios" ? keyboardOffset : 0,
|
|
19565
20440
|
children: [
|
|
19566
|
-
/* @__PURE__ */ (0,
|
|
19567
|
-
/* @__PURE__ */ (0,
|
|
19568
|
-
/* @__PURE__ */ (0,
|
|
19569
|
-
/* @__PURE__ */ (0,
|
|
19570
|
-
/* @__PURE__ */ (0,
|
|
19571
|
-
/* @__PURE__ */ (0,
|
|
19572
|
-
/* @__PURE__ */ (0,
|
|
20441
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react_native59.View, { style: styles48.headerWrap, children: [
|
|
20442
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.View, { style: [styles48.heroCard, elevation.card, { backgroundColor: colors.surface }], children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react_native59.View, { style: styles48.heroInner, children: [
|
|
20443
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.View, { style: [styles48.accent, { backgroundColor: getCaseStatusColor(selectedCase.status, colors) }] }),
|
|
20444
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react_native59.View, { style: styles48.heroBody, children: [
|
|
20445
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react_native59.View, { style: styles48.heroTopRow, children: [
|
|
20446
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.View, { style: [styles48.typeChip, { backgroundColor: withAlpha(getRequestTypeColor(selectedCase.request_type, colors), 0.12) }], children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.Text, { style: [styles48.typeChipText, { color: getRequestTypeColor(selectedCase.request_type, colors) }], numberOfLines: 1, children: requestTypeLabel }) }),
|
|
20447
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
19573
20448
|
PCBadge,
|
|
19574
20449
|
{
|
|
19575
20450
|
status: getCaseStatusVariant(selectedCase.status),
|
|
@@ -19578,10 +20453,10 @@ function CaseDetailsPage() {
|
|
|
19578
20453
|
}
|
|
19579
20454
|
)
|
|
19580
20455
|
] }),
|
|
19581
|
-
/* @__PURE__ */ (0,
|
|
20456
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.Text, { style: [styles48.caseId, { color: colors.text }], numberOfLines: 1, children: selectedCase.case_id })
|
|
19582
20457
|
] })
|
|
19583
20458
|
] }) }),
|
|
19584
|
-
/* @__PURE__ */ (0,
|
|
20459
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
19585
20460
|
Segmented,
|
|
19586
20461
|
{
|
|
19587
20462
|
options: tabs.map((tab) => ({ value: tab.id, label: tab.label })),
|
|
@@ -19590,18 +20465,18 @@ function CaseDetailsPage() {
|
|
|
19590
20465
|
}
|
|
19591
20466
|
)
|
|
19592
20467
|
] }),
|
|
19593
|
-
/* @__PURE__ */ (0,
|
|
20468
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.View, { style: styles48.tabContent, children: activeTab === "request-details" ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
19594
20469
|
RequestDetailsTab,
|
|
19595
20470
|
{
|
|
19596
20471
|
selectedCase,
|
|
19597
20472
|
requestTypeLabel
|
|
19598
20473
|
}
|
|
19599
|
-
) : /* @__PURE__ */ (0,
|
|
20474
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(MessagesTab, { caseUuid: selectedCase.uuid, isCaseFinalized: isTerminalCaseStatus(selectedCase.status) }) })
|
|
19600
20475
|
]
|
|
19601
20476
|
}
|
|
19602
20477
|
);
|
|
19603
20478
|
}
|
|
19604
|
-
var
|
|
20479
|
+
var styles48 = import_react_native59.StyleSheet.create({
|
|
19605
20480
|
container: {
|
|
19606
20481
|
flex: 1
|
|
19607
20482
|
},
|
|
@@ -19666,36 +20541,36 @@ var styles46 = import_react_native57.StyleSheet.create({
|
|
|
19666
20541
|
});
|
|
19667
20542
|
|
|
19668
20543
|
// src/RedactoPrivacyCenter/components/NotificationHub/NotificationsScreen.tsx
|
|
19669
|
-
var
|
|
19670
|
-
var
|
|
19671
|
-
var
|
|
20544
|
+
var import_react44 = require("react");
|
|
20545
|
+
var import_react_native65 = require("react-native");
|
|
20546
|
+
var import_react_i18next30 = require("react-i18next");
|
|
19672
20547
|
|
|
19673
20548
|
// src/RedactoPrivacyCenter/components/NotificationHub/NotificationRow.tsx
|
|
19674
|
-
var
|
|
19675
|
-
var
|
|
20549
|
+
var import_react_native63 = require("react-native");
|
|
20550
|
+
var import_react_i18next29 = require("react-i18next");
|
|
19676
20551
|
|
|
19677
20552
|
// src/RedactoPrivacyCenter/components/NotificationHub/NotificationCTAButton.tsx
|
|
19678
|
-
var
|
|
19679
|
-
var
|
|
20553
|
+
var import_react_native60 = require("react-native");
|
|
20554
|
+
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
19680
20555
|
var NotificationCTAButton = ({ cta, onPress }) => {
|
|
19681
20556
|
const { colors } = useTheme();
|
|
19682
20557
|
const tone = cta.style === "danger" ? colors.error : colors.primary;
|
|
19683
20558
|
const isPrimary = cta.style === "primary" || cta.style === "danger";
|
|
19684
|
-
return /* @__PURE__ */ (0,
|
|
19685
|
-
|
|
20559
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
20560
|
+
import_react_native60.TouchableOpacity,
|
|
19686
20561
|
{
|
|
19687
20562
|
onPress,
|
|
19688
20563
|
activeOpacity: 0.7,
|
|
19689
20564
|
style: [
|
|
19690
|
-
|
|
20565
|
+
styles49.button,
|
|
19691
20566
|
isPrimary ? { backgroundColor: tone } : { backgroundColor: colors.primarySoft }
|
|
19692
20567
|
],
|
|
19693
20568
|
accessibilityRole: "button",
|
|
19694
|
-
children: /* @__PURE__ */ (0,
|
|
20569
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native60.Text, { style: [styles49.label, { color: isPrimary ? colors.primaryText : colors.primary }], numberOfLines: 1, children: cta.label })
|
|
19695
20570
|
}
|
|
19696
20571
|
);
|
|
19697
20572
|
};
|
|
19698
|
-
var
|
|
20573
|
+
var styles49 = import_react_native60.StyleSheet.create({
|
|
19699
20574
|
button: {
|
|
19700
20575
|
paddingHorizontal: spacing.lg,
|
|
19701
20576
|
paddingVertical: spacing.sm,
|
|
@@ -19710,8 +20585,8 @@ var styles47 = import_react_native58.StyleSheet.create({
|
|
|
19710
20585
|
});
|
|
19711
20586
|
|
|
19712
20587
|
// src/RedactoPrivacyCenter/components/NotificationHub/NotificationIcon.tsx
|
|
19713
|
-
var
|
|
19714
|
-
var
|
|
20588
|
+
var import_react_native61 = require("react-native");
|
|
20589
|
+
var import_jsx_runtime64 = require("react/jsx-runtime");
|
|
19715
20590
|
var CATEGORY_ICON = {
|
|
19716
20591
|
guardian: "user-round",
|
|
19717
20592
|
consent: "clock",
|
|
@@ -19724,18 +20599,18 @@ var NotificationIcon = ({ notificationType, size = 40 }) => {
|
|
|
19724
20599
|
var _a3;
|
|
19725
20600
|
const category = (_a3 = TYPE_TO_ICON_CATEGORY[notificationType]) != null ? _a3 : "system";
|
|
19726
20601
|
const color = ICON_COLORS[category];
|
|
19727
|
-
return /* @__PURE__ */ (0,
|
|
19728
|
-
|
|
20602
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
20603
|
+
import_react_native61.View,
|
|
19729
20604
|
{
|
|
19730
20605
|
style: [
|
|
19731
|
-
|
|
20606
|
+
styles50.wrap,
|
|
19732
20607
|
{ width: size, height: size, borderRadius: radii.md, backgroundColor: withAlpha(color, 0.13) }
|
|
19733
20608
|
],
|
|
19734
|
-
children: /* @__PURE__ */ (0,
|
|
20609
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Icon, { name: CATEGORY_ICON[category], size: Math.round(size * 0.5), color, strokeWidth: 2 })
|
|
19735
20610
|
}
|
|
19736
20611
|
);
|
|
19737
20612
|
};
|
|
19738
|
-
var
|
|
20613
|
+
var styles50 = import_react_native61.StyleSheet.create({
|
|
19739
20614
|
wrap: {
|
|
19740
20615
|
alignItems: "center",
|
|
19741
20616
|
justifyContent: "center"
|
|
@@ -19743,15 +20618,15 @@ var styles48 = import_react_native59.StyleSheet.create({
|
|
|
19743
20618
|
});
|
|
19744
20619
|
|
|
19745
20620
|
// src/RedactoPrivacyCenter/components/NotificationHub/SwipeableRow.tsx
|
|
19746
|
-
var
|
|
19747
|
-
var
|
|
19748
|
-
var
|
|
20621
|
+
var import_react42 = require("react");
|
|
20622
|
+
var import_react_native62 = require("react-native");
|
|
20623
|
+
var import_jsx_runtime65 = require("react/jsx-runtime");
|
|
19749
20624
|
var ACTION_WIDTH = 80;
|
|
19750
20625
|
var CLAIM_THRESHOLD = 8;
|
|
19751
20626
|
var SwipeableRow = ({ actions, background, children }) => {
|
|
19752
20627
|
const { colors } = useTheme();
|
|
19753
|
-
const translateX = (0,
|
|
19754
|
-
const baseX = (0,
|
|
20628
|
+
const translateX = (0, import_react42.useRef)(new import_react_native62.Animated.Value(0)).current;
|
|
20629
|
+
const baseX = (0, import_react42.useRef)(0);
|
|
19755
20630
|
const maxOpen = actions.length * ACTION_WIDTH;
|
|
19756
20631
|
const toneColor2 = {
|
|
19757
20632
|
primary: colors.primary,
|
|
@@ -19760,10 +20635,10 @@ var SwipeableRow = ({ actions, background, children }) => {
|
|
|
19760
20635
|
};
|
|
19761
20636
|
const settle = (to) => {
|
|
19762
20637
|
baseX.current = to;
|
|
19763
|
-
|
|
20638
|
+
import_react_native62.Animated.spring(translateX, { toValue: to, useNativeDriver: true, bounciness: 0, speed: 18 }).start();
|
|
19764
20639
|
};
|
|
19765
|
-
const panResponder = (0,
|
|
19766
|
-
() =>
|
|
20640
|
+
const panResponder = (0, import_react42.useMemo)(
|
|
20641
|
+
() => import_react_native62.PanResponder.create({
|
|
19767
20642
|
onMoveShouldSetPanResponder: (_, g) => {
|
|
19768
20643
|
const horizontal = Math.abs(g.dx) > Math.abs(g.dy) * 1.5;
|
|
19769
20644
|
if (!horizontal) return false;
|
|
@@ -19784,37 +20659,37 @@ var SwipeableRow = ({ actions, background, children }) => {
|
|
|
19784
20659
|
[maxOpen]
|
|
19785
20660
|
);
|
|
19786
20661
|
if (actions.length === 0) {
|
|
19787
|
-
return /* @__PURE__ */ (0,
|
|
20662
|
+
return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_jsx_runtime65.Fragment, { children });
|
|
19788
20663
|
}
|
|
19789
20664
|
const runAction = (action) => {
|
|
19790
20665
|
settle(0);
|
|
19791
20666
|
action.onPress();
|
|
19792
20667
|
};
|
|
19793
|
-
return /* @__PURE__ */ (0,
|
|
19794
|
-
/* @__PURE__ */ (0,
|
|
19795
|
-
|
|
20668
|
+
return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_react_native62.View, { style: styles51.root, children: [
|
|
20669
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native62.View, { style: styles51.actionsLayer, pointerEvents: "box-none", children: actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
|
|
20670
|
+
import_react_native62.TouchableOpacity,
|
|
19796
20671
|
{
|
|
19797
|
-
style: [
|
|
20672
|
+
style: [styles51.action, { width: ACTION_WIDTH, backgroundColor: toneColor2[action.tone] }],
|
|
19798
20673
|
onPress: () => runAction(action),
|
|
19799
20674
|
activeOpacity: 0.85,
|
|
19800
20675
|
accessibilityRole: "button",
|
|
19801
20676
|
accessibilityLabel: action.label,
|
|
19802
20677
|
children: [
|
|
19803
|
-
/* @__PURE__ */ (0,
|
|
19804
|
-
/* @__PURE__ */ (0,
|
|
20678
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Icon, { name: action.icon, size: 20, color: colors.primaryText, strokeWidth: 2.2 }),
|
|
20679
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native62.Text, { style: [styles51.actionLabel, { color: colors.primaryText }], numberOfLines: 1, children: action.label })
|
|
19805
20680
|
]
|
|
19806
20681
|
},
|
|
19807
20682
|
action.key
|
|
19808
20683
|
)) }),
|
|
19809
|
-
/* @__PURE__ */ (0,
|
|
20684
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native62.Animated.View, { style: [{ backgroundColor: background, transform: [{ translateX }] }], ...panResponder.panHandlers, children })
|
|
19810
20685
|
] });
|
|
19811
20686
|
};
|
|
19812
|
-
var
|
|
20687
|
+
var styles51 = import_react_native62.StyleSheet.create({
|
|
19813
20688
|
root: {
|
|
19814
20689
|
position: "relative"
|
|
19815
20690
|
},
|
|
19816
20691
|
actionsLayer: {
|
|
19817
|
-
...
|
|
20692
|
+
...import_react_native62.StyleSheet.absoluteFillObject,
|
|
19818
20693
|
flexDirection: "row",
|
|
19819
20694
|
justifyContent: "flex-end"
|
|
19820
20695
|
},
|
|
@@ -19847,10 +20722,10 @@ var formatTimeAgo = (dateString, t) => {
|
|
|
19847
20722
|
};
|
|
19848
20723
|
|
|
19849
20724
|
// src/RedactoPrivacyCenter/components/NotificationHub/NotificationRow.tsx
|
|
19850
|
-
var
|
|
20725
|
+
var import_jsx_runtime66 = require("react/jsx-runtime");
|
|
19851
20726
|
var NotificationRow = ({ notification, onPress, onMarkRead, onAcknowledge }) => {
|
|
19852
20727
|
var _a3, _b;
|
|
19853
|
-
const { t } = (0,
|
|
20728
|
+
const { t } = (0, import_react_i18next29.useTranslation)();
|
|
19854
20729
|
const { colors } = useTheme();
|
|
19855
20730
|
const isUnread = !notification.is_read;
|
|
19856
20731
|
const statusLabel = notification.status_label_display || notification.status_label;
|
|
@@ -19877,35 +20752,35 @@ var NotificationRow = ({ notification, onPress, onMarkRead, onAcknowledge }) =>
|
|
|
19877
20752
|
onPress: onAcknowledge
|
|
19878
20753
|
});
|
|
19879
20754
|
}
|
|
19880
|
-
return /* @__PURE__ */ (0,
|
|
19881
|
-
isUnread ? /* @__PURE__ */ (0,
|
|
19882
|
-
/* @__PURE__ */ (0,
|
|
19883
|
-
/* @__PURE__ */ (0,
|
|
19884
|
-
/* @__PURE__ */ (0,
|
|
19885
|
-
/* @__PURE__ */ (0,
|
|
19886
|
-
|
|
20755
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(SwipeableRow, { actions, background: colors.surface, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_react_native63.TouchableOpacity, { onPress, activeOpacity: 0.6, accessibilityRole: "button", style: styles52.row, children: [
|
|
20756
|
+
isUnread ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.View, { style: [styles52.accent, { backgroundColor: accent }] }) : null,
|
|
20757
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(NotificationIcon, { notificationType: notification.notification_type, size: 36 }),
|
|
20758
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_react_native63.View, { style: styles52.content, children: [
|
|
20759
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_react_native63.View, { style: styles52.titleRow, children: [
|
|
20760
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
|
|
20761
|
+
import_react_native63.Text,
|
|
19887
20762
|
{
|
|
19888
|
-
style: [
|
|
20763
|
+
style: [styles52.title, { color: colors.text, fontWeight: isUnread ? "700" : "600" }],
|
|
19889
20764
|
numberOfLines: 2,
|
|
19890
20765
|
children: notification.title
|
|
19891
20766
|
}
|
|
19892
20767
|
),
|
|
19893
|
-
isUnread ? /* @__PURE__ */ (0,
|
|
20768
|
+
isUnread ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.View, { style: [styles52.unreadDot, { backgroundColor: colors.primary }] }) : null
|
|
19894
20769
|
] }),
|
|
19895
|
-
/* @__PURE__ */ (0,
|
|
19896
|
-
statusLabel ? /* @__PURE__ */ (0,
|
|
19897
|
-
/* @__PURE__ */ (0,
|
|
19898
|
-
/* @__PURE__ */ (0,
|
|
19899
|
-
/* @__PURE__ */ (0,
|
|
20770
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_react_native63.View, { style: styles52.metaRow, children: [
|
|
20771
|
+
statusLabel ? /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_jsx_runtime66.Fragment, { children: [
|
|
20772
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.View, { style: [styles52.statusDot, { backgroundColor: accent }] }),
|
|
20773
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.Text, { style: [styles52.metaText, { color: colors.textSecondary }], numberOfLines: 1, children: statusLabel }),
|
|
20774
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.Text, { style: [styles52.metaDivider, { color: colors.textSecondary }], children: "\xB7" })
|
|
19900
20775
|
] }) : null,
|
|
19901
|
-
/* @__PURE__ */ (0,
|
|
20776
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.Text, { style: [styles52.metaText, { color: colors.textSecondary }], children: formatTimeAgo(notification.created_at, t) })
|
|
19902
20777
|
] }),
|
|
19903
|
-
showAcknowledge && ackCta ? /* @__PURE__ */ (0,
|
|
20778
|
+
showAcknowledge && ackCta ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.View, { style: styles52.ackWrap, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(NotificationCTAButton, { cta: ackCta, onPress: onAcknowledge }) }) : null
|
|
19904
20779
|
] }),
|
|
19905
|
-
/* @__PURE__ */ (0,
|
|
20780
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.View, { style: styles52.chevron, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Icon, { name: "chevron-right", size: 18, color: colors.textSecondary }) })
|
|
19906
20781
|
] }) });
|
|
19907
20782
|
};
|
|
19908
|
-
var
|
|
20783
|
+
var styles52 = import_react_native63.StyleSheet.create({
|
|
19909
20784
|
row: {
|
|
19910
20785
|
flexDirection: "row",
|
|
19911
20786
|
alignItems: "center",
|
|
@@ -19968,25 +20843,25 @@ var styles50 = import_react_native61.StyleSheet.create({
|
|
|
19968
20843
|
});
|
|
19969
20844
|
|
|
19970
20845
|
// src/RedactoPrivacyCenter/components/NotificationHub/useNotificationActions.ts
|
|
19971
|
-
var
|
|
19972
|
-
var
|
|
20846
|
+
var import_react43 = require("react");
|
|
20847
|
+
var import_react_native64 = require("react-native");
|
|
19973
20848
|
var useNotificationActions = () => {
|
|
19974
20849
|
const { navigateTo, setSelectedCase } = useInternalNavigation();
|
|
19975
20850
|
const { accessToken, refreshToken, onError, updateTokens, organizationId, workspaceId, email } = useAuth();
|
|
19976
20851
|
const { consentClient } = useBaseUrl();
|
|
19977
20852
|
const { langParam } = useCurrentLanguage();
|
|
19978
|
-
const authContext = (0,
|
|
20853
|
+
const authContext = (0, import_react43.useMemo)(
|
|
19979
20854
|
() => ({ accessToken, refreshToken, onError, updateTokens }),
|
|
19980
20855
|
[accessToken, refreshToken, onError, updateTokens]
|
|
19981
20856
|
);
|
|
19982
|
-
const hasAcknowledgeCTA = (0,
|
|
20857
|
+
const hasAcknowledgeCTA = (0, import_react43.useCallback)(
|
|
19983
20858
|
(notification) => {
|
|
19984
20859
|
var _a3, _b;
|
|
19985
20860
|
return (_b = (_a3 = notification.ctas) == null ? void 0 : _a3.some((cta) => cta.action_type === "acknowledge")) != null ? _b : false;
|
|
19986
20861
|
},
|
|
19987
20862
|
[]
|
|
19988
20863
|
);
|
|
19989
|
-
const handleMarkRead = (0,
|
|
20864
|
+
const handleMarkRead = (0, import_react43.useCallback)(
|
|
19990
20865
|
async (notificationUuid) => {
|
|
19991
20866
|
if (!organizationId || !workspaceId) return false;
|
|
19992
20867
|
const result = await markNotificationRead(organizationId, workspaceId, notificationUuid, authContext, consentClient);
|
|
@@ -19994,12 +20869,12 @@ var useNotificationActions = () => {
|
|
|
19994
20869
|
},
|
|
19995
20870
|
[organizationId, workspaceId, authContext, consentClient]
|
|
19996
20871
|
);
|
|
19997
|
-
const handleMarkAllRead = (0,
|
|
20872
|
+
const handleMarkAllRead = (0, import_react43.useCallback)(async () => {
|
|
19998
20873
|
if (!organizationId || !workspaceId) return false;
|
|
19999
20874
|
const result = await markAllRead(organizationId, workspaceId, authContext, consentClient);
|
|
20000
20875
|
return result !== null;
|
|
20001
20876
|
}, [organizationId, workspaceId, authContext, consentClient]);
|
|
20002
|
-
const handleAcknowledge = (0,
|
|
20877
|
+
const handleAcknowledge = (0, import_react43.useCallback)(
|
|
20003
20878
|
async (notificationUuid) => {
|
|
20004
20879
|
if (!organizationId || !workspaceId) return false;
|
|
20005
20880
|
const result = await acknowledgeNotification(organizationId, workspaceId, notificationUuid, authContext, consentClient);
|
|
@@ -20007,7 +20882,7 @@ var useNotificationActions = () => {
|
|
|
20007
20882
|
},
|
|
20008
20883
|
[organizationId, workspaceId, authContext, consentClient]
|
|
20009
20884
|
);
|
|
20010
|
-
const handleCTAClick = (0,
|
|
20885
|
+
const handleCTAClick = (0, import_react43.useCallback)(
|
|
20011
20886
|
async (notification, cta) => {
|
|
20012
20887
|
var _a3;
|
|
20013
20888
|
if (cta.action_type === "acknowledge") {
|
|
@@ -20041,7 +20916,7 @@ var useNotificationActions = () => {
|
|
|
20041
20916
|
const url = cta.url;
|
|
20042
20917
|
if (!/^https?:\/\//i.test(url)) return null;
|
|
20043
20918
|
try {
|
|
20044
|
-
await
|
|
20919
|
+
await import_react_native64.Linking.openURL(url);
|
|
20045
20920
|
return "opened";
|
|
20046
20921
|
} catch {
|
|
20047
20922
|
return null;
|
|
@@ -20064,7 +20939,7 @@ var useNotificationActions = () => {
|
|
|
20064
20939
|
};
|
|
20065
20940
|
|
|
20066
20941
|
// src/RedactoPrivacyCenter/components/NotificationHub/NotificationsScreen.tsx
|
|
20067
|
-
var
|
|
20942
|
+
var import_jsx_runtime67 = require("react/jsx-runtime");
|
|
20068
20943
|
var EMPTY_SUMMARY = { total: 0, unread: 0, action_needed: 0, acknowledged: 0 };
|
|
20069
20944
|
var READ_FILTER_TO_PARAM = {
|
|
20070
20945
|
all: void 0,
|
|
@@ -20072,7 +20947,7 @@ var READ_FILTER_TO_PARAM = {
|
|
|
20072
20947
|
read: true
|
|
20073
20948
|
};
|
|
20074
20949
|
var NotificationsScreen = () => {
|
|
20075
|
-
const { t } = (0,
|
|
20950
|
+
const { t } = (0, import_react_i18next30.useTranslation)();
|
|
20076
20951
|
const { colors } = useTheme();
|
|
20077
20952
|
const { langParam } = useCurrentLanguage();
|
|
20078
20953
|
const { listBottom } = usePrivacyCenterInsets();
|
|
@@ -20089,15 +20964,15 @@ var NotificationsScreen = () => {
|
|
|
20089
20964
|
handleAcknowledge,
|
|
20090
20965
|
handleCTAClick
|
|
20091
20966
|
} = useNotificationActions();
|
|
20092
|
-
const [notifications, setNotifications] = (0,
|
|
20093
|
-
const [summary, setSummary] = (0,
|
|
20094
|
-
const [activeTab, setActiveTab] = (0,
|
|
20095
|
-
const [readFilter, setReadFilter] = (0,
|
|
20096
|
-
const [isLoading, setIsLoading] = (0,
|
|
20097
|
-
const [isRefreshing2, setIsRefreshing] = (0,
|
|
20098
|
-
const [filterOpen, setFilterOpen] = (0,
|
|
20967
|
+
const [notifications, setNotifications] = (0, import_react44.useState)([]);
|
|
20968
|
+
const [summary, setSummary] = (0, import_react44.useState)(EMPTY_SUMMARY);
|
|
20969
|
+
const [activeTab, setActiveTab] = (0, import_react44.useState)("all");
|
|
20970
|
+
const [readFilter, setReadFilter] = (0, import_react44.useState)("all");
|
|
20971
|
+
const [isLoading, setIsLoading] = (0, import_react44.useState)(true);
|
|
20972
|
+
const [isRefreshing2, setIsRefreshing] = (0, import_react44.useState)(false);
|
|
20973
|
+
const [filterOpen, setFilterOpen] = (0, import_react44.useState)(false);
|
|
20099
20974
|
const isFiltered = activeTab !== "all" || readFilter !== "all";
|
|
20100
|
-
const loadNotifications = (0,
|
|
20975
|
+
const loadNotifications = (0, import_react44.useCallback)(
|
|
20101
20976
|
async (includeSummary = false, silent = false) => {
|
|
20102
20977
|
if (!organizationId || !workspaceId) return;
|
|
20103
20978
|
if (!silent) setIsLoading(true);
|
|
@@ -20127,18 +21002,21 @@ var NotificationsScreen = () => {
|
|
|
20127
21002
|
},
|
|
20128
21003
|
[organizationId, workspaceId, activeTab, readFilter, authContext, consentClient, langParam]
|
|
20129
21004
|
);
|
|
20130
|
-
(0,
|
|
21005
|
+
(0, import_react44.useEffect)(() => {
|
|
20131
21006
|
loadNotifications(true);
|
|
20132
21007
|
}, [loadNotifications]);
|
|
20133
|
-
const loadRef = (0,
|
|
21008
|
+
const loadRef = (0, import_react44.useRef)(loadNotifications);
|
|
20134
21009
|
loadRef.current = loadNotifications;
|
|
20135
|
-
(0,
|
|
21010
|
+
const authContextRef = (0, import_react44.useRef)(authContext);
|
|
21011
|
+
authContextRef.current = authContext;
|
|
21012
|
+
(0, import_react44.useEffect)(() => {
|
|
20136
21013
|
const id = setInterval(() => {
|
|
21014
|
+
if (isRefreshBlocked(authContextRef.current)) return;
|
|
20137
21015
|
loadRef.current(false, true);
|
|
20138
21016
|
}, POLL_INTERVAL);
|
|
20139
21017
|
return () => clearInterval(id);
|
|
20140
21018
|
}, []);
|
|
20141
|
-
const onNotificationClick = (0,
|
|
21019
|
+
const onNotificationClick = (0, import_react44.useCallback)(
|
|
20142
21020
|
async (notification) => {
|
|
20143
21021
|
const shouldMarkRead = !notification.is_read;
|
|
20144
21022
|
const shouldAutoAcknowledge = !notification.is_acknowledged && !hasAcknowledgeCTA(notification);
|
|
@@ -20159,7 +21037,7 @@ var NotificationsScreen = () => {
|
|
|
20159
21037
|
},
|
|
20160
21038
|
[hasAcknowledgeCTA, handleAcknowledge, handleMarkRead]
|
|
20161
21039
|
);
|
|
20162
|
-
const onRowPress = (0,
|
|
21040
|
+
const onRowPress = (0, import_react44.useCallback)(
|
|
20163
21041
|
async (notification) => {
|
|
20164
21042
|
var _a3;
|
|
20165
21043
|
const linkCta = (_a3 = notification.ctas) == null ? void 0 : _a3.find((cta) => cta.action_type === "link" && cta.url);
|
|
@@ -20177,7 +21055,7 @@ var NotificationsScreen = () => {
|
|
|
20177
21055
|
},
|
|
20178
21056
|
[handleCTAClick, onNotificationClick]
|
|
20179
21057
|
);
|
|
20180
|
-
const onMarkReadRow = (0,
|
|
21058
|
+
const onMarkReadRow = (0, import_react44.useCallback)(
|
|
20181
21059
|
async (notification) => {
|
|
20182
21060
|
if (notification.is_read) return;
|
|
20183
21061
|
const ok = await handleMarkRead(notification.uuid);
|
|
@@ -20187,7 +21065,7 @@ var NotificationsScreen = () => {
|
|
|
20187
21065
|
},
|
|
20188
21066
|
[handleMarkRead]
|
|
20189
21067
|
);
|
|
20190
|
-
const onAcknowledgeRow = (0,
|
|
21068
|
+
const onAcknowledgeRow = (0, import_react44.useCallback)(
|
|
20191
21069
|
async (notification) => {
|
|
20192
21070
|
if (notification.is_acknowledged) return;
|
|
20193
21071
|
const ok = await handleAcknowledge(notification.uuid);
|
|
@@ -20204,22 +21082,29 @@ var NotificationsScreen = () => {
|
|
|
20204
21082
|
},
|
|
20205
21083
|
[handleAcknowledge]
|
|
20206
21084
|
);
|
|
20207
|
-
const
|
|
21085
|
+
const onMarkAllRead = (0, import_react44.useCallback)(async () => {
|
|
21086
|
+
const ok = await handleMarkAllRead();
|
|
21087
|
+
if (!ok) return;
|
|
21088
|
+
setNotifications((prev) => prev.map((item) => ({ ...item, is_read: true })));
|
|
21089
|
+
setSummary((prev) => ({ ...prev, unread: 0 }));
|
|
21090
|
+
if (readFilter !== "all") loadNotifications(true, true);
|
|
21091
|
+
}, [handleMarkAllRead, readFilter, loadNotifications]);
|
|
21092
|
+
const onRefresh = (0, import_react44.useCallback)(() => {
|
|
20208
21093
|
setIsRefreshing(true);
|
|
20209
21094
|
loadNotifications(true, true);
|
|
20210
21095
|
}, [loadNotifications]);
|
|
20211
|
-
const sections = (0,
|
|
21096
|
+
const sections = (0, import_react44.useMemo)(
|
|
20212
21097
|
() => groupByTime(notifications, (item) => item.created_at, classifyTime),
|
|
20213
21098
|
[notifications, classifyTime]
|
|
20214
21099
|
);
|
|
20215
|
-
const header = /* @__PURE__ */ (0,
|
|
20216
|
-
/* @__PURE__ */ (0,
|
|
20217
|
-
/* @__PURE__ */ (0,
|
|
20218
|
-
/* @__PURE__ */ (0,
|
|
20219
|
-
|
|
21100
|
+
const header = /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { style: styles53.header, children: [
|
|
21101
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { style: styles53.titleRow, children: [
|
|
21102
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.screenTitle, { color: colors.text }], children: t("notifications", { defaultValue: "Notifications" }) }),
|
|
21103
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
|
|
21104
|
+
import_react_native65.TouchableOpacity,
|
|
20220
21105
|
{
|
|
20221
21106
|
style: [
|
|
20222
|
-
|
|
21107
|
+
styles53.filterBtn,
|
|
20223
21108
|
{
|
|
20224
21109
|
backgroundColor: isFiltered ? colors.primarySoft : colors.surface,
|
|
20225
21110
|
borderColor: isFiltered ? colors.primary : colors.border
|
|
@@ -20228,30 +21113,30 @@ var NotificationsScreen = () => {
|
|
|
20228
21113
|
onPress: () => setFilterOpen(true),
|
|
20229
21114
|
accessibilityRole: "button",
|
|
20230
21115
|
accessibilityLabel: t("filter") || "Filter",
|
|
20231
|
-
children: /* @__PURE__ */ (0,
|
|
21116
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Icon, { name: "sliders-horizontal", size: 18, color: isFiltered ? colors.primary : colors.text })
|
|
20232
21117
|
}
|
|
20233
21118
|
)
|
|
20234
21119
|
] }),
|
|
20235
|
-
summary.unread > 0 ? /* @__PURE__ */ (0,
|
|
20236
|
-
/* @__PURE__ */ (0,
|
|
20237
|
-
/* @__PURE__ */ (0,
|
|
21120
|
+
summary.unread > 0 ? /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.TouchableOpacity, { style: styles53.markAllBtn, onPress: onMarkAllRead, activeOpacity: 0.7, accessibilityRole: "button", children: [
|
|
21121
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Icon, { name: "check-check", size: 15, color: colors.primary, strokeWidth: 2.2 }),
|
|
21122
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.markAllLabel, { color: colors.primary }], children: t("markAllAsRead") || "Mark all as read" })
|
|
20238
21123
|
] }) : null
|
|
20239
21124
|
] });
|
|
20240
|
-
return /* @__PURE__ */ (0,
|
|
20241
|
-
/* @__PURE__ */ (0,
|
|
20242
|
-
|
|
21125
|
+
return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
|
|
21126
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
|
|
21127
|
+
import_react_native65.FlatList,
|
|
20243
21128
|
{
|
|
20244
21129
|
data: sections,
|
|
20245
21130
|
keyExtractor: (section2) => section2.key,
|
|
20246
|
-
style: [
|
|
20247
|
-
contentContainerStyle: [
|
|
21131
|
+
style: [styles53.list, { backgroundColor: colors.canvasSubtle }],
|
|
21132
|
+
contentContainerStyle: [styles53.listContent, { flexGrow: 1, paddingBottom: listBottom }],
|
|
20248
21133
|
ListHeaderComponent: header,
|
|
20249
21134
|
showsVerticalScrollIndicator: false,
|
|
20250
|
-
refreshControl: /* @__PURE__ */ (0,
|
|
20251
|
-
renderItem: ({ item: section2 }) => /* @__PURE__ */ (0,
|
|
20252
|
-
/* @__PURE__ */ (0,
|
|
20253
|
-
/* @__PURE__ */ (0,
|
|
20254
|
-
/* @__PURE__ */ (0,
|
|
21135
|
+
refreshControl: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.RefreshControl, { refreshing: isRefreshing2, onRefresh, tintColor: colors.primary, colors: [colors.primary] }),
|
|
21136
|
+
renderItem: ({ item: section2 }) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { style: styles53.section, children: [
|
|
21137
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.sectionTitle, { color: colors.textSecondary }], children: section2.title }),
|
|
21138
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: [styles53.cardShadow, elevation.card], children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: [styles53.cardClip, { backgroundColor: colors.surface }], children: section2.data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { children: [
|
|
21139
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
|
|
20255
21140
|
NotificationRow,
|
|
20256
21141
|
{
|
|
20257
21142
|
notification: item,
|
|
@@ -20260,19 +21145,19 @@ var NotificationsScreen = () => {
|
|
|
20260
21145
|
onAcknowledge: () => onAcknowledgeRow(item)
|
|
20261
21146
|
}
|
|
20262
21147
|
),
|
|
20263
|
-
index < section2.data.length - 1 ? /* @__PURE__ */ (0,
|
|
21148
|
+
index < section2.data.length - 1 ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: [styles53.separator, { backgroundColor: colors.hairline }] }) : null
|
|
20264
21149
|
] }, item.uuid)) }) })
|
|
20265
21150
|
] }),
|
|
20266
|
-
ListEmptyComponent: isLoading ? /* @__PURE__ */ (0,
|
|
20267
|
-
/* @__PURE__ */ (0,
|
|
20268
|
-
/* @__PURE__ */ (0,
|
|
20269
|
-
/* @__PURE__ */ (0,
|
|
20270
|
-
/* @__PURE__ */ (0,
|
|
20271
|
-
/* @__PURE__ */ (0,
|
|
21151
|
+
ListEmptyComponent: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: styles53.skeletonWrap, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: [styles53.cardClip, elevation.card, { backgroundColor: colors.surface }], children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { children: [
|
|
21152
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { style: styles53.skeletonRow, children: [
|
|
21153
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Skeleton, { width: 36, height: 36, radius: radii.md }),
|
|
21154
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { style: styles53.skeletonLines, children: [
|
|
21155
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Skeleton, { width: "70%", height: 13 }),
|
|
21156
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Skeleton, { width: "40%", height: 10 })
|
|
20272
21157
|
] })
|
|
20273
21158
|
] }),
|
|
20274
|
-
i < 3 ? /* @__PURE__ */ (0,
|
|
20275
|
-
] }, i)) }) }) : /* @__PURE__ */ (0,
|
|
21159
|
+
i < 3 ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: [styles53.separator, { backgroundColor: colors.hairline }] }) : null
|
|
21160
|
+
] }, i)) }) }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: styles53.emptyWrap, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
|
|
20276
21161
|
PCEmpty,
|
|
20277
21162
|
{
|
|
20278
21163
|
iconName: "circle-check",
|
|
@@ -20281,14 +21166,14 @@ var NotificationsScreen = () => {
|
|
|
20281
21166
|
}
|
|
20282
21167
|
) }),
|
|
20283
21168
|
ListFooterComponentStyle: { marginTop: "auto" },
|
|
20284
|
-
ListFooterComponent: /* @__PURE__ */ (0,
|
|
21169
|
+
ListFooterComponent: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Footer, {})
|
|
20285
21170
|
}
|
|
20286
21171
|
),
|
|
20287
|
-
/* @__PURE__ */ (0,
|
|
20288
|
-
/* @__PURE__ */ (0,
|
|
20289
|
-
/* @__PURE__ */ (0,
|
|
21172
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(BottomSheet, { visible: filterOpen, onClose: () => setFilterOpen(false), title: t("filter") || "Filter", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { style: styles53.filterSheet, children: [
|
|
21173
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.filterGroupLabel, { color: colors.textSecondary }], children: t("category", { defaultValue: "Category" }) }),
|
|
21174
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: styles53.chipWrap, children: filterTabs.map((tab) => {
|
|
20290
21175
|
const selected = tab.key === activeTab;
|
|
20291
|
-
return /* @__PURE__ */ (0,
|
|
21176
|
+
return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
|
|
20292
21177
|
FilterChip,
|
|
20293
21178
|
{
|
|
20294
21179
|
label: tab.label,
|
|
@@ -20298,12 +21183,12 @@ var NotificationsScreen = () => {
|
|
|
20298
21183
|
tab.key
|
|
20299
21184
|
);
|
|
20300
21185
|
}) }),
|
|
20301
|
-
/* @__PURE__ */ (0,
|
|
20302
|
-
/* @__PURE__ */ (0,
|
|
21186
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.filterGroupLabel, { color: colors.textSecondary, marginTop: spacing.lg }], children: t("readStatus", { defaultValue: "Status" }) }),
|
|
21187
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: styles53.chipWrap, children: [
|
|
20303
21188
|
{ key: "all", label: t("all") || "All" },
|
|
20304
21189
|
{ key: "unread", label: t("unread") || "Unread" },
|
|
20305
21190
|
{ key: "read", label: t("read", { defaultValue: "Read" }) }
|
|
20306
|
-
].map((opt) => /* @__PURE__ */ (0,
|
|
21191
|
+
].map((opt) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
|
|
20307
21192
|
FilterChip,
|
|
20308
21193
|
{
|
|
20309
21194
|
label: opt.label,
|
|
@@ -20312,13 +21197,13 @@ var NotificationsScreen = () => {
|
|
|
20312
21197
|
},
|
|
20313
21198
|
opt.key
|
|
20314
21199
|
)) }),
|
|
20315
|
-
/* @__PURE__ */ (0,
|
|
20316
|
-
|
|
21200
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
|
|
21201
|
+
import_react_native65.TouchableOpacity,
|
|
20317
21202
|
{
|
|
20318
|
-
style: [
|
|
21203
|
+
style: [styles53.applyBtn, { backgroundColor: colors.primary }],
|
|
20319
21204
|
onPress: () => setFilterOpen(false),
|
|
20320
21205
|
accessibilityRole: "button",
|
|
20321
|
-
children: /* @__PURE__ */ (0,
|
|
21206
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.applyLabel, { color: colors.primaryText }], children: t("done", { defaultValue: "Done" }) })
|
|
20322
21207
|
}
|
|
20323
21208
|
)
|
|
20324
21209
|
] }) })
|
|
@@ -20326,25 +21211,25 @@ var NotificationsScreen = () => {
|
|
|
20326
21211
|
};
|
|
20327
21212
|
var FilterChip = ({ label, selected, onPress }) => {
|
|
20328
21213
|
const { colors } = useTheme();
|
|
20329
|
-
return /* @__PURE__ */ (0,
|
|
20330
|
-
|
|
21214
|
+
return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
|
|
21215
|
+
import_react_native65.TouchableOpacity,
|
|
20331
21216
|
{
|
|
20332
21217
|
onPress,
|
|
20333
21218
|
activeOpacity: 0.7,
|
|
20334
21219
|
accessibilityRole: "button",
|
|
20335
21220
|
accessibilityState: { selected },
|
|
20336
21221
|
style: [
|
|
20337
|
-
|
|
21222
|
+
styles53.chip,
|
|
20338
21223
|
{
|
|
20339
21224
|
backgroundColor: selected ? colors.primary : colors.surfaceAlt,
|
|
20340
21225
|
borderColor: selected ? colors.primary : colors.border
|
|
20341
21226
|
}
|
|
20342
21227
|
],
|
|
20343
|
-
children: /* @__PURE__ */ (0,
|
|
21228
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.chipLabel, { color: selected ? colors.primaryText : colors.text }], children: label })
|
|
20344
21229
|
}
|
|
20345
21230
|
);
|
|
20346
21231
|
};
|
|
20347
|
-
var
|
|
21232
|
+
var styles53 = import_react_native65.StyleSheet.create({
|
|
20348
21233
|
list: {
|
|
20349
21234
|
flex: 1
|
|
20350
21235
|
},
|
|
@@ -20378,7 +21263,7 @@ var styles51 = import_react_native63.StyleSheet.create({
|
|
|
20378
21263
|
filterBtn: {
|
|
20379
21264
|
width: 40,
|
|
20380
21265
|
height: 40,
|
|
20381
|
-
borderWidth:
|
|
21266
|
+
borderWidth: import_react_native65.StyleSheet.hairlineWidth,
|
|
20382
21267
|
borderRadius: radii.md,
|
|
20383
21268
|
justifyContent: "center",
|
|
20384
21269
|
alignItems: "center"
|
|
@@ -20399,7 +21284,7 @@ var styles51 = import_react_native63.StyleSheet.create({
|
|
|
20399
21284
|
overflow: "hidden"
|
|
20400
21285
|
},
|
|
20401
21286
|
separator: {
|
|
20402
|
-
height:
|
|
21287
|
+
height: import_react_native65.StyleSheet.hairlineWidth,
|
|
20403
21288
|
marginLeft: spacing.lg + 36 + spacing.md
|
|
20404
21289
|
},
|
|
20405
21290
|
emptyWrap: {
|
|
@@ -20437,7 +21322,7 @@ var styles51 = import_react_native63.StyleSheet.create({
|
|
|
20437
21322
|
justifyContent: "center",
|
|
20438
21323
|
paddingHorizontal: spacing.lg,
|
|
20439
21324
|
borderRadius: radii.pill,
|
|
20440
|
-
borderWidth:
|
|
21325
|
+
borderWidth: import_react_native65.StyleSheet.hairlineWidth
|
|
20441
21326
|
},
|
|
20442
21327
|
chipLabel: {
|
|
20443
21328
|
...typography.label
|
|
@@ -20456,7 +21341,7 @@ var styles51 = import_react_native63.StyleSheet.create({
|
|
|
20456
21341
|
});
|
|
20457
21342
|
|
|
20458
21343
|
// src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx
|
|
20459
|
-
var
|
|
21344
|
+
var import_jsx_runtime68 = require("react/jsx-runtime");
|
|
20460
21345
|
var privacyCenterQueryClient = new import_react_query2.QueryClient();
|
|
20461
21346
|
function PrivacyCenterContent({ onBack }) {
|
|
20462
21347
|
const { currentPage } = useInternalNavigation();
|
|
@@ -20466,24 +21351,24 @@ function PrivacyCenterContent({ onBack }) {
|
|
|
20466
21351
|
const chromeMode = getPageChromeMode(currentPage);
|
|
20467
21352
|
const canvasIsLight = isLightColor(colors.canvasSubtle);
|
|
20468
21353
|
const barStyle = canvasIsLight ? "dark-content" : "light-content";
|
|
20469
|
-
(0,
|
|
20470
|
-
|
|
20471
|
-
if (
|
|
21354
|
+
(0, import_react45.useEffect)(() => {
|
|
21355
|
+
import_react_native66.StatusBar.setBarStyle(barStyle, true);
|
|
21356
|
+
if (import_react_native66.Platform.OS === "android") {
|
|
20472
21357
|
setNavBarIconStyle(canvasIsLight ? "dark" : "light");
|
|
20473
21358
|
}
|
|
20474
21359
|
}, [barStyle, canvasIsLight]);
|
|
20475
|
-
return /* @__PURE__ */ (0,
|
|
20476
|
-
/* @__PURE__ */ (0,
|
|
20477
|
-
/* @__PURE__ */ (0,
|
|
20478
|
-
/* @__PURE__ */ (0,
|
|
20479
|
-
/* @__PURE__ */ (0,
|
|
20480
|
-
currentPage === "home" && /* @__PURE__ */ (0,
|
|
20481
|
-
currentPage === "consent-manager" && /* @__PURE__ */ (0,
|
|
20482
|
-
currentPage === "form" && /* @__PURE__ */ (0,
|
|
20483
|
-
currentPage === "activity" && /* @__PURE__ */ (0,
|
|
20484
|
-
currentPage === "receipts" && /* @__PURE__ */ (0,
|
|
20485
|
-
currentPage === "case-details" && /* @__PURE__ */ (0,
|
|
20486
|
-
currentPage === "notifications" && /* @__PURE__ */ (0,
|
|
21360
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_react_native66.View, { style: [styles54.container, { backgroundColor: colors.canvasSubtle }], children: [
|
|
21361
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_react_native66.StatusBar, { barStyle, translucent: true }),
|
|
21362
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_react_native66.View, { style: styles54.mainColumn, children: brandingLoading ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PCLoader, {}) : /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
|
|
21363
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SlimTopBar, { mode: chromeMode, onBack }),
|
|
21364
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_react_native66.View, { style: [styles54.content, { paddingBottom: insets.bottom }], children: status === "checking" ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PCLoader, {}) : status === "session-expired" ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PrivacyCenterSessionExpired, {}) : status === "empty" ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PrivacyCenterEmptyState, {}) : /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
|
|
21365
|
+
currentPage === "home" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(HomeHub, {}),
|
|
21366
|
+
currentPage === "consent-manager" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ConsentManager, {}),
|
|
21367
|
+
currentPage === "form" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(FormPage, {}),
|
|
21368
|
+
currentPage === "activity" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ActivitiesList, {}),
|
|
21369
|
+
currentPage === "receipts" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ReceiptsList, {}),
|
|
21370
|
+
currentPage === "case-details" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(CaseDetailsPage, {}),
|
|
21371
|
+
currentPage === "notifications" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(NotificationsScreen, {})
|
|
20487
21372
|
] }) })
|
|
20488
21373
|
] }) })
|
|
20489
21374
|
] });
|
|
@@ -20497,22 +21382,34 @@ function RedactoPrivacyCenter({
|
|
|
20497
21382
|
theme: _theme,
|
|
20498
21383
|
accessToken,
|
|
20499
21384
|
refreshToken,
|
|
21385
|
+
token,
|
|
21386
|
+
email,
|
|
21387
|
+
mobile,
|
|
21388
|
+
ucic,
|
|
21389
|
+
organisationUuid,
|
|
21390
|
+
workspaceUuid,
|
|
20500
21391
|
onError,
|
|
20501
21392
|
initialPage = "home",
|
|
20502
21393
|
initialCaseUuid,
|
|
20503
21394
|
onBack
|
|
20504
21395
|
}) {
|
|
20505
|
-
return /* @__PURE__ */ (0,
|
|
21396
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SafeAreaBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(KeyboardProviderCompat, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_react_query2.QueryClientProvider, { client: privacyCenterQueryClient, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_react_i18next31.I18nextProvider, { i18n: i18n_default, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ThemeProvider, { slug, baseUrl, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(BaseUrlProvider, { baseUrl, ledgerBaseUrl, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
|
|
20506
21397
|
AuthProvider,
|
|
20507
21398
|
{
|
|
20508
|
-
accessToken,
|
|
20509
|
-
refreshToken,
|
|
21399
|
+
accessToken: accessToken != null ? accessToken : "",
|
|
21400
|
+
refreshToken: refreshToken != null ? refreshToken : "",
|
|
21401
|
+
token,
|
|
21402
|
+
sandboxUcic: ucic,
|
|
21403
|
+
sandboxSubject: email || mobile,
|
|
21404
|
+
organisationUuid,
|
|
21405
|
+
workspaceUuid,
|
|
21406
|
+
slug,
|
|
20510
21407
|
onError,
|
|
20511
|
-
children: /* @__PURE__ */ (0,
|
|
21408
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(NavigationProvider, { initialPage, initialPendingCaseUuid: initialCaseUuid != null ? initialCaseUuid : null, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SelectUserGate, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(DataAvailabilityProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PageStatusProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PrivacyCenterContent, { onBack }) }) }) }) })
|
|
20512
21409
|
}
|
|
20513
21410
|
) }) }) }) }) }) });
|
|
20514
21411
|
}
|
|
20515
|
-
var
|
|
21412
|
+
var styles54 = import_react_native66.StyleSheet.create({
|
|
20516
21413
|
container: {
|
|
20517
21414
|
flex: 1
|
|
20518
21415
|
},
|
|
@@ -20526,74 +21423,74 @@ var styles52 = import_react_native64.StyleSheet.create({
|
|
|
20526
21423
|
});
|
|
20527
21424
|
|
|
20528
21425
|
// src/RedactoPrivacyCenter/components/SideMenu.tsx
|
|
20529
|
-
var
|
|
20530
|
-
var
|
|
21426
|
+
var import_react_native67 = require("react-native");
|
|
21427
|
+
var import_react_i18next32 = require("react-i18next");
|
|
20531
21428
|
var import_react_native_svg4 = __toESM(require("react-native-svg"));
|
|
20532
|
-
var
|
|
21429
|
+
var import_jsx_runtime69 = require("react/jsx-runtime");
|
|
20533
21430
|
var MENU_ITEMS = [
|
|
20534
21431
|
{ page: "consent-manager", labelKey: "consentManager", fallback: "Consent Manager", icon: "shield-check" },
|
|
20535
21432
|
{ page: "form", labelKey: "grievanceRequests", fallback: "Privacy Requests", icon: "message-circle-warning" },
|
|
20536
21433
|
{ page: "activity", labelKey: "activity", fallback: "Activity", icon: "activity" }
|
|
20537
21434
|
];
|
|
20538
21435
|
function SideMenu({ onBack } = {}) {
|
|
20539
|
-
const { t } = (0,
|
|
21436
|
+
const { t } = (0, import_react_i18next32.useTranslation)();
|
|
20540
21437
|
const { currentPage, navigateTo } = useInternalNavigation();
|
|
20541
21438
|
const { organizationName, email } = useAuth();
|
|
20542
21439
|
const { colors } = useTheme();
|
|
20543
21440
|
const orgInitial = organizationName ? organizationName.charAt(0).toUpperCase() : "R";
|
|
20544
21441
|
const displayName = organizationName || "Organization";
|
|
20545
|
-
return /* @__PURE__ */ (0,
|
|
20546
|
-
/* @__PURE__ */ (0,
|
|
20547
|
-
/* @__PURE__ */ (0,
|
|
20548
|
-
/* @__PURE__ */ (0,
|
|
20549
|
-
/* @__PURE__ */ (0,
|
|
20550
|
-
email ? /* @__PURE__ */ (0,
|
|
21442
|
+
return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_react_native67.View, { style: [styles55.container, { backgroundColor: colors.surface }], children: [
|
|
21443
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_react_native67.View, { style: styles55.orgSection, children: [
|
|
21444
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: [styles55.avatar, { backgroundColor: colors.primary }], children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.Text, { style: [styles55.avatarText, { color: colors.primaryText }], children: orgInitial }) }),
|
|
21445
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_react_native67.View, { style: styles55.orgInfo, children: [
|
|
21446
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.Text, { style: [styles55.orgName, { color: colors.text }], numberOfLines: 1, children: displayName }),
|
|
21447
|
+
email ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.Text, { style: [styles55.orgEmail, { color: colors.textSecondary }], numberOfLines: 1, children: email }) : null
|
|
20551
21448
|
] })
|
|
20552
21449
|
] }),
|
|
20553
|
-
/* @__PURE__ */ (0,
|
|
20554
|
-
/* @__PURE__ */ (0,
|
|
21450
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: [styles55.divider, { backgroundColor: colors.border }] }),
|
|
21451
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: styles55.menuSection, children: MENU_ITEMS.map((item) => {
|
|
20555
21452
|
const isActive = currentPage === item.page || item.page === "form" && currentPage === "case-details";
|
|
20556
|
-
return /* @__PURE__ */ (0,
|
|
20557
|
-
|
|
21453
|
+
return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
|
|
21454
|
+
import_react_native67.TouchableOpacity,
|
|
20558
21455
|
{
|
|
20559
21456
|
style: [
|
|
20560
|
-
|
|
20561
|
-
isActive && [
|
|
21457
|
+
styles55.menuItem,
|
|
21458
|
+
isActive && [styles55.menuItemActive, { backgroundColor: `${colors.primary}14` }]
|
|
20562
21459
|
],
|
|
20563
21460
|
onPress: () => navigateTo(item.page),
|
|
20564
21461
|
activeOpacity: 0.7,
|
|
20565
21462
|
accessibilityRole: "button",
|
|
20566
21463
|
accessibilityState: { selected: isActive },
|
|
20567
21464
|
children: [
|
|
20568
|
-
/* @__PURE__ */ (0,
|
|
20569
|
-
/* @__PURE__ */ (0,
|
|
20570
|
-
|
|
21465
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: styles55.menuIconWrap, children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Icon, { name: item.icon, size: 18, color: isActive ? colors.primary : colors.textSecondary }) }),
|
|
21466
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
|
|
21467
|
+
import_react_native67.Text,
|
|
20571
21468
|
{
|
|
20572
21469
|
style: [
|
|
20573
|
-
|
|
21470
|
+
styles55.menuLabel,
|
|
20574
21471
|
{ color: isActive ? colors.primary : colors.text },
|
|
20575
|
-
isActive &&
|
|
21472
|
+
isActive && styles55.menuLabelActive
|
|
20576
21473
|
],
|
|
20577
21474
|
children: t(item.labelKey) || item.fallback
|
|
20578
21475
|
}
|
|
20579
21476
|
),
|
|
20580
|
-
isActive ? /* @__PURE__ */ (0,
|
|
21477
|
+
isActive ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: [styles55.activeIndicator, { backgroundColor: colors.primary }] }) : null
|
|
20581
21478
|
]
|
|
20582
21479
|
},
|
|
20583
21480
|
item.page
|
|
20584
21481
|
);
|
|
20585
21482
|
}) }),
|
|
20586
|
-
onBack ? /* @__PURE__ */ (0,
|
|
20587
|
-
/* @__PURE__ */ (0,
|
|
20588
|
-
/* @__PURE__ */ (0,
|
|
20589
|
-
/* @__PURE__ */ (0,
|
|
20590
|
-
|
|
21483
|
+
onBack ? /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
|
|
21484
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: { flex: 1 } }),
|
|
21485
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: [styles55.divider, { backgroundColor: colors.border }] }),
|
|
21486
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
|
|
21487
|
+
import_react_native67.TouchableOpacity,
|
|
20591
21488
|
{
|
|
20592
|
-
style:
|
|
21489
|
+
style: styles55.backBtn,
|
|
20593
21490
|
onPress: () => navigateBack(onBack),
|
|
20594
21491
|
activeOpacity: 0.7,
|
|
20595
21492
|
children: [
|
|
20596
|
-
/* @__PURE__ */ (0,
|
|
21493
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native_svg4.default, { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", children: onBack === "back" ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
|
|
20597
21494
|
import_react_native_svg4.Path,
|
|
20598
21495
|
{
|
|
20599
21496
|
d: "M19 12H5m0 0l7 7m-7-7l7-7",
|
|
@@ -20602,7 +21499,7 @@ function SideMenu({ onBack } = {}) {
|
|
|
20602
21499
|
strokeLinecap: "round",
|
|
20603
21500
|
strokeLinejoin: "round"
|
|
20604
21501
|
}
|
|
20605
|
-
) : /* @__PURE__ */ (0,
|
|
21502
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
|
|
20606
21503
|
import_react_native_svg4.Path,
|
|
20607
21504
|
{
|
|
20608
21505
|
d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4 M16 17l5-5-5-5 M21 12H9",
|
|
@@ -20612,14 +21509,14 @@ function SideMenu({ onBack } = {}) {
|
|
|
20612
21509
|
strokeLinejoin: "round"
|
|
20613
21510
|
}
|
|
20614
21511
|
) }),
|
|
20615
|
-
/* @__PURE__ */ (0,
|
|
21512
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.Text, { style: [styles55.backBtnLabel, { color: colors.textSecondary }], children: onBack === "back" ? t("back") || "Back" : t("signOut") || "Sign Out" })
|
|
20616
21513
|
]
|
|
20617
21514
|
}
|
|
20618
21515
|
)
|
|
20619
21516
|
] }) : null
|
|
20620
21517
|
] });
|
|
20621
21518
|
}
|
|
20622
|
-
var
|
|
21519
|
+
var styles55 = import_react_native67.StyleSheet.create({
|
|
20623
21520
|
container: {
|
|
20624
21521
|
flex: 1,
|
|
20625
21522
|
paddingTop: 12
|
|
@@ -20705,42 +21602,68 @@ var styles53 = import_react_native65.StyleSheet.create({
|
|
|
20705
21602
|
});
|
|
20706
21603
|
|
|
20707
21604
|
// src/RedactoPrivacyCenter/components/Navbar.tsx
|
|
20708
|
-
var
|
|
20709
|
-
var
|
|
20710
|
-
var
|
|
21605
|
+
var import_react46 = require("react");
|
|
21606
|
+
var import_react_native69 = require("react-native");
|
|
21607
|
+
var import_react_i18next34 = require("react-i18next");
|
|
20711
21608
|
var import_react_native_svg6 = __toESM(require("react-native-svg"));
|
|
20712
21609
|
|
|
20713
21610
|
// src/RedactoPrivacyCenter/components/UserOrgMenu.tsx
|
|
20714
|
-
var
|
|
20715
|
-
var
|
|
21611
|
+
var import_react_native68 = require("react-native");
|
|
21612
|
+
var import_react_i18next33 = require("react-i18next");
|
|
20716
21613
|
var import_react_native_svg5 = __toESM(require("react-native-svg"));
|
|
20717
|
-
var
|
|
21614
|
+
var import_jsx_runtime70 = require("react/jsx-runtime");
|
|
20718
21615
|
var UserOrgMenu = ({ visible, onClose, onBack }) => {
|
|
20719
|
-
const { t } = (0,
|
|
21616
|
+
const { t } = (0, import_react_i18next33.useTranslation)();
|
|
20720
21617
|
const { organizationName, email } = useAuth();
|
|
20721
21618
|
const { colors, branding } = useTheme();
|
|
21619
|
+
const { switchProfile } = useProfileSwitch();
|
|
20722
21620
|
const brandName = (branding == null ? void 0 : branding.brand_name) || organizationName || t("privacyCenter") || "Privacy Center";
|
|
20723
21621
|
const handleAction = () => {
|
|
20724
21622
|
onClose();
|
|
20725
21623
|
navigateBack(onBack);
|
|
20726
21624
|
};
|
|
20727
|
-
return /* @__PURE__ */ (0,
|
|
20728
|
-
/* @__PURE__ */ (0,
|
|
20729
|
-
(branding == null ? void 0 : branding.logo_url) ? /* @__PURE__ */ (0,
|
|
20730
|
-
/* @__PURE__ */ (0,
|
|
20731
|
-
/* @__PURE__ */ (0,
|
|
20732
|
-
email ? /* @__PURE__ */ (0,
|
|
21625
|
+
return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(BottomSheet, { visible, onClose, title: t("account") || "Account", children: [
|
|
21626
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_react_native68.View, { style: styles56.identity, children: [
|
|
21627
|
+
(branding == null ? void 0 : branding.logo_url) ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native68.Image, { source: { uri: branding.logo_url }, style: styles56.logo, resizeMode: "contain" }) : /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(PCAvatar, { name: organizationName || brandName, imageUrl: branding == null ? void 0 : branding.icon_url, size: 52 }),
|
|
21628
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_react_native68.View, { style: styles56.identityText, children: [
|
|
21629
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native68.Text, { style: [styles56.orgName, { color: colors.text }], numberOfLines: 2, children: brandName }),
|
|
21630
|
+
email ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native68.Text, { style: [styles56.email, { color: colors.textSecondary }], numberOfLines: 1, children: email }) : null
|
|
20733
21631
|
] })
|
|
20734
21632
|
] }),
|
|
20735
|
-
|
|
20736
|
-
|
|
21633
|
+
switchProfile ? /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
|
|
21634
|
+
import_react_native68.TouchableOpacity,
|
|
21635
|
+
{
|
|
21636
|
+
style: [styles56.actionRow, { backgroundColor: withAlpha(colors.primary, 0.1) }],
|
|
21637
|
+
onPress: () => {
|
|
21638
|
+
onClose();
|
|
21639
|
+
switchProfile();
|
|
21640
|
+
},
|
|
21641
|
+
activeOpacity: 0.7,
|
|
21642
|
+
accessibilityRole: "button",
|
|
21643
|
+
children: [
|
|
21644
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native_svg5.default, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
|
|
21645
|
+
import_react_native_svg5.Path,
|
|
21646
|
+
{
|
|
21647
|
+
d: "M16 3h5v5 M21 3l-7 7 M8 21H3v-5 M3 21l7-7",
|
|
21648
|
+
stroke: colors.primary,
|
|
21649
|
+
strokeWidth: 2,
|
|
21650
|
+
strokeLinecap: "round",
|
|
21651
|
+
strokeLinejoin: "round"
|
|
21652
|
+
}
|
|
21653
|
+
) }),
|
|
21654
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native68.Text, { style: [styles56.actionLabel, { color: colors.primary }], children: t("switchProfile") })
|
|
21655
|
+
]
|
|
21656
|
+
}
|
|
21657
|
+
) : null,
|
|
21658
|
+
onBack ? /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
|
|
21659
|
+
import_react_native68.TouchableOpacity,
|
|
20737
21660
|
{
|
|
20738
|
-
style: [
|
|
21661
|
+
style: [styles56.actionRow, { backgroundColor: withAlpha(onBack === "signout" ? colors.error : colors.primary, 0.1) }],
|
|
20739
21662
|
onPress: handleAction,
|
|
20740
21663
|
activeOpacity: 0.7,
|
|
20741
21664
|
accessibilityRole: "button",
|
|
20742
21665
|
children: [
|
|
20743
|
-
/* @__PURE__ */ (0,
|
|
21666
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native_svg5.default, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", children: onBack === "signout" ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
|
|
20744
21667
|
import_react_native_svg5.Path,
|
|
20745
21668
|
{
|
|
20746
21669
|
d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4 M16 17l5-5-5-5 M21 12H9",
|
|
@@ -20749,7 +21672,7 @@ var UserOrgMenu = ({ visible, onClose, onBack }) => {
|
|
|
20749
21672
|
strokeLinecap: "round",
|
|
20750
21673
|
strokeLinejoin: "round"
|
|
20751
21674
|
}
|
|
20752
|
-
) : /* @__PURE__ */ (0,
|
|
21675
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
|
|
20753
21676
|
import_react_native_svg5.Path,
|
|
20754
21677
|
{
|
|
20755
21678
|
d: "M19 12H5m0 0l7 7m-7-7l7-7",
|
|
@@ -20759,13 +21682,13 @@ var UserOrgMenu = ({ visible, onClose, onBack }) => {
|
|
|
20759
21682
|
strokeLinejoin: "round"
|
|
20760
21683
|
}
|
|
20761
21684
|
) }),
|
|
20762
|
-
/* @__PURE__ */ (0,
|
|
21685
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native68.Text, { style: [styles56.actionLabel, { color: onBack === "signout" ? colors.error : colors.primary }], children: onBack === "signout" ? t("signOut") || "Sign Out" : t("back") || "Back" })
|
|
20763
21686
|
]
|
|
20764
21687
|
}
|
|
20765
21688
|
) : null
|
|
20766
21689
|
] });
|
|
20767
21690
|
};
|
|
20768
|
-
var
|
|
21691
|
+
var styles56 = import_react_native68.StyleSheet.create({
|
|
20769
21692
|
identity: {
|
|
20770
21693
|
flexDirection: "row",
|
|
20771
21694
|
alignItems: "center",
|
|
@@ -20806,33 +21729,33 @@ var styles54 = import_react_native66.StyleSheet.create({
|
|
|
20806
21729
|
});
|
|
20807
21730
|
|
|
20808
21731
|
// src/RedactoPrivacyCenter/components/Navbar.tsx
|
|
20809
|
-
var
|
|
21732
|
+
var import_jsx_runtime71 = require("react/jsx-runtime");
|
|
20810
21733
|
function Navbar({ mode = "primary", onBack }) {
|
|
20811
|
-
const { t } = (0,
|
|
21734
|
+
const { t } = (0, import_react_i18next34.useTranslation)();
|
|
20812
21735
|
const { currentPage, navigateTo } = useInternalNavigation();
|
|
20813
21736
|
const { organizationName, email } = useAuth();
|
|
20814
21737
|
const { colors, branding } = useTheme();
|
|
20815
|
-
const [locale, setLocale] = (0,
|
|
20816
|
-
const [menuOpen, setMenuOpen] = (0,
|
|
21738
|
+
const [locale, setLocale] = (0, import_react46.useState)(i18n_default.language || "en");
|
|
21739
|
+
const [menuOpen, setMenuOpen] = (0, import_react46.useState)(false);
|
|
20817
21740
|
const unreadCount = useUnreadCount();
|
|
20818
21741
|
const { status: pageStatus } = usePageStatus();
|
|
20819
21742
|
const pageChrome = PAGE_CHROME_BY_PAGE[currentPage] || PAGE_CHROME_BY_PAGE["consent-manager"];
|
|
20820
21743
|
const isDetail = mode === "detail";
|
|
20821
|
-
(0,
|
|
21744
|
+
(0, import_react46.useEffect)(() => {
|
|
20822
21745
|
const handleLanguageChanged = () => setLocale(i18n_default.language);
|
|
20823
21746
|
i18n_default.on("languageChanged", handleLanguageChanged);
|
|
20824
21747
|
return () => {
|
|
20825
21748
|
i18n_default.off("languageChanged", handleLanguageChanged);
|
|
20826
21749
|
};
|
|
20827
21750
|
}, []);
|
|
20828
|
-
const handleLanguageChange = (0,
|
|
21751
|
+
const handleLanguageChange = (0, import_react46.useCallback)((value) => {
|
|
20829
21752
|
i18n_default.changeLanguage(value);
|
|
20830
21753
|
}, []);
|
|
20831
21754
|
const brandLabel = (branding == null ? void 0 : branding.brand_name) || organizationName || t("privacyCenter") || "Privacy Center";
|
|
20832
21755
|
const accountLabel = brandLabel || email || t("account") || "Account";
|
|
20833
|
-
const brandLockup = /* @__PURE__ */ (0,
|
|
20834
|
-
/* @__PURE__ */ (0,
|
|
20835
|
-
/* @__PURE__ */ (0,
|
|
21756
|
+
const brandLockup = /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react_native69.View, { style: styles57.brandRow, children: [
|
|
21757
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PCAvatar, { name: organizationName || brandLabel, imageUrl: branding == null ? void 0 : branding.icon_url, size: 28 }),
|
|
21758
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native69.Text, { style: [styles57.brandText, { color: colors.text }], numberOfLines: 1, children: brandLabel })
|
|
20836
21759
|
] });
|
|
20837
21760
|
const handleDetailBack = () => {
|
|
20838
21761
|
if (currentPage === "case-details") {
|
|
@@ -20844,26 +21767,26 @@ function Navbar({ mode = "primary", onBack }) {
|
|
|
20844
21767
|
}
|
|
20845
21768
|
};
|
|
20846
21769
|
if (isDetail) {
|
|
20847
|
-
return /* @__PURE__ */ (0,
|
|
20848
|
-
/* @__PURE__ */ (0,
|
|
20849
|
-
|
|
21770
|
+
return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
|
|
21771
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
21772
|
+
import_react_native69.View,
|
|
20850
21773
|
{
|
|
20851
21774
|
style: [
|
|
20852
|
-
|
|
20853
|
-
|
|
21775
|
+
styles57.container,
|
|
21776
|
+
styles57.detailContainer,
|
|
20854
21777
|
{ backgroundColor: colors.background, borderBottomColor: colors.border, paddingTop: TOP_INSET + spacing.xs }
|
|
20855
21778
|
],
|
|
20856
|
-
children: /* @__PURE__ */ (0,
|
|
20857
|
-
/* @__PURE__ */ (0,
|
|
20858
|
-
|
|
21779
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react_native69.View, { style: styles57.detailRow, children: [
|
|
21780
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
21781
|
+
import_react_native69.TouchableOpacity,
|
|
20859
21782
|
{
|
|
20860
|
-
style:
|
|
21783
|
+
style: styles57.backButton,
|
|
20861
21784
|
onPress: handleDetailBack,
|
|
20862
21785
|
activeOpacity: 0.7,
|
|
20863
21786
|
hitSlop: DEFAULT_HIT_SLOP,
|
|
20864
21787
|
accessibilityRole: "button",
|
|
20865
21788
|
accessibilityLabel: t("back") || "Back",
|
|
20866
|
-
children: /* @__PURE__ */ (0,
|
|
21789
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native_svg6.default, { width: 22, height: 22, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
20867
21790
|
import_react_native_svg6.Path,
|
|
20868
21791
|
{
|
|
20869
21792
|
d: "M19 12H5m0 0l7 7m-7-7l7-7",
|
|
@@ -20875,36 +21798,36 @@ function Navbar({ mode = "primary", onBack }) {
|
|
|
20875
21798
|
) })
|
|
20876
21799
|
}
|
|
20877
21800
|
),
|
|
20878
|
-
/* @__PURE__ */ (0,
|
|
20879
|
-
/* @__PURE__ */ (0,
|
|
20880
|
-
pageStatus ? /* @__PURE__ */ (0,
|
|
21801
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react_native69.View, { style: styles57.detailTitleWrap, children: [
|
|
21802
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native69.Text, { style: [styles57.detailTitle, { color: colors.text }], numberOfLines: 1, children: t(pageChrome.titleKey) }),
|
|
21803
|
+
pageStatus ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PCBadge, { status: pageStatus.tone, label: pageStatus.label }) : null
|
|
20881
21804
|
] })
|
|
20882
21805
|
] })
|
|
20883
21806
|
}
|
|
20884
21807
|
),
|
|
20885
|
-
/* @__PURE__ */ (0,
|
|
21808
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
|
|
20886
21809
|
] });
|
|
20887
21810
|
}
|
|
20888
|
-
return /* @__PURE__ */ (0,
|
|
20889
|
-
/* @__PURE__ */ (0,
|
|
20890
|
-
|
|
21811
|
+
return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
|
|
21812
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
|
|
21813
|
+
import_react_native69.View,
|
|
20891
21814
|
{
|
|
20892
21815
|
style: [
|
|
20893
|
-
|
|
21816
|
+
styles57.container,
|
|
20894
21817
|
{ backgroundColor: colors.background, borderBottomColor: colors.border, paddingTop: TOP_INSET + spacing.xs }
|
|
20895
21818
|
],
|
|
20896
21819
|
children: [
|
|
20897
|
-
/* @__PURE__ */ (0,
|
|
20898
|
-
onBack ? /* @__PURE__ */ (0,
|
|
20899
|
-
|
|
21820
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react_native69.View, { style: styles57.appBar, children: [
|
|
21821
|
+
onBack ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
21822
|
+
import_react_native69.TouchableOpacity,
|
|
20900
21823
|
{
|
|
20901
|
-
style:
|
|
21824
|
+
style: styles57.backButton,
|
|
20902
21825
|
onPress: () => navigateBack(onBack),
|
|
20903
21826
|
activeOpacity: 0.7,
|
|
20904
21827
|
hitSlop: DEFAULT_HIT_SLOP,
|
|
20905
21828
|
accessibilityRole: "button",
|
|
20906
21829
|
accessibilityLabel: onBack === "back" ? t("back") || "Back" : t("signOut") || "Sign Out",
|
|
20907
|
-
children: /* @__PURE__ */ (0,
|
|
21830
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native_svg6.default, { width: 22, height: 22, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
20908
21831
|
import_react_native_svg6.Path,
|
|
20909
21832
|
{
|
|
20910
21833
|
d: "M19 12H5m0 0l7 7m-7-7l7-7",
|
|
@@ -20916,39 +21839,39 @@ function Navbar({ mode = "primary", onBack }) {
|
|
|
20916
21839
|
) })
|
|
20917
21840
|
}
|
|
20918
21841
|
) : null,
|
|
20919
|
-
/* @__PURE__ */ (0,
|
|
20920
|
-
/* @__PURE__ */ (0,
|
|
20921
|
-
/* @__PURE__ */ (0,
|
|
20922
|
-
/* @__PURE__ */ (0,
|
|
20923
|
-
/* @__PURE__ */ (0,
|
|
20924
|
-
|
|
21842
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native69.View, { style: styles57.brandWrap, children: (branding == null ? void 0 : branding.logo_url) ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(BrandImage, { uri: branding.logo_url, height: 34, maxWidth: 170, fallback: brandLockup }) : brandLockup }),
|
|
21843
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react_native69.View, { style: styles57.actions, children: [
|
|
21844
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(NotificationBell, { count: unreadCount, onPress: () => navigateTo("notifications") }),
|
|
21845
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PCSelect, { value: locale, options: languageOptions, onChange: handleLanguageChange, placeholder: t("language"), compact: true }),
|
|
21846
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
21847
|
+
import_react_native69.TouchableOpacity,
|
|
20925
21848
|
{
|
|
20926
|
-
style:
|
|
21849
|
+
style: styles57.avatarButton,
|
|
20927
21850
|
onPress: () => setMenuOpen(true),
|
|
20928
21851
|
activeOpacity: 0.7,
|
|
20929
21852
|
hitSlop: DEFAULT_HIT_SLOP,
|
|
20930
21853
|
accessibilityRole: "button",
|
|
20931
21854
|
accessibilityLabel: accountLabel,
|
|
20932
|
-
children: /* @__PURE__ */ (0,
|
|
21855
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PCAvatar, { name: organizationName || accountLabel, imageUrl: branding == null ? void 0 : branding.icon_url, size: 28 })
|
|
20933
21856
|
}
|
|
20934
21857
|
)
|
|
20935
21858
|
] })
|
|
20936
21859
|
] }),
|
|
20937
|
-
/* @__PURE__ */ (0,
|
|
20938
|
-
/* @__PURE__ */ (0,
|
|
20939
|
-
pageStatus ? /* @__PURE__ */ (0,
|
|
21860
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native69.View, { style: styles57.pageHeader, children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react_native69.View, { style: styles57.titleRow, children: [
|
|
21861
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native69.Text, { style: [styles57.pageTitle, { color: colors.text }], numberOfLines: 1, children: t(pageChrome.titleKey) }),
|
|
21862
|
+
pageStatus ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PCBadge, { status: pageStatus.tone, label: pageStatus.label }) : null
|
|
20940
21863
|
] }) })
|
|
20941
21864
|
]
|
|
20942
21865
|
}
|
|
20943
21866
|
),
|
|
20944
|
-
/* @__PURE__ */ (0,
|
|
21867
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
|
|
20945
21868
|
] });
|
|
20946
21869
|
}
|
|
20947
|
-
var
|
|
21870
|
+
var styles57 = import_react_native69.StyleSheet.create({
|
|
20948
21871
|
container: {
|
|
20949
21872
|
paddingHorizontal: spacing.lg,
|
|
20950
21873
|
paddingBottom: spacing.md,
|
|
20951
|
-
borderBottomWidth:
|
|
21874
|
+
borderBottomWidth: import_react_native69.StyleSheet.hairlineWidth
|
|
20952
21875
|
},
|
|
20953
21876
|
detailContainer: {
|
|
20954
21877
|
paddingBottom: spacing.sm
|
|
@@ -21028,10 +21951,10 @@ var styles55 = import_react_native67.StyleSheet.create({
|
|
|
21028
21951
|
});
|
|
21029
21952
|
|
|
21030
21953
|
// src/RedactoPrivacyCenter/components/BottomTabBar.tsx
|
|
21031
|
-
var
|
|
21032
|
-
var
|
|
21033
|
-
var
|
|
21034
|
-
var
|
|
21954
|
+
var import_react47 = require("react");
|
|
21955
|
+
var import_react_native70 = require("react-native");
|
|
21956
|
+
var import_react_i18next35 = require("react-i18next");
|
|
21957
|
+
var import_jsx_runtime72 = require("react/jsx-runtime");
|
|
21035
21958
|
var TAB_ITEMS = [
|
|
21036
21959
|
{ page: "consent-manager", labelKey: "consentManager", fallback: "Consents", icon: "shield-check" },
|
|
21037
21960
|
{ page: "form", labelKey: "grievanceRequests", fallback: "Requests", icon: "message-circle-warning" },
|
|
@@ -21042,10 +21965,10 @@ var PAD_H = spacing.lg;
|
|
|
21042
21965
|
var PILL_WIDTH = 56;
|
|
21043
21966
|
var PILL_HEIGHT = 34;
|
|
21044
21967
|
function BottomTabBar({ showFooter = true }) {
|
|
21045
|
-
const { t } = (0,
|
|
21968
|
+
const { t } = (0, import_react_i18next35.useTranslation)();
|
|
21046
21969
|
const { currentPage, navigateTo } = useInternalNavigation();
|
|
21047
21970
|
const { colors } = useTheme();
|
|
21048
|
-
const [rowWidth, setRowWidth] = (0,
|
|
21971
|
+
const [rowWidth, setRowWidth] = (0, import_react47.useState)(0);
|
|
21049
21972
|
const innerWidth = Math.max(0, rowWidth - PAD_H * 2);
|
|
21050
21973
|
const tabWidth = innerWidth > 0 ? innerWidth / TAB_ITEMS.length : 0;
|
|
21051
21974
|
const activeIndex = TAB_ITEMS.findIndex(
|
|
@@ -21053,13 +21976,13 @@ function BottomTabBar({ showFooter = true }) {
|
|
|
21053
21976
|
);
|
|
21054
21977
|
const { translateX } = useAnimatedTabIndicator(Math.max(0, activeIndex), tabWidth);
|
|
21055
21978
|
const onLayout = (e) => setRowWidth(e.nativeEvent.layout.width);
|
|
21056
|
-
return /* @__PURE__ */ (0,
|
|
21057
|
-
/* @__PURE__ */ (0,
|
|
21058
|
-
tabWidth > 0 && activeIndex >= 0 ? /* @__PURE__ */ (0,
|
|
21059
|
-
|
|
21979
|
+
return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_react_native70.View, { style: [styles58.wrapper, { backgroundColor: colors.canvasSubtle, borderTopColor: colors.hairline }], children: [
|
|
21980
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_react_native70.View, { style: styles58.container, onLayout, children: [
|
|
21981
|
+
tabWidth > 0 && activeIndex >= 0 ? /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
|
|
21982
|
+
import_react_native70.Animated.View,
|
|
21060
21983
|
{
|
|
21061
21984
|
style: [
|
|
21062
|
-
|
|
21985
|
+
styles58.pill,
|
|
21063
21986
|
{
|
|
21064
21987
|
width: PILL_WIDTH,
|
|
21065
21988
|
left: PAD_H + (tabWidth - PILL_WIDTH) / 2,
|
|
@@ -21072,17 +21995,17 @@ function BottomTabBar({ showFooter = true }) {
|
|
|
21072
21995
|
TAB_ITEMS.map((item) => {
|
|
21073
21996
|
const isActive = currentPage === item.page || item.page === "form" && currentPage === "case-details";
|
|
21074
21997
|
const label = t(item.labelKey) || item.fallback;
|
|
21075
|
-
return /* @__PURE__ */ (0,
|
|
21076
|
-
|
|
21998
|
+
return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
|
|
21999
|
+
import_react_native70.TouchableOpacity,
|
|
21077
22000
|
{
|
|
21078
|
-
style:
|
|
22001
|
+
style: styles58.tab,
|
|
21079
22002
|
onPress: () => navigateTo(item.page),
|
|
21080
22003
|
activeOpacity: 0.7,
|
|
21081
22004
|
accessibilityRole: "tab",
|
|
21082
22005
|
accessibilityState: { selected: isActive },
|
|
21083
22006
|
accessibilityLabel: label,
|
|
21084
22007
|
children: [
|
|
21085
|
-
/* @__PURE__ */ (0,
|
|
22008
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_react_native70.View, { style: styles58.iconWrap, children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
|
|
21086
22009
|
Icon,
|
|
21087
22010
|
{
|
|
21088
22011
|
name: item.icon,
|
|
@@ -21091,10 +22014,10 @@ function BottomTabBar({ showFooter = true }) {
|
|
|
21091
22014
|
strokeWidth: isActive ? 2.1 : 1.85
|
|
21092
22015
|
}
|
|
21093
22016
|
) }),
|
|
21094
|
-
/* @__PURE__ */ (0,
|
|
21095
|
-
|
|
22017
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
|
|
22018
|
+
import_react_native70.Text,
|
|
21096
22019
|
{
|
|
21097
|
-
style: [
|
|
22020
|
+
style: [styles58.tabLabel, { color: isActive ? colors.primary : colors.textSecondary }],
|
|
21098
22021
|
numberOfLines: 1,
|
|
21099
22022
|
children: label
|
|
21100
22023
|
}
|
|
@@ -21105,13 +22028,13 @@ function BottomTabBar({ showFooter = true }) {
|
|
|
21105
22028
|
);
|
|
21106
22029
|
})
|
|
21107
22030
|
] }),
|
|
21108
|
-
showFooter ? /* @__PURE__ */ (0,
|
|
21109
|
-
/* @__PURE__ */ (0,
|
|
22031
|
+
showFooter ? /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Footer, { inline: true }) : null,
|
|
22032
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_react_native70.View, { style: { height: BOTTOM_INSET } })
|
|
21110
22033
|
] });
|
|
21111
22034
|
}
|
|
21112
|
-
var
|
|
22035
|
+
var styles58 = import_react_native70.StyleSheet.create({
|
|
21113
22036
|
wrapper: {
|
|
21114
|
-
borderTopWidth:
|
|
22037
|
+
borderTopWidth: import_react_native70.StyleSheet.hairlineWidth
|
|
21115
22038
|
},
|
|
21116
22039
|
container: {
|
|
21117
22040
|
flexDirection: "row",
|