@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.
- package/dist/chunks/{ConsentProvider.DIG3atk-.js → ConsentProvider.6M2ucqXH.js} +3 -3
- package/dist/chunks/ConsentProvider.6M2ucqXH.js.map +1 -0
- package/dist/chunks/{ConsentProvider.DTG51XMy.js → ConsentProvider.Bbc0preP.js} +2 -2
- package/dist/chunks/ConsentProvider.Bbc0preP.js.map +1 -0
- package/dist/chunks/{CreateOrganization.utils.C5C_r3Zp.js → CreateOrganizationUtils.C5C_r3Zp.js} +1 -1
- package/dist/chunks/CreateOrganizationUtils.C5C_r3Zp.js.map +1 -0
- package/dist/chunks/{CreateOrganization.utils.8cSBFSYF.js → CreateOrganizationUtils.Xq78HHkP.js} +7 -7
- package/dist/chunks/CreateOrganizationUtils.Xq78HHkP.js.map +1 -0
- package/dist/chunks/{CustomAppBar.DuFQqld7.js → CustomAppBar.BOlNFosS.js} +5 -7
- package/dist/chunks/CustomAppBar.BOlNFosS.js.map +1 -0
- package/dist/chunks/{CustomAppBar.BfQvuTHz.js → CustomAppBar.DaXLAwPh.js} +4 -6
- package/dist/chunks/CustomAppBar.DaXLAwPh.js.map +1 -0
- package/dist/chunks/{LinkedInRegistrationInput.C-qzrR-S.js → LinkedInRegistrationInput.CmYmSJoq.js} +8 -5
- package/dist/chunks/LinkedInRegistrationInput.CmYmSJoq.js.map +1 -0
- package/dist/chunks/{LinkedInRegistrationInput.DKRMHYRh.js → LinkedInRegistrationInput.gnYgP1Hf.js} +11 -8
- package/dist/chunks/LinkedInRegistrationInput.gnYgP1Hf.js.map +1 -0
- package/dist/chunks/{Loading.UJl_3_cf.js → Loading.Bcm3xNJU.js} +2 -3
- package/dist/chunks/Loading.Bcm3xNJU.js.map +1 -0
- package/dist/chunks/{Loading.DYBk0Ktb.js → Loading.cGHE59CV.js} +2 -3
- package/dist/chunks/Loading.cGHE59CV.js.map +1 -0
- package/dist/chunks/{MainLayout.CWFkijrE.js → MainLayout.BzfaZs8j.js} +2 -2
- package/dist/chunks/{MainLayout.CWFkijrE.js.map → MainLayout.BzfaZs8j.js.map} +1 -1
- package/dist/chunks/{MainLayout.6Hq5XQ-L.js → MainLayout.V-ymVxxR.js} +3 -3
- package/dist/chunks/{MainLayout.6Hq5XQ-L.js.map → MainLayout.V-ymVxxR.js.map} +1 -1
- package/dist/chunks/{OrganizationAvatar.BEwRZ9tC.js → OrganizationAvatar.BXW4diDT.js} +2 -2
- package/dist/chunks/{OrganizationAvatar.BEwRZ9tC.js.map → OrganizationAvatar.BXW4diDT.js.map} +1 -1
- package/dist/chunks/{OrganizationAvatar.lWcXtbM6.js → OrganizationAvatar.Dgg5VSPI.js} +2 -2
- package/dist/chunks/{OrganizationAvatar.lWcXtbM6.js.map → OrganizationAvatar.Dgg5VSPI.js.map} +1 -1
- package/dist/chunks/{ServicesEdit.BUAbbXgV.js → ServicesEdit.BnnqC203.js} +3 -3
- package/dist/chunks/ServicesEdit.BnnqC203.js.map +1 -0
- package/dist/chunks/{ServicesEdit.CrtEcP_7.js → ServicesEdit.DDgjS5kU.js} +2 -2
- package/dist/chunks/ServicesEdit.DDgjS5kU.js.map +1 -0
- package/dist/chunks/{SetInvitationService.BUZqAilX.js → SetInvitationService.PxAGwk-I.js} +11 -11
- package/dist/chunks/SetInvitationService.PxAGwk-I.js.map +1 -0
- package/dist/chunks/{SetInvitationService.B0ezxTzf.js → SetInvitationService.ZT5lP003.js} +5 -5
- package/dist/chunks/SetInvitationService.ZT5lP003.js.map +1 -0
- package/dist/chunks/TermsAndConditionsPdf.Ba8-5Hcm.js.map +1 -1
- package/dist/chunks/TermsAndConditionsPdf.ewC7N9Vy.js.map +1 -1
- package/dist/chunks/{CreateOrganization.C2Kf44eJ.js → ValidateTextInput.D5kgjulG.js} +328 -14
- package/dist/chunks/ValidateTextInput.D5kgjulG.js.map +1 -0
- package/dist/chunks/{CreateOrganization.A11-a_8R.js → ValidateTextInput.DEBaVB1L.js} +356 -42
- package/dist/chunks/ValidateTextInput.DEBaVB1L.js.map +1 -0
- package/dist/chunks/{index.DZOVpocw.js → index.CYCWawJT.js} +6 -6
- package/dist/chunks/index.CYCWawJT.js.map +1 -0
- package/dist/chunks/{index.DmM8ShwP.js → index.Cmn4FlUL.js} +5 -5
- package/dist/chunks/index.Cmn4FlUL.js.map +1 -0
- package/dist/chunks/{index.DlFajFTS.js → index.DIizFYFZ.js} +3 -3
- package/dist/chunks/index.DIizFYFZ.js.map +1 -0
- package/dist/chunks/{index.ZAmuSdK1.js → index.DIur8MCO.js} +4 -4
- package/dist/chunks/index.DIur8MCO.js.map +1 -0
- package/dist/chunks/{index.Ch4ynES2.js → index.DMWKdmxs.js} +4 -5
- package/dist/chunks/index.DMWKdmxs.js.map +1 -0
- package/dist/chunks/{index.Dir1xwV4.js → index.DND10PiY.js} +5 -6
- package/dist/chunks/index.DND10PiY.js.map +1 -0
- package/dist/chunks/{index.Cpod3Il3.js → index.YjnxLFjk.js} +3 -3
- package/dist/chunks/index.YjnxLFjk.js.map +1 -0
- package/dist/chunks/index.iexmV4Mr.js.map +1 -1
- package/dist/chunks/remoteDataProvider.BCiFSYnk.js.map +1 -1
- package/dist/chunks/remoteDataProvider.gtTXA1-g.js.map +1 -1
- package/dist/chunks/useIsIssuingInspection.C76mY_wb.js.map +1 -1
- package/dist/chunks/useIsIssuingInspection.DavhBs5B.js.map +1 -1
- package/dist/components/AppBar.cjs +1 -1
- package/dist/components/AppBar.js +1 -1
- package/dist/components/common.cjs +3 -3
- package/dist/components/common.js +3 -3
- package/dist/components/invitations.cjs +1 -1
- package/dist/components/invitations.js +1 -1
- package/dist/components/organizations.cjs +12 -301
- package/dist/components/organizations.cjs.map +1 -1
- package/dist/components/organizations.js +10 -299
- package/dist/components/organizations.js.map +1 -1
- package/dist/components/services.cjs +1 -1
- package/dist/components/services.js +1 -1
- package/dist/components.cjs +2 -2
- package/dist/components.js +2 -2
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/layouts.cjs +1 -1
- package/dist/layouts.js +1 -1
- package/dist/pages/individuals.cjs +4 -4
- package/dist/pages/individuals.cjs.map +1 -1
- package/dist/pages/individuals.js +5 -5
- package/dist/pages/individuals.js.map +1 -1
- package/dist/pages/invitations.cjs +11 -12
- package/dist/pages/invitations.cjs.map +1 -1
- package/dist/pages/invitations.js +9 -10
- package/dist/pages/invitations.js.map +1 -1
- package/dist/pages/organizations.cjs +74 -75
- package/dist/pages/organizations.cjs.map +1 -1
- package/dist/pages/organizations.js +10 -11
- package/dist/pages/organizations.js.map +1 -1
- package/dist/pages/services.cjs +6 -6
- package/dist/pages/services.cjs.map +1 -1
- package/dist/pages/services.js +5 -5
- package/dist/pages/services.js.map +1 -1
- package/dist/pages.cjs +1 -1
- package/dist/pages.cjs.map +1 -1
- package/dist/pages.js +1 -1
- package/dist/pages.js.map +1 -1
- package/package.json +12 -9
- package/setup-tests.js +31 -0
- package/dist/chunks/ConsentProvider.DIG3atk-.js.map +0 -1
- package/dist/chunks/ConsentProvider.DTG51XMy.js.map +0 -1
- package/dist/chunks/CreateOrganization.A11-a_8R.js.map +0 -1
- package/dist/chunks/CreateOrganization.C2Kf44eJ.js.map +0 -1
- package/dist/chunks/CreateOrganization.utils.8cSBFSYF.js.map +0 -1
- package/dist/chunks/CreateOrganization.utils.C5C_r3Zp.js.map +0 -1
- package/dist/chunks/CustomAppBar.BfQvuTHz.js.map +0 -1
- package/dist/chunks/CustomAppBar.DuFQqld7.js.map +0 -1
- package/dist/chunks/LinkedInRegistrationInput.C-qzrR-S.js.map +0 -1
- package/dist/chunks/LinkedInRegistrationInput.DKRMHYRh.js.map +0 -1
- package/dist/chunks/Loading.DYBk0Ktb.js.map +0 -1
- package/dist/chunks/Loading.UJl_3_cf.js.map +0 -1
- package/dist/chunks/OrganisationSubmitButton.D32qynh9.js +0 -40
- package/dist/chunks/OrganisationSubmitButton.D32qynh9.js.map +0 -1
- package/dist/chunks/OrganisationSubmitButton.D3w1nG1X.js +0 -41
- package/dist/chunks/OrganisationSubmitButton.D3w1nG1X.js.map +0 -1
- package/dist/chunks/ServicesEdit.BUAbbXgV.js.map +0 -1
- package/dist/chunks/ServicesEdit.CrtEcP_7.js.map +0 -1
- package/dist/chunks/SetInvitationService.B0ezxTzf.js.map +0 -1
- package/dist/chunks/SetInvitationService.BUZqAilX.js.map +0 -1
- package/dist/chunks/index.Ch4ynES2.js.map +0 -1
- package/dist/chunks/index.Cpod3Il3.js.map +0 -1
- package/dist/chunks/index.DZOVpocw.js.map +0 -1
- package/dist/chunks/index.Dir1xwV4.js.map +0 -1
- package/dist/chunks/index.DlFajFTS.js.map +0 -1
- package/dist/chunks/index.DmM8ShwP.js.map +0 -1
- package/dist/chunks/index.ZAmuSdK1.js.map +0 -1
- package/jest.config.cjs +0 -29
|
@@ -1,20 +1,273 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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,
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
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=
|
|
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'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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"}
|