From cda97bb4d1876776502999aa433bdeab4b7732da Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Wed, 2 Jun 2021 08:18:51 -0700 Subject: [PATCH] Fixed issues --- .../component/properties/ArrayProperty.js | 14 ----------- .../EntityAttributesFilterDefinition.js | 6 ++++- .../domain/filter/NameIdFilterDefinition.js | 8 +++--- .../MetadataFilterConfigurationList.js | 5 ++-- .../filter/component/MetadataFilters.js | 9 ++++++- .../domain/provider/BaseProviderDefinition.js | 7 ++++-- ui/src/app/metadata/editor/MetadataEditor.js | 4 ++- .../app/metadata/hoc/FilterTargetPreview.js | 2 -- .../app/metadata/hoc/MetadataFormContext.js | 25 ++++++++++--------- ui/src/app/metadata/new/NewFilter.js | 4 +-- ui/src/app/metadata/view/MetadataOptions.js | 6 ++++- .../wizard/MetadataFilterTypeSelector.js | 10 +++++++- 12 files changed, 57 insertions(+), 43 deletions(-) diff --git a/ui/src/app/metadata/component/properties/ArrayProperty.js b/ui/src/app/metadata/component/properties/ArrayProperty.js index 87ed2cc25..edee5235a 100644 --- a/ui/src/app/metadata/component/properties/ArrayProperty.js +++ b/ui/src/app/metadata/component/properties/ArrayProperty.js @@ -6,20 +6,6 @@ import { usePropertyWidth } from './hooks'; import { PropertyValue } from './PropertyValue'; import { FilterTargetPreview } from '../../hoc/FilterTargetPreview'; - -const isUri = (value) => { - try { - new URL(value); - } catch (err) { - return false; - } - return true; -} - -const isUrl = (str) => { - return isUri(str); -} - export function ArrayProperty ({ property, columns, preview }) { const width = usePropertyWidth(columns); diff --git a/ui/src/app/metadata/domain/filter/EntityAttributesFilterDefinition.js b/ui/src/app/metadata/domain/filter/EntityAttributesFilterDefinition.js index c36bcb347..727df9f8f 100644 --- a/ui/src/app/metadata/domain/filter/EntityAttributesFilterDefinition.js +++ b/ui/src/app/metadata/domain/filter/EntityAttributesFilterDefinition.js @@ -74,7 +74,11 @@ export const EntityAttributesFilterWizard = { ...changes, relyingPartyOverrides: removeNull(changes) }; - } + }, + formatter: (changes) => ({ + ...changes, + '@type': EntityAttributesFilterWizard.type + }) }; diff --git a/ui/src/app/metadata/domain/filter/NameIdFilterDefinition.js b/ui/src/app/metadata/domain/filter/NameIdFilterDefinition.js index c768b48da..4aaffdddd 100644 --- a/ui/src/app/metadata/domain/filter/NameIdFilterDefinition.js +++ b/ui/src/app/metadata/domain/filter/NameIdFilterDefinition.js @@ -18,8 +18,6 @@ export const NameIDFilterWizard = { steps: [], validator: (data = [], current = { resourceId: null }) => { - - const filters = current ? data.filter(s => s.resourceId !== current.resourceId) : data; const names = filters.map(s => s.entityId); @@ -37,7 +35,11 @@ export const NameIDFilterWizard = { } return errors; } - } + }, + formatter: (changes) => ({ + ...changes, + '@type': NameIDFilterWizard.type + }) }; export const NameIDFilterEditor = { diff --git a/ui/src/app/metadata/domain/filter/component/MetadataFilterConfigurationList.js b/ui/src/app/metadata/domain/filter/component/MetadataFilterConfigurationList.js index 2c5f1a7aa..521055c12 100644 --- a/ui/src/app/metadata/domain/filter/component/MetadataFilterConfigurationList.js +++ b/ui/src/app/metadata/domain/filter/component/MetadataFilterConfigurationList.js @@ -6,9 +6,8 @@ import { MetadataFiltersContext } from './MetadataFilters'; import { MetadataFilterConfigurationListItem } from './MetadataFilterConfigurationListItem'; -export function MetadataFilterConfigurationList ({provider, editable = true}) { +export function MetadataFilterConfigurationList ({provider, onDelete, editable = true}) { const filters = React.useContext(MetadataFiltersContext); - const removeFilter = () => {} return ( @@ -26,7 +25,7 @@ export function MetadataFilterConfigurationList ({provider, editable = true}) { editable={ editable } onOrderDown={onOrderDown} onOrderUp={onOrderUp} - onRemove={removeFilter} + onRemove={() => onDelete(filter.resourceId)} /> )} diff --git a/ui/src/app/metadata/domain/filter/component/MetadataFilters.js b/ui/src/app/metadata/domain/filter/component/MetadataFilters.js index ef7f26306..13a22b53c 100644 --- a/ui/src/app/metadata/domain/filter/component/MetadataFilters.js +++ b/ui/src/app/metadata/domain/filter/component/MetadataFilters.js @@ -1,5 +1,6 @@ import React from 'react'; import { useMetadataFilters } from '../../../hooks/api'; +import { DeleteConfirmation } from '../../../component/DeleteConfirmation'; export const MetadataFiltersContext = React.createContext(); @@ -46,6 +47,12 @@ export function MetadataFilters ({ providerId, types = [], filters, children }) return ( - {children(filterData, onUpdate, onDelete, loading)} + + {(block) => + + {children(filterData, onUpdate, (id) => block(() => onDelete(id)), loading)} + + } + ); } \ No newline at end of file diff --git a/ui/src/app/metadata/domain/provider/BaseProviderDefinition.js b/ui/src/app/metadata/domain/provider/BaseProviderDefinition.js index d83d23a42..2db57a57b 100644 --- a/ui/src/app/metadata/domain/provider/BaseProviderDefinition.js +++ b/ui/src/app/metadata/domain/provider/BaseProviderDefinition.js @@ -1,5 +1,6 @@ import { metadataFilterProcessor } from './utility/providerFilterProcessor'; import { DurationOptions } from '../data'; +import { MetadataFilterTypes } from '../filter'; export const BaseProviderDefinition = { schemaPreprocessor: metadataFilterProcessor, @@ -19,13 +20,15 @@ export const BaseProviderDefinition = { return errors; } }, - parser: (changes) => { + parser: (changes, base) => { + const parsed = (changes.metadataFilters ? ({ ...changes, metadataFilters: [ ...changes.metadataFilters.filter((filter, filterName) => ( Object.keys(filter).filter(k => k !== '@type').length > 0 - )) + )), + ...base.metadataFilters.filter(f => MetadataFilterTypes.indexOf(f['@type']) > -1) ] }) : changes); diff --git a/ui/src/app/metadata/editor/MetadataEditor.js b/ui/src/app/metadata/editor/MetadataEditor.js index 60ca70d68..0ccd5eb5f 100644 --- a/ui/src/app/metadata/editor/MetadataEditor.js +++ b/ui/src/app/metadata/editor/MetadataEditor.js @@ -14,6 +14,7 @@ import { getMetadataPath, useMetadataEntities, useMetadataUpdater } from '../hoo import { NavLink } from 'react-router-dom'; import { useTranslator } from '../../i18n/hooks'; import API_BASE_PATH from '../../App.constant'; +import { MetadataObjectContext } from '../hoc/MetadataSelector'; export function MetadataEditor ({ current }) { @@ -27,6 +28,7 @@ export function MetadataEditor ({ current }) { const history = useHistory(); const definition = React.useContext(MetadataDefinitionContext); const schema = React.useContext(MetadataSchemaContext); + const base = React.useContext(MetadataObjectContext); const { state, dispatch } = React.useContext(MetadataFormContext); const { metadata, errors } = state; @@ -38,7 +40,7 @@ export function MetadataEditor ({ current }) { }; function save(metadata) { - update(`/${id}`, definition.parser(metadata)) + update(`/${id}`, definition.parser(metadata, base)) .then(() => { gotoDetail({ refresh: true }); }) diff --git a/ui/src/app/metadata/hoc/FilterTargetPreview.js b/ui/src/app/metadata/hoc/FilterTargetPreview.js index 0ddcadc0d..8bd8550d3 100644 --- a/ui/src/app/metadata/hoc/FilterTargetPreview.js +++ b/ui/src/app/metadata/hoc/FilterTargetPreview.js @@ -33,8 +33,6 @@ export function FilterTargetPreview ({ entityId, children }) { responseType: 'text' }, [entityId]); - console.log(data); - return ( {children(preview, loading, data)} diff --git a/ui/src/app/metadata/hoc/MetadataFormContext.js b/ui/src/app/metadata/hoc/MetadataFormContext.js index e12b33210..a23f417a8 100644 --- a/ui/src/app/metadata/hoc/MetadataFormContext.js +++ b/ui/src/app/metadata/hoc/MetadataFormContext.js @@ -31,9 +31,7 @@ export const setFormDataAction = (payload) => { export const setFormErrorAction = (errors) => { return { type: MetadataFormActions.SET_FORM_ERROR, - payload: { - errors - } + payload: errors } } @@ -42,7 +40,7 @@ function reducer(state, action) { case MetadataFormActions.SET_FORM_ERROR: return { ...state, - errors: action.payload.errors + errors: action.payload }; case MetadataFormActions.SET_FORM_DATA: return { @@ -55,16 +53,19 @@ function reducer(state, action) { } /*eslint-disable react-hooks/exhaustive-deps*/ -function MetadataForm({ children, initial = {}, onChange }) { +function MetadataForm({ children, initial = {} }) { + + const [state, dispatch] = React.useReducer( + reducer, + initialState + ); - const metadata = { - ...useFormattedMetadata(initial) - }; + const base = useFormattedMetadata(initial); - const [state, dispatch] = React.useReducer(reducer, { - ...initialState, - metadata - }); + React.useEffect(() => { + dispatch(setFormDataAction(base)) + dispatch(setFormErrorAction(initialState.errors)) + }, [initial]) const contextValue = React.useMemo(() => ({ state, dispatch }), [state, dispatch]); diff --git a/ui/src/app/metadata/new/NewFilter.js b/ui/src/app/metadata/new/NewFilter.js index 7cfff20ce..318871364 100644 --- a/ui/src/app/metadata/new/NewFilter.js +++ b/ui/src/app/metadata/new/NewFilter.js @@ -54,9 +54,9 @@ export function NewFilter() {
- {(type) => + {(type, base) => - + {(filter, isInvalid) =>
diff --git a/ui/src/app/metadata/view/MetadataOptions.js b/ui/src/app/metadata/view/MetadataOptions.js index 3dc24b5fd..d98cb8271 100644 --- a/ui/src/app/metadata/view/MetadataOptions.js +++ b/ui/src/app/metadata/view/MetadataOptions.js @@ -99,7 +99,11 @@ export function MetadataOptions () {
- {(filters) => } + {(filters, onUpdate, onDelete, loading) => + } } diff --git a/ui/src/app/metadata/wizard/MetadataFilterTypeSelector.js b/ui/src/app/metadata/wizard/MetadataFilterTypeSelector.js index f582f2eb9..4134ae3e0 100644 --- a/ui/src/app/metadata/wizard/MetadataFilterTypeSelector.js +++ b/ui/src/app/metadata/wizard/MetadataFilterTypeSelector.js @@ -24,6 +24,14 @@ export function MetadataFilterTypeSelector({ types = [], children, actions}) { const type = watch('type'); + const [base, setBase] = React.useState({}); + + React.useEffect(() => { + setBase({ + '@type': type + }) + }, [type]) + return (
@@ -48,7 +56,7 @@ export function MetadataFilterTypeSelector({ types = [], children, actions}) {

{type && - children(type) + children(type, base) }
);