@sphereon/ui-components.ssi-react 0.4.1-unstable.56 → 0.4.1-unstable.59

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.
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { RankedTester } from '@jsonforms/core';
3
+ export declare const customArrayControlTester: RankedTester;
4
+ declare const _default: React.ComponentType<import("@jsonforms/core").OwnPropsOfControl>;
5
+ export default _default;
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { JsonFormsDispatch, withJsonFormsControlProps } from '@jsonforms/react';
3
+ import { and, isArrayObjectControl, optionIs, rankWith } from '@jsonforms/core';
4
+ import { ButtonIcon } from '@sphereon/ui-components.core';
5
+ import IconButton from '../../../buttons/IconButton';
6
+ import PrimaryButton from '../../../buttons/PrimaryButton';
7
+ import { JsonFormsCustomControlKey } from '../../../../types';
8
+ const CustomArrayControl = (props) => {
9
+ const { data = [], handleChange, path, schema, uischema, label } = props;
10
+ const elements = uischema.options?.detail?.elements || [];
11
+ const itemSchema = schema.items && !Array.isArray(schema.items) ? schema.items : {};
12
+ const handleAdd = async () => {
13
+ handleChange(path, [...data, {}]);
14
+ };
15
+ const handleRemove = async (index) => {
16
+ const newData = data.filter((_, i) => i !== index);
17
+ handleChange(path, newData);
18
+ };
19
+ const getItemElements = () => {
20
+ return data.map((item, index) => _jsx("div", { style: { display: 'flex', flexDirection: 'row', gap: 12 }, children: _jsx("div", { style: { display: 'flex', flexDirection: 'row', borderRadius: 8, overflow: 'hidden', width: '100%' }, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 24, width: '100%' }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 12 }, children: [_jsx("div", { style: { display: 'flex', flexDirection: 'row', gap: 24, padding: 24, border: '1px solid #C4C4C4', borderRadius: 8, flexGrow: 1, alignItems: 'center' }, children: getFieldElements(elements, `${path}.${index}`) }), _jsx(IconButton, { icon: ButtonIcon.DELETE, onClick: () => handleRemove(index) })] }), item?.type === 'object' &&
21
+ _jsx("div", { style: { marginLeft: 24, display: 'flex', flexDirection: 'row' }, children: getChildFieldElements(elements, `${path}.${index}`) })] }) }) }, index));
22
+ };
23
+ const getFieldElements = (elements, path) => {
24
+ return elements
25
+ .filter(element => element?.options?.type !== JsonFormsCustomControlKey.ARRAY)
26
+ .map((element, i) => _jsx(JsonFormsDispatch, { uischema: element, schema: itemSchema, path: path }, i));
27
+ };
28
+ const getChildFieldElements = (elements, path) => {
29
+ return elements
30
+ .filter(element => element?.options?.type === JsonFormsCustomControlKey.ARRAY)
31
+ .map((element, i) => {
32
+ const childrenArraySchema = itemSchema.properties?.children;
33
+ const resolvedChildrenSchema = {
34
+ ...childrenArraySchema,
35
+ items: itemSchema
36
+ };
37
+ const childrenUiSchema = {
38
+ ...element,
39
+ type: "Control",
40
+ scope: "#",
41
+ options: {
42
+ ...uischema.options,
43
+ type: JsonFormsCustomControlKey.ARRAY,
44
+ detail: {
45
+ elements
46
+ }
47
+ }
48
+ };
49
+ return (_jsx(JsonFormsDispatch, { uischema: childrenUiSchema, schema: resolvedChildrenSchema, path: path }, i));
50
+ });
51
+ };
52
+ return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 28, width: '100%' }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'row', alignItems: 'center' }, children: [_jsx("div", { style: { color: 'black', fontSize: 16, fontWeight: '400' }, children: label }), _jsx(PrimaryButton, { caption: uischema.options?.addLabel || '+', onClick: handleAdd, style: {
53
+ marginLeft: 'auto',
54
+ height: 33,
55
+ width: 120
56
+ } })] }), getItemElements()] }));
57
+ };
58
+ export const customArrayControlTester = rankWith(5, and(isArrayObjectControl, optionIs('type', JsonFormsCustomControlKey.ARRAY)));
59
+ export default withJsonFormsControlProps(CustomArrayControl);
@@ -8,7 +8,7 @@ import PersonPlaceholder from '../../../assets/placeholders/PersonPlaceholder';
8
8
  import FileSelection from '../../FileSelection';
