@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.
Files changed (73) hide show
  1. package/dist/chunks/HolderWalletSelection.BYj3foq0.js +167 -0
  2. package/dist/chunks/HolderWalletSelection.BYj3foq0.js.map +1 -0
  3. package/dist/chunks/HolderWalletSelection.BvPFTrTh.js +166 -0
  4. package/dist/chunks/HolderWalletSelection.BvPFTrTh.js.map +1 -0
  5. package/dist/chunks/{ServicesEdit.BnnqC203.js → ServicesEdit.CrmS66vz.js} +75 -50
  6. package/dist/chunks/ServicesEdit.CrmS66vz.js.map +1 -0
  7. package/dist/chunks/{ServicesEdit.DDgjS5kU.js → ServicesEdit.DFxcohIF.js} +75 -50
  8. package/dist/chunks/ServicesEdit.DFxcohIF.js.map +1 -0
  9. package/dist/chunks/{SetInvitationService.PxAGwk-I.js → SetInvitationService.BeU7-IBo.js} +3 -3
  10. package/dist/chunks/{SetInvitationService.PxAGwk-I.js.map → SetInvitationService.BeU7-IBo.js.map} +1 -1
  11. package/dist/chunks/{SetInvitationService.ZT5lP003.js → SetInvitationService.DtVH6OkH.js} +3 -3
  12. package/dist/chunks/{SetInvitationService.ZT5lP003.js.map → SetInvitationService.DtVH6OkH.js.map} +1 -1
  13. package/dist/chunks/{ValidateTextInput.D5kgjulG.js → ValidateTextInput.1Fv1GPyZ.js} +2 -2
  14. package/dist/chunks/{ValidateTextInput.D5kgjulG.js.map → ValidateTextInput.1Fv1GPyZ.js.map} +1 -1
  15. package/dist/chunks/{ValidateTextInput.DEBaVB1L.js → ValidateTextInput.DPruGgff.js} +2 -2
  16. package/dist/chunks/{ValidateTextInput.DEBaVB1L.js.map → ValidateTextInput.DPruGgff.js.map} +1 -1
  17. package/dist/chunks/{index.Cmn4FlUL.js → index.BDTIIDNe.js} +251 -114
  18. package/dist/chunks/index.BDTIIDNe.js.map +1 -0
  19. package/dist/chunks/{index.YjnxLFjk.js → index.CaxYybSL.js} +115 -56
  20. package/dist/chunks/index.CaxYybSL.js.map +1 -0
  21. package/dist/chunks/{index.DIizFYFZ.js → index.Cjk52g3G.js} +115 -56
  22. package/dist/chunks/index.Cjk52g3G.js.map +1 -0
  23. package/dist/chunks/{index.DMWKdmxs.js → index.DFMQZMWE.js} +12 -2
  24. package/dist/chunks/index.DFMQZMWE.js.map +1 -0
  25. package/dist/chunks/{index.DND10PiY.js → index.DTlm8AhC.js} +11 -1
  26. package/dist/chunks/index.DTlm8AhC.js.map +1 -0
  27. package/dist/chunks/{index.CYCWawJT.js → index.DmF-wFBs.js} +249 -112
  28. package/dist/chunks/index.DmF-wFBs.js.map +1 -0
  29. package/dist/chunks/{serviceTypes.D7c4G5GY.js → serviceTypes.BWVBK33e.js} +52 -31
  30. package/dist/chunks/serviceTypes.BWVBK33e.js.map +1 -0
  31. package/dist/chunks/{serviceTypes.CxLXtDIT.js → serviceTypes.BbBTNXB9.js} +52 -31
  32. package/dist/chunks/serviceTypes.BbBTNXB9.js.map +1 -0
  33. package/dist/components/common.cjs +1 -1
  34. package/dist/components/common.js +1 -1
  35. package/dist/components/invitations.cjs +1 -1
  36. package/dist/components/invitations.js +1 -1
  37. package/dist/components/organizations.cjs +1 -1
  38. package/dist/components/organizations.js +1 -1
  39. package/dist/components/services.cjs +1 -1
  40. package/dist/components/services.js +1 -1
  41. package/dist/index.cjs +1 -1
  42. package/dist/index.js +1 -1
  43. package/dist/pages/invitations.cjs +5 -6
  44. package/dist/pages/invitations.cjs.map +1 -1
  45. package/dist/pages/invitations.js +4 -5
  46. package/dist/pages/invitations.js.map +1 -1
  47. package/dist/pages/organizations.cjs +11 -16
  48. package/dist/pages/organizations.cjs.map +1 -1
  49. package/dist/pages/organizations.js +10 -15
  50. package/dist/pages/organizations.js.map +1 -1
  51. package/dist/pages/services.cjs +27 -30
  52. package/dist/pages/services.cjs.map +1 -1
  53. package/dist/pages/services.js +26 -29
  54. package/dist/pages/services.js.map +1 -1
  55. package/package.json +3 -3
  56. package/dist/chunks/ServicesEdit.BnnqC203.js.map +0 -1
  57. package/dist/chunks/ServicesEdit.DDgjS5kU.js.map +0 -1
  58. package/dist/chunks/index.CYCWawJT.js.map +0 -1
  59. package/dist/chunks/index.Cmn4FlUL.js.map +0 -1
  60. package/dist/chunks/index.DIizFYFZ.js.map +0 -1
  61. package/dist/chunks/index.DMWKdmxs.js.map +0 -1
  62. package/dist/chunks/index.DND10PiY.js.map +0 -1
  63. package/dist/chunks/index.YjnxLFjk.js.map +0 -1
  64. package/dist/chunks/invitations.BI_Qo5Ca.js +0 -10
  65. package/dist/chunks/invitations.BI_Qo5Ca.js.map +0 -1
  66. package/dist/chunks/invitations.BbK6WSY8.js +0 -11
  67. package/dist/chunks/invitations.BbK6WSY8.js.map +0 -1
  68. package/dist/chunks/serviceTypes.CxLXtDIT.js.map +0 -1
  69. package/dist/chunks/serviceTypes.D7c4G5GY.js.map +0 -1
  70. package/dist/chunks/useIsIssuingInspection.C76mY_wb.js +0 -14
  71. package/dist/chunks/useIsIssuingInspection.C76mY_wb.js.map +0 -1
  72. package/dist/chunks/useIsIssuingInspection.DavhBs5B.js +0 -13
  73. 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 { forwardRef, useMemo, useCallback, useEffect, useState } from "react";
