diff --git a/ui/src/app/metadata/domain/provider/BaseProviderDefinition.js b/ui/src/app/metadata/domain/provider/BaseProviderDefinition.js index 2db57a57b..47c0ce735 100644 --- a/ui/src/app/metadata/domain/provider/BaseProviderDefinition.js +++ b/ui/src/app/metadata/domain/provider/BaseProviderDefinition.js @@ -22,13 +22,15 @@ export const BaseProviderDefinition = { }, parser: (changes, base) => { + const baseFilters = base ? base.metadataFilters.filter(f => MetadataFilterTypes.indexOf(f['@type']) > -1) : [] + 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) + ...baseFilters ] }) : changes); diff --git a/ui/src/app/metadata/hoc/MetadataFormContext.js b/ui/src/app/metadata/hoc/MetadataFormContext.js index a23f417a8..12fd598e8 100644 --- a/ui/src/app/metadata/hoc/MetadataFormContext.js +++ b/ui/src/app/metadata/hoc/MetadataFormContext.js @@ -55,22 +55,22 @@ function reducer(state, action) { /*eslint-disable react-hooks/exhaustive-deps*/ 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]); return ( - {children} + + {children} + ); } diff --git a/ui/src/app/metadata/hoc/MetadataSchema.js b/ui/src/app/metadata/hoc/MetadataSchema.js index 061ee6a36..ec6dd49f0 100644 --- a/ui/src/app/metadata/hoc/MetadataSchema.js +++ b/ui/src/app/metadata/hoc/MetadataSchema.js @@ -21,7 +21,10 @@ export function MetadataSchema({ type, children, wizard = false }) { } /*eslint-disable react-hooks/exhaustive-deps*/ - React.useEffect(() => { loadSchema(definition) }, [definition]); + React.useEffect(() => { + setSchema(null); + loadSchema(definition); + }, [definition]); return ( diff --git a/ui/src/app/metadata/hooks/schema.js b/ui/src/app/metadata/hooks/schema.js index 302c4819a..13b2b9204 100644 --- a/ui/src/app/metadata/hooks/schema.js +++ b/ui/src/app/metadata/hooks/schema.js @@ -16,7 +16,6 @@ export function useUiSchema(definition, schema, current, locked = true) { const step = React.useMemo(() => definition ? definition.steps.find(step => step.id === current) : {fields: []}, [definition, current]); const filled = React.useMemo(() => fillInRootProperties(schemaKeys, ui), [schemaKeys, ui]); - const mapped = React.useMemo(() => { return Object.keys(filled).reduce((sch, key) => { const obj = { ...filled[key] }; @@ -35,6 +34,8 @@ export function useUiSchema(definition, schema, current, locked = true) { }; }, [mapped, step.locked, locked]) + console.log(isLocked); + return {uiSchema: isLocked, step}; } diff --git a/ui/src/app/metadata/view/MetadataWizard.js b/ui/src/app/metadata/view/MetadataWizard.js index 08ad1a235..00031692a 100644 --- a/ui/src/app/metadata/view/MetadataWizard.js +++ b/ui/src/app/metadata/view/MetadataWizard.js @@ -6,7 +6,6 @@ import { MetadataProviderWizard } from '../wizard/MetadataProviderWizard'; import { Wizard } from '../wizard/Wizard'; export function MetadataWizard ({type, data, onCallback}) { - return (