9
9
  import { base64UriToFile } from '../../../../utils';
10
10
  import { PassportPhotoControlContainerStyled as Container, PassportPhotoControlDragAndDropBoxContainerStyled as DragAndDropBoxContainer, PassportPhotoControlPassportPhotoContainerStyled as PassportPhotoContainer, PassportPhotoControlPassportPhotoImageStyled as PassportPhotoImage, } from '../../../../styles';
11
- import { FileSelectionFieldType } from '../../../../types';
11
+ import { FileSelectionFieldType, JsonFormsCustomControlKey } from '../../../../types';
12
12
  const PassportPhotoControl = (props) => {
13
13
  const { data, handleChange, path } = props;
14
14
  const [image, setImage] = useState(data && { file: base64UriToFile(data.base64Uri, data.fileName, data.mimeType), base64Uri: data.base64Uri });
@@ -30,5 +30,5 @@ const PassportPhotoControl = (props) => {
30
30
  };
31
31
  return (_jsxs(Container, { children: [_jsxs(DragAndDropBoxContainer, { children: [_jsx(DragAndDropBox, { caption: Localization.translate('drag_and_drop_upload_image_caption'), description: Localization.translate('credential_attach_image_description'), onChangeFile: onAddImage }), _jsx(PassportPhotoContainer, { children: image ? _jsx(PassportPhotoImage, { src: image.base64Uri, alt: Localization.translate('passport_photo_alt') }) : _jsx(PersonPlaceholder, {}) })] }), image && _jsx(FileSelection, { file: image.file, fileType: FileSelectionFieldType.IMAGE, onRemove: onRemoveImage })] }));
32
32
  };
33
- export const passportPhotoControlTester = rankWith(3, and(isObjectControl, optionIs('type', 'passportPhoto')));
33
+ export const passportPhotoControlTester = rankWith(3, and(isObjectControl, optionIs('type', JsonFormsCustomControlKey.PASSPORT_PHOTO)));
34
34
  export default withJsonFormsControlProps(PassportPhotoControl);
package/dist/index.d.ts CHANGED
@@ -37,6 +37,7 @@ import ComboBox from './components/fields/ComboBox';
37
37
  import DragAndDropBox from './components/fields/DragAndDropBox';
38
38
  import PersonPlaceholder from './components/assets/placeholders/PersonPlaceholder';
39
39
  import PassportPhotoControl, { passportPhotoControlTester } from './components/fields/JSONForms/PassportPhotoControl';
40
+ import CustomArrayControl, { customArrayControlTester } from './components/fields/JSONForms/CustomArrayControl';
40
41
  import CredentialIssuanceWizardView from './components/views/CredentialIssuanceWizardView';
41
42
  import PaginationControls from './components/views/SSITableView/PaginationControls';
42
43
  import PaginationControlsProps from './components/views/SSITableView/PaginationControls';
@@ -67,4 +68,4 @@ export * from './styles/fonts';
67
68
  export * from './types';
68
69
  export * from './helpers';
69
70
  export * from './utils';