3
- import { Typography, Stack, Box, Tooltip, Link, Button } from "@mui/material";
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 { g as getTitle } from "./index.DMWKdmxs.js";
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
- import { b as serviceTypes } from "./serviceTypes.CxLXtDIT.js";
17
- const isAddButtonDisabled = (inProgress, isIssueOrInspection, selectedCAO, serviceEndpoint) => {
18
- return !(isIssueOrInspection && serviceEndpoint && selectedCAO || !isIssueOrInspection && serviceEndpoint) || inProgress;
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 selectedStep$1 = 2;
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
- isIssueOrInspection ? /* @__PURE__ */ jsxs(Stack, { sx: { mt: 2 }, children: [
115
- /* @__PURE__ */ jsxs(Stack, { flexDirection: "row", alignItems: "center", sx: styles$1.selectCAOContainer, children: [
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
- source: "serviceEndpoint",
161
- label: "Service endpoint URL",
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
- config.chainName !== chainNames.testnet && /* @__PURE__ */ jsxs(Typography, { variant: "subtitle1", sx: { marginTop: "10px" }, children: [
171
- /* @__PURE__ */ jsx("span", { children: "By clicking Add, you agree to our " }),
172
- /* @__PURE__ */ jsx(
173
- Link,
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
- isIssueOrInspection,
197
- formData.serviceCAO,
198
- formData.serviceEndpoint
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
- isIssueOrInspection: PropTypes.bool.isRequired,
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.Cmn4FlUL.js.map
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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"}