diff --git a/ui/src/app/metadata/configuration/container/metadata-options.component.html b/ui/src/app/metadata/configuration/container/metadata-options.component.html index 390d6981c..a03e50663 100644 --- a/ui/src/app/metadata/configuration/container/metadata-options.component.html +++ b/ui/src/app/metadata/configuration/container/metadata-options.component.html @@ -35,7 +35,6 @@

-
Loading... diff --git a/ui/src/app/metadata/configuration/effect/restore.effect.ts b/ui/src/app/metadata/configuration/effect/restore.effect.ts index 7be47103e..f15f21569 100644 --- a/ui/src/app/metadata/configuration/effect/restore.effect.ts +++ b/ui/src/app/metadata/configuration/effect/restore.effect.ts @@ -30,6 +30,8 @@ import { import { SetMetadata } from '../action/configuration.action'; import { removeNulls } from '../../../shared/util'; import { getModel } from '../../../wizard/reducer'; +import { ClearProviderSelection } from '../../provider/action/collection.action'; +import { ClearResolverSelection } from '../../resolver/action/collection.action'; @Injectable() @@ -107,6 +109,15 @@ export class RestoreEffects { ) ); + @Effect() + restoreVersionSuccessClear$ = this.actions$.pipe( + ofType(RestoreActionTypes.RESTORE_VERSION_SUCCESS), + map(action => action.payload), + map(({ id, type }) => + type === 'provider' ? new ClearProviderSelection() : new ClearResolverSelection() + ) + ); + @Effect() restoreVersionSuccessReload$ = this.actions$.pipe( ofType(RestoreActionTypes.RESTORE_VERSION_SUCCESS), diff --git a/ui/src/app/metadata/provider/reducer/index.spec.ts b/ui/src/app/metadata/provider/reducer/index.spec.ts new file mode 100644 index 000000000..7ffb3e9db --- /dev/null +++ b/ui/src/app/metadata/provider/reducer/index.spec.ts @@ -0,0 +1,24 @@ +import { getFilteredListFn } from './'; + +describe('Provider Reducer selectors', () => { + describe(`getFilteredListFn method`, () => { + it('should return a list without the provider`s property', () => { + + const fn = getFilteredListFn('name'); + const name = 'foo'; + const collection = ['foo', 'bar', 'baz']; + const provider = { name }; + + expect(fn(collection, provider)).toEqual(['bar', 'baz']); + }); + + it('should return the list if the provider passed is null', () => { + + const fn = getFilteredListFn('name'); + const name = 'foo'; + const collection = ['foo', 'bar', 'baz']; + + expect(fn(collection, null)).toEqual(['foo', 'bar', 'baz']); + }); + }); +}); diff --git a/ui/src/app/metadata/provider/reducer/index.ts b/ui/src/app/metadata/provider/reducer/index.ts index 562a4ab44..8005d63e9 100644 --- a/ui/src/app/metadata/provider/reducer/index.ts +++ b/ui/src/app/metadata/provider/reducer/index.ts @@ -66,11 +66,11 @@ export const getProviderIds = createSelector(getCollectionState, fromCollection. export const getProviderCollectionIsLoaded = createSelector(getCollectionState, fromCollection.getIsLoaded); export const getProviderNames = createSelector(getAllProviders, (providers: MetadataProvider[]) => providers.map(p => p.name)); -export const getFilteredProviderNames = createSelector( - getProviderNames, - getSelectedProvider, (names, provider) => names.filter(name => name !== provider.name) -); +export const getFilteredListFn = (property: string) => + (collection, provider) => !provider ? collection : collection.filter(val => val !== provider[property]); + +export const getFilteredProviderNames = createSelector(getProviderNames, getSelectedProvider, getFilteredListFn('name')); export const getProviderFilters = createSelector(getSelectedProvider, provider => provider.metadataFilters); @@ -78,7 +78,4 @@ export const getProviderXmlIds = createSelector(getAllProviders, (providers: Met export const getOrderedProviders = createSelector(getAllProviders, getProviderOrder, utils.mergeOrderFn); export const getOrderedProvidersInSearch = createSelector(getAllProviders, getProviderOrder, utils.mergeOrderFn); -export const getFilteredProviderXmlIds = createSelector( - getProviderXmlIds, - getSelectedProvider, (ids, provider) => ids.filter(id => id !== provider.xmlId) -); +export const getFilteredProviderXmlIds = createSelector(getProviderXmlIds, getSelectedProvider, getFilteredListFn('xmlId')); diff --git a/ui/src/app/metadata/resolver/action/collection.action.ts b/ui/src/app/metadata/resolver/action/collection.action.ts index dc3843319..57861b17c 100644 --- a/ui/src/app/metadata/resolver/action/collection.action.ts +++ b/ui/src/app/metadata/resolver/action/collection.action.ts @@ -7,6 +7,8 @@ export enum ResolverCollectionActionTypes { SELECT = '[Metadata Resolver] Select', SELECT_SUCCESS = '[Metadata Resolver] Select Success', + CLEAR_SELECTION = '[Metadata Resolver] Selection Clear', + UPDATE_RESOLVER_REQUEST = '[Metadata Resolver] Update Request', UPDATE_RESOLVER_SUCCESS = '[Metadata Resolver] Update Success', UPDATE_RESOLVER_FAIL = '[Metadata Resolver] Update Fail', @@ -143,6 +145,10 @@ export class CreateResolverFromUrlRequest implements Action { constructor(public payload: { name: string, url: string }) { } } +export class ClearResolverSelection implements Action { + readonly type = ResolverCollectionActionTypes.CLEAR_SELECTION; +} + export type ResolverCollectionActionsUnion = | LoadResolverRequest | LoadResolverSuccess @@ -162,4 +168,5 @@ export type ResolverCollectionActionsUnion = | UpdateResolverFail | UpdateResolverConflict | UploadResolverRequest - | CreateResolverFromUrlRequest; + | CreateResolverFromUrlRequest + | ClearResolverSelection; diff --git a/ui/src/app/metadata/resolver/effect/collection.effects.ts b/ui/src/app/metadata/resolver/effect/collection.effects.ts index ff5c5ea9c..2a92b0242 100644 --- a/ui/src/app/metadata/resolver/effect/collection.effects.ts +++ b/ui/src/app/metadata/resolver/effect/collection.effects.ts @@ -35,6 +35,7 @@ import { I18nService } from '../../../i18n/service/i18n.service'; import * as fromRoot from '../../../app.reducer'; import * as fromI18n from '../../../i18n/reducer'; import { FileBackedHttpMetadataResolver } from '../../domain/entity'; +import { UpdateSaving } from '../action/entity.action'; /* istanbul ignore next */ @@ -79,6 +80,21 @@ export class ResolverCollectionEffects { }) ); + @Effect() + updateResolverSavingOnRequest$ = this.actions$.pipe( + ofType(ResolverCollectionActionTypes.UPDATE_RESOLVER_REQUEST), + map(action => new UpdateSaving(true)), + ); + + @Effect() + updateResolverSavingOnResult$ = this.actions$.pipe( + ofType( + ResolverCollectionActionTypes.UPDATE_RESOLVER_SUCCESS, + ResolverCollectionActionTypes.UPDATE_RESOLVER_FAIL + ), + map(action => new UpdateSaving(false)), + ); + @Effect({ dispatch: false }) updateResolverSuccessRedirect$ = this.actions$.pipe( ofType(ResolverCollectionActionTypes.UPDATE_RESOLVER_SUCCESS), diff --git a/ui/src/app/metadata/resolver/reducer/collection.reducer.ts b/ui/src/app/metadata/resolver/reducer/collection.reducer.ts index 93118aec3..425e2dee6 100644 --- a/ui/src/app/metadata/resolver/reducer/collection.reducer.ts +++ b/ui/src/app/metadata/resolver/reducer/collection.reducer.ts @@ -51,6 +51,13 @@ export function reducer(state = initialState, action: ResolverCollectionActionsU }); } + case ResolverCollectionActionTypes.CLEAR_SELECTION: { + return { + ...state, + selectedResolverId: null + }; + } + default: { return state; }