@verii/components-organizations-registrar 1.0.0 → 1.0.1
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/HolderWalletSelection.BYj3foq0.js +167 -0
- package/dist/chunks/HolderWalletSelection.BYj3foq0.js.map +1 -0
- package/dist/chunks/HolderWalletSelection.BvPFTrTh.js +166 -0
- package/dist/chunks/HolderWalletSelection.BvPFTrTh.js.map +1 -0
- package/dist/chunks/{ServicesEdit.BnnqC203.js → ServicesEdit.CrmS66vz.js} +75 -50
- package/dist/chunks/ServicesEdit.CrmS66vz.js.map +1 -0
- package/dist/chunks/{ServicesEdit.DDgjS5kU.js → ServicesEdit.DFxcohIF.js} +75 -50
- package/dist/chunks/ServicesEdit.DFxcohIF.js.map +1 -0
- package/dist/chunks/{SetInvitationService.PxAGwk-I.js → SetInvitationService.BeU7-IBo.js} +3 -3
- package/dist/chunks/{SetInvitationService.PxAGwk-I.js.map → SetInvitationService.BeU7-IBo.js.map} +1 -1
- package/dist/chunks/{SetInvitationService.ZT5lP003.js → SetInvitationService.DtVH6OkH.js} +3 -3
- package/dist/chunks/{SetInvitationService.ZT5lP003.js.map → SetInvitationService.DtVH6OkH.js.map} +1 -1
- package/dist/chunks/{ValidateTextInput.D5kgjulG.js → ValidateTextInput.1Fv1GPyZ.js} +2 -2
- package/dist/chunks/{ValidateTextInput.D5kgjulG.js.map → ValidateTextInput.1Fv1GPyZ.js.map} +1 -1
- package/dist/chunks/{ValidateTextInput.DEBaVB1L.js → ValidateTextInput.DPruGgff.js} +2 -2
- package/dist/chunks/{ValidateTextInput.DEBaVB1L.js.map → ValidateTextInput.DPruGgff.js.map} +1 -1
- package/dist/chunks/{index.Cmn4FlUL.js → index.BDTIIDNe.js} +251 -114
- package/dist/chunks/index.BDTIIDNe.js.map +1 -0
- package/dist/chunks/{index.YjnxLFjk.js → index.CaxYybSL.js} +115 -56
- package/dist/chunks/index.CaxYybSL.js.map +1 -0
- package/dist/chunks/{index.DIizFYFZ.js → index.Cjk52g3G.js} +115 -56
- package/dist/chunks/index.Cjk52g3G.js.map +1 -0
- package/dist/chunks/{index.DMWKdmxs.js → index.DFMQZMWE.js} +12 -2
- package/dist/chunks/index.DFMQZMWE.js.map +1 -0
- package/dist/chunks/{index.DND10PiY.js → index.DTlm8AhC.js} +11 -1
- package/dist/chunks/index.DTlm8AhC.js.map +1 -0
- package/dist/chunks/{index.CYCWawJT.js → index.DmF-wFBs.js} +249 -112
- package/dist/chunks/index.DmF-wFBs.js.map +1 -0
- package/dist/chunks/{serviceTypes.D7c4G5GY.js → serviceTypes.BWVBK33e.js} +52 -31
- package/dist/chunks/serviceTypes.BWVBK33e.js.map +1 -0
- package/dist/chunks/{serviceTypes.CxLXtDIT.js → serviceTypes.BbBTNXB9.js} +52 -31
- package/dist/chunks/serviceTypes.BbBTNXB9.js.map +1 -0
- package/dist/components/common.cjs +1 -1
- package/dist/components/common.js +1 -1
- package/dist/components/invitations.cjs +1 -1
- package/dist/components/invitations.js +1 -1
- package/dist/components/organizations.cjs +1 -1
- package/dist/components/organizations.js +1 -1
- package/dist/components/services.cjs +1 -1
- package/dist/components/services.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/pages/invitations.cjs +5 -6
- package/dist/pages/invitations.cjs.map +1 -1
- package/dist/pages/invitations.js +4 -5
- package/dist/pages/invitations.js.map +1 -1
- package/dist/pages/organizations.cjs +11 -16
- package/dist/pages/organizations.cjs.map +1 -1
- package/dist/pages/organizations.js +10 -15
- package/dist/pages/organizations.js.map +1 -1
- package/dist/pages/services.cjs +27 -30
- package/dist/pages/services.cjs.map +1 -1
- package/dist/pages/services.js +26 -29
- package/dist/pages/services.js.map +1 -1
- package/package.json +3 -3
- package/dist/chunks/ServicesEdit.BnnqC203.js.map +0 -1
- package/dist/chunks/ServicesEdit.DDgjS5kU.js.map +0 -1
- package/dist/chunks/index.CYCWawJT.js.map +0 -1
- package/dist/chunks/index.Cmn4FlUL.js.map +0 -1
- package/dist/chunks/index.DIizFYFZ.js.map +0 -1
- package/dist/chunks/index.DMWKdmxs.js.map +0 -1
- package/dist/chunks/index.DND10PiY.js.map +0 -1
- package/dist/chunks/index.YjnxLFjk.js.map +0 -1
- package/dist/chunks/invitations.BI_Qo5Ca.js +0 -10
- package/dist/chunks/invitations.BI_Qo5Ca.js.map +0 -1
- package/dist/chunks/invitations.BbK6WSY8.js +0 -11
- package/dist/chunks/invitations.BbK6WSY8.js.map +0 -1
- package/dist/chunks/serviceTypes.CxLXtDIT.js.map +0 -1
- package/dist/chunks/serviceTypes.D7c4G5GY.js.map +0 -1
- package/dist/chunks/useIsIssuingInspection.C76mY_wb.js +0 -14
- package/dist/chunks/useIsIssuingInspection.C76mY_wb.js.map +0 -1
- package/dist/chunks/useIsIssuingInspection.DavhBs5B.js +0 -13
- package/dist/chunks/useIsIssuingInspection.DavhBs5B.js.map +0 -1
|
@@ -1,21 +1,103 @@
|
|
|
1
|
+
import { kebabCase } from "lodash-es";
|
|
2
|
+
import { C as CREDENTIAL_TYPES_IDS, b as serviceTypes } from "./serviceTypes.BbBTNXB9.js";
|
|
3
|
+
import { g as getNewServiceIndex, a as getTitle } from "./index.DFMQZMWE.js";
|
|
1
4
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
5
|
+
import { useInput, AutocompleteInput, TextInput, required, Form, FormDataConsumer, SaveButton } from "react-admin";
|
|
6
|
+
import { Stack, Box, Tooltip, Typography, Link, Button } from "@mui/material";
|
|
4
7
|
import KeyboardArrowLeftIcon from "@mui/icons-material/KeyboardArrowLeft";
|
|
5
|
-
import { useInput, AutocompleteInput, Form, TextInput, required, FormDataConsumer, SaveButton } from "react-admin";
|
|
6
|
-
import InfoIcon from "@mui/icons-material/Info";
|
|
7
8
|
import PropTypes from "prop-types";
|
|
9
|
+
import { u as useIsIssuingInspection, W as WebWalletSelection, H as HolderWalletSelection } from "./HolderWalletSelection.BYj3foq0.js";
|
|
10
|
+
import { forwardRef, useMemo, useCallback, useEffect, useState } from "react";
|
|
11
|
+
import InfoIcon from "@mui/icons-material/Info";
|
|
8
12
|
import { C as CustomDropDown } from "./CustomDropDown.DS_ln3ym.js";
|
|
9
13
|
import { O as OrganizationAvatar } from "./OrganizationAvatar.Dgg5VSPI.js";
|
|
10
|
-
import { c as validateServiceEndpoint } from "./CreateOrganizationUtils.Xq78HHkP.js";
|
|
11
|
-
import { c as chainNames } from "./chainNames.DRzS8u_K.js";
|
|
12
14
|
import { u as useConfig } from "./ConfigContext.Cd8KjWqG.js";
|
|
13
|
-
import {
|
|
15
|
+
import { c as chainNames } from "./chainNames.DRzS8u_K.js";
|
|
16
|
+
import { c as validateServiceEndpoint } from "./CreateOrganizationUtils.Xq78HHkP.js";
|
|
14
17
|
import KeyboardArrowRightIcon from "@mui/icons-material/KeyboardArrowRight";
|
|
15
18
|
import { L as Loading } from "./Loading.Bcm3xNJU.js";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
const hasValue = (value) => {
|
|
20
|
+
if (Array.isArray(value)) {
|
|
21
|
+
return value.length > 0;
|
|
22
|
+
}
|
|
23
|
+
return Boolean(value);
|
|
24
|
+
};
|
|
25
|
+
const hasRequiredFields = (fields, formData) => {
|
|
26
|
+
if (!formData) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return fields.every((field) => hasValue(formData[field]));
|
|
30
|
+
};
|
|
31
|
+
const requiredFieldsByServiceType = [
|
|
32
|
+
{
|
|
33
|
+
isActive: ({ isIssuingOrInspection }) => isIssuingOrInspection,
|
|
34
|
+
requiredFields: ["serviceEndpoint", "serviceCAO"]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
isActive: ({ isCAO }) => isCAO,
|
|
38
|
+
requiredFields: ["serviceEndpoint"]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
isActive: ({ isWebWallet }) => isWebWallet,
|
|
42
|
+
requiredFields: ["name", "logo", "serviceEndpoint", "supportedExchangeProtocols"]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
isActive: ({ isHolderWallet }) => isHolderWallet,
|
|
46
|
+
requiredFields: [
|
|
47
|
+
"name",
|
|
48
|
+
"logo",
|
|
49
|
+
"serviceEndpoint",
|
|
50
|
+
"supportedExchangeProtocols",
|
|
51
|
+
"playStoreUrl",
|
|
52
|
+
"googlePlayId",
|
|
53
|
+
"appleAppStoreUrl",
|
|
54
|
+
"appleAppId"
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
];
|
|
58
|
+
const isAddButtonDisabled = (inProgress, isIssuingOrInspection, isCAO, isWebWallet, isHolderWallet, formData) => {
|
|
59
|
+
if (inProgress) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
const serviceType = requiredFieldsByServiceType.find(
|
|
63
|
+
(item) => item.isActive({ isIssuingOrInspection, isCAO, isWebWallet, isHolderWallet })
|
|
64
|
+
);
|
|
65
|
+
if (!serviceType) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
return !hasRequiredFields(serviceType.requiredFields, formData);
|
|
69
|
+
};
|
|
70
|
+
const addProp = (name, value) => value ? { [name]: value } : {};
|
|
71
|
+
const buildPayload = (service, type, did, services) => {
|
|
72
|
+
const kebabType = kebabCase(type);
|
|
73
|
+
const { name, logo, supportedExchangeProtocols, serviceEndpoint } = service;
|
|
74
|
+
const genericPayload = {
|
|
75
|
+
...did && services && { id: `${did}#${kebabType}-${getNewServiceIndex(services, kebabType)}` },
|
|
76
|
+
serviceEndpoint,
|
|
77
|
+
type
|
|
78
|
+
};
|
|
79
|
+
if (type === CREDENTIAL_TYPES_IDS.VLC_WEB_WALLET_PROVIDER) {
|
|
80
|
+
return {
|
|
81
|
+
...genericPayload,
|
|
82
|
+
...addProp("logoUrl", logo),
|
|
83
|
+
...addProp("supportedExchangeProtocols", supportedExchangeProtocols),
|
|
84
|
+
...addProp("name", name)
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
if (type === CREDENTIAL_TYPES_IDS.VLC_HOLDER_APP_PROVIDER) {
|
|
88
|
+
const { playStoreUrl, googlePlayId, appleAppStoreUrl, appleAppId } = service;
|
|
89
|
+
return {
|
|
90
|
+
...genericPayload,
|
|
91
|
+
...addProp("logoUrl", logo),
|
|
92
|
+
...addProp("supportedExchangeProtocols", supportedExchangeProtocols),
|
|
93
|
+
...addProp("name", name),
|
|
94
|
+
...addProp("playStoreUrl", playStoreUrl),
|
|
95
|
+
...addProp("googlePlayId", googlePlayId),
|
|
96
|
+
...addProp("appleAppStoreUrl", appleAppStoreUrl),
|
|
97
|
+
...addProp("appleAppId", appleAppId)
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return genericPayload;
|
|
19
101
|
};
|
|
20
102
|
const Autocomplete = forwardRef(function Autocomplete2({
|
|
21
103
|
label,
|
|
@@ -88,15 +170,7 @@ Autocomplete.propTypes = {
|
|
|
88
170
|
defaultValue: PropTypes.any,
|
|
89
171
|
parse: PropTypes.func
|
|
90
172
|
};
|
|
91
|
-
const
|
|
92
|
-
const ServiceEndpointSelection = ({
|
|
93
|
-
credentialAgentOperators,
|
|
94
|
-
isIssueOrInspection,
|
|
95
|
-
inProgress,
|
|
96
|
-
onCreate,
|
|
97
|
-
handleBack
|
|
98
|
-
}) => {
|
|
99
|
-
const config = useConfig();
|
|
173
|
+
const IssuingOrInspectionSelection = ({ credentialAgentOperators, inProgress }) => {
|
|
100
174
|
const [selectedCAO, setSelectedCAO] = useState("");
|
|
101
175
|
const [selectedServiceId, setSelectedServiceId] = useState("");
|
|
102
176
|
const getOptionAsText = (item) => item.name;
|
|
@@ -106,78 +180,163 @@ const ServiceEndpointSelection = ({
|
|
|
106
180
|
}
|
|
107
181
|
return "";
|
|
108
182
|
}, [credentialAgentOperators, selectedCAO]);
|
|
183
|
+
return /* @__PURE__ */ jsxs(Stack, { sx: { mt: 2 }, children: [
|
|
184
|
+
/* @__PURE__ */ jsxs(Stack, { flexDirection: "row", alignItems: "center", sx: styles$2.selectCAOContainer, children: [
|
|
185
|
+
/* @__PURE__ */ jsx(
|
|
186
|
+
Autocomplete,
|
|
187
|
+
{
|
|
188
|
+
source: "serviceCAO",
|
|
189
|
+
label: "Select Credential Agent Operator",
|
|
190
|
+
value: selectedCAO,
|
|
191
|
+
onChange: setSelectedCAO,
|
|
192
|
+
items: credentialAgentOperators,
|
|
193
|
+
stringValue: (item) => /* @__PURE__ */ jsxs(Box, { sx: styles$2.menuItemLogo, component: "div", children: [
|
|
194
|
+
/* @__PURE__ */ jsx("span", { children: item.name }),
|
|
195
|
+
/* @__PURE__ */ jsx(OrganizationAvatar, { size: 32, name: item.name, logo: item.logo })
|
|
196
|
+
] }),
|
|
197
|
+
inputText: getOptionAsText,
|
|
198
|
+
disabled: inProgress,
|
|
199
|
+
styles: styles$2.selectCAO
|
|
200
|
+
}
|
|
201
|
+
),
|
|
202
|
+
/* @__PURE__ */ jsx(Box, { sx: { ml: 2 }, children: /* @__PURE__ */ jsx(Tooltip, { title: "The Credential Agent Operator your organization will use to integrate with Velocity Network™", children: /* @__PURE__ */ jsx(InfoIcon, { color: "info", fontSize: "small", cursor: "pointer" }) }) })
|
|
203
|
+
] }),
|
|
204
|
+
/* @__PURE__ */ jsxs(Stack, { flexDirection: "row", alignItems: "center", mt: 1, mb: 4, children: [
|
|
205
|
+
/* @__PURE__ */ jsx(
|
|
206
|
+
CustomDropDown,
|
|
207
|
+
{
|
|
208
|
+
label: 'Select "Service ID"',
|
|
209
|
+
value: selectedServiceId,
|
|
210
|
+
onChange: setSelectedServiceId,
|
|
211
|
+
items: CAO.service || [],
|
|
212
|
+
stringValue: (item) => `${item.id} (${item.serviceEndpoint})`,
|
|
213
|
+
disabled: !selectedCAO || inProgress,
|
|
214
|
+
source: "serviceEndpoint",
|
|
215
|
+
parse: (value) => `${selectedCAO}${value.id}`
|
|
216
|
+
}
|
|
217
|
+
),
|
|
218
|
+
/* @__PURE__ */ jsx(Box, { sx: { ml: 2 }, children: /* @__PURE__ */ jsx(
|
|
219
|
+
Tooltip,
|
|
220
|
+
{
|
|
221
|
+
title: "The agent's service ID your organization needs to use. \n If there are multiple service IDs available, please contact your Credential Agent Operator to know which one to select.",
|
|
222
|
+
children: /* @__PURE__ */ jsx(InfoIcon, { color: "info", fontSize: "small", cursor: "pointer" })
|
|
223
|
+
}
|
|
224
|
+
) })
|
|
225
|
+
] })
|
|
226
|
+
] });
|
|
227
|
+
};
|
|
228
|
+
const styles$2 = {
|
|
229
|
+
selectCAOContainer: {
|
|
230
|
+
width: "100%",
|
|
231
|
+
marginBottom: "20px"
|
|
232
|
+
},
|
|
233
|
+
selectCAO: {
|
|
234
|
+
width: "100%",
|
|
235
|
+
"& .MuiInputBase-root": {
|
|
236
|
+
width: "100%"
|
|
237
|
+
},
|
|
238
|
+
"& .MuiSelect-select": {
|
|
239
|
+
display: "flex",
|
|
240
|
+
justifyContent: "space-between",
|
|
241
|
+
alignItems: "center",
|
|
242
|
+
py: 0
|
|
243
|
+
},
|
|
244
|
+
"& .MuiFormHelperText-root": {
|
|
245
|
+
display: "none"
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
menuItemLogo: {
|
|
249
|
+
display: "flex",
|
|
250
|
+
flex: "1",
|
|
251
|
+
justifyContent: "space-between",
|
|
252
|
+
alignItems: "center"
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
IssuingOrInspectionSelection.propTypes = {
|
|
256
|
+
credentialAgentOperators: PropTypes.arrayOf(
|
|
257
|
+
PropTypes.shape({
|
|
258
|
+
id: PropTypes.string.isRequired,
|
|
259
|
+
name: PropTypes.string.isRequired,
|
|
260
|
+
logo: PropTypes.string,
|
|
261
|
+
service: PropTypes.arrayOf(
|
|
262
|
+
PropTypes.shape({
|
|
263
|
+
id: PropTypes.string.isRequired,
|
|
264
|
+
serviceEndpoint: PropTypes.string.isRequired
|
|
265
|
+
})
|
|
266
|
+
)
|
|
267
|
+
})
|
|
268
|
+
).isRequired,
|
|
269
|
+
inProgress: PropTypes.bool.isRequired
|
|
270
|
+
};
|
|
271
|
+
const UserAgreement = ({ isWallet }) => {
|
|
272
|
+
const config = useConfig();
|
|
273
|
+
return config.chainName !== chainNames.testnet && /* @__PURE__ */ jsxs(Typography, { variant: "subtitle1", sx: sx.userAgreement, children: [
|
|
274
|
+
/* @__PURE__ */ jsx("span", { children: "By clicking Add, you agree to our " }),
|
|
275
|
+
isWallet ? /* @__PURE__ */ jsx(
|
|
276
|
+
Link,
|
|
277
|
+
{
|
|
278
|
+
target: "_blank",
|
|
279
|
+
href: "https://velocitynetwork.foundation/wp-content/uploads/2022/07/VNF-Wallet-Operator-Agreement-v1.1.pdf",
|
|
280
|
+
children: "Wallet Developer Agreement"
|
|
281
|
+
}
|
|
282
|
+
) : /* @__PURE__ */ jsx(
|
|
283
|
+
Link,
|
|
284
|
+
{
|
|
285
|
+
target: "_blank",
|
|
286
|
+
href: "https://www.velocitynetwork.foundation/main2/participation-agreements",
|
|
287
|
+
children: "Participant Agreement"
|
|
288
|
+
}
|
|
289
|
+
)
|
|
290
|
+
] });
|
|
291
|
+
};
|
|
292
|
+
const sx = {
|
|
293
|
+
userAgreement: {
|
|
294
|
+
marginTop: "10px"
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
UserAgreement.propTypes = {
|
|
298
|
+
isWallet: PropTypes.bool.isRequired
|
|
299
|
+
};
|
|
300
|
+
const CAOSelection = ({ inProgress }) => {
|
|
301
|
+
return /* @__PURE__ */ jsx(
|
|
302
|
+
TextInput,
|
|
303
|
+
{
|
|
304
|
+
source: "serviceEndpoint",
|
|
305
|
+
label: "Service endpoint URL",
|
|
306
|
+
validate: [required("Service endpoint URL field is required"), ...validateServiceEndpoint],
|
|
307
|
+
parse: (value) => value?.trim() ?? "",
|
|
308
|
+
disabled: inProgress
|
|
309
|
+
}
|
|
310
|
+
);
|
|
311
|
+
};
|
|
312
|
+
CAOSelection.propTypes = {
|
|
313
|
+
inProgress: PropTypes.bool.isRequired
|
|
314
|
+
};
|
|
315
|
+
const selectedStep$1 = 2;
|
|
316
|
+
const ServiceEndpointSelection = ({
|
|
317
|
+
credentialAgentOperators,
|
|
318
|
+
selectedServiceType,
|
|
319
|
+
inProgress,
|
|
320
|
+
onCreate,
|
|
321
|
+
handleBack
|
|
322
|
+
}) => {
|
|
323
|
+
const { isIssuingOrInspection, isCAO, isWallet, isWebWallet, isHolderWallet } = useIsIssuingInspection(selectedServiceType);
|
|
109
324
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
110
325
|
/* @__PURE__ */ jsx(Typography, { variant: "pm", sx: styles$1.step, children: "Step 2/2" }),
|
|
111
326
|
/* @__PURE__ */ jsx(Typography, { sx: styles$1.title, mb: 2, children: getTitle(selectedStep$1) }),
|
|
112
327
|
/* @__PURE__ */ jsx(Typography, { children: "Please complete the details below to continue" }),
|
|
113
328
|
/* @__PURE__ */ jsx(Form, { onSubmit: onCreate, mode: "onChange", defaultValues: { serviceEndpoint: "" }, children: /* @__PURE__ */ jsxs(Stack, { sx: styles$1.endpointForm, children: [
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
/* @__PURE__ */ jsx(
|
|
117
|
-
Autocomplete,
|
|
118
|
-
{
|
|
119
|
-
source: "serviceCAO",
|
|
120
|
-
label: "Select Credential Agent Operator",
|
|
121
|
-
value: selectedCAO,
|
|
122
|
-
onChange: setSelectedCAO,
|
|
123
|
-
items: credentialAgentOperators,
|
|
124
|
-
stringValue: (item) => /* @__PURE__ */ jsxs(Box, { sx: styles$1.menuItemLogo, component: "div", children: [
|
|
125
|
-
/* @__PURE__ */ jsx("span", { children: item.name }),
|
|
126
|
-
/* @__PURE__ */ jsx(OrganizationAvatar, { size: 32, name: item.name, logo: item.logo })
|
|
127
|
-
] }),
|
|
128
|
-
inputText: getOptionAsText,
|
|
129
|
-
disabled: false,
|
|
130
|
-
styles: styles$1.selectCAO
|
|
131
|
-
}
|
|
132
|
-
),
|
|
133
|
-
/* @__PURE__ */ jsx(Box, { sx: { ml: 2 }, children: /* @__PURE__ */ jsx(Tooltip, { title: "The Credential Agent Operator your organization will use to integrate with Velocity Network™", children: /* @__PURE__ */ jsx(InfoIcon, { color: "info", fontSize: "small", cursor: "pointer" }) }) })
|
|
134
|
-
] }),
|
|
135
|
-
/* @__PURE__ */ jsxs(Stack, { flexDirection: "row", alignItems: "center", mt: 1, mb: 4, children: [
|
|
136
|
-
/* @__PURE__ */ jsx(
|
|
137
|
-
CustomDropDown,
|
|
138
|
-
{
|
|
139
|
-
label: 'Select "Service ID"',
|
|
140
|
-
value: selectedServiceId,
|
|
141
|
-
onChange: setSelectedServiceId,
|
|
142
|
-
items: CAO.service || [],
|
|
143
|
-
stringValue: (item) => `${item.id} (${item.serviceEndpoint})`,
|
|
144
|
-
disabled: !selectedCAO,
|
|
145
|
-
source: "serviceEndpoint",
|
|
146
|
-
parse: (value) => `${selectedCAO}${value.id}`
|
|
147
|
-
}
|
|
148
|
-
),
|
|
149
|
-
/* @__PURE__ */ jsx(Box, { sx: { ml: 2 }, children: /* @__PURE__ */ jsx(
|
|
150
|
-
Tooltip,
|
|
151
|
-
{
|
|
152
|
-
title: "The agent's service ID your organization needs to use. \n If there are multiple service IDs available, please contact your Credential Agent Operator to know which one to select.",
|
|
153
|
-
children: /* @__PURE__ */ jsx(InfoIcon, { color: "info", fontSize: "small", cursor: "pointer" })
|
|
154
|
-
}
|
|
155
|
-
) })
|
|
156
|
-
] })
|
|
157
|
-
] }) : /* @__PURE__ */ jsx(
|
|
158
|
-
TextInput,
|
|
329
|
+
isIssuingOrInspection && /* @__PURE__ */ jsx(
|
|
330
|
+
IssuingOrInspectionSelection,
|
|
159
331
|
{
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
validate: [
|
|
163
|
-
required("Service endpoint URL field is required"),
|
|
164
|
-
...validateServiceEndpoint
|
|
165
|
-
],
|
|
166
|
-
parse: (value) => value?.trim() ?? "",
|
|
167
|
-
disabled: inProgress
|
|
332
|
+
credentialAgentOperators,
|
|
333
|
+
inProgress
|
|
168
334
|
}
|
|
169
335
|
),
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
{
|
|
175
|
-
target: "_blank",
|
|
176
|
-
href: "https://www.velocitynetwork.foundation/main2/participation-agreements",
|
|
177
|
-
children: "Participant Agreement"
|
|
178
|
-
}
|
|
179
|
-
)
|
|
180
|
-
] }),
|
|
336
|
+
isWebWallet && /* @__PURE__ */ jsx(WebWalletSelection, { inProgress }),
|
|
337
|
+
isHolderWallet && /* @__PURE__ */ jsx(HolderWalletSelection, { inProgress }),
|
|
338
|
+
isCAO && /* @__PURE__ */ jsx(CAOSelection, { inProgress }),
|
|
339
|
+
/* @__PURE__ */ jsx(UserAgreement, { isWallet }),
|
|
181
340
|
/* @__PURE__ */ jsxs(Box, { sx: styles$1.buttonBlock, children: [
|
|
182
341
|
/* @__PURE__ */ jsx(
|
|
183
342
|
Button,
|
|
@@ -193,9 +352,11 @@ const ServiceEndpointSelection = ({
|
|
|
193
352
|
/* @__PURE__ */ jsx(FormDataConsumer, { children: ({ formData }) => {
|
|
194
353
|
const isDisabled = isAddButtonDisabled(
|
|
195
354
|
inProgress,
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
355
|
+
isIssuingOrInspection,
|
|
356
|
+
isCAO,
|
|
357
|
+
isWebWallet,
|
|
358
|
+
isHolderWallet,
|
|
359
|
+
formData
|
|
199
360
|
);
|
|
200
361
|
return /* @__PURE__ */ jsx(
|
|
201
362
|
SaveButton,
|
|
@@ -223,31 +384,6 @@ const styles$1 = {
|
|
|
223
384
|
endpointForm: {
|
|
224
385
|
marginTop: "20px"
|
|
225
386
|
},
|
|
226
|
-
selectCAOContainer: {
|
|
227
|
-
width: "100%",
|
|
228
|
-
marginBottom: "20px"
|
|
229
|
-
},
|
|
230
|
-
selectCAO: {
|
|
231
|
-
width: "100%",
|
|
232
|
-
"& .MuiInputBase-root": {
|
|
233
|
-
width: "100%"
|
|
234
|
-
},
|
|
235
|
-
"& .MuiSelect-select": {
|
|
236
|
-
display: "flex",
|
|
237
|
-
justifyContent: "space-between",
|
|
238
|
-
alignItems: "center",
|
|
239
|
-
py: 0
|
|
240
|
-
},
|
|
241
|
-
"& .MuiFormHelperText-root": {
|
|
242
|
-
display: "none"
|
|
243
|
-
}
|
|
244
|
-
},
|
|
245
|
-
menuItemLogo: {
|
|
246
|
-
display: "flex",
|
|
247
|
-
flex: "1",
|
|
248
|
-
justifyContent: "space-between",
|
|
249
|
-
alignItems: "center"
|
|
250
|
-
},
|
|
251
387
|
buttonBlock: {
|
|
252
388
|
display: "flex",
|
|
253
389
|
marginTop: "40px",
|
|
@@ -289,7 +425,7 @@ ServiceEndpointSelection.propTypes = {
|
|
|
289
425
|
)
|
|
290
426
|
})
|
|
291
427
|
).isRequired,
|
|
292
|
-
|
|
428
|
+
selectedServiceType: PropTypes.string.isRequired,
|
|
293
429
|
inProgress: PropTypes.bool.isRequired,
|
|
294
430
|
onCreate: PropTypes.func.isRequired,
|
|
295
431
|
handleBack: PropTypes.func.isRequired
|
|
@@ -365,6 +501,7 @@ ServiceTypeSelection.defaultProps = {
|
|
|
365
501
|
};
|
|
366
502
|
export {
|
|
367
503
|
ServiceTypeSelection as S,
|
|
368
|
-
ServiceEndpointSelection as a
|
|
504
|
+
ServiceEndpointSelection as a,
|
|
505
|
+
buildPayload as b
|
|
369
506
|
};
|
|
370
|
-
//# sourceMappingURL=index.
|
|
507
|
+
//# sourceMappingURL=index.BDTIIDNe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.BDTIIDNe.js","sources":["../../src/pages/services/utils/isAddButtonDisabled.js","../../src/pages/services/utils/buildPayload.js","../../src/components/common/Autocomplete.jsx","../../src/pages/services/components/ServiceEndpointSelection/components/IssuingOrInspectionSelection.jsx","../../src/pages/services/components/ServiceEndpointSelection/components/UserAgreement.jsx","../../src/pages/services/components/ServiceEndpointSelection/components/CAOSelection.jsx","../../src/pages/services/components/ServiceEndpointSelection/index.jsx","../../src/pages/services/components/ServiceTypeSelection/index.jsx"],"sourcesContent":["const hasValue = (value) => {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n\n return Boolean(value);\n};\n\nconst hasRequiredFields = (fields, formData) => {\n if (!formData) {\n return false;\n }\n\n return fields.every((field) => hasValue(formData[field]));\n};\n\nconst requiredFieldsByServiceType = [\n {\n isActive: ({ isIssuingOrInspection }) => isIssuingOrInspection,\n requiredFields: ['serviceEndpoint', 'serviceCAO'],\n },\n {\n isActive: ({ isCAO }) => isCAO,\n requiredFields: ['serviceEndpoint'],\n },\n {\n isActive: ({ isWebWallet }) => isWebWallet,\n requiredFields: ['name', 'logo', 'serviceEndpoint', 'supportedExchangeProtocols'],\n },\n {\n isActive: ({ isHolderWallet }) => isHolderWallet,\n requiredFields: [\n 'name',\n 'logo',\n 'serviceEndpoint',\n 'supportedExchangeProtocols',\n 'playStoreUrl',\n 'googlePlayId',\n 'appleAppStoreUrl',\n 'appleAppId',\n ],\n },\n];\n\nexport const isAddButtonDisabled = (\n inProgress,\n isIssuingOrInspection,\n isCAO,\n isWebWallet,\n isHolderWallet,\n formData,\n) => {\n if (inProgress) {\n return true;\n }\n\n const serviceType = requiredFieldsByServiceType.find((item) =>\n item.isActive({ isIssuingOrInspection, isCAO, isWebWallet, isHolderWallet }),\n );\n\n if (!serviceType) {\n return true;\n }\n\n return !hasRequiredFields(serviceType.requiredFields, formData);\n};\n","import { kebabCase } from 'lodash-es';\nimport { CREDENTIAL_TYPES_IDS } from '@/utils/serviceTypes.js';\nimport { getNewServiceIndex } from '@/utils/invitations.js';\n\nconst addProp = (name, value) => (value ? { [name]: value } : {});\n\nexport const buildPayload = (service, type, did, services) => {\n const kebabType = kebabCase(type);\n const { name, logo, supportedExchangeProtocols, serviceEndpoint } = service;\n\n const genericPayload = {\n ...(did &&\n services && { id: `${did}#${kebabType}-${getNewServiceIndex(services, kebabType)}` }),\n serviceEndpoint,\n type,\n };\n if (type === CREDENTIAL_TYPES_IDS.VLC_WEB_WALLET_PROVIDER) {\n return {\n ...genericPayload,\n ...addProp('logoUrl', logo),\n ...addProp('supportedExchangeProtocols', supportedExchangeProtocols),\n ...addProp('name', name),\n };\n }\n if (type === CREDENTIAL_TYPES_IDS.VLC_HOLDER_APP_PROVIDER) {\n const { playStoreUrl, googlePlayId, appleAppStoreUrl, appleAppId } = service;\n return {\n ...genericPayload,\n ...addProp('logoUrl', logo),\n ...addProp('supportedExchangeProtocols', supportedExchangeProtocols),\n ...addProp('name', name),\n ...addProp('playStoreUrl', playStoreUrl),\n ...addProp('googlePlayId', googlePlayId),\n ...addProp('appleAppStoreUrl', appleAppStoreUrl),\n ...addProp('appleAppId', appleAppId),\n };\n }\n return genericPayload;\n};\n","import { useEffect, useCallback, useMemo, forwardRef } from 'react';\nimport { AutocompleteInput, useInput } from 'react-admin';\nimport PropTypes from 'prop-types';\n\n// eslint-disable-next-line prefer-arrow-functions/prefer-arrow-functions\nconst Autocomplete = forwardRef(function Autocomplete(\n {\n label,\n value: defaultValue,\n onChange,\n disabled,\n items,\n stringValue: format,\n inputText,\n styles,\n source = '',\n parse = (value) => value,\n },\n ref,\n) {\n const {\n field,\n fieldState: { error },\n } = useInput({ source, defaultValue, onChange, parse });\n\n const sortedItems = useMemo(() => {\n return items\n ? [...items].sort((a, b) => {\n return (a.name || '').localeCompare(b.name || '');\n })\n : [];\n }, [items]);\n\n const defaultInputText = useCallback(\n (choice) => {\n const formatted = format(choice);\n if (typeof formatted === 'string') {\n return formatted;\n }\n return formatted && formatted.props && formatted.props.children\n ? formatted.props.children.toString()\n : '';\n },\n [format],\n );\n\n useEffect(() => {\n if (sortedItems?.length === 1) {\n field.onChange(sortedItems[0]);\n }\n }, [sortedItems, field]);\n\n return (\n <AutocompleteInput\n {...field}\n ref={ref}\n label={label}\n choices={sortedItems || []}\n optionText={format}\n inputText={inputText || defaultInputText}\n optionValue=\"id\"\n disabled={disabled || (items && items.length === 1)}\n sx={styles}\n error={!!error}\n helperText={error ? error.message : ''}\n fullWidth\n />\n );\n});\n\n// eslint-disable-next-line better-mutation/no-mutation\nAutocomplete.propTypes = {\n label: PropTypes.string.isRequired,\n // eslint-disable-next-line react/forbid-prop-types\n value: PropTypes.any,\n onChange: PropTypes.func,\n disabled: PropTypes.bool,\n // eslint-disable-next-line react/forbid-prop-types\n items: PropTypes.array,\n stringValue: PropTypes.func,\n inputText: PropTypes.func,\n // eslint-disable-next-line react/forbid-prop-types\n styles: PropTypes.object,\n source: PropTypes.string,\n // eslint-disable-next-line react/forbid-prop-types\n defaultValue: PropTypes.any,\n parse: PropTypes.func,\n};\n\nexport default Autocomplete;\n","import { useState, useMemo } from 'react';\nimport { Box, Stack, Tooltip } from '@mui/material';\nimport InfoIcon from '@mui/icons-material/Info';\nimport PropTypes from 'prop-types';\n\nimport CustomDropDown from '@/components/common/CustomDropDown.jsx';\nimport Autocomplete from '@/components/common/Autocomplete.jsx';\nimport OrganizationAvatar from '@/components/common/OrganizationAvatar.jsx';\n\nconst IssuingOrInspectionSelection = ({ credentialAgentOperators, inProgress }) => {\n const [selectedCAO, setSelectedCAO] = useState('');\n const [selectedServiceId, setSelectedServiceId] = useState('');\n const getOptionAsText = (item) => item.name;\n\n const CAO = useMemo(() => {\n if (selectedCAO) {\n return credentialAgentOperators.find((item) => item.id === selectedCAO);\n }\n return '';\n }, [credentialAgentOperators, selectedCAO]);\n\n return (\n <Stack sx={{ mt: 2 }}>\n <Stack flexDirection=\"row\" alignItems=\"center\" sx={styles.selectCAOContainer}>\n <Autocomplete\n source=\"serviceCAO\"\n label=\"Select Credential Agent Operator\"\n value={selectedCAO}\n onChange={setSelectedCAO}\n items={credentialAgentOperators}\n /* eslint-disable-next-line react/no-unstable-nested-components */\n stringValue={(item) => (\n <Box sx={styles.menuItemLogo} component=\"div\">\n <span>{item.name}</span>\n <OrganizationAvatar size={32} name={item.name} logo={item.logo} />\n </Box>\n )}\n inputText={getOptionAsText}\n disabled={inProgress}\n styles={styles.selectCAO}\n />\n <Box sx={{ ml: 2 }}>\n <Tooltip title=\"The Credential Agent Operator your organization will use to integrate with Velocity Network™\">\n <InfoIcon color=\"info\" fontSize=\"small\" cursor=\"pointer\" />\n </Tooltip>\n </Box>\n </Stack>\n <Stack flexDirection=\"row\" alignItems=\"center\" mt={1} mb={4}>\n <CustomDropDown\n label='Select \"Service ID\"'\n value={selectedServiceId}\n onChange={setSelectedServiceId}\n items={CAO.service || []}\n stringValue={(item) => `${item.id} (${item.serviceEndpoint})`}\n disabled={!selectedCAO || inProgress}\n source=\"serviceEndpoint\"\n parse={(value) => `${selectedCAO}${value.id}`}\n />\n <Box sx={{ ml: 2 }}>\n <Tooltip\n title=\"The agent's service ID your organization needs to use. \n If there are multiple service IDs available, please contact your Credential Agent Operator to know which one to select.\"\n >\n <InfoIcon color=\"info\" fontSize=\"small\" cursor=\"pointer\" />\n </Tooltip>\n </Box>\n </Stack>\n </Stack>\n );\n};\n\nconst styles = {\n selectCAOContainer: {\n width: '100%',\n marginBottom: '20px',\n },\n selectCAO: {\n width: '100%',\n '& .MuiInputBase-root': {\n width: '100%',\n },\n '& .MuiSelect-select': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n py: 0,\n },\n '& .MuiFormHelperText-root': {\n display: 'none',\n },\n },\n menuItemLogo: {\n display: 'flex',\n flex: '1',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n};\n\n// eslint-disable-next-line better-mutation/no-mutation\nIssuingOrInspectionSelection.propTypes = {\n credentialAgentOperators: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n logo: PropTypes.string,\n service: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n serviceEndpoint: PropTypes.string.isRequired,\n }),\n ),\n }),\n ).isRequired,\n inProgress: PropTypes.bool.isRequired,\n};\n\nexport default IssuingOrInspectionSelection;\n","import { Typography, Link } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport { useConfig } from '@/utils/ConfigContext.js';\nimport { chainNames } from '@/utils/chainNames.js';\n\nexport const UserAgreement = ({ isWallet }) => {\n const config = useConfig();\n return (\n config.chainName !== chainNames.testnet && (\n <Typography variant=\"subtitle1\" sx={sx.userAgreement}>\n <span>By clicking Add, you agree to our </span>\n {isWallet ? (\n <Link\n target=\"_blank\"\n href=\"https://velocitynetwork.foundation/wp-content/uploads/2022/07/VNF-Wallet-Operator-Agreement-v1.1.pdf\"\n >\n Wallet Developer Agreement\n </Link>\n ) : (\n <Link\n target=\"_blank\"\n href=\"https://www.velocitynetwork.foundation/main2/participation-agreements\"\n >\n Participant Agreement\n </Link>\n )}\n </Typography>\n )\n );\n};\n\nconst sx = {\n userAgreement: {\n marginTop: '10px',\n },\n};\n\n// eslint-disable-next-line better-mutation/no-mutation\nUserAgreement.propTypes = {\n isWallet: PropTypes.bool.isRequired,\n};\n","import { TextInput, required } from 'react-admin';\nimport PropTypes from 'prop-types';\n\nimport { validateServiceEndpoint } from '@/components/organizations/CreateOrganizationUtils.js';\n\nconst CAOSelection = ({ inProgress }) => {\n return (\n <TextInput\n source=\"serviceEndpoint\"\n label=\"Service endpoint URL\"\n validate={[required('Service endpoint URL field is required'), ...validateServiceEndpoint]}\n parse={(value) => value?.trim() ?? ''}\n disabled={inProgress}\n />\n );\n};\n\n// eslint-disable-next-line better-mutation/no-mutation\nCAOSelection.propTypes = {\n inProgress: PropTypes.bool.isRequired,\n};\n\nexport default CAOSelection;\n","import { Form, FormDataConsumer, SaveButton } from 'react-admin';\nimport { Box, Button, Stack, Typography } from '@mui/material';\nimport KeyboardArrowLeftIcon from '@mui/icons-material/KeyboardArrowLeft';\n\nimport PropTypes from 'prop-types';\nimport { useIsIssuingInspection } from '../../hooks/useIsIssuingInspection.js';\nimport IssuingOrInspectionSelection from './components/IssuingOrInspectionSelection.jsx';\nimport WebWalletSelection from './components/WebWalletSelection.jsx';\nimport HolderWalletSelection from './components/HolderWalletSelection.jsx';\nimport { UserAgreement } from './components/UserAgreement.jsx';\nimport CAOSelection from './components/CAOSelection.jsx';\n\nimport { getTitle, isAddButtonDisabled } from '../../utils/index.js';\n\nconst selectedStep = 2;\n\n// eslint-disable-next-line prefer-arrow-functions/prefer-arrow-functions\nexport const ServiceEndpointSelection = ({\n credentialAgentOperators,\n selectedServiceType,\n inProgress,\n onCreate,\n handleBack,\n}) => {\n const { isIssuingOrInspection, isCAO, isWallet, isWebWallet, isHolderWallet } =\n useIsIssuingInspection(selectedServiceType);\n\n return (\n <>\n <Typography variant=\"pm\" sx={styles.step}>\n Step 2/2\n </Typography>\n <Typography sx={styles.title} mb={2}>\n {getTitle(selectedStep)}\n </Typography>\n <Typography>Please complete the details below to continue</Typography>\n <Form onSubmit={onCreate} mode=\"onChange\" defaultValues={{ serviceEndpoint: '' }}>\n <Stack sx={styles.endpointForm}>\n {isIssuingOrInspection && (\n <IssuingOrInspectionSelection\n credentialAgentOperators={credentialAgentOperators}\n inProgress={inProgress}\n />\n )}\n\n {isWebWallet && <WebWalletSelection inProgress={inProgress} />}\n\n {isHolderWallet && <HolderWalletSelection inProgress={inProgress} />}\n\n {isCAO && <CAOSelection inProgress={inProgress} />}\n <UserAgreement isWallet={isWallet} />\n <Box sx={styles.buttonBlock}>\n <Button\n variant=\"outlined\"\n sx={[styles.button, styles.backButton]}\n onClick={handleBack}\n startIcon={<KeyboardArrowLeftIcon />}\n disabled={inProgress}\n >\n Back\n </Button>\n <FormDataConsumer>\n {({ formData }) => {\n const isDisabled = isAddButtonDisabled(\n inProgress,\n isIssuingOrInspection,\n isCAO,\n isWebWallet,\n isHolderWallet,\n formData,\n );\n\n return (\n <SaveButton\n variant=\"outlined\"\n alwaysEnable={false}\n disabled={isDisabled}\n icon={null}\n label=\"Add\"\n sx={[styles.button, styles.saveButton, isDisabled && styles.saveButtonDisabled]}\n />\n );\n }}\n </FormDataConsumer>\n </Box>\n </Stack>\n </Form>\n </>\n );\n};\n\nconst styles = {\n step: { color: (theme) => theme.palette.primary.main, pb: '20px', display: 'block' },\n title: {\n fontSize: '32px',\n fontWeight: '600',\n lineHeight: '38px',\n },\n endpointForm: {\n marginTop: '20px',\n },\n buttonBlock: {\n display: 'flex',\n marginTop: '40px',\n justifyContent: 'center',\n },\n button: { px: 4, py: 1, fontSize: '16px', width: '160px' },\n backButton: {\n marginRight: '20px',\n borderColor: 'secondary.light',\n color: 'text.primary',\n },\n saveButton: {\n display: 'flex',\n flexDirection: 'row-reverse',\n gap: '10px',\n '&:disabled': {\n color: 'primary.main',\n borderColor: 'primary.main',\n },\n },\n saveButtonDisabled: {\n '&:disabled': {\n color: 'text.disabled',\n borderColor: 'secondary.light',\n },\n },\n};\n// eslint-disable-next-line better-mutation/no-mutation\nServiceEndpointSelection.propTypes = {\n credentialAgentOperators: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n logo: PropTypes.string,\n service: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n serviceEndpoint: PropTypes.string.isRequired,\n }),\n ),\n }),\n ).isRequired,\n selectedServiceType: PropTypes.string.isRequired,\n inProgress: PropTypes.bool.isRequired,\n onCreate: PropTypes.func.isRequired,\n handleBack: PropTypes.func.isRequired,\n};\n\nexport default ServiceEndpointSelection;\n","import { Box, Button, Typography } from '@mui/material';\nimport KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\nimport { Form } from 'react-admin';\nimport PropTypes from 'prop-types';\nimport Loading from '@/components/Loading.jsx';\nimport CustomDropDown from '@/components/common/CustomDropDown.jsx';\nimport serviceTypes from '@/utils/serviceTypes.js';\n\nimport { getTitle } from '../../utils/index.js';\n\nconst selectedStep = 1;\n\nexport const ServiceTypeSelection = ({\n handleNext,\n isLoading,\n selectedServiceType,\n setSelectedServiceType,\n onDoLater,\n}) => {\n return (\n <>\n <Typography variant=\"pm\" sx={styles.step}>\n Step 1/2\n </Typography>\n <Typography variant=\"h1\" mb={2}>\n {getTitle(selectedStep)}\n </Typography>\n <Typography mb={4}>Select the type of service you wish to add.</Typography>\n <Form record={{}}>\n <CustomDropDown\n source=\"selectedServiceType\"\n label=\"Select type of service\"\n value={selectedServiceType}\n onChange={setSelectedServiceType}\n items={serviceTypes}\n stringValue={(item) => item.title}\n parse={(value) => value.id}\n disabled={false}\n />\n <Box sx={[styles.buttonBlock, !onDoLater && styles.rightButton]}>\n {onDoLater && (\n <Button sx={[styles.button]} variant=\"outlined\" color=\"secondary\" onClick={onDoLater}>\n Do Later\n </Button>\n )}\n <Button\n disabled={!selectedServiceType || isLoading}\n variant=\"outlined\"\n sx={[styles.button]}\n endIcon={\n selectedServiceType && isLoading ? (\n <Loading color=\"error\" sx={styles.loader} size={26} />\n ) : (\n <KeyboardArrowRightIcon />\n )\n }\n onClick={handleNext}\n >\n Next\n </Button>\n </Box>\n </Form>\n </>\n );\n};\n\nconst styles = {\n buttonBlock: {\n display: 'flex',\n marginTop: '40px',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '30px',\n },\n rightButton: {\n justifyContent: 'flex-end',\n },\n step: { color: (theme) => theme.palette.primary.main, pb: '20px', display: 'block' },\n button: { px: 4, py: 1, fontSize: '16px', width: '160px' },\n};\n// eslint-disable-next-line better-mutation/no-mutation\nServiceTypeSelection.propTypes = {\n handleNext: PropTypes.func.isRequired,\n isLoading: PropTypes.bool,\n selectedServiceType: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.number]),\n setSelectedServiceType: PropTypes.func.isRequired,\n onDoLater: PropTypes.func,\n};\n\n// eslint-disable-next-line better-mutation/no-mutation\nServiceTypeSelection.defaultProps = {\n isLoading: false,\n selectedServiceType: null,\n onDoLater: null,\n};\n\nexport default ServiceTypeSelection;\n"],"names":["Autocomplete","styles","selectedStep"],"mappings":"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"}
|