-
{{ attr.label }}
-
-
-1" translate="value.true">
+ {{ attr.label }}
+
+ -1" translate="value.true">
true
- -1)" translate="value.false">
+ -1)" translate="value.false">
false
@@ -40,12 +48,14 @@
-
{{ property.name }}
-
—
-
+
{{ property.name }}
+
+ —
+
+
\ No newline at end of file
diff --git a/ui/src/app/metadata/configuration/component/array-property.component.spec.ts b/ui/src/app/metadata/configuration/component/array-property.component.spec.ts
index 453d9d484..614738b06 100644
--- a/ui/src/app/metadata/configuration/component/array-property.component.spec.ts
+++ b/ui/src/app/metadata/configuration/component/array-property.component.spec.ts
@@ -21,12 +21,12 @@ class TestHostComponent {
@ViewChild(ArrayPropertyComponent)
public componentUnderTest: ArrayPropertyComponent;
- property: Property = getStepProperty(SCHEMA.properties.list, {
+ property: Property = getStepProperty(SCHEMA.properties.list, [{
name: 'foo',
type: 'baz',
description: 'foo bar baz',
list: []
- }, SCHEMA.definitions);
+ }], SCHEMA.definitions);
setProperty(property: Property): void {
this.property = property;
diff --git a/ui/src/app/metadata/configuration/component/array-property.component.ts b/ui/src/app/metadata/configuration/component/array-property.component.ts
index ff9cd0ac4..35d50dedd 100644
--- a/ui/src/app/metadata/configuration/component/array-property.component.ts
+++ b/ui/src/app/metadata/configuration/component/array-property.component.ts
@@ -1,4 +1,4 @@
-import { Component, Input } from '@angular/core';
+import { Component, Input, OnChanges } from '@angular/core';
import { Property } from '../../domain/model/property';
import { Observable, of } from 'rxjs';
import { AttributesService } from '../../domain/service/attributes.service';
@@ -10,15 +10,22 @@ import { ConfigurationPropertyComponent } from './configuration-property.compone
styleUrls: []
})
-export class ArrayPropertyComponent extends ConfigurationPropertyComponent {
+export class ArrayPropertyComponent extends ConfigurationPropertyComponent implements OnChanges {
@Input() property: Property;
+ range = [];
+
constructor(
private attrService: AttributesService
) {
super();
}
+ ngOnChanges(): void {
+ const keys = this.property.value.reduce((val, version) => version ? version.length > val ? version.length : val : val, 0);
+ this.range = [...Array(keys).keys()];
+ }
+
get attributeList$(): Observable<{ key: string, label: string }[]> {
if (this.property.widget && this.property.widget.hasOwnProperty('data')) {
return of(this.property.widget.data);
diff --git a/ui/src/app/metadata/configuration/component/configuration-property.component.ts b/ui/src/app/metadata/configuration/component/configuration-property.component.ts
index bcdd45711..001a8235b 100644
--- a/ui/src/app/metadata/configuration/component/configuration-property.component.ts
+++ b/ui/src/app/metadata/configuration/component/configuration-property.component.ts
@@ -3,12 +3,12 @@ import { Property } from '../../domain/model/property';
@Component({
selector: 'configuration-property',
- template: `{{ property | json }}`,
- styleUrls: []
+ template: `{{ property | json }}`
})
export class ConfigurationPropertyComponent {
@Input() property: Property;
+ @Input() columns = 1;
constructor() { }
@@ -19,5 +19,9 @@ export class ConfigurationPropertyComponent {
getItemType(items: Property): string {
return items.widget ? items.widget.id : 'default';
}
+
+ get width(): string {
+ return `${ Math.floor(100 / (this.columns + 1)) }%`;
+ }
}
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 43d49a29f..3c191c300 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
@@ -79,4 +79,14 @@ describe('Metadata History List Component', () => {
expect(instance.restore).toHaveBeenCalledWith(selected);
});
});
+
+ describe('toggleVersionSelected method', () => {
+ it('should add or remove the selected version', () => {
+ list.toggleVersionSelected(TestData.versions[0]);
+ fixture.detectChanges();
+ list.toggleVersionSelected(TestData.versions[0]);
+ fixture.detectChanges();
+ expect(list.selected.length).toBe(0);
+ });
+ });
});
diff --git a/ui/src/app/metadata/configuration/component/metadata-configuration.component.html b/ui/src/app/metadata/configuration/component/metadata-configuration.component.html
index 4f58d07f1..82034cca4 100644
--- a/ui/src/app/metadata/configuration/component/metadata-configuration.component.html
+++ b/ui/src/app/metadata/configuration/component/metadata-configuration.component.html
@@ -1,12 +1,14 @@
\ No newline at end of file
diff --git a/ui/src/app/metadata/configuration/component/metadata-configuration.component.spec.ts b/ui/src/app/metadata/configuration/component/metadata-configuration.component.spec.ts
index f26c8d65c..c17a469af 100644
--- a/ui/src/app/metadata/configuration/component/metadata-configuration.component.spec.ts
+++ b/ui/src/app/metadata/configuration/component/metadata-configuration.component.spec.ts
@@ -7,6 +7,7 @@ import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
import { MetadataConfiguration } from '../model/metadata-configuration';
import { Property } from '../../domain/model/property';
import { MockI18nModule } from '../../../../testing/i18n.stub';
+import { Router } from '@angular/router';
@Component({
selector: 'object-property',
@@ -14,6 +15,7 @@ import { MockI18nModule } from '../../../../testing/i18n.stub';
})
class ObjectPropertyComponent {
@Input() property: Property;
+ @Input() columns = 1;
}
@Component({
@@ -25,7 +27,10 @@ class TestHostComponent {
@ViewChild(MetadataConfigurationComponent)
public componentUnderTest: MetadataConfigurationComponent;
- configuration: MetadataConfiguration = {sections: []};
+ configuration: MetadataConfiguration = {
+ dates: [],
+ sections: []
+ };
}
describe('Metadata Configuration Component', () => {
@@ -33,6 +38,7 @@ describe('Metadata Configuration Component', () => {
let fixture: ComponentFixture
;
let instance: TestHostComponent;
let app: MetadataConfigurationComponent;
+ let router: Router;
beforeEach(async(() => {
TestBed.configureTestingModule({
@@ -51,10 +57,36 @@ describe('Metadata Configuration Component', () => {
fixture = TestBed.createComponent(TestHostComponent);
instance = fixture.componentInstance;
app = instance.componentUnderTest;
+ router = TestBed.get(Router);
fixture.detectChanges();
}));
it('should accept a configuration input', async(() => {
expect(app).toBeTruthy();
}));
+
+ describe('edit method', () => {
+ it('should call router.navigate', () => {
+ spyOn(router, 'navigate');
+ app.edit('foo');
+ expect(router.navigate).toHaveBeenCalled();
+ });
+ });
+
+ describe('width getter', () => {
+ it('should default to 100%', () => {
+ expect(app.width).toBe('100%');
+ });
+ it('should calculate the width based on dates', () => {
+ instance.configuration = {
+ ...instance.configuration,
+ dates: [
+ new Date().toISOString(),
+ new Date().toISOString()
+ ]
+ };
+ fixture.detectChanges();
+ expect(app.width).toBe('33%');
+ });
+ });
});
diff --git a/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts b/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts
index 9e94bcdbd..fd90fb58b 100644
--- a/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts
+++ b/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts
@@ -1,6 +1,8 @@
import { Component, ChangeDetectionStrategy, Input } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { MetadataConfiguration } from '../model/metadata-configuration';
+import { Property } from '../../domain/model/property';
+import { Observable, of } from 'rxjs';
@Component({
selector: 'metadata-configuration',
@@ -19,4 +21,9 @@ export class MetadataConfigurationComponent {
edit(id: string): void {
this.router.navigate(['../', 'edit', id], { relativeTo: this.activatedRoute.parent });
}
+
+ get width(): string {
+ const columns = this.configuration.dates.length;
+ return `${Math.floor(100 / (columns + 1)) }%`;
+ }
}
diff --git a/ui/src/app/metadata/configuration/component/object-property.component.html b/ui/src/app/metadata/configuration/component/object-property.component.html
index b0aa7b967..0c19ac9d0 100644
--- a/ui/src/app/metadata/configuration/component/object-property.component.html
+++ b/ui/src/app/metadata/configuration/component/object-property.component.html
@@ -1,7 +1,7 @@
-
-
-
+
+
+
diff --git a/ui/src/app/metadata/configuration/component/primitive-property.component.html b/ui/src/app/metadata/configuration/component/primitive-property.component.html
index 9eef2181f..608f4acdd 100644
--- a/ui/src/app/metadata/configuration/component/primitive-property.component.html
+++ b/ui/src/app/metadata/configuration/component/primitive-property.component.html
@@ -1,5 +1,10 @@
- {{ property.name }}
- {{ property.value || property.value === false ? property.value : '-' }}
+ {{ property.name }}
+ {{ v ? v : (v === false) ? v : '-' }}
\ No newline at end of file
diff --git a/ui/src/app/metadata/configuration/configuration.module.ts b/ui/src/app/metadata/configuration/configuration.module.ts
index dc291952c..05fa99298 100644
--- a/ui/src/app/metadata/configuration/configuration.module.ts
+++ b/ui/src/app/metadata/configuration/configuration.module.ts
@@ -2,7 +2,7 @@ import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { StoreModule } from '@ngrx/store';
import { EffectsModule } from '@ngrx/effects';
-
+import { RouterModule } from '@angular/router';
import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap';
import { I18nModule } from '../../i18n/i18n.module';
@@ -15,7 +15,6 @@ import { ConfigurationPropertyComponent } from './component/configuration-proper
import { PrimitivePropertyComponent } from './component/primitive-property.component';
import { ObjectPropertyComponent } from './component/object-property.component';
import { ArrayPropertyComponent } from './component/array-property.component';
-import { RouterModule } from '@angular/router';
import { MetadataOptionsComponent } from './container/metadata-options.component';
import { MetadataXmlComponent } from './container/metadata-xml.component';
import { MetadataHeaderComponent } from './component/metadata-header.component';
@@ -24,6 +23,8 @@ import { MetadataHistoryService } from './service/history.service';
import { MetadataHistoryComponent } from './container/metadata-history.component';
import { HistoryListComponent } from './component/history-list.component';
import { DomainModule } from '../domain/domain.module';
+import { MetadataComparisonComponent } from './container/metadata-comparison.component';
+import { CompareVersionEffects } from './effect/compare.effect';
@NgModule({
declarations: [
@@ -37,7 +38,8 @@ import { DomainModule } from '../domain/domain.module';
ConfigurationComponent,
MetadataHeaderComponent,
MetadataHistoryComponent,
- HistoryListComponent
+ HistoryListComponent,
+ MetadataComparisonComponent
],
entryComponents: [],
imports: [
@@ -66,7 +68,12 @@ export class MetadataConfigurationModule {
imports: [
MetadataConfigurationModule,
StoreModule.forFeature('metadata-configuration', fromConfig.reducers),
- EffectsModule.forFeature([MetadataConfigurationEffects, MetadataHistoryEffects])
+ EffectsModule.forFeature(
+ [
+ MetadataConfigurationEffects,
+ MetadataHistoryEffects,
+ CompareVersionEffects
+ ])
],
providers: []
})
diff --git a/ui/src/app/metadata/configuration/configuration.routing.ts b/ui/src/app/metadata/configuration/configuration.routing.ts
index d27b29872..0a77b0c2b 100644
--- a/ui/src/app/metadata/configuration/configuration.routing.ts
+++ b/ui/src/app/metadata/configuration/configuration.routing.ts
@@ -3,6 +3,7 @@ import { ConfigurationComponent } from './container/configuration.component';
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';
export const ConfigurationRoutes: Routes = [
{
@@ -24,6 +25,10 @@ export const ConfigurationRoutes: Routes = [
{
path: 'history',
component: MetadataHistoryComponent
+ },
+ {
+ path: 'compare',
+ component: MetadataComparisonComponent
}
]
}
diff --git a/ui/src/app/metadata/configuration/container/configuration.component.html b/ui/src/app/metadata/configuration/container/configuration.component.html
index e4709611b..b0d813546 100644
--- a/ui/src/app/metadata/configuration/container/configuration.component.html
+++ b/ui/src/app/metadata/configuration/container/configuration.component.html
@@ -14,7 +14,9 @@
Source Configuration
-
+
+
+