70
- export { SSICredentialCardView, CredentialMiniCardView, CredentialMiniCardViewProps, SSIStatusLabel, SSICheckmarkBadge, SSIExclamationMarkBadge, SSIPlaceholderLogo, SSILogo, SSIAddIcon, SSIFilterIcon, SSIArrowDownIcon, SSITypeLabel, IconButton, PrimaryButton, SecondaryButton, DropDownList, SSITableView, SSITableViewHeader, SSITabView, SSITabViewHeader, SSIProfileIcon, SSIToastContainer, SSICheckbox, SSIActivityIndicator, SSIHoverText, StepMarker, ProgressStepIndicator, PaginationControls, PaginationControlsProps, Row, DocumentIcon, CrossIcon, ImageIcon, MeatBallsIcon, PencilIcon, ViewIcon, CopyIcon, DeleteIcon, FileSelection, ComboBox, DragAndDropBox, PersonPlaceholder, PassportPhotoControl, passportPhotoControlTester, CredentialIssuanceWizardView, CredentialViewItem, JSONDataView, TextInputField, WarningImage, FormView, InformationRequestView, ContactViewItem, CapitolIcon, ChevronIcon, ManIcon, LaptopIcon, StoreIcon, RoleIconView, RoleViewItem, Listbox, ActivityIcon, ContactIcon, BellIcon, CredentialIcon };
71
+ export { SSICredentialCardView, CredentialMiniCardView, CredentialMiniCardViewProps, SSIStatusLabel, SSICheckmarkBadge, SSIExclamationMarkBadge, SSIPlaceholderLogo, SSILogo, SSIAddIcon, SSIFilterIcon, SSIArrowDownIcon, SSITypeLabel, IconButton, PrimaryButton, SecondaryButton, DropDownList, SSITableView, SSITableViewHeader, SSITabView, SSITabViewHeader, SSIProfileIcon, SSIToastContainer, SSICheckbox, SSIActivityIndicator, SSIHoverText, StepMarker, ProgressStepIndicator, PaginationControls, PaginationControlsProps, Row, DocumentIcon, CrossIcon, ImageIcon, MeatBallsIcon, PencilIcon, ViewIcon, CopyIcon, DeleteIcon, FileSelection, ComboBox, DragAndDropBox, PersonPlaceholder, PassportPhotoControl, passportPhotoControlTester, CustomArrayControl, customArrayControlTester, CredentialIssuanceWizardView, CredentialViewItem, JSONDataView, TextInputField, WarningImage, FormView, InformationRequestView, ContactViewItem, CapitolIcon, ChevronIcon, ManIcon, LaptopIcon, StoreIcon, RoleIconView, RoleViewItem, Listbox, ActivityIcon, ContactIcon, BellIcon, CredentialIcon };
package/dist/index.js CHANGED
@@ -37,6 +37,7 @@ import ComboBox from './components/fields/ComboBox';
37
37
  import DragAndDropBox from './components/fields/DragAndDropBox';
38
38
  import PersonPlaceholder from './components/assets/placeholders/PersonPlaceholder';
39
39
  import PassportPhotoControl, { passportPhotoControlTester } from './components/fields/JSONForms/PassportPhotoControl';
40
+ import CustomArrayControl, { customArrayControlTester } from './components/fields/JSONForms/CustomArrayControl';
40
41
  import CredentialIssuanceWizardView from './components/views/CredentialIssuanceWizardView';
41
42
  import PaginationControls from './components/views/SSITableView/PaginationControls';
42
43
  import PaginationControlsProps from './components/views/SSITableView/PaginationControls';
@@ -66,4 +67,4 @@ export * from './styles/fonts';
66
67
  export * from './types';
67
68
  export * from './helpers';
68
69
  export * from './utils';
69
- export { SSICredentialCardView, CredentialMiniCardView, SSIStatusLabel, SSICheckmarkBadge, SSIExclamationMarkBadge, SSIPlaceholderLogo, SSILogo, SSIAddIcon, SSIFilterIcon, SSIArrowDownIcon, SSITypeLabel, IconButton, PrimaryButton, SecondaryButton, DropDownList, SSITableView, SSITableViewHeader, SSITabView, SSITabViewHeader, SSIProfileIcon, SSIToastContainer, SSICheckbox, SSIActivityIndicator, SSIHoverText, StepMarker, ProgressStepIndicator, PaginationControls, PaginationControlsProps, DocumentIcon, CrossIcon, ImageIcon, MeatBallsIcon, PencilIcon, ViewIcon, CopyIcon, DeleteIcon, FileSelection, ComboBox, DragAndDropBox, PersonPlaceholder, PassportPhotoControl, passportPhotoControlTester, CredentialIssuanceWizardView, CredentialViewItem, JSONDataView, TextInputField, WarningImage, FormView, InformationRequestView, ContactViewItem, CapitolIcon, ChevronIcon, ManIcon, LaptopIcon, StoreIcon, RoleIconView, RoleViewItem, Listbox, ActivityIcon, ContactIcon, BellIcon, CredentialIcon };
70
+ export { SSICredentialCardView, CredentialMiniCardView, SSIStatusLabel, SSICheckmarkBadge, SSIExclamationMarkBadge, SSIPlaceholderLogo, SSILogo, SSIAddIcon, SSIFilterIcon, SSIArrowDownIcon, SSITypeLabel, IconButton, PrimaryButton, SecondaryButton, DropDownList, SSITableView, SSITableViewHeader, SSITabView, SSITabViewHeader, SSIProfileIcon, SSIToastContainer, SSICheckbox, SSIActivityIndicator, SSIHoverText, StepMarker, ProgressStepIndicator, PaginationControls, PaginationControlsProps, DocumentIcon, CrossIcon, ImageIcon, MeatBallsIcon, PencilIcon, ViewIcon, CopyIcon, DeleteIcon, FileSelection, ComboBox, DragAndDropBox, PersonPlaceholder, PassportPhotoControl, passportPhotoControlTester, CustomArrayControl, customArrayControlTester, CredentialIssuanceWizardView, CredentialViewItem, JSONDataView, TextInputField, WarningImage, FormView, InformationRequestView, ContactViewItem, CapitolIcon, ChevronIcon, ManIcon, LaptopIcon, StoreIcon, RoleIconView, RoleViewItem, Listbox, ActivityIcon, ContactIcon, BellIcon, CredentialIcon };
@@ -1,6 +1,8 @@
1
1
  import { materialRenderers } from '@jsonforms/material-renderers';
