@argusoft/medplat-core 1.0.32 → 1.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/{AccessRights-DBjTQA1-.js → AccessRights-BC43Jhml.js} +264 -199
  2. package/dist/AccessRights-BC43Jhml.js.map +1 -0
  3. package/dist/{BrandsPage-CdcAvaml-ZtVTX6vX.js → BrandsPage-CdcAvaml-CYT80CMH.js} +3 -3
  4. package/dist/{BrandsPage-CdcAvaml-ZtVTX6vX.js.map → BrandsPage-CdcAvaml-CYT80CMH.js.map} +1 -1
  5. package/dist/{CategoriesPage-BprQEYJw-CclreTv1.js → CategoriesPage-BprQEYJw-BRAukJB1.js} +3 -3
  6. package/dist/{CategoriesPage-BprQEYJw-CclreTv1.js.map → CategoriesPage-BprQEYJw-BRAukJB1.js.map} +1 -1
  7. package/dist/ChangePasswordModalCore-rypTxA2O.js +238 -0
  8. package/dist/ChangePasswordModalCore-rypTxA2O.js.map +1 -0
  9. package/dist/{DashboardPage-CTiGSx71-CsYohJ5e.js → DashboardPage-CTiGSx71-DX-TzGOH.js} +3 -3
  10. package/dist/{DashboardPage-CTiGSx71-CsYohJ5e.js.map → DashboardPage-CTiGSx71-DX-TzGOH.js.map} +1 -1
  11. package/dist/{FacilityPicker-BXa2VF7i-Dab_Jwa5.js → FacilityPicker-BXa2VF7i-D0JUIqLv.js} +2 -2
  12. package/dist/{FacilityPicker-BXa2VF7i-Dab_Jwa5.js.map → FacilityPicker-BXa2VF7i-D0JUIqLv.js.map} +1 -1
  13. package/dist/FaqList-CeDEuhU_.js +237 -0
  14. package/dist/FaqList-CeDEuhU_.js.map +1 -0
  15. package/dist/FaqSkeletons-hLCEcRr-.js +19 -0
  16. package/dist/FaqSkeletons-hLCEcRr-.js.map +1 -0
  17. package/dist/FaqView-sDzBVyXV.js +617 -0
  18. package/dist/FaqView-sDzBVyXV.js.map +1 -0
  19. package/dist/{FeatureMenu-Kc73yPHH.js → FeatureMenu-CaI-ZhSZ.js} +2 -2
  20. package/dist/{FeatureMenu-Kc73yPHH.js.map → FeatureMenu-CaI-ZhSZ.js.map} +1 -1
  21. package/dist/{ImmunizationConfigurationBase-lKsJZMak.js → ImmunizationConfigurationBase-Clkk0-n6.js} +2352 -2332
  22. package/dist/{ImmunizationConfigurationBase-lKsJZMak.js.map → ImmunizationConfigurationBase-Clkk0-n6.js.map} +1 -1
  23. package/dist/{InventoryPage-JadYMCzU-CzJQfQ2A.js → InventoryPage-JadYMCzU-CWcCauMI.js} +4 -4
  24. package/dist/{InventoryPage-JadYMCzU-CzJQfQ2A.js.map → InventoryPage-JadYMCzU-CWcCauMI.js.map} +1 -1
  25. package/dist/ManageFaq-4cT6bntx.js +1583 -0
  26. package/dist/ManageFaq-4cT6bntx.js.map +1 -0
  27. package/dist/ManageFaq.css +1 -0
  28. package/dist/{ManageUser-Dm0l833u.js → ManageUser-DchUMAyC.js} +2 -2
  29. package/dist/{ManageUser-Dm0l833u.js.map → ManageUser-DchUMAyC.js.map} +1 -1
  30. package/dist/{MemberProfileCard-01d_jz3w-DYHtbgMX.js → MemberProfileCard-01d_jz3w-CQi_zu6x.js} +3 -3
  31. package/dist/{MemberProfileCard-01d_jz3w-DYHtbgMX.js.map → MemberProfileCard-01d_jz3w-CQi_zu6x.js.map} +1 -1
  32. package/dist/{PaymentCreatePage-D6NZBUC3-DxXf2kvH.js → PaymentCreatePage-D6NZBUC3-_98S21Sa.js} +4 -4
  33. package/dist/{PaymentCreatePage-D6NZBUC3-DxXf2kvH.js.map → PaymentCreatePage-D6NZBUC3-_98S21Sa.js.map} +1 -1
  34. package/dist/{PaymentsPage-CHieGNrn-BnYCtqHd.js → PaymentsPage-CHieGNrn-ChCXEyck.js} +3 -3
  35. package/dist/{PaymentsPage-CHieGNrn-BnYCtqHd.js.map → PaymentsPage-CHieGNrn-ChCXEyck.js.map} +1 -1
  36. package/dist/{PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js → PickupBatchLinesEditor-QPaqFtUO-BEtI5mIU.js} +2 -2
  37. package/dist/{PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js.map → PickupBatchLinesEditor-QPaqFtUO-BEtI5mIU.js.map} +1 -1
  38. package/dist/{PickupCreatePage-C7_67u_u-OId8-e2a.js → PickupCreatePage-C7_67u_u-DbDIZ1WC.js} +5 -5
  39. package/dist/{PickupCreatePage-C7_67u_u-OId8-e2a.js.map → PickupCreatePage-C7_67u_u-DbDIZ1WC.js.map} +1 -1
  40. package/dist/{PickupsPage-BWblMlic-CWkgeBw0.js → PickupsPage-BWblMlic-KehDMebm.js} +4 -4
  41. package/dist/{PickupsPage-BWblMlic-CWkgeBw0.js.map → PickupsPage-BWblMlic-KehDMebm.js.map} +1 -1
  42. package/dist/{PmGuard-BvUUbU80-BpYNaDzl.js → PmGuard-BvUUbU80-DJipZoSg.js} +2 -2
  43. package/dist/{PmGuard-BvUUbU80-BpYNaDzl.js.map → PmGuard-BvUUbU80-DJipZoSg.js.map} +1 -1
  44. package/dist/{ProductEditPage-Dbq4vUAA-BoBmTPPL.js → ProductEditPage-Dbq4vUAA-DusAdAvm.js} +4 -4
  45. package/dist/{ProductEditPage-Dbq4vUAA-BoBmTPPL.js.map → ProductEditPage-Dbq4vUAA-DusAdAvm.js.map} +1 -1
  46. package/dist/{ProductsPage-BI22nPb4-CQBjnc-n.js → ProductsPage-BI22nPb4-D3GnWz34.js} +4 -4
  47. package/dist/{ProductsPage-BI22nPb4-CQBjnc-n.js.map → ProductsPage-BI22nPb4-D3GnWz34.js.map} +1 -1
  48. package/dist/{PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js → PurchaseCreatePage-C0EK9z4w-D4PlZsOH.js} +4 -4
  49. package/dist/{PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js.map → PurchaseCreatePage-C0EK9z4w-D4PlZsOH.js.map} +1 -1
  50. package/dist/{PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js → PurchaseRequestDetailPage-DhBuOGHZ-CAmlL4fP.js} +3 -3
  51. package/dist/{PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js.map → PurchaseRequestDetailPage-DhBuOGHZ-CAmlL4fP.js.map} +1 -1
  52. package/dist/{PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js → PurchaseRequestsPage-Bj9HUMxb-BCAhEEkL.js} +3 -3
  53. package/dist/{PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js.map → PurchaseRequestsPage-Bj9HUMxb-BCAhEEkL.js.map} +1 -1
  54. package/dist/{PurchasesPage-Djl1AqD_-DXeYFMrX.js → PurchasesPage-Djl1AqD_-DxBRFRDy.js} +3 -3
  55. package/dist/{PurchasesPage-Djl1AqD_-DXeYFMrX.js.map → PurchasesPage-Djl1AqD_-DxBRFRDy.js.map} +1 -1
  56. package/dist/{SaleCreatePage-DHBLmlBr-BlgjVsq6.js → SaleCreatePage-DHBLmlBr-aEGmvJQq.js} +4 -4
  57. package/dist/{SaleCreatePage-DHBLmlBr-BlgjVsq6.js.map → SaleCreatePage-DHBLmlBr-aEGmvJQq.js.map} +1 -1
  58. package/dist/{SalesPage-eF9Yr42z-BQ9FlXC3.js → SalesPage-eF9Yr42z-CvOr82vo.js} +3 -3
  59. package/dist/{SalesPage-eF9Yr42z-BQ9FlXC3.js.map → SalesPage-eF9Yr42z-CvOr82vo.js.map} +1 -1
  60. package/dist/{SettingsPage-Cre-UE3r-9ntnLYsQ.js → SettingsPage-Cre-UE3r-CGTVp5Zw.js} +3 -3
  61. package/dist/{SettingsPage-Cre-UE3r-9ntnLYsQ.js.map → SettingsPage-Cre-UE3r-CGTVp5Zw.js.map} +1 -1
  62. package/dist/{StorageUnitsPage-CTEVuemZ-B4osG74N.js → StorageUnitsPage-CTEVuemZ-C7zkwKMz.js} +5 -5
  63. package/dist/{StorageUnitsPage-CTEVuemZ-B4osG74N.js.map → StorageUnitsPage-CTEVuemZ-C7zkwKMz.js.map} +1 -1
  64. package/dist/{SubMenu-OO2zhKiu.js → SubMenu-DZIhur09.js} +2 -2
  65. package/dist/{SubMenu-OO2zhKiu.js.map → SubMenu-DZIhur09.js.map} +1 -1
  66. package/dist/{TransactionsPage-Zuu7sjID-B-ACzvd1.js → TransactionsPage-Zuu7sjID-BDmUK7s1.js} +3 -3
  67. package/dist/{TransactionsPage-Zuu7sjID-B-ACzvd1.js.map → TransactionsPage-Zuu7sjID-BDmUK7s1.js.map} +1 -1
  68. package/dist/{TransferCreatePage-DlT0nCDj-B2SdPgYB.js → TransferCreatePage-DlT0nCDj-evHPJc99.js} +4 -4
  69. package/dist/{TransferCreatePage-DlT0nCDj-B2SdPgYB.js.map → TransferCreatePage-DlT0nCDj-evHPJc99.js.map} +1 -1
  70. package/dist/{TransfersPage-DqaSvHda-G2tFa5Jq.js → TransfersPage-DqaSvHda-DAUn5SSr.js} +3 -3
  71. package/dist/{TransfersPage-DqaSvHda-G2tFa5Jq.js.map → TransfersPage-DqaSvHda-DAUn5SSr.js.map} +1 -1
  72. package/dist/{VaccineEducation-T_UE57Ef.js → VaccineEducation-DWkNNasF.js} +2 -2
  73. package/dist/{VaccineEducation-T_UE57Ef.js.map → VaccineEducation-DWkNNasF.js.map} +1 -1
  74. package/dist/VaccineEducationConfigurator-BFCvu5Mw.js +1450 -0
  75. package/dist/VaccineEducationConfigurator-BFCvu5Mw.js.map +1 -0
  76. package/dist/VaccineEducationConfigurator.css +1 -4
  77. package/dist/{VaccineEducationList-Ok7_5EFb.js → VaccineEducationList-BxZHahCh.js} +2 -2
  78. package/dist/{VaccineEducationList-Ok7_5EFb.js.map → VaccineEducationList-BxZHahCh.js.map} +1 -1
  79. package/dist/{VialsPage-LoDaUqVv-DmMXbK8j.js → VialsPage-LoDaUqVv-Dw00Zc06.js} +4 -4
  80. package/dist/{VialsPage-LoDaUqVv-DmMXbK8j.js.map → VialsPage-LoDaUqVv-Dw00Zc06.js.map} +1 -1
  81. package/dist/{VaccineEducationConfigurator-CWc20_rv.js → ckeditor5-_x14lrzc.js} +4014 -5372
  82. package/dist/ckeditor5-_x14lrzc.js.map +1 -0
  83. package/dist/ckeditor5.css +4 -0
  84. package/dist/faqMedia-FDpje7v0.js +234 -0
  85. package/dist/faqMedia-FDpje7v0.js.map +1 -0
  86. package/dist/index.css +1 -1
  87. package/dist/index.js +1 -1
  88. package/dist/{index.lib-BySa9-Z-.js → index.lib-QDEODnRT.js} +343 -303
  89. package/dist/index.lib-QDEODnRT.js.map +1 -0
  90. package/dist/{listValueStore-5d4vNGQM-WclZ5nBG.js → listValueStore-5d4vNGQM-DB08drLf.js} +2 -2
  91. package/dist/{listValueStore-5d4vNGQM-WclZ5nBG.js.map → listValueStore-5d4vNGQM-DB08drLf.js.map} +1 -1
  92. package/dist/proxy-C4gcRXzG.js +5265 -0
  93. package/dist/proxy-C4gcRXzG.js.map +1 -0
  94. package/package.json +3 -2
  95. package/dist/AccessRights-DBjTQA1-.js.map +0 -1
  96. package/dist/ChangePasswordModalCore-DZGOkbRY.js +0 -5494
  97. package/dist/ChangePasswordModalCore-DZGOkbRY.js.map +0 -1
  98. package/dist/VaccineEducationConfigurator-CWc20_rv.js.map +0 -1
  99. package/dist/index.lib-BySa9-Z-.js.map +0 -1
