From 289d2e5ef4c8e9e1962dd226aebf8a36cacd995b Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Thu, 6 May 2021 15:20:25 -0700 Subject: [PATCH] Fixed editor discrepency --- .../component/properties/ArrayProperty.js | 77 ++++++++++--------- .../domain/source/SourceDefinition.js | 11 +++ .../app/metadata/editor/MetadataEditorForm.js | 2 +- ui/src/app/metadata/hooks/utility.js | 25 +++--- 4 files changed, 63 insertions(+), 52 deletions(-) diff --git a/ui/src/app/metadata/component/properties/ArrayProperty.js b/ui/src/app/metadata/component/properties/ArrayProperty.js index 1e23ca383..446abfdd9 100644 --- a/ui/src/app/metadata/component/properties/ArrayProperty.js +++ b/ui/src/app/metadata/component/properties/ArrayProperty.js @@ -1,6 +1,6 @@ import { faEye } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import React from 'react'; +import React, { useState } from 'react'; import Translate from '../../../i18n/components/translate'; import { usePropertyWidth } from './hooks'; import { PropertyValue } from './PropertyValue'; @@ -16,30 +16,33 @@ const isUri = (value) => { return true; } -const getItemType = (property) => { - const items = property.items; - const def = 'default'; - return items ? items.widget ? items.widget.id : def : def; -} - const isUrl = (str) => { return isUri(str); } -export function ArrayProperty ({ property, columns, index, onPreview }) { +export function ArrayProperty ({ property, columns, onPreview }) { - const keys = property.value.reduce((val, version) => version ? version.length > val ? version.length : val : val, 0); - const range = [...Array(keys).keys()]; + const width = usePropertyWidth(columns); - const dataList = property.widget?.data; + const [keys, setKeys] = React.useState(0); + const [range, setRange] = React.useState([]); + const [dataList, setDataList] = React.useState([]); - const width = usePropertyWidth(columns); + React.useEffect(() => { + setKeys(property.value.reduce((val, version) => version ? version.length > val ? version.length : val : val, 0)); + setDataList(property.items?.enum); - const type = getItemType(property); + + console.log(property, keys); + }, [property]); + + React.useEffect(() => { + setRange([...Array(keys).keys()]) + }, [keys]); return ( <> - {property.items.type === 'object' && + {property?.items?.type === 'object' &&
{ property.name }
{range.map((i) => @@ -54,10 +57,11 @@ export function ArrayProperty ({ property, columns, index, onPreview }) { } { property.value.map((version, vIdx) => - {version && version[vIdx] && + {version && version[i] && } - {(!version || !version[vIdx]) &&
+ {(!version || !version[i]) && +
-
} @@ -70,11 +74,25 @@ export function ArrayProperty ({ property, columns, index, onPreview }) { )}
} - {property.items.type === 'string' && + {property?.items?.type === 'string' && <> - { (type === 'datalist' || type === 'select' || !property.width || !property.widget.id) ? -
+ { property?.items?.enum?.length ? + <> + {dataList.map((item, itemIdx) => +
+ {item.differences && Changed: } + { item.label } + { property.value.map((v, vIdx) => +
+ {v && v.indexOf(item.key) > -1 && true } + {(!v || !(v.indexOf(item.key) > -1)) && false } +
+ )} +
+ )} + + : +
{property.differences && Changed: } { property.name } {property.value.map((v, vidx) => @@ -83,7 +101,7 @@ export function ArrayProperty ({ property, columns, index, onPreview }) { {(v && v.length > 0) &&
    {v.map((item, idx) => -
  • 1 ? 'py-2' : ''} ${'border-0'}`}> +
  • 1 ? '' : 'border-0'}`}> {onPreview && isUrl(item) && <>
- : property.widget && property.widget.data ? - <> - {dataList.map((item, itemIdx) => -
- {item.differences && Changed: } - { item.label } - { property.value.map((v, vIdx) => -
- {v && v.indexOf(item.key) > -1 && true } - {(!v || !(v.indexOf(item.key) > -1)) && false } -
- )} -
- )} - - : ''} + } } diff --git a/ui/src/app/metadata/domain/source/SourceDefinition.js b/ui/src/app/metadata/domain/source/SourceDefinition.js index 332e6f9a3..18b4b55b2 100644 --- a/ui/src/app/metadata/domain/source/SourceDefinition.js +++ b/ui/src/app/metadata/domain/source/SourceDefinition.js @@ -9,6 +9,17 @@ export const SourceBase = { //${API_BASE_PATH}/ui/MetadataSources validatorParams: [/*getAllOtherIds*/], + parse: (data) => { + const parsed = {...data}; + if (parsed?.securityInfo?.x509CertificateAvailable) { + if (!parsed?.securityInfo?.x509Certificates) { + parsed.securityInfo.x509Certificates = []; + } + parsed.securityInfo.x509Certificates.push({}) + } + return parsed; + }, + bindings: { '/securityInfo/x509CertificateAvailable': [ { diff --git a/ui/src/app/metadata/editor/MetadataEditorForm.js b/ui/src/app/metadata/editor/MetadataEditorForm.js index 1d0d9adc5..20e885950 100644 --- a/ui/src/app/metadata/editor/MetadataEditorForm.js +++ b/ui/src/app/metadata/editor/MetadataEditorForm.js @@ -20,7 +20,7 @@ export function MetadataEditorForm ({ metadata, definition, schema, current }) { <>
setData(formData) } + onChange={({ formData }) => setData(definition.parse(formData)) } onSubmit={() => onSubmit()} schema={schema} uiSchema={uiSchema} diff --git a/ui/src/app/metadata/hooks/utility.js b/ui/src/app/metadata/hooks/utility.js index ad5acdb65..1ff365e91 100644 --- a/ui/src/app/metadata/hooks/utility.js +++ b/ui/src/app/metadata/hooks/utility.js @@ -20,8 +20,7 @@ export function getStepProperty(property, model, definitions) { property, model, definitions - ), - widget: property.widget instanceof String ? { id: property.widget } : { ...property.widget } + ) }; } @@ -119,14 +118,15 @@ export const assignValueToProperties = (models, properties, definition) => { return properties.map(prop => { const differences = getDifferences(models, prop); - const widget = prop.type === 'array' && prop.widget && prop.widget.data ? ({ - ...prop.widget, - data: prop.widget.data.map(item => ({ - ...item, + const items = prop.type === 'array' && prop.items?.enum ? ({ + ...prop.items, + enum: prop.items.enum.map(item => ({ + key: item, + label: `label.attribute-${item}`, differences: models .map((model) => { const value = model[prop.id]; - return value ? value.indexOf(item.key) > -1 : false; + return value ? value.indexOf(item) > -1 : false; }) .reduce((current, val) => current !== val ? true : false, false) })) @@ -150,7 +150,10 @@ export const assignValueToProperties = (models, properties, definition) => { value: models.map(model => { return model[prop.id]; }), - widget + items: { + ...prop.items, + ...items + } }; } }); @@ -162,12 +165,6 @@ export const getLimitedPropertiesFn = (properties) => { .filter(p => p.differences) .map(p => { const parsed = { ...p }; - if (p.widget && p.widget.data) { - parsed.widget = { - ...p.widget, - data: p.widget.data.filter(item => item.differences) - }; - } if (p.properties) { parsed.properties = getLimitedPropertiesFn(p.properties); }