diff --git a/ui/src/app/metadata/configuration/action/configuration.action.ts b/ui/src/app/metadata/configuration/action/configuration.action.ts index 78e834eea..8a12d47c8 100644 --- a/ui/src/app/metadata/configuration/action/configuration.action.ts +++ b/ui/src/app/metadata/configuration/action/configuration.action.ts @@ -12,10 +12,11 @@ export enum ConfigurationActionTypes { LOAD_XML_SUCCESS = '[Metadata Configuration] Load XML Success', LOAD_XML_ERROR = '[Metadata Configuration] Load XML Error', - SET_METADATA = '[Metadata Configuration] Set Metadata Model', + SET_METADATA = '[Metadata Configuration] Set Metadata Attributes', SET_DEFINITION = '[Metadata Configuration] Set Metadata Definition', SET_SCHEMA = '[Metadata Configuration] Set Metadata Schema', SET_XML = '[Metadata Configuration] Set Metadata Xml', + SET_METADATA_MODEL = '[Metadata Configuration] Set Metadata Model', DOWNLOAD_XML = '[Metadata Configuration] Download Metadata Xml', @@ -61,7 +62,13 @@ export class LoadXmlError implements Action { export class SetMetadata implements Action { readonly type = ConfigurationActionTypes.SET_METADATA; - constructor(public payload: { id: string, type: string }) { } + constructor(public payload: { id: string, type: string, version?: string }) { } +} + +export class SetMetadataModel implements Action { + readonly type = ConfigurationActionTypes.SET_METADATA_MODEL; + + constructor(public payload: Metadata) { } } export class SetDefinition implements Action { diff --git a/ui/src/app/metadata/configuration/action/restore.action.ts b/ui/src/app/metadata/configuration/action/restore.action.ts new file mode 100644 index 000000000..48861c35e --- /dev/null +++ b/ui/src/app/metadata/configuration/action/restore.action.ts @@ -0,0 +1,36 @@ +import { Action } from '@ngrx/store'; +import { Metadata } from '../../domain/domain.type'; + +export enum RestoreActionTypes { + SELECT_VERSION_SUCCESS = '[Restore Version] Select Version Success', + SELECT_VERSION_ERROR = '[Restore Version] Select Version Error', + SELECT_VERSION_REQUEST = '[Restore Version] Select Version Request', + CLEAR_VERSION = '[Restore Version] Clear Versions' +} + +export class SelectVersionRestoreRequest implements Action { + readonly type = RestoreActionTypes.SELECT_VERSION_REQUEST; + + constructor(public payload: { type: string, id: string, version: string }) { } +} + +export class SelectVersionRestoreSuccess implements Action { + readonly type = RestoreActionTypes.SELECT_VERSION_SUCCESS; + + constructor(public payload: Metadata) { } +} +export class SelectVersionRestoreError implements Action { + readonly type = RestoreActionTypes.SELECT_VERSION_ERROR; + + constructor(public payload: any) { } +} + +export class ClearVersionRestore implements Action { + readonly type = RestoreActionTypes.CLEAR_VERSION; +} + +export type RestoreActionsUnion = + | SelectVersionRestoreRequest + | SelectVersionRestoreError + | SelectVersionRestoreSuccess + | ClearVersionRestore; diff --git a/ui/src/app/metadata/configuration/component/history-list.component.html b/ui/src/app/metadata/configuration/component/history-list.component.html index db658f453..ff4599b91 100644 --- a/ui/src/app/metadata/configuration/component/history-list.component.html +++ b/ui/src/app/metadata/configuration/component/history-list.component.html @@ -5,7 +5,6 @@ Select Version - Version Save Date Changed By Actions @@ -21,12 +20,19 @@ - Current (v{{ history.length - i }}) - v{{ history.length - (i) }} - {{ version.date | date:DATE_FORMAT }} + + + + {{ version.date | date:DATE_FORMAT }}  + + (Current) + + + + {{ version.creator }} - diff --git a/ui/src/app/metadata/configuration/component/history-list.component.spec.ts b/ui/src/app/metadata/configuration/component/history-list.component.spec.ts index 3c191c300..35fcbe68d 100644 --- a/ui/src/app/metadata/configuration/component/history-list.component.spec.ts +++ b/ui/src/app/metadata/configuration/component/history-list.component.spec.ts @@ -4,6 +4,7 @@ import { MockI18nModule } from '../../../../testing/i18n.stub'; import { HistoryListComponent } from './history-list.component'; import { MetadataHistory } from '../model/history'; import { MetadataVersion } from '../model/version'; +import { RouterTestingModule } from '@angular/router/testing'; export const TestData = { versions: [ @@ -37,7 +38,8 @@ describe('Metadata History List Component', () => { TestBed.configureTestingModule({ providers: [], imports: [ - MockI18nModule + MockI18nModule, + RouterTestingModule ], declarations: [ HistoryListComponent, diff --git a/ui/src/app/metadata/configuration/configuration.module.ts b/ui/src/app/metadata/configuration/configuration.module.ts index fa395529b..c55e24051 100644 --- a/ui/src/app/metadata/configuration/configuration.module.ts +++ b/ui/src/app/metadata/configuration/configuration.module.ts @@ -30,6 +30,8 @@ import { FilterConfigurationListComponent } from './component/filter-configurati import { FilterConfigurationListItemComponent } from './component/filter-configuration-list-item.component'; import { SharedModule } from '../../shared/shared.module'; import { FilterTargetPropertyComponent } from './component/filter-target-property.component'; +import { RestoreComponent } from './container/restore.component'; +import { RestoreVersionEffects } from './effect/restore.effect'; @NgModule({ declarations: [ @@ -47,7 +49,8 @@ import { FilterTargetPropertyComponent } from './component/filter-target-propert MetadataComparisonComponent, FilterConfigurationListComponent, FilterConfigurationListItemComponent, - FilterTargetPropertyComponent + FilterTargetPropertyComponent, + RestoreComponent ], entryComponents: [], imports: [ @@ -82,7 +85,8 @@ export class MetadataConfigurationModule { [ MetadataConfigurationEffects, MetadataHistoryEffects, - CompareVersionEffects + CompareVersionEffects, + RestoreVersionEffects ]) ], providers: [] diff --git a/ui/src/app/metadata/configuration/configuration.routing.ts b/ui/src/app/metadata/configuration/configuration.routing.ts index 0a77b0c2b..dc3f5df99 100644 --- a/ui/src/app/metadata/configuration/configuration.routing.ts +++ b/ui/src/app/metadata/configuration/configuration.routing.ts @@ -4,6 +4,7 @@ import { MetadataOptionsComponent } from './container/metadata-options.component import { MetadataXmlComponent } from './container/metadata-xml.component'; import { MetadataHistoryComponent } from './container/metadata-history.component'; import { MetadataComparisonComponent } from './container/metadata-comparison.component'; +import { RestoreComponent } from './container/restore.component'; export const ConfigurationRoutes: Routes = [ { @@ -29,6 +30,10 @@ export const ConfigurationRoutes: Routes = [ { path: 'compare', component: MetadataComparisonComponent + }, + { + path: 'restore', + component: RestoreComponent } ] } diff --git a/ui/src/app/metadata/configuration/container/configuration.component.html b/ui/src/app/metadata/configuration/container/configuration.component.html index 53f8fa697..89d017139 100644 --- a/ui/src/app/metadata/configuration/container/configuration.component.html +++ b/ui/src/app/metadata/configuration/container/configuration.component.html @@ -13,11 +13,6 @@ -

- Source - Provider - Configuration -

diff --git a/ui/src/app/metadata/configuration/container/configuration.component.ts b/ui/src/app/metadata/configuration/container/configuration.component.ts index 4c06d7f9d..d8c0234c6 100644 --- a/ui/src/app/metadata/configuration/container/configuration.component.ts +++ b/ui/src/app/metadata/configuration/container/configuration.component.ts @@ -2,14 +2,13 @@ import { Component, ChangeDetectionStrategy, OnDestroy, HostListener } from '@an import { ActivatedRoute, Router, Scroll, Event } from '@angular/router'; import { takeUntil, map, withLatestFrom, filter, timeout, delay } from 'rxjs/operators'; import { Store } from '@ngrx/store'; -import { Observable, Subject, interval } from 'rxjs'; +import { Observable, Subject, interval, combineLatest } from 'rxjs'; import * as fromConfiguration from '../reducer'; import { ClearConfiguration, SetMetadata } from '../action/configuration.action'; import { LoadHistoryRequest, ClearHistory, SelectVersion } from '../action/history.action'; import * as fromReducer from '../reducer'; -import { ViewportScroller } from '@angular/common'; @Component({ selector: 'configuration-page', @@ -27,9 +26,17 @@ export class ConfigurationComponent implements OnDestroy { private store: Store, private routerState: ActivatedRoute ) { - this.routerState.params.pipe( + + combineLatest( + this.routerState.params, + this.routerState.queryParams + ).pipe( takeUntil(this.ngUnsubscribe), - map(params => new SetMetadata({id: params.id, type: params.type})) + map(([{ id, type }, { version }]) => new SetMetadata({ + id, + type, + version + })) ).subscribe(store); this.routerState.params.pipe( @@ -38,20 +45,14 @@ export class ConfigurationComponent implements OnDestroy { ).subscribe(store); this.store.select(fromReducer.getVersionCollection).pipe( + filter(collection => collection && collection.length > 0), takeUntil(this.ngUnsubscribe), withLatestFrom( this.routerState.queryParams ), - map(([collection, params]) => { - if (collection && collection.length) { - return params.version || collection[0].id; - } - return null; - }) + map(([collection, params]) => params.version || collection && collection.length ? collection[0].id : null) ).subscribe(version => { - if (version) { - this.store.dispatch(new SelectVersion(version)); - } + this.store.dispatch(new SelectVersion(version)); }); this.name$ = this.store.select(fromReducer.getConfigurationModelName); diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html index d5b533716..7117b7bf6 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html @@ -1,3 +1,9 @@ +

+ Compare + Source + Provider + Configuration +

+ Version History +
+ (compare)="compareVersions($event)" + (restore)="restoreVersion($event)">
diff --git a/ui/src/app/metadata/configuration/container/metadata-history.component.ts b/ui/src/app/metadata/configuration/container/metadata-history.component.ts index c49e0c70f..17f2c3caa 100644 --- a/ui/src/app/metadata/configuration/container/metadata-history.component.ts +++ b/ui/src/app/metadata/configuration/container/metadata-history.component.ts @@ -44,4 +44,13 @@ export class MetadataHistoryComponent { } ); } + + restoreVersion(version: MetadataVersion): void { + this.router.navigate( + [ '../', 'restore' ], + { + relativeTo: this.route + } + ); + } } 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 972e0e4da..ebed36bf3 100644 --- a/ui/src/app/metadata/configuration/container/metadata-options.component.html +++ b/ui/src/app/metadata/configuration/container/metadata-options.component.html @@ -1,3 +1,8 @@ +

+ Source + Provider + Configuration +