@verii/components-organizations-registrar 1.0.0-pre.1756096826 → 1.0.0-pre.1756224043

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 (131) hide show
  1. package/dist/chunks/{ConsentProvider.DIG3atk-.js → ConsentProvider.6M2ucqXH.js} +3 -3
  2. package/dist/chunks/ConsentProvider.6M2ucqXH.js.map +1 -0
  3. package/dist/chunks/{ConsentProvider.DTG51XMy.js → ConsentProvider.Bbc0preP.js} +2 -2
  4. package/dist/chunks/ConsentProvider.Bbc0preP.js.map +1 -0
  5. package/dist/chunks/{CreateOrganization.utils.C5C_r3Zp.js → CreateOrganizationUtils.C5C_r3Zp.js} +1 -1
  6. package/dist/chunks/CreateOrganizationUtils.C5C_r3Zp.js.map +1 -0
  7. package/dist/chunks/{CreateOrganization.utils.8cSBFSYF.js → CreateOrganizationUtils.Xq78HHkP.js} +7 -7
  8. package/dist/chunks/CreateOrganizationUtils.Xq78HHkP.js.map +1 -0
  9. package/dist/chunks/{CustomAppBar.DuFQqld7.js → CustomAppBar.BOlNFosS.js} +5 -7
  10. package/dist/chunks/CustomAppBar.BOlNFosS.js.map +1 -0
  11. package/dist/chunks/{CustomAppBar.BfQvuTHz.js → CustomAppBar.DaXLAwPh.js} +4 -6
  12. package/dist/chunks/CustomAppBar.DaXLAwPh.js.map +1 -0
  13. package/dist/chunks/{LinkedInRegistrationInput.C-qzrR-S.js → LinkedInRegistrationInput.CmYmSJoq.js} +8 -5
  14. package/dist/chunks/LinkedInRegistrationInput.CmYmSJoq.js.map +1 -0
  15. package/dist/chunks/{LinkedInRegistrationInput.DKRMHYRh.js → LinkedInRegistrationInput.gnYgP1Hf.js} +11 -8
  16. package/dist/chunks/LinkedInRegistrationInput.gnYgP1Hf.js.map +1 -0
  17. package/dist/chunks/{Loading.UJl_3_cf.js → Loading.Bcm3xNJU.js} +2 -3
  18. package/dist/chunks/Loading.Bcm3xNJU.js.map +1 -0
  19. package/dist/chunks/{Loading.DYBk0Ktb.js → Loading.cGHE59CV.js} +2 -3
  20. package/dist/chunks/Loading.cGHE59CV.js.map +1 -0
  21. package/dist/chunks/{MainLayout.CWFkijrE.js → MainLayout.BzfaZs8j.js} +2 -2
  22. package/dist/chunks/{MainLayout.CWFkijrE.js.map → MainLayout.BzfaZs8j.js.map} +1 -1
  23. package/dist/chunks/{MainLayout.6Hq5XQ-L.js → MainLayout.V-ymVxxR.js} +3 -3
  24. package/dist/chunks/{MainLayout.6Hq5XQ-L.js.map → MainLayout.V-ymVxxR.js.map} +1 -1
  25. package/dist/chunks/{OrganizationAvatar.BEwRZ9tC.js → OrganizationAvatar.BXW4diDT.js} +2 -2
  26. package/dist/chunks/{OrganizationAvatar.BEwRZ9tC.js.map → OrganizationAvatar.BXW4diDT.js.map} +1 -1
  27. package/dist/chunks/{OrganizationAvatar.lWcXtbM6.js → OrganizationAvatar.Dgg5VSPI.js} +2 -2
  28. package/dist/chunks/{OrganizationAvatar.lWcXtbM6.js.map → OrganizationAvatar.Dgg5VSPI.js.map} +1 -1
  29. package/dist/chunks/{ServicesEdit.BUAbbXgV.js → ServicesEdit.BnnqC203.js} +3 -3
  30. package/dist/chunks/ServicesEdit.BnnqC203.js.map +1 -0
  31. package/dist/chunks/{ServicesEdit.CrtEcP_7.js → ServicesEdit.DDgjS5kU.js} +2 -2
  32. package/dist/chunks/ServicesEdit.DDgjS5kU.js.map +1 -0
  33. package/dist/chunks/{SetInvitationService.BUZqAilX.js → SetInvitationService.PxAGwk-I.js} +11 -11
  34. package/dist/chunks/SetInvitationService.PxAGwk-I.js.map +1 -0
  35. package/dist/chunks/{SetInvitationService.B0ezxTzf.js → SetInvitationService.ZT5lP003.js} +5 -5
  36. package/dist/chunks/SetInvitationService.ZT5lP003.js.map +1 -0
  37. package/dist/chunks/TermsAndConditionsPdf.Ba8-5Hcm.js.map +1 -1
  38. package/dist/chunks/TermsAndConditionsPdf.ewC7N9Vy.js.map +1 -1
  39. package/dist/chunks/{CreateOrganization.C2Kf44eJ.js → ValidateTextInput.D5kgjulG.js} +328 -14
  40. package/dist/chunks/ValidateTextInput.D5kgjulG.js.map +1 -0
  41. package/dist/chunks/{CreateOrganization.A11-a_8R.js → ValidateTextInput.DEBaVB1L.js} +356 -42
  42. package/dist/chunks/ValidateTextInput.DEBaVB1L.js.map +1 -0
  43. package/dist/chunks/{index.DZOVpocw.js → index.CYCWawJT.js} +6 -6
  44. package/dist/chunks/index.CYCWawJT.js.map +1 -0
  45. package/dist/chunks/{index.DmM8ShwP.js → index.Cmn4FlUL.js} +5 -5
  46. package/dist/chunks/index.Cmn4FlUL.js.map +1 -0
  47. package/dist/chunks/{index.DlFajFTS.js → index.DIizFYFZ.js} +3 -3
  48. package/dist/chunks/index.DIizFYFZ.js.map +1 -0
  49. package/dist/chunks/{index.ZAmuSdK1.js → index.DIur8MCO.js} +4 -4
  50. package/dist/chunks/index.DIur8MCO.js.map +1 -0
  51. package/dist/chunks/{index.Ch4ynES2.js → index.DMWKdmxs.js} +4 -5
  52. package/dist/chunks/index.DMWKdmxs.js.map +1 -0
  53. package/dist/chunks/{index.Dir1xwV4.js → index.DND10PiY.js} +5 -6
  54. package/dist/chunks/index.DND10PiY.js.map +1 -0
  55. package/dist/chunks/{index.Cpod3Il3.js → index.YjnxLFjk.js} +3 -3
  56. package/dist/chunks/index.YjnxLFjk.js.map +1 -0
  57. package/dist/chunks/index.iexmV4Mr.js.map +1 -1
  58. package/dist/chunks/remoteDataProvider.BCiFSYnk.js.map +1 -1
  59. package/dist/chunks/remoteDataProvider.gtTXA1-g.js.map +1 -1
  60. package/dist/chunks/useIsIssuingInspection.C76mY_wb.js.map +1 -1
  61. package/dist/chunks/useIsIssuingInspection.DavhBs5B.js.map +1 -1
  62. package/dist/components/AppBar.cjs +1 -1
  63. package/dist/components/AppBar.js +1 -1
  64. package/dist/components/common.cjs +3 -3
  65. package/dist/components/common.js +3 -3
  66. package/dist/components/invitations.cjs +1 -1
  67. package/dist/components/invitations.js +1 -1
  68. package/dist/components/organizations.cjs +12 -301
  69. package/dist/components/organizations.cjs.map +1 -1
  70. package/dist/components/organizations.js +10 -299
  71. package/dist/components/organizations.js.map +1 -1
  72. package/dist/components/services.cjs +1 -1
  73. package/dist/components/services.js +1 -1
  74. package/dist/components.cjs +2 -2
  75. package/dist/components.js +2 -2
  76. package/dist/index.cjs +3 -3
  77. package/dist/index.cjs.map +1 -1
  78. package/dist/index.js +3 -3
  79. package/dist/index.js.map +1 -1
  80. package/dist/layouts.cjs +1 -1
  81. package/dist/layouts.js +1 -1
  82. package/dist/pages/individuals.cjs +4 -4
  83. package/dist/pages/individuals.cjs.map +1 -1
  84. package/dist/pages/individuals.js +5 -5
  85. package/dist/pages/individuals.js.map +1 -1
  86. package/dist/pages/invitations.cjs +11 -12
  87. package/dist/pages/invitations.cjs.map +1 -1
  88. package/dist/pages/invitations.js +9 -10
  89. package/dist/pages/invitations.js.map +1 -1
  90. package/dist/pages/organizations.cjs +74 -75
  91. package/dist/pages/organizations.cjs.map +1 -1
  92. package/dist/pages/organizations.js +10 -11
  93. package/dist/pages/organizations.js.map +1 -1
  94. package/dist/pages/services.cjs +6 -6
  95. package/dist/pages/services.cjs.map +1 -1
  96. package/dist/pages/services.js +5 -5
  97. package/dist/pages/services.js.map +1 -1
  98. package/dist/pages.cjs +1 -1
  99. package/dist/pages.cjs.map +1 -1
  100. package/dist/pages.js +1 -1
  101. package/dist/pages.js.map +1 -1
  102. package/package.json +12 -9
  103. package/setup-tests.js +31 -0
  104. package/dist/chunks/ConsentProvider.DIG3atk-.js.map +0 -1
  105. package/dist/chunks/ConsentProvider.DTG51XMy.js.map +0 -1
  106. package/dist/chunks/CreateOrganization.A11-a_8R.js.map +0 -1
  107. package/dist/chunks/CreateOrganization.C2Kf44eJ.js.map +0 -1
  108. package/dist/chunks/CreateOrganization.utils.8cSBFSYF.js.map +0 -1
  109. package/dist/chunks/CreateOrganization.utils.C5C_r3Zp.js.map +0 -1
  110. package/dist/chunks/CustomAppBar.BfQvuTHz.js.map +0 -1
  111. package/dist/chunks/CustomAppBar.DuFQqld7.js.map +0 -1
  112. package/dist/chunks/LinkedInRegistrationInput.C-qzrR-S.js.map +0 -1
  113. package/dist/chunks/LinkedInRegistrationInput.DKRMHYRh.js.map +0 -1
  114. package/dist/chunks/Loading.DYBk0Ktb.js.map +0 -1
  115. package/dist/chunks/Loading.UJl_3_cf.js.map +0 -1
  116. package/dist/chunks/OrganisationSubmitButton.D32qynh9.js +0 -40
  117. package/dist/chunks/OrganisationSubmitButton.D32qynh9.js.map +0 -1
  118. package/dist/chunks/OrganisationSubmitButton.D3w1nG1X.js +0 -41
  119. package/dist/chunks/OrganisationSubmitButton.D3w1nG1X.js.map +0 -1
  120. package/dist/chunks/ServicesEdit.BUAbbXgV.js.map +0 -1
  121. package/dist/chunks/ServicesEdit.CrtEcP_7.js.map +0 -1
  122. package/dist/chunks/SetInvitationService.B0ezxTzf.js.map +0 -1
  123. package/dist/chunks/SetInvitationService.BUZqAilX.js.map +0 -1
  124. package/dist/chunks/index.Ch4ynES2.js.map +0 -1
  125. package/dist/chunks/index.Cpod3Il3.js.map +0 -1
  126. package/dist/chunks/index.DZOVpocw.js.map +0 -1
  127. package/dist/chunks/index.Dir1xwV4.js.map +0 -1
  128. package/dist/chunks/index.DlFajFTS.js.map +0 -1
  129. package/dist/chunks/index.DmM8ShwP.js.map +0 -1
  130. package/dist/chunks/index.ZAmuSdK1.js.map +0 -1
  131. package/jest.config.cjs +0 -29