@@ -0,0 +1,234 @@
1
+ import { jsxs as x, jsx as n } from "react/jsx-runtime";
2
+ import { useState as d, useRef as F, useEffect as C, createElement as N } from "react";
3
+ import l from "prop-types";
4
+ import { Box as f, Tooltip as P, Button as v, IconButton as R, Popover as j, Autocomplete as B, TextField as z, Divider as V, Typography as k } from "@mui/material";
5
+ import { FontAwesomeIcon as b } from "@fortawesome/react-fontawesome";
6
+ import { faImage as D, faTrash as _, faUpload as G } from "@fortawesome/free-solid-svg-icons";
7
+ import L from "@/common/fontAwesomeIcons/FontAwesomeIcons";
8
+ import { FontAwesomeIconsNames as U } from "@/common/fontAwesomeIcons/FontAwesomeIconsNames";
9
+ import { showToast as S } from "@/common/toaster/toaster";
10
+ import { useTranslateProvider as J } from "@/common/languageTranslator/TranslationContext";
11
+ import { api as W } from "@/common/interceptors/AxiosInterceptor";
12
+ import { FormConfiguratorService as q } from "@/common/services/FormConfiguratorService";
13
+ const g = 100, I = (e) => (e || "").replace(/^fa/, "").replace(/([a-z])([A-Z])/g, "$1 $2");
14
+ function H({ value: e, onChange: o }) {
15
+ const { translate: i } = J(), [p, s] = d(null), [a, c] = d(""), [m, h] = d(g), O = F(null), y = !!p;
16
+ C(() => {
17
+ y && (c(""), h(g));
18
+ }, [y]);
19
+ const T = a ? U.filter(
20
+ (r) => I(r).toLowerCase().includes(a.toLowerCase())
21
+ ) : U, M = (r) => {
22
+ var w;
23
+ const t = (w = r.target.files) == null ? void 0 : w[0];
24
+ if (r.target.value = "", !t) return;
25
+ if (!t.type.includes("svg") && !t.name.toLowerCase().endsWith(".svg")) {
26
+ S({ message: i("Only SVG files are allowed"), type: "error" });
27
+ return;
28
+ }
29
+ if (t.size > 100 * 1024) {
30
+ S({ message: i("SVG must be under 100KB"), type: "error" });
31
+ return;
32
+ }
33
+ const u = new FileReader();
34
+ u.onload = (E) => {
35
+ o({ iconType: "svg", icon: E.target.result }), s(null);
36
+ }, u.readAsText(t);
37
+ };
38
+ return /* @__PURE__ */ x(f, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
39
+ /* @__PURE__ */ n(P, { title: i("Choose an icon"), arrow: !0, children: /* @__PURE__ */ n(
40
+ v,
41
+ {
42
+ variant: "outlined",
43
+ color: "inherit",
44
+ onClick: (r) => s(r.currentTarget),
45
+ sx: {
46
+ textTransform: "none",
47
+ minWidth: 0,
48
+ width: 44,
49
+ height: 44,
50
+ p: 0,
51
+ borderRadius: 2,
52
+ borderStyle: e ? "solid" : "dashed"
53
+ },
54
+ "data-testid": "category-icon-trigger",
55
+ children: e ? /* @__PURE__ */ n(A, { value: e, size: "lg" }) : /* @__PURE__ */ n(b, { icon: D, opacity: 0.5 })
56
+ }
57
+ ) }),
58
+ e && /* @__PURE__ */ n(
59
+ R,
60
+ {
61
+ size: "small",
62
+ "aria-label": i("Remove icon"),
63
+ onClick: () => o(null),
64
+ "data-testid": "category-icon-remove",
65
+ children: /* @__PURE__ */ n(b, { icon: _, size: "xs" })
66
+ }
67
+ ),
68
+ /* @__PURE__ */ x(
69
+ j,
70
+ {
71
+ open: y,
72
+ anchorEl: p,
73
+ onClose: () => s(null),
74
+ anchorOrigin: { vertical: "bottom", horizontal: "left" },
75
+ slotProps: { paper: { sx: { p: 2, width: 300 } } },
76
+ children: [
77
+ /* @__PURE__ */ n(
78
+ B,
79
+ {
80
+ size: "small",
81
+ options: T.slice(0, m),
82
+ inputValue: a,
83
+ onInputChange: (r, t) => {
84
+ c(t), h(g);
85
+ },
86
+ onChange: (r, t) => {
87
+ t && (o({ iconType: "fontawesome", icon: t }), s(null));
88
+ },
89
+ value: null,
90
+ getOptionLabel: (r) => I(r),
91
+ slotProps: {
92
+ listbox: {
93
+ onScroll: (r) => {
94
+ const t = r.currentTarget;
95
+ t.scrollTop + t.clientHeight >= t.scrollHeight - 5 && h((u) => Math.min(u + g, T.length));
96
+ }
97
+ }
98
+ },
99
+ renderOption: (r, t) => /* @__PURE__ */ N(f, { component: "li", ...r, key: t, sx: { display: "flex", gap: 1.25 } }, /* @__PURE__ */ n(f, { sx: { width: 18, textAlign: "center", color: "primary.main" }, children: /* @__PURE__ */ n(L, { iconName: t }) }), /* @__PURE__ */ n("span", { children: I(t) })),
100
+ renderInput: (r) => /* @__PURE__ */ n(z, { ...r, autoFocus: !0, placeholder: i("Search icons…") })
101
+ }
102
+ ),
103
+ /* @__PURE__ */ n(V, { sx: { my: 1.5 }, children: i("OR") }),
104
+ /* @__PURE__ */ x(
105
+ v,
106
+ {
107
+ variant: "outlined",
108
+ color: "inherit",
109
+ fullWidth: !0,
110
+ component: "label",
111
+ size: "small",
112
+ startIcon: /* @__PURE__ */ n(b, { icon: G, size: "xs" }),
113
+ sx: { textTransform: "none" },
114
+ children: [
115
+ i("Upload SVG"),
116
+ /* @__PURE__ */ n(
117
+ "input",
118
+ {
119
+ ref: O,
120
+ type: "file",
121
+ hidden: !0,
122
+ accept: ".svg,image/svg+xml",
123
+ onChange: M
124
+ }
125
+ )
126
+ ]
127
+ }
128
+ ),
129
+ /* @__PURE__ */ n(k, { variant: "caption", sx: { display: "block", mt: 0.75, color: "text.disabled" }, children: i("Up to 100KB.") })
130
+ ]
131
+ }
132
+ )
133
+ ] });
134
+ }
135
+ H.propTypes = {
136
+ value: l.shape({ iconType: l.oneOf(["fontawesome", "svg"]), icon: l.string }),
137
+ onChange: l.func.isRequired
138
+ };
139
+ function A({ value: e, size: o }) {
140
+ return e != null && e.icon ? e.iconType === "svg" ? /* @__PURE__ */ n(
141
+ f,
142
+ {
143
+ component: "span",
144
+ sx: {
145
+ display: "inline-flex",
146
+ width: o === "lg" ? 22 : 16,
147
+ height: o === "lg" ? 22 : 16,
148
+ color: "primary.main",
149
+ "& svg": { width: "100%", height: "100%" }
150
+ },
151
+ dangerouslySetInnerHTML: { __html: e.icon }
152
+ }
153
+ ) : /* @__PURE__ */ n(f, { component: "span", sx: { color: "primary.main", display: "inline-flex" }, children: /* @__PURE__ */ n(L, { iconName: e.icon, size: o }) }) : null;
154
+ }
155
+ A.propTypes = {
156
+ value: l.shape({ iconType: l.oneOf(["fontawesome", "svg"]), icon: l.string }),
157
+ size: l.string
158
+ };
159
+ const ae = (e) => {
160
+ if (e && typeof e == "object") return e;
161
+ if (!e || typeof e != "string") return null;
162
+ try {
163
+ const o = JSON.parse(e);
164
+ return o && typeof o == "object" ? o : null;
165
+ } catch {
166
+ return null;
167
+ }
168
+ }, le = (e) => e ? JSON.stringify(e) : "", $ = "FAQ", ce = {
169
+ image: {
170
+ accept: ".jpg,.jpeg,.png,.webp,image/jpeg,image/png,image/webp",
171
+ extensions: /* @__PURE__ */ new Set(["jpg", "jpeg", "png", "webp"]),
172
+ allowedLabel: "JPG, PNG or WEBP",
173
+ maxFileMb: 5,
174
+ maxItems: 4
175
+ },
176
+ video: {
177
+ accept: ".mp4,.mov,.webm,video/mp4,video/quicktime,video/webm",
178
+ extensions: /* @__PURE__ */ new Set(["mp4", "mov", "webm"]),
179
+ allowedLabel: "MP4, MOV or WEBM",
180
+ maxFileMb: 25,
181
+ maxItems: 2
182
+ }
183
+ }, pe = (e) => (e.split(".").pop() || "").toLowerCase(), me = async (e, o) => {
184
+ const i = crypto.randomUUID(), p = new URLSearchParams({
185
+ moduleName: $,
186
+ documentUUID: i,
187
+ isTemporary: "false"
188
+ });
189
+ return await W.post(
190
+ `/document/uploaddocumentV2?${p.toString()}`,
191
+ { fileToUpload: e },
192
+ { type: "fileUpload", showLoader: !1 }
193
+ ), { uuid: i, fileName: e.name, type: o };
194
+ }, de = (e) => {
195
+ const [o, i] = d(null), [p, s] = d(!!e);
196
+ return C(() => {
197
+ if (!e) {
198
+ i(null), s(!1);
199
+ return;
200
+ }
201
+ let a = null, c = !1;
202
+ return s(!0), q.getFileByUUID(e).then((m) => {
203
+ c || !((m == null ? void 0 : m.data) instanceof Blob) || (a = URL.createObjectURL(m.data), i(a));
204
+ }).catch(() => {
205
+ c || i(null);
206
+ }).finally(() => {
207
+ c || s(!1);
208
+ }), () => {
209
+ c = !0, a && URL.revokeObjectURL(a);
210
+ };
211
+ }, [e]), { dataUrl: o, isLoading: p };
212
+ }, fe = (e) => {
213
+ if (Array.isArray(e)) return e;
214
+ if (!e || typeof e != "string") return [];
215
+ try {
216
+ const o = JSON.parse(e);
217
+ return Array.isArray(o) ? o : [];
218
+ } catch {
219
+ return [];
220
+ }
221
+ }, ue = (e) => JSON.stringify(e || []);
222
+ export {
223
+ A as C,
224
+ ce as M,
225
+ H as a,
226
+ de as b,
227
+ ue as c,
228
+ fe as d,
229
+ pe as g,
230
+ ae as p,
231
+ le as s,
232
+ me as u
233
+ };
234
+ //# sourceMappingURL=faqMedia-FDpje7v0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faqMedia-FDpje7v0.js","sources":["../src/views/Faq/components/CategoryIconPicker.jsx","../src/views/Faq/utils/categoryIcon.js","../src/views/Faq/utils/faqMedia.js"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Autocomplete,\n Box,\n Button,\n Divider,\n IconButton,\n Popover,\n TextField,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faImage, faTrash, faUpload } from \"@fortawesome/free-solid-svg-icons\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport { FontAwesomeIconsNames } from \"@/common/fontAwesomeIcons/FontAwesomeIconsNames\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\n\nconst PAGE_SIZE = 100;\n\nconst formatIconName = (name) => (name || \"\").replace(/^fa/, \"\").replace(/([a-z])([A-Z])/g, \"$1 $2\");\n\nexport default function CategoryIconPicker({ value, onChange }) {\n const { translate } = useTranslateProvider();\n const [anchorEl, setAnchorEl] = useState(null);\n const [inputValue, setInputValue] = useState(\"\");\n const [visibleCount, setVisibleCount] = useState(PAGE_SIZE);\n const fileInputRef = useRef(null);\n\n const open = Boolean(anchorEl);\n\n useEffect(() => {\n if (open) {\n setInputValue(\"\");\n setVisibleCount(PAGE_SIZE);\n }\n }, [open]);\n\n const filteredNames = inputValue\n ? FontAwesomeIconsNames.filter((name) =>\n formatIconName(name).toLowerCase().includes(inputValue.toLowerCase())\n )\n : FontAwesomeIconsNames;\n\n const handleSvgUpload = (event) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n if (!file) return;\n\n if (!file.type.includes(\"svg\") && !file.name.toLowerCase().endsWith(\".svg\")) {\n showToast({ message: translate(\"Only SVG files are allowed\"), type: \"error\" });\n return;\n }\n if (file.size > 100 * 1024) {\n showToast({ message: translate(\"SVG must be under 100KB\"), type: \"error\" });\n return;\n }\n\n const reader = new FileReader();\n reader.onload = (event2) => {\n onChange({ iconType: \"svg\", icon: event2.target.result });\n setAnchorEl(null);\n };\n reader.readAsText(file);\n };\n\n return (\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Tooltip title={translate(\"Choose an icon\")} arrow>\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n onClick={(event) => setAnchorEl(event.currentTarget)}\n sx={{\n textTransform: \"none\",\n minWidth: 0,\n width: 44,\n height: 44,\n p: 0,\n borderRadius: 2,\n borderStyle: value ? \"solid\" : \"dashed\",\n }}\n data-testid=\"category-icon-trigger\"\n >\n {value ? (\n <CategoryIcon value={value} size=\"lg\" />\n ) : (\n <FontAwesomeIcon icon={faImage} opacity={0.5} />\n )}\n </Button>\n </Tooltip>\n\n {value && (\n <IconButton\n size=\"small\"\n aria-label={translate(\"Remove icon\")}\n onClick={() => onChange(null)}\n data-testid=\"category-icon-remove\"\n >\n <FontAwesomeIcon icon={faTrash} size=\"xs\" />\n </IconButton>\n )}\n\n <Popover\n open={open}\n anchorEl={anchorEl}\n onClose={() => setAnchorEl(null)}\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\n slotProps={{ paper: { sx: { p: 2, width: 300 } } }}\n >\n <Autocomplete\n size=\"small\"\n options={filteredNames.slice(0, visibleCount)}\n inputValue={inputValue}\n onInputChange={(_, next) => {\n setInputValue(next);\n setVisibleCount(PAGE_SIZE);\n }}\n onChange={(_, name) => {\n if (name) {\n onChange({ iconType: \"fontawesome\", icon: name });\n setAnchorEl(null);\n }\n }}\n value={null}\n getOptionLabel={(name) => formatIconName(name)}\n slotProps={{\n listbox: {\n onScroll: (event) => {\n const el = event.currentTarget;\n if (el.scrollTop + el.clientHeight >= el.scrollHeight - 5) {\n setVisibleCount((count) => Math.min(count + PAGE_SIZE, filteredNames.length));\n }\n },\n },\n }}\n renderOption={(props, name) => (\n <Box component=\"li\" {...props} key={name} sx={{ display: \"flex\", gap: 1.25 }}>\n <Box sx={{ width: 18, textAlign: \"center\", color: \"primary.main\" }}>\n <FontAwesomeIcons iconName={name} />\n </Box>\n <span>{formatIconName(name)}</span>\n </Box>\n )}\n renderInput={(params) => (\n <TextField {...params} autoFocus placeholder={translate(\"Search icons…\")} />\n )}\n />\n\n <Divider sx={{ my: 1.5 }}>{translate(\"OR\")}</Divider>\n\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n fullWidth\n component=\"label\"\n size=\"small\"\n startIcon={<FontAwesomeIcon icon={faUpload} size=\"xs\" />}\n sx={{ textTransform: \"none\" }}\n >\n {translate(\"Upload SVG\")}\n <input\n ref={fileInputRef}\n type=\"file\"\n hidden\n accept=\".svg,image/svg+xml\"\n onChange={handleSvgUpload}\n />\n </Button>\n <Typography variant=\"caption\" sx={{ display: \"block\", mt: 0.75, color: \"text.disabled\" }}>\n {translate(\"Up to 100KB.\")}\n </Typography>\n </Popover>\n </Box>\n );\n}\n\nCategoryIconPicker.propTypes = {\n value: PropTypes.shape({ iconType: PropTypes.oneOf([\"fontawesome\", \"svg\"]), icon: PropTypes.string }),\n onChange: PropTypes.func.isRequired,\n};\n\nexport function CategoryIcon({ value, size }) {\n if (!value?.icon) return null;\n\n if (value.iconType === \"svg\") {\n return (\n <Box\n component=\"span\"\n sx={{\n display: \"inline-flex\",\n width: size === \"lg\" ? 22 : 16,\n height: size === \"lg\" ? 22 : 16,\n color: \"primary.main\",\n \"& svg\": { width: \"100%\", height: \"100%\" },\n }}\n dangerouslySetInnerHTML={{ __html: value.icon }}\n />\n );\n }\n\n return (\n <Box component=\"span\" sx={{ color: \"primary.main\", display: \"inline-flex\" }}>\n <FontAwesomeIcons iconName={value.icon} size={size} />\n </Box>\n );\n}\n\nCategoryIcon.propTypes = {\n value: PropTypes.shape({ iconType: PropTypes.oneOf([\"fontawesome\", \"svg\"]), icon: PropTypes.string }),\n size: PropTypes.string,\n};\n","export const parseCategoryIcon = (raw) => {\n if (raw && typeof raw === \"object\") return raw;\n if (!raw || typeof raw !== \"string\") return null;\n try {\n const parsed = JSON.parse(raw);\n return parsed && typeof parsed === \"object\" ? parsed : null;\n } catch {\n return null;\n }\n};\n\nexport const serializeCategoryIcon = (value) => (value ? JSON.stringify(value) : \"\");\n","import { useEffect, useState } from \"react\";\nimport { api } from \"@/common/interceptors/AxiosInterceptor\";\nimport { FormConfiguratorService } from \"@/common/services/FormConfiguratorService\";\n\nconst MODULE_NAME = \"FAQ\";\n\nexport const MEDIA_TYPES = {\n image: {\n accept: \".jpg,.jpeg,.png,.webp,image/jpeg,image/png,image/webp\",\n extensions: new Set([\"jpg\", \"jpeg\", \"png\", \"webp\"]),\n allowedLabel: \"JPG, PNG or WEBP\",\n maxFileMb: 5,\n maxItems: 4,\n },\n video: {\n accept: \".mp4,.mov,.webm,video/mp4,video/quicktime,video/webm\",\n extensions: new Set([\"mp4\", \"mov\", \"webm\"]),\n allowedLabel: \"MP4, MOV or WEBM\",\n maxFileMb: 25,\n maxItems: 2,\n },\n};\n\nexport const getExtension = (fileName) => (fileName.split(\".\").pop() || \"\").toLowerCase();\n\nexport const uploadFaqMedia = async (file, mediaType) => {\n const documentUUID = crypto.randomUUID();\n const params = new URLSearchParams({\n moduleName: MODULE_NAME,\n documentUUID,\n isTemporary: \"false\",\n });\n await api.post(\n `/document/uploaddocumentV2?${params.toString()}`,\n { fileToUpload: file },\n { type: \"fileUpload\", showLoader: false },\n );\n return { uuid: documentUUID, fileName: file.name, type: mediaType };\n};\n\nexport const useResolvedFile = (uuid) => {\n const [dataUrl, setDataUrl] = useState(null);\n const [isLoading, setIsLoading] = useState(Boolean(uuid));\n\n useEffect(() => {\n if (!uuid) {\n setDataUrl(null);\n setIsLoading(false);\n return undefined;\n }\n\n let objectUrl = null;\n let cancelled = false;\n setIsLoading(true);\n\n FormConfiguratorService.getFileByUUID(uuid)\n .then((res) => {\n if (cancelled || !(res?.data instanceof Blob)) return;\n objectUrl = URL.createObjectURL(res.data);\n setDataUrl(objectUrl);\n })\n .catch(() => {\n if (!cancelled) setDataUrl(null);\n })\n .finally(() => {\n if (!cancelled) setIsLoading(false);\n });\n\n return () => {\n cancelled = true;\n if (objectUrl) URL.revokeObjectURL(objectUrl);\n };\n }, [uuid]);\n\n return { dataUrl, isLoading };\n};\n\nexport const parseMedia = (raw) => {\n if (Array.isArray(raw)) return raw;\n if (!raw || typeof raw !== \"string\") return [];\n try {\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n};\n\nexport const serializeMedia = (items) => JSON.stringify(items || []);\n"],"names":["PAGE_SIZE","formatIconName","name","CategoryIconPicker","value","onChange","translate","useTranslateProvider","anchorEl","setAnchorEl","useState","inputValue","setInputValue","visibleCount","setVisibleCount","fileInputRef","useRef","open","useEffect","filteredNames","FontAwesomeIconsNames","handleSvgUpload","event","file","_a","showToast","reader","event2","jsxs","Box","jsx","Tooltip","Button","CategoryIcon","FontAwesomeIcon","faImage","IconButton","faTrash","Popover","Autocomplete","_","next","el","count","props","createElement","FontAwesomeIcons","params","TextField","Divider","faUpload","Typography","PropTypes","size","parseCategoryIcon","raw","parsed","serializeCategoryIcon","MODULE_NAME","MEDIA_TYPES","getExtension","fileName","uploadFaqMedia","mediaType","documentUUID","api","useResolvedFile","uuid","dataUrl","setDataUrl","isLoading","setIsLoading","objectUrl","cancelled","FormConfiguratorService","res","parseMedia","serializeMedia","items"],"mappings":"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"}