2
2
  import PassportPhotoControl, { passportPhotoControlTester } from '../components/fields/JSONForms/PassportPhotoControl';
3
+ import CustomArrayControl, { customArrayControlTester } from '../components/fields/JSONForms/CustomArrayControl';
3
4
  export const jsonFormsMaterialRenderers = [
4
5
  ...materialRenderers,
5
6
  { tester: passportPhotoControlTester, renderer: PassportPhotoControl },
7
+ { tester: customArrayControlTester, renderer: CustomArrayControl },
6
8
  ];
@@ -204,6 +204,9 @@
204
204
  .grid {
205
205
  display: grid;
206
206
  }
207
+ .hidden {
208
+ display: none;
209
+ }
207
210
  .inline-block {
208
211
  display: inline-block;
209
212
  }
@@ -5,3 +5,4 @@ export * from './indicator';
5
5
  export * from './field';
6
6
  export * from './view';
7
7
  export * from './icon';
8
+ export * from './jsonForms';
@@ -5,3 +5,4 @@ export * from './indicator';
5
5
  export * from './field';
6
6
  export * from './view';
7
7
  export * from './icon';
8
+ export * from './jsonForms';
@@ -0,0 +1,4 @@
1
+ export declare enum JsonFormsCustomControlKey {
2
+ ARRAY = "array",
3
+ PASSPORT_PHOTO = "passportPhoto"
4
+ }
@@ -0,0 +1,5 @@
1
+ export var JsonFormsCustomControlKey;
2
+ (function (JsonFormsCustomControlKey) {
3
+ JsonFormsCustomControlKey["ARRAY"] = "array";
4
+ JsonFormsCustomControlKey["PASSPORT_PHOTO"] = "passportPhoto";
5
+ })(JsonFormsCustomControlKey || (JsonFormsCustomControlKey = {}));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sphereon/ui-components.ssi-react",
3
3
  "private": false,
4
- "version": "0.4.1-unstable.56+3af5fcf",
4
+ "version": "0.4.1-unstable.59+77b096c",
5
5
  "description": "SSI UI components for React",
6
6
  "repository": "git@github.com:Sphereon-Opensource/UI-Components.git",
7
7
  "author": "Sphereon <dev@sphereon.com>",
@@ -50,7 +50,7 @@
50
50
  "@mui/x-date-pickers": "^6.19.5",
51
51
  "@sphereon/ssi-sdk.data-store": "0.34.1-feature.SSISDK.45.94",
52
52
  "@sphereon/ssi-types": "0.34.1-feature.SSISDK.45.94",
53
- "@sphereon/ui-components.core": "0.4.1-unstable.56+3af5fcf",
53
+ "@sphereon/ui-components.core": "0.4.1-unstable.59+77b096c",
54
54
  "@tanstack/react-table": "^8.9.3",
55
55
  "react-dom": "npm:react-dom@18.3.1",
56
56
  "react-json-tree": "^0.18.0",
@@ -70,5 +70,5 @@
70
70
  "peerDependencies": {
71
71
  "react": ">= 18"
72
72
  },
73
- "gitHead": "3af5fcfb478f14655aed548ea279dda3ff8b518f"
73
+ "gitHead": "77b096c9997543ebe60753da26328678fba4070e"
74
74
  }