@@ -1,20 +1,273 @@
1
- import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
- import { Box, Typography, Stack, Tooltip, Button } from "@mui/material";
3
- import { useDataProvider, Form, FormDataConsumer, TextInput, AutocompleteInput, required, maxLength } from "react-admin";
4
- import { useRef, useCallback } from "react";
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useState, useCallback, useRef } from "react";
3
+ import { useTheme, Box, Autocomplete, TextField, Typography, Button as Button$1, Stack, Tooltip, Grid } from "@mui/material";
4
+ import { Button, useDataProvider, Form, FormDataConsumer, TextInput, AutocompleteInput, required, maxLength, regex } from "react-admin";
5
+ import { useFormContext } from "react-hook-form";
6
+ import parse from "autosuggest-highlight/parse/index.js";
7
+ import match from "autosuggest-highlight/match/index.js";
8
+ import { Add } from "@mui/icons-material";
5
9
  import PropTypes from "prop-types";
10
+ import { d as dataResources } from "./remoteDataProvider.gtTXA1-g.js";
6
11
  import KeyboardArrowRightIcon from "@mui/icons-material/KeyboardArrowRight";
7
12
  import InfoIcon from "@mui/icons-material/Info";
8
- import { W as WEBSITE_HINT, S as SUPPORT_EMAIL_HINT, T as TECHNICAL_EMAIL_HINT, A as ADMINISTRATOR_DETAILS_HINT, c as SIGNATORY_DETAILS_HINT, d as SIGNATORY_EMAIL_HINT } from "./index.ZAmuSdK1.js";
9
- import { v as validateName, a as validateWebsite, b as validateWebsiteStrict, c as validateEmail } from "./CreateOrganization.utils.8cSBFSYF.js";
10
- import { O as OrganizationSubmitButton } from "./OrganisationSubmitButton.D3w1nG1X.js";
11
- import { C as CustomImageInput } from "./index.Cpod3Il3.js";
12
- import { L as LinkedInRegistrationInput, A as AuthorityRegistrationInput } from "./LinkedInRegistrationInput.C-qzrR-S.js";
13
- import { d as dataResources } from "./remoteDataProvider.gtTXA1-g.js";
14
- import Grid from "@mui/material/Grid2";
13
+ import { W as WEBSITE_HINT, e as SUPPORT_EMAIL_HINT, T as TECHNICAL_EMAIL_HINT, A as ADMINISTRATOR_DETAILS_HINT, S as SIGNATORY_DETAILS_HINT, d as SIGNATORY_EMAIL_HINT, s as secureUrlRegexp, E as ERRORS$1 } from "./index.DIur8MCO.js";
14
+ import { b as validateName, v as validateWebsite, a as validateWebsiteStrict, d as validateEmail } from "./CreateOrganizationUtils.Xq78HHkP.js";
15
+ import { C as CustomImageInput } from "./index.YjnxLFjk.js";
16
+ import { L as LinkedInRegistrationInput, A as AuthorityRegistrationInput } from "./LinkedInRegistrationInput.CmYmSJoq.js";
15
17
  import { useNavigate } from "react-router";
16
18
  import { F as FOOTER_HEIGHT } from "./theme.CYcVcsx-.js";
19
+ import { L as Loading } from "./Loading.Bcm3xNJU.js";
17
20
  import { u as useAuth } from "./AuthContext.CWlbjv4u.js";
21
+ const OrganizationSubmitButton = ({ title, isLoading, endIcon, styles: styles2, handleState, enabled }) => {
22
+ const form = useFormContext();
23
+ useEffect(() => {
24
+ if (handleState) {
25
+ handleState(form.formState.isValid);
26
+ }
27
+ }, [form.formState.isValid, handleState]);
28
+ return /* @__PURE__ */ jsx(
29
+ Button,
30
+ {
31
+ disabled: !form.formState.isValid && !enabled,
32
+ variant: "outlined",
33
+ color: "primary",
34
+ type: "submit",
35
+ size: "large",
36
+ label: isLoading ? "" : title,
37
+ endIcon,
38
+ sx: styles2,
39
+ children: isLoading && /* @__PURE__ */ jsx(Loading, { color: "error", sx: { pl: "10px" }, size: 26 })
40
+ }
41
+ );
42
+ };
43
+ OrganizationSubmitButton.propTypes = {
44
+ title: PropTypes.string.isRequired,
45
+ isLoading: PropTypes.bool,
46
+ endIcon: PropTypes.element,
47
+ // eslint-disable-next-line react/forbid-prop-types
48
+ styles: PropTypes.object,
49
+ handleState: PropTypes.func,
50
+ enabled: PropTypes.bool
51
+ };
52
+ const useDebounce = (value, delay) => {
53
+ const [debouncedValue, setDebouncedValue] = useState(value);
54
+ useEffect(() => {
55
+ const timer = setTimeout(() => setDebouncedValue(value), delay);
56
+ return () => {
57
+ clearTimeout(timer);
58
+ };
59
+ }, [value, delay]);
60
+ return debouncedValue;
61
+ };
62
+ const DID_START = "did:";
63
+ const ERRORS = {
64
+ DID_NOT_FOUND: "DID not found",
65
+ REQUIRED: "Required"
66
+ };
67
+ const AutoCompleteOrganizationName = ({ defaultValue }) => {
68
+ const form = useFormContext();
69
+ const [value, setValue] = useState(defaultValue);
70
+ const [text, setText] = useState(defaultValue?.name || "");
71
+ const [options, setOptions] = useState([]);
72
+ const [isOpen, setIsOpen] = useState(false);
73
+ const [loading, setLoading] = useState(false);
74
+ const [error, setError] = useState("");
75
+ const dataProvider = useDataProvider();
76
+ const debouncedText = useDebounce(text, 500);
77
+ const theme = useTheme();
78
+ const [stopSearch, setStopSearch] = useState(false);
79
+ form.register("org.name", { required: true });
80
+ useEffect(() => {
81
+ form.setValue("org", value, { shouldValidate: true });
82
+ }, [form, value]);
83
+ useEffect(() => {
84
+ const searchProfiles = async () => {
85
+ if (stopSearch) {
86
+ return;
87
+ }
88
+ setLoading(true);
89
+ try {
90
+ if (debouncedText.includes(DID_START)) {
91
+ const result2 = await dataProvider.getOne(dataResources.VERIFIED_PROFILE, {
92
+ id: debouncedText
93
+ });
94
+ setError("");
95
+ setText(result2.data.credentialSubject.name);
96
+ setValue(result2.data.credentialSubject);
97
+ setIsOpen(false);
98
+ return;
99
+ }
100
+ if (!debouncedText) {
101
+ setOptions([]);
102
+ return;
103
+ }
104
+ const result = await dataProvider.getList(dataResources.SEARCH_PROFILES, {
105
+ search: debouncedText
106
+ });
107
+ setOptions(result.data.slice(0, 5));
108
+ } catch {
109
+ setOptions([]);
110
+ if (debouncedText.includes(DID_START)) {
111
+ setError(ERRORS.DID_NOT_FOUND);
112
+ }
113
+ } finally {
114
+ setLoading(false);
115
+ }
116
+ };
117
+ if (debouncedText) {
118
+ searchProfiles();
119
+ }
120
+ }, [dataProvider, debouncedText, stopSearch]);
121
+ useEffect(() => {
122
+ if (!isOpen) {
123
+ setOptions([]);
124
+ }
125
+ }, [isOpen]);
126
+ const handleChangeText = useCallback((event) => {
127
+ setText(event?.target?.value);
128
+ setValue({ name: event?.target?.value });
129
+ }, []);
130
+ const handleBlur = useCallback(() => {
131
+ if (!text) {
132
+ setValue(null);
133
+ setError(ERRORS.REQUIRED);
134
+ }
135
+ if (text && !options.length) {
136
+ setValue({ name: text });
137
+ }
138
+ }, [options, text]);
139
+ const handleFocus = useCallback(() => {
140
+ setError("");
141
+ }, []);
142
+ const handleStopSearch = useCallback(() => {
143
+ setStopSearch(true);
144
+ setOptions([]);
145
+ setTimeout(() => {
146
+ setStopSearch(false);
147
+ }, 1e4);
148
+ }, []);
149
+ return /* @__PURE__ */ jsxs(Box, { marginBottom: 5, children: [
150
+ /* @__PURE__ */ jsx(
151
+ Autocomplete,
152
+ {
153
+ fullWidth: true,
154
+ options: text?.length && !loading ? options : [],
155
+ inputValue: text || "",
156
+ open: isOpen,
157
+ onOpen: () => setIsOpen(true),
158
+ onClose: () => setIsOpen(false),
159
+ onInputChange: handleChangeText,
160
+ getOptionLabel: (params) => params?.name?.toString(),
161
+ getOptionKey: (params) => params.id,
162
+ loading,
163
+ freeSolo: true,
164
+ disableClearable: true,
165
+ blurOnSelect: true,
166
+ value,
167
+ filterOptions: (x) => x,
168
+ onChange: (_event, newValue) => {
169
+ if (typeof newValue === "string") {
170
+ setText(text);
171
+ setValue({ name: text });
172
+ setOptions([]);
173
+ return;
174
+ }
175
+ setValue(newValue);
176
+ setText(newValue.name);
177
+ },
178
+ renderOption: (props, option, { inputValue }) => {
179
+ const matches = match(option.name, inputValue, { insideWords: true });
180
+ const parts = parse(option.name, matches);
181
+ const isLastItem = props["data-option-index"] === options.length - 1;
182
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
183
+ /* @__PURE__ */ jsx("li", { ...props, style: isLastItem ? styles.lastItem : styles.item, children: /* @__PURE__ */ jsxs("div", { children: [
184
+ /* @__PURE__ */ jsx("div", { children: parts.map((part, index) => /* @__PURE__ */ jsx(
185
+ Typography,
186
+ {
187
+ style: { fontWeight: part.highlight ? 700 : 400 },
188
+ variant: "pl",
189
+ children: part.text
190
+ },
191
+ index
192
+ )) }),
193
+ /* @__PURE__ */ jsx(Typography, { variant: "ps", color: theme.palette.secondary.light, children: option.id })
194
+ ] }) }),
195
+ isLastItem ? /* @__PURE__ */ jsxs(
196
+ Button$1,
197
+ {
198
+ variant: "outlined",
199
+ color: "secondary",
200
+ onClick: handleStopSearch,
201
+ sx: styles.inviteButton,
202
+ children: [
203
+ /* @__PURE__ */ jsx(Add, { sx: styles.plus }),
204
+ "Invite New Organization"
205
+ ]
206
+ }
207
+ ) : null
208
+ ] });
209
+ },
210
+ renderInput: (params) => /* @__PURE__ */ jsxs(Box, { style: styles.inputBox, children: [
211
+ /* @__PURE__ */ jsx(
212
+ TextField,
213
+ {
214
+ label: "Legal Name",
215
+ ...params,
216
+ value: params.inputProps.value.name,
217
+ onBlur: handleBlur,
218
+ onFocus: handleFocus,
219
+ error
220
+ }
221
+ ),
222
+ value?.id ? /* @__PURE__ */ jsx(
223
+ Typography,
224
+ {
225
+ style: styles.did,
226
+ variant: "ps",
227
+ color: theme.palette.secondary.light,
228
+ sx: styles.inviteButton,
229
+ children: value.id
230
+ }
231
+ ) : null
232
+ ] })
233
+ }
234
+ ),
235
+ error ? /* @__PURE__ */ jsx(Typography, { variant: "ps", color: theme.palette.error.light, children: error }) : null
236
+ ] });
237
+ };
238
+ AutoCompleteOrganizationName.propTypes = {
239
+ // eslint-disable-next-line react/forbid-prop-types
240
+ defaultValue: PropTypes.object
241
+ };
242
+ const styles = {
243
+ inputBox: { position: "relative" },
244
+ item: {
245
+ padding: "8px 12px",
246
+ borderBottomWidth: "1px",
247
+ borderBottomStyle: "solid",
248
+ borderBottomColor: "#D1D4D8"
249
+ },
250
+ lastItem: {
251
+ padding: "8px 12px"
252
+ },
253
+ did: {
254
+ position: "absolute",
255
+ left: "0px",
256
+ bottom: "-12px"
257
+ },
258
+ inviteButton: {
259
+ color: (theme) => theme.customColors.grey2,
260
+ marginBottom: "16px",
261
+ marginLeft: "12px",
262
+ marginTop: "16px",
263
+ fontSize: "12px"
264
+ },
265
+ plus: {
266
+ width: "16px",
267
+ height: "16px",
268
+ marginRight: "6px"
269
+ }
270
+ };
18
271
  const CreateInvitationForOrganization = ({ onSubmit, countryCodes, onCancel, defaultValues }) => {
19
272
  const dataProvider = useDataProvider();
20
273
  const timeout = useRef(null);
@@ -124,7 +377,7 @@ const CreateInvitationForOrganization = ({ onSubmit, countryCodes, onCancel, def
124
377
  /* @__PURE__ */ jsx(AuthorityRegistrationInput, { orientation: "vertical", isRequired: false }),
125
378
  /* @__PURE__ */ jsxs(Box, { display: "flex", justifyContent: "center", pt: 4, children: [
126
379
  /* @__PURE__ */ jsx(
127
- Button,
380
+ Button$1,
128
381
  {
129
382
  variant: "outlined",
130
383
  color: "secondary",
@@ -378,7 +631,7 @@ const CreateOrganization = ({
378
631
  children,
379
632
  /* @__PURE__ */ jsxs(Box, { display: "flex", justifyContent: "center", pt: 4, children: [
380
633
  /* @__PURE__ */ jsx(
381
- Button,
634
+ Button$1,
382
635
  {
383
636
  variant: "outlined",
384
637
  color: "secondary",
@@ -437,8 +690,69 @@ const sxStyles = {
437
690
  mr: 2
438
691
  }
439
692
  };
693
+ const ValidateTextInput = ({ source, resource, ...props }) => {
694
+ const { debounce: debounceTime = 250, ...rest } = props;
695
+ const errorobj = { message: " " };
696
+ const dataProvider = useDataProvider();
697
+ const [isError, setIsError] = useState(false);
698
+ const timeout = useRef(null);
699
+ const validateSecureUrl = [
700
+ regex(secureUrlRegexp, (res) => {
701
+ setIsError(false);
702
+ return res ? "Secure webhook should be a HTTPS URL" : void 0;
703
+ }),
704
+ maxLength(1024)
705
+ ];
706
+ const debouncedValidation = async (value) => {
707
+ clearTimeout(timeout.current);
708
+ if (!value) {
709
+ setIsError(false);
710
+ return void 0;
711
+ }
712
+ return new Promise((resolve) => {
713
+ timeout.current = setTimeout(async () => {
714
+ const { data } = await dataProvider.create(resource, { data: { secureWebhookUrl: value } });
715
+ if (data && data.status === 400) {
716
+ setIsError(true);
717
+ resolve(errorobj);
718
+ } else {
719
+ resolve(void 0);
720
+ setIsError(false);
721
+ }
722
+ }, debounceTime);
723
+ });
724
+ };
725
+ const validate = [...validateSecureUrl, debouncedValidation];
726
+ return /* @__PURE__ */ jsxs(Box, { sx: sx.constainer, children: [
727
+ /* @__PURE__ */ jsx(TextInput, { source, validate, ...rest }),
728
+ isError && /* @__PURE__ */ jsx(Typography, { variant: "caption", component: "div", sx: sx.errorMessage, children: ERRORS$1.secureWebHook })
729
+ ] });
730
+ };
731
+ const sx = {
732
+ constainer: {
733
+ width: "100%",
734
+ position: "relative"
735
+ },
736
+ errorMessage: {
737
+ color: "primary.main",
738
+ mt: 0,
739
+ mb: 0.5,
740
+ ml: 1.5
741
+ }
742
+ };
743
+ ValidateTextInput.propTypes = {
744
+ source: PropTypes.string,
745
+ resource: PropTypes.string,
746
+ errortext: PropTypes.string,
747
+ // eslint-disable-next-line react/forbid-prop-types
748
+ validate: PropTypes.array,
749
+ debounce: PropTypes.number
750
+ };
440
751
  export {
752
+ AutoCompleteOrganizationName as A,
441
753
  CreateInvitationForOrganization as C,
754
+ OrganizationSubmitButton as O,
755
+ ValidateTextInput as V,
442
756
  CreateOrganization as a
443
757
  };
444
- //# sourceMappingURL=CreateOrganization.C2Kf44eJ.js.map
758
+ //# sourceMappingURL=ValidateTextInput.D5kgjulG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateTextInput.D5kgjulG.js","sources":["../../src/components/organizations/OrganizationSubmitButton.jsx","../../src/utils/hooks/useDebounceValue.js","../../src/components/organizations/AutoCompleteOrganizationName.jsx","../../src/components/organizations/CreateInvitationForOrganization.jsx","../../src/components/organizations/CreateOrganization.jsx","../../src/components/organizations/ValidateTextInput.jsx"],"sourcesContent":["/**\n * Copyright 2023 Velocity Team\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from 'react-admin';\nimport { useEffect } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport PropTypes from 'prop-types';\n\nimport Loading from '../Loading.jsx';\n\nconst OrganizationSubmitButton = ({ title, isLoading, endIcon, styles, handleState, enabled }) => {\n const form = useFormContext();\n\n useEffect(() => {\n if (handleState) {\n handleState(form.formState.isValid);\n }\n }, [form.formState.isValid, handleState]);\n\n return (\n <Button\n disabled={!form.formState.isValid && !enabled}\n variant=\"outlined\"\n color=\"primary\"\n type=\"submit\"\n size=\"large\"\n label={isLoading ? '' : title}\n endIcon={endIcon}\n sx={styles}\n >\n {isLoading && <Loading color=\"error\" sx={{ pl: '10px' }} size={26} />}\n </Button>\n );\n};\n\n// eslint-disable-next-line better-mutation/no-mutation\nOrganizationSubmitButton.propTypes = {\n title: PropTypes.string.isRequired,\n isLoading: PropTypes.bool,\n endIcon: PropTypes.element,\n // eslint-disable-next-line react/forbid-prop-types\n styles: PropTypes.object,\n handleState: PropTypes.func,\n enabled: PropTypes.bool,\n};\n\nexport default OrganizationSubmitButton;\n","import { useEffect, useState } from 'react';\n\nconst useDebounce = (value, delay) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n};\n\nexport default useDebounce;\n","import { useCallback, useState, useEffect } from 'react';\nimport { Box, Autocomplete, Typography, useTheme, TextField, Button } from '@mui/material';\nimport { useDataProvider } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\n// eslint-disable-next-line import/extensions\nimport parse from 'autosuggest-highlight/parse/index.js';\n// eslint-disable-next-line import/extensions\nimport match from 'autosuggest-highlight/match/index.js';\nimport { Add as AddIcon } from '@mui/icons-material';\nimport PropTypes from 'prop-types';\nimport { dataResources } from '@/utils/remoteDataProvider.js';\nimport useDebounce from '@/utils/hooks/useDebounceValue.js';\n\nconst DID_START = 'did:';\nconst ERRORS = {\n DID_NOT_FOUND: 'DID not found',\n REQUIRED: 'Required',\n};\n\nconst AutoCompleteOrganizationName = ({ defaultValue }) => {\n const form = useFormContext();\n const [value, setValue] = useState(defaultValue);\n const [text, setText] = useState(defaultValue?.name || '');\n const [options, setOptions] = useState([]);\n const [isOpen, setIsOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const dataProvider = useDataProvider();\n const debouncedText = useDebounce(text, 500);\n const theme = useTheme();\n const [stopSearch, setStopSearch] = useState(false);\n\n form.register('org.name', { required: true });\n\n useEffect(() => {\n form.setValue('org', value, { shouldValidate: true });\n }, [form, value]);\n\n useEffect(() => {\n const searchProfiles = async () => {\n if (stopSearch) {\n return;\n }\n\n setLoading(true);\n try {\n if (debouncedText.includes(DID_START)) {\n const result = await dataProvider.getOne(dataResources.VERIFIED_PROFILE, {\n id: debouncedText,\n });\n setError('');\n setText(result.data.credentialSubject.name);\n setValue(result.data.credentialSubject);\n setIsOpen(false);\n return;\n }\n\n if (!debouncedText) {\n setOptions([]);\n\n return;\n }\n\n const result = await dataProvider.getList(dataResources.SEARCH_PROFILES, {\n search: debouncedText,\n });\n\n setOptions(result.data.slice(0, 5));\n } catch {\n setOptions([]);\n\n if (debouncedText.includes(DID_START)) {\n setError(ERRORS.DID_NOT_FOUND);\n }\n } finally {\n setLoading(false);\n }\n };\n\n if (debouncedText) {\n searchProfiles();\n }\n }, [dataProvider, debouncedText, stopSearch]);\n\n useEffect(() => {\n if (!isOpen) {\n setOptions([]);\n }\n }, [isOpen]);\n\n const handleChangeText = useCallback((event) => {\n setText(event?.target?.value);\n setValue({ name: event?.target?.value });\n }, []);\n\n const handleBlur = useCallback(() => {\n if (!text) {\n setValue(null);\n setError(ERRORS.REQUIRED);\n }\n\n if (text && !options.length) {\n setValue({ name: text });\n }\n }, [options, text]);\n\n const handleFocus = useCallback(() => {\n setError('');\n }, []);\n\n const handleStopSearch = useCallback(() => {\n setStopSearch(true);\n setOptions([]);\n\n setTimeout(() => {\n setStopSearch(false);\n }, 10000);\n }, []);\n\n return (\n <Box marginBottom={5}>\n <Autocomplete\n fullWidth\n options={text?.length && !loading ? options : []}\n inputValue={text || ''}\n open={isOpen}\n onOpen={() => setIsOpen(true)}\n onClose={() => setIsOpen(false)}\n onInputChange={handleChangeText}\n getOptionLabel={(params) => params?.name?.toString()}\n getOptionKey={(params) => params.id}\n loading={loading}\n freeSolo\n disableClearable\n blurOnSelect\n value={value}\n filterOptions={(x) => x}\n onChange={(_event, newValue) => {\n if (typeof newValue === 'string') {\n setText(text);\n setValue({ name: text });\n setOptions([]);\n\n return;\n }\n\n setValue(newValue);\n setText(newValue.name);\n }}\n renderOption={(props, option, { inputValue }) => {\n const matches = match(option.name, inputValue, { insideWords: true });\n const parts = parse(option.name, matches);\n // eslint-disable-next-line react/prop-types\n const isLastItem = props['data-option-index'] === options.length - 1;\n\n return (\n <>\n <li {...props} style={isLastItem ? styles.lastItem : styles.item}>\n <div>\n <div>\n {parts.map((part, index) => (\n <Typography\n /* eslint-disable-next-line react/no-array-index-key */\n key={index}\n style={{ fontWeight: part.highlight ? 700 : 400 }}\n variant=\"pl\"\n >\n {part.text}\n </Typography>\n ))}\n </div>\n <Typography variant=\"ps\" color={theme.palette.secondary.light}>\n {option.id}\n </Typography>\n </div>\n </li>\n\n {isLastItem ? (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n onClick={handleStopSearch}\n sx={styles.inviteButton}\n >\n <AddIcon sx={styles.plus} />\n Invite New Organization\n </Button>\n ) : null}\n </>\n );\n }}\n renderInput={(params) => (\n <Box style={styles.inputBox}>\n <TextField\n label=\"Legal Name\"\n {...params}\n value={params.inputProps.value.name}\n onBlur={handleBlur}\n onFocus={handleFocus}\n error={error}\n />\n {value?.id ? (\n <Typography\n style={styles.did}\n variant=\"ps\"\n color={theme.palette.secondary.light}\n sx={styles.inviteButton}\n >\n {value.id}\n </Typography>\n ) : null}\n </Box>\n )}\n />\n {error ? (\n <Typography variant=\"ps\" color={theme.palette.error.light}>\n {error}\n </Typography>\n ) : null}\n </Box>\n );\n};\n\n// eslint-disable-next-line better-mutation/no-mutation\nAutoCompleteOrganizationName.propTypes = {\n // eslint-disable-next-line react/forbid-prop-types\n defaultValue: PropTypes.object,\n};\n\nconst styles = {\n inputBox: { position: 'relative' },\n item: {\n padding: '8px 12px',\n borderBottomWidth: '1px',\n borderBottomStyle: 'solid',\n borderBottomColor: '#D1D4D8',\n },\n lastItem: {\n padding: '8px 12px',\n },\n did: {\n position: 'absolute',\n left: '0px',\n bottom: '-12px',\n },\n inviteButton: {\n color: (theme) => theme.customColors.grey2,\n marginBottom: '16px',\n marginLeft: '12px',\n marginTop: '16px',\n fontSize: '12px',\n },\n plus: {\n width: '16px',\n height: '16px',\n marginRight: '6px',\n },\n};\n\nexport default AutoCompleteOrganizationName;\n","/**\n * Copyright 2023 Velocity Team\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Box, Button, Stack, Tooltip, Typography } from '@mui/material';\nimport { AutocompleteInput, Form, TextInput, FormDataConsumer, useDataProvider } from 'react-admin';\nimport { useRef, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\nimport InfoIcon from '@mui/icons-material/Info';\n\nimport { WEBSITE_HINT, SUPPORT_EMAIL_HINT, TECHNICAL_EMAIL_HINT } from '../../utils/index.jsx';\nimport {\n validateEmail,\n validateWebsite,\n validateName,\n validateWebsiteStrict,\n} from './CreateOrganizationUtils.js';\nimport OrganizationSubmitButton from './OrganizationSubmitButton.jsx';\nimport CustomImageInput from '../common/CustomImageInput/index.jsx';\nimport AuthorityRegistrationNumbersInput from '../../pages/organizations/components/AuthorityRegistrationInput.jsx';\nimport { LinkedInRegistrationInput } from '../../pages/organizations/components/LinkedInRegistrationInput.jsx';\nimport { dataResources } from '../../utils/remoteDataProvider.js';\n\nconst CreateInvitationForOrganization = ({ onSubmit, countryCodes, onCancel, defaultValues }) => {\n const dataProvider = useDataProvider();\n\n const timeout = useRef(null);\n\n const debouncedValidation = async (value) => {\n clearTimeout(timeout.current);\n\n if (!value) {\n return undefined;\n }\n\n return new Promise((resolve) => {\n // eslint-disable-next-line better-mutation/no-mutation\n timeout.current = setTimeout(async () => {\n const inputNormalized = value.replace(/\\s\\s+/g, ' ').trim().toLowerCase();\n const { data: searchedProfiles } = await dataProvider.getList(\n dataResources.SEARCH_PROFILES,\n {\n search: inputNormalized,\n },\n );\n if (searchedProfiles?.some((org) => org.name.toLowerCase() === inputNormalized)) {\n resolve({ message: 'Organization already exists' });\n } else {\n resolve(undefined);\n }\n }, 500);\n });\n };\n\n const orgNamevalidation = [...validateName, debouncedValidation];\n\n const handleSubmit = useCallback(\n (data) => {\n onSubmit(data);\n },\n [onSubmit],\n );\n\n return (\n <Box>\n <Typography variant=\"h1\" mb={2}>\n Invite Organization\n </Typography>\n <Typography mb={3}>\n To invite an organization to join Velocity Network™, fill in that organization&apos;s\n information below.\n </Typography>\n\n <Form onSubmit={handleSubmit} noValidate mode=\"onChange\" defaultValues={defaultValues}>\n <FormDataConsumer>\n {({ formData }) => (\n <>\n <TextInput\n fullWidth\n label=\"Legal Name\"\n source=\"name\"\n validate={orgNamevalidation}\n pb={1}\n />\n {/* Uncomment when the flow is ready */}\n {/* <AutoCompleteOrganizationName defaultValue={defaultValues?.org} /> */}\n <Stack flexDirection=\"row\" gap={1.75} mb={3.5} mt={1}>\n <CustomImageInput\n label={false}\n labelText=\"\"\n editMode\n orientation=\"vertical\"\n style={{ flexDirection: 'row', minHeight: '200px' }}\n addTo=\"\"\n isRequired={false}\n />\n </Stack>\n <TextInput fullWidth multiline label=\"Short Description\" source=\"description\" />\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput fullWidth label=\"Website\" source=\"website\" validate={validateWebsite} />\n <Box mt={2}>\n <Tooltip title={WEBSITE_HINT}>\n <InfoIcon color=\"info\" fontSize=\"small\" cursor=\"pointer\" />\n </Tooltip>\n </Box>\n </Stack>\n <TextInput fullWidth label=\"Address\" source=\"physicalAddress.line1\" />\n <AutocompleteInput\n label=\"Country\"\n source=\"location.countryCode\"\n choices={countryCodes}\n />\n <TextInput\n fullWidth\n label=\"LinkedIn Page\"\n source=\"linkedInProfile\"\n validate={validateWebsiteStrict}\n />\n <LinkedInRegistrationInput formData={formData} source=\"registrationNumbers\" />\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"Support Email\"\n source=\"contactEmail\"\n validate={validateEmail}\n />\n <Box mt={2}>\n <Tooltip title={SUPPORT_EMAIL_HINT}>\n <InfoIcon color=\"info\" fontSize=\"small\" cursor=\"pointer\" />\n </Tooltip>\n </Box>\n </Stack>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"Technical Contact Email\"\n source=\"technicalEmail\"\n validate={validateEmail}\n />\n <Box mt={2}>\n <Tooltip title={TECHNICAL_EMAIL_HINT}>\n <InfoIcon color=\"info\" fontSize=\"small\" cursor=\"pointer\" />\n </Tooltip>\n </Box>\n </Stack>\n <AuthorityRegistrationNumbersInput orientation=\"vertical\" isRequired={false} />\n <Box display=\"flex\" justifyContent=\"center\" pt={4}>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n sx={[sxStyles.button, sxStyles.cancelButton]}\n onClick={onCancel}\n >\n Cancel\n </Button>\n <OrganizationSubmitButton\n styles={sxStyles.button}\n title=\"Next\"\n endIcon={<KeyboardArrowRightIcon />}\n />\n </Box>\n </>\n )}\n </FormDataConsumer>\n </Form>\n </Box>\n );\n};\n\n// eslint-disable-next-line better-mutation/no-mutation\nCreateInvitationForOrganization.propTypes = {\n onSubmit: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n // eslint-disable-next-line react/forbid-prop-types\n countryCodes: PropTypes.array.isRequired,\n // eslint-disable-next-line react/forbid-prop-types\n defaultValues: PropTypes.object,\n};\n\nexport default CreateInvitationForOrganization;\n\nconst sxStyles = {\n section: {\n display: 'block',\n pt: 1,\n pb: '12px',\n fontWeight: 500,\n },\n button: { px: 4, py: 1, fontSize: '16px', width: '160px' },\n cancelButton: { marginRight: '20px' },\n fullWidth: { width: '100%' },\n errorMessage: {\n fontSize: '0.75rem',\n color: 'primary.main',\n marginLeft: '1.25em',\n height: '1.75em',\n },\n};\n","/**\n * Copyright 2023 Velocity Team\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Box, Stack, Tooltip, Typography, Button, Grid } from '@mui/material';\nimport {\n AutocompleteInput,\n Form,\n maxLength,\n required,\n TextInput,\n FormDataConsumer,\n} from 'react-admin';\nimport { useCallback } from 'react';\nimport InfoIcon from '@mui/icons-material/Info';\nimport PropTypes from 'prop-types';\nimport { useNavigate } from 'react-router';\nimport { FOOTER_HEIGHT } from '../../theme/theme.js';\nimport {\n validateEmail,\n validateName,\n validateWebsite,\n validateWebsiteStrict,\n} from './CreateOrganizationUtils.js';\nimport OrganizationSubmitButton from './OrganizationSubmitButton.jsx';\nimport CustomImageInput from '../common/CustomImageInput/index.jsx';\nimport {\n ADMINISTRATOR_DETAILS_HINT,\n SIGNATORY_DETAILS_HINT,\n SUPPORT_EMAIL_HINT,\n TECHNICAL_EMAIL_HINT,\n WEBSITE_HINT,\n SIGNATORY_EMAIL_HINT,\n} from '../../utils/index.jsx';\nimport AuthorityRegistrationNumbersInput from '../../pages/organizations/components/AuthorityRegistrationInput.jsx';\nimport { LinkedInRegistrationInput } from '../../pages/organizations/components/LinkedInRegistrationInput.jsx';\nimport { useAuth } from '../../utils/auth/AuthContext.js';\n\nconst CreateOrganization = ({\n children,\n title,\n subTitle,\n buttonTitle,\n onSubmit,\n defaultValues,\n countryCodes,\n isLoading,\n hasOrganisations,\n userData,\n}) => {\n const { logout } = useAuth();\n const navigate = useNavigate();\n\n const handleSubmit = useCallback(\n (data) => {\n onSubmit(data);\n },\n [onSubmit],\n );\n\n return (\n <Box sx={sxStyles.root}>\n <Stack sx={sxStyles.content}>\n <Typography variant=\"h1\" mb={2}>\n {title}\n </Typography>\n <Typography variant=\"pl\" mb={6.5} textAlign=\"center\">\n {subTitle}\n </Typography>\n <Form defaultValues={defaultValues} onSubmit={handleSubmit} noValidate mode=\"all\">\n <FormDataConsumer>\n {({ formData }) => (\n <>\n <Grid container spacing={4} rowSpacing={1}>\n <Grid size={{ xs: 6 }}>\n <Stack container flex={1} flexDirection=\"column\">\n <Grid size={{ xs: 12 }}>\n <TextInput\n fullWidth\n label=\"Legal Name\"\n source=\"name\"\n validate={validateName}\n />\n </Grid>\n <Grid size={{ xs: 12 }}>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"Website\"\n source=\"website\"\n validate={[required(), ...validateWebsiteStrict]}\n />\n <Box mt={2}>\n <Tooltip title={WEBSITE_HINT}>\n <InfoIcon color=\"info\" fontSize=\"small\" cursor=\"pointer\" />\n </Tooltip>\n </Box>\n </Stack>\n </Grid>\n <Grid size={{ xs: 12 }}>\n <TextInput\n fullWidth\n label=\"Address\"\n source=\"physicalAddress.line1\"\n validate={[required(), maxLength(1024)]}\n />\n </Grid>\n <Grid size={{ xs: 12 }}>\n <AutocompleteInput\n label=\"Country\"\n source=\"location.countryCode\"\n choices={countryCodes}\n validate={required()}\n />\n </Grid>\n </Stack>\n </Grid>\n\n <Grid size={{ xs: 6 }} pb={1}>\n <CustomImageInput\n label={false}\n editMode={!defaultValues.logo}\n source=\"logo\"\n imgSrc={defaultValues?.logo}\n />\n </Grid>\n <Grid size={{ xs: 6 }}>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"LinkedIn Page\"\n source=\"linkedInProfile\"\n validate={[...validateWebsite, required()]}\n />\n </Stack>\n </Grid>\n <Grid size={{ xs: 6 }}>\n <LinkedInRegistrationInput formData={{ ...formData, ...defaultValues }} />\n </Grid>\n\n <Grid size={{ xs: 6 }}>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"Support Email\"\n source=\"contactEmail\"\n validate={[required(), ...validateEmail]}\n />\n <Box mt={2}>\n <Tooltip title={SUPPORT_EMAIL_HINT}>\n <InfoIcon color=\"info\" fontSize=\"small\" cursor=\"pointer\" />\n </Tooltip>\n </Box>\n </Stack>\n </Grid>\n <Grid size={{ xs: 6 }}>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"Technical Contact Email\"\n source=\"technicalEmail\"\n validate={[required(), ...validateEmail]}\n />\n <Box mt={2}>\n <Tooltip title={TECHNICAL_EMAIL_HINT}>\n <InfoIcon color=\"info\" fontSize=\"small\" cursor=\"pointer\" />\n </Tooltip>\n </Box>\n </Stack>\n </Grid>\n <AuthorityRegistrationNumbersInput\n source=\"registrationNumbers\"\n orientation=\"horizontal\"\n />\n <Grid size={{ xs: 12 }}>\n <TextInput\n fullWidth\n multiline\n label=\"Short Description\"\n placeholder=\"Description (a boilerplate for other Network participants to read about the organization)\"\n source=\"description\"\n validate={required()}\n />\n </Grid>\n <Grid size={{ xs: 6 }}>\n <Stack flexDirection=\"row\" gap={1.75}>\n <Typography variant=\"h4\" my={2}>\n Administrator’s Details\n </Typography>\n <Box mt={2.25}>\n <Tooltip title={ADMINISTRATOR_DETAILS_HINT}>\n <InfoIcon color=\"info\" fontSize=\"small\" cursor=\"pointer\" />\n </Tooltip>\n </Box>\n </Stack>\n </Grid>\n <Grid size={{ xs: 6 }}>\n <Stack flexDirection=\"row\" gap={1.75}>\n <Typography variant=\"h4\" my={2}>\n Signatory Authority’s Details\n </Typography>\n <Box mt={2.25}>\n <Tooltip title={SIGNATORY_DETAILS_HINT}>\n <InfoIcon color=\"info\" fontSize=\"small\" cursor=\"pointer\" />\n </Tooltip>\n </Box>\n </Stack>\n </Grid>\n <Grid size={{ xs: 6 }}>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"First name\"\n source=\"adminGivenName\"\n validate={[maxLength(1024), required()]}\n defaultValue={userData ? userData.givenName : ''}\n />\n </Stack>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"Last name\"\n source=\"adminFamilyName\"\n validate={[maxLength(1024), required()]}\n defaultValue={userData ? userData.familyName : ''}\n />\n </Stack>\n </Grid>\n <Grid size={{ xs: 6 }}>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"First name\"\n source=\"signatoryGivenName\"\n validate={[maxLength(1024), required()]}\n />\n </Stack>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"Last name\"\n source=\"signatoryFamilyName\"\n validate={[maxLength(1024), required()]}\n />\n </Stack>\n </Grid>\n <Grid size={{ xs: 6 }}>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"Job Title\"\n source=\"adminTitle\"\n validate={[maxLength(1024), required()]}\n />\n </Stack>\n </Grid>\n <Grid size={{ xs: 6 }}>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"Job Title\"\n source=\"signatoryTitle\"\n validate={[maxLength(1024), required()]}\n />\n </Stack>\n </Grid>\n <Grid size={{ xs: 6 }}>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"Email\"\n source=\"adminEmail\"\n validate={[...validateEmail, required()]}\n defaultValue={userData ? userData.email : ''}\n />\n </Stack>\n </Grid>\n <Grid size={{ xs: 6 }}>\n <Stack flexDirection=\"row\" gap={1.75}>\n <TextInput\n fullWidth\n label=\"Email\"\n source=\"signatoryEmail\"\n validate={[...validateEmail, required()]}\n />\n <Box mt={2}>\n <Tooltip title={SIGNATORY_EMAIL_HINT}>\n <InfoIcon color=\"info\" fontSize=\"small\" cursor=\"pointer\" />\n </Tooltip>\n </Box>\n </Stack>\n </Grid>\n </Grid>\n {children}\n <Box display=\"flex\" justifyContent=\"center\" pt={4}>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"large\"\n sx={sxStyles.cancelButton}\n onClick={() => (hasOrganisations ? navigate('/') : logout())}\n >\n Cancel\n </Button>\n <OrganizationSubmitButton\n title={buttonTitle}\n isLoading={isLoading}\n styles={sxStyles.saveButton}\n enabled\n />\n </Box>\n </>\n )}\n </FormDataConsumer>\n </Form>\n </Stack>\n </Box>\n );\n};\n\n// eslint-disable-next-line better-mutation/no-mutation\nCreateOrganization.propTypes = {\n title: PropTypes.string.isRequired,\n subTitle: PropTypes.string.isRequired,\n buttonTitle: PropTypes.string.isRequired,\n children: PropTypes.node,\n onSubmit: PropTypes.func.isRequired,\n // eslint-disable-next-line react/forbid-prop-types\n defaultValues: PropTypes.object,\n // eslint-disable-next-line react/forbid-prop-types\n countryCodes: PropTypes.array,\n isLoading: PropTypes.bool.isRequired,\n hasOrganisations: PropTypes.bool,\n // eslint-disable-next-line react/forbid-prop-types\n userData: PropTypes.object,\n};\n\nexport default CreateOrganization;\n\nconst sxStyles = {\n root: {\n pt: 7.5,\n pl: 1,\n pb: `calc(35px + ${FOOTER_HEIGHT})`,\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'center',\n },\n content: {\n maxWidth: 886,\n alignItems: 'center',\n },\n saveButton: {\n minWidth: 160,\n },\n cancelButton: {\n minWidth: 160,\n mr: 2,\n },\n errorMessage: {\n fontSize: '0.75rem',\n color: 'primary.main',\n marginLeft: '1.25em',\n height: '1.75em',\n },\n fullWidth: {\n width: '100%',\n },\n};\n","/**\n * Copyright 2023 Velocity Team\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useDataProvider, TextInput, regex, maxLength } from 'react-admin';\nimport PropTypes from 'prop-types';\nimport { useRef, useState } from 'react';\nimport { Typography, Box } from '@mui/material';\nimport { secureUrlRegexp, ERRORS } from '../../utils/index.jsx';\n\nconst ValidateTextInput = ({ source, resource, ...props }) => {\n const { debounce: debounceTime = 250, ...rest } = props;\n const errorobj = { message: ' ' };\n const dataProvider = useDataProvider();\n const [isError, setIsError] = useState(false);\n\n const timeout = useRef(null);\n\n const validateSecureUrl = [\n regex(secureUrlRegexp, (res) => {\n setIsError(false);\n return res ? 'Secure webhook should be a HTTPS URL' : undefined;\n }),\n maxLength(1024),\n ];\n\n const debouncedValidation = async (value) => {\n clearTimeout(timeout.current);\n\n if (!value) {\n setIsError(false);\n return undefined;\n }\n\n return new Promise((resolve) => {\n // eslint-disable-next-line better-mutation/no-mutation\n timeout.current = setTimeout(async () => {\n const { data } = await dataProvider.create(resource, { data: { secureWebhookUrl: value } });\n if (data && data.status === 400) {\n setIsError(true);\n resolve(errorobj);\n } else {\n resolve(undefined);\n setIsError(false);\n }\n }, debounceTime);\n });\n };\n\n const validate = [...validateSecureUrl, debouncedValidation];\n\n return (\n <Box sx={sx.constainer}>\n <TextInput source={source} validate={validate} {...rest} />\n {isError && (\n <Typography variant=\"caption\" component=\"div\" sx={sx.errorMessage}>\n {ERRORS.secureWebHook}\n </Typography>\n )}\n </Box>\n );\n};\n\nexport default ValidateTextInput;\n\nconst sx = {\n constainer: {\n width: '100%',\n position: 'relative',\n },\n errorMessage: {\n color: 'primary.main',\n mt: 0,\n mb: 0.5,\n ml: 1.5,\n },\n};\n\n// eslint-disable-next-line better-mutation/no-mutation\nValidateTextInput.propTypes = {\n source: PropTypes.string,\n resource: PropTypes.string,\n errortext: PropTypes.string,\n // eslint-disable-next-line react/forbid-prop-types\n validate: PropTypes.array,\n debounce: PropTypes.number,\n};\n"],"names":["styles","result","Button","AddIcon","AuthorityRegistrationNumbersInput","sxStyles","ERRORS"],"mappings":"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"}