diff --git a/ui/src/app/metadata/provider/container/provider-edit.component.ts b/ui/src/app/metadata/provider/container/provider-edit.component.ts
index 2abd7d8ed..a71da19d7 100644
--- a/ui/src/app/metadata/provider/container/provider-edit.component.ts
+++ b/ui/src/app/metadata/provider/container/provider-edit.component.ts
@@ -1,7 +1,7 @@
import { Component, OnDestroy } from '@angular/core';
import { Router, ActivatedRoute, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable, of } from 'rxjs';
-import { skipWhile, map, combineLatest } from 'rxjs/operators';
+import { skipWhile, map, combineLatest, filter } from 'rxjs/operators';
import { Store } from '@ngrx/store';
import * as fromWizard from '../../../wizard/reducer';
import * as fromProvider from '../reducer';
@@ -63,11 +63,11 @@ export class ProviderEditComponent implements OnDestroy, CanComponentDeactivate
this.store.dispatch(new SetIndex(index));
});
- this.index$.subscribe(id => this.go(id));
+ this.index$.subscribe(id => id && this.go(id));
this.store
.select(fromWizard.getCurrentWizardSchema)
- .pipe(skipWhile(s => !s))
+ .pipe(filter(s => !!s))
.subscribe(s => {
if (s) {
this.store.dispatch(new LoadSchemaRequest(s));
@@ -92,7 +92,6 @@ export class ProviderEditComponent implements OnDestroy, CanComponentDeactivate
clear(): void {
this.store.dispatch(new ClearProvider());
- this.store.dispatch(new ClearWizard());
this.store.dispatch(new ClearEditor());
}
diff --git a/ui/src/app/metadata/provider/container/provider-filter-list.component.html b/ui/src/app/metadata/provider/container/provider-filter-list.component.html
index db5aa695c..d9f5b0504 100644
--- a/ui/src/app/metadata/provider/container/provider-filter-list.component.html
+++ b/ui/src/app/metadata/provider/container/provider-filter-list.component.html
@@ -13,7 +13,15 @@
+ [format]="formats.DROPDOWN"
+ [status]="[]">
+
+
+
@@ -28,7 +36,15 @@
+ [format]="formats.TABS"
+ [status]="[]">
+
+
+
diff --git a/ui/src/app/metadata/resolver/container/resolver-edit-step.component.html b/ui/src/app/metadata/resolver/container/resolver-edit-step.component.html
index 5d07730fd..a9a3be2e4 100644
--- a/ui/src/app/metadata/resolver/container/resolver-edit-step.component.html
+++ b/ui/src/app/metadata/resolver/container/resolver-edit-step.component.html
@@ -3,6 +3,7 @@
[schema]="schema$ | async"
[model]="model$ | async"
[validators]="validators$ | async"
+ [bindings]="bindings$ | async"
(onChange)="valueChangeSubject.next($event)"
(onErrorChange)="statusChangeSubject.next($event)">
\ No newline at end of file
diff --git a/ui/src/app/metadata/resolver/container/resolver-edit-step.component.ts b/ui/src/app/metadata/resolver/container/resolver-edit-step.component.ts
index aa9441e82..fc6ddfc41 100644
--- a/ui/src/app/metadata/resolver/container/resolver-edit-step.component.ts
+++ b/ui/src/app/metadata/resolver/container/resolver-edit-step.component.ts
@@ -9,7 +9,7 @@ import { MetadataResolver } from '../../domain/model';
import { LockEditor, UnlockEditor } from '../../../wizard/action/wizard.action';
import * as fromWizard from '../../../wizard/reducer';
-import { withLatestFrom, map, skipWhile, distinctUntilChanged, startWith, combineLatest } from 'rxjs/operators';
+import { withLatestFrom, map, skipWhile, distinctUntilChanged, startWith, combineLatest, filter } from 'rxjs/operators';
import { UpdateChanges } from '../action/entity.action';
import { FormControl } from '@angular/forms';
@@ -19,6 +19,8 @@ import { FormControl } from '@angular/forms';
styleUrls: []
})
export class ResolverEditStepComponent implements OnDestroy {
+ private ngUnsubscribe: Subject
= new Subject();
+
valueChangeSubject = new Subject>();
private valueChangeEmitted$ = this.valueChangeSubject.asObservable();
@@ -35,6 +37,7 @@ export class ResolverEditStepComponent implements OnDestroy {
definition$: Observable>;
changes$: Observable;
step$: Observable;
+ bindings$: Observable;
validators$: Observable<{ [key: string]: any }>;
@@ -48,6 +51,7 @@ export class ResolverEditStepComponent implements OnDestroy {
this.resolver$ = this.store.select(fromResolver.getSelectedResolver);
this.step$ = this.store.select(fromWizard.getCurrent);
this.schema$ = this.store.select(fromWizard.getSchema);
+ this.bindings$ = this.definition$.pipe(filter(d => !!d), map(d => d.bindings));
this.step$.subscribe(s => {
if (s && s.locked) {
@@ -64,6 +68,7 @@ export class ResolverEditStepComponent implements OnDestroy {
this.store.select(fromResolver.getAllEntityIds),
this.resolver$
),
+ filter(([def, ids, resolver]) => !!def),
map(([def, ids, resolver]) => def.getValidators(
ids.filter(id => id !== resolver.entityId)
))
@@ -84,17 +89,17 @@ export class ResolverEditStepComponent implements OnDestroy {
},
definition
})),
- skipWhile(({ model, definition }) => !definition || !model),
+ filter(({ model, definition }) => definition && model),
map(({ model, definition }) => definition.formatter(model))
);
this.valueChangeEmitted$.pipe(
map(changes => changes.value),
withLatestFrom(this.definition$, this.store.select(fromResolver.getSelectedResolver)),
- skipWhile(([changes, definition]) => !definition || !changes),
+ filter(([changes, definition]) => !definition || !changes),
map(([changes, definition, resolver]) => definition.parser({ ...resolver, ...changes }))
)
- .subscribe(changes => this.store.dispatch(new UpdateChanges(changes)));
+ .subscribe(changes => this.store.dispatch(new UpdateChanges(changes)));
this.statusChangeEmitted$
.pipe(distinctUntilChanged())
@@ -112,6 +117,8 @@ export class ResolverEditStepComponent implements OnDestroy {
ngOnDestroy() {
this.valueChangeSubject.complete();
+ this.statusChangeSubject.complete();
+ this.ngUnsubscribe.unsubscribe();
}
}
diff --git a/ui/src/app/metadata/resolver/container/resolver-edit.component.ts b/ui/src/app/metadata/resolver/container/resolver-edit.component.ts
index 1de850407..6210a59ed 100644
--- a/ui/src/app/metadata/resolver/container/resolver-edit.component.ts
+++ b/ui/src/app/metadata/resolver/container/resolver-edit.component.ts
@@ -1,7 +1,7 @@
import { Component, OnDestroy } from '@angular/core';
import { Router, ActivatedRoute, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable, of } from 'rxjs';
-import { skipWhile, map, combineLatest } from 'rxjs/operators';
+import { skipWhile, map, combineLatest, filter } from 'rxjs/operators';
import { Store } from '@ngrx/store';
import * as fromWizard from '../../../wizard/reducer';
import * as fromResolver from '../reducer';
@@ -55,26 +55,23 @@ export class ResolverEditComponent implements OnDestroy, CanComponentDeactivate
let startIndex$ = this.route.firstChild ?
this.route.firstChild.params.pipe(map(p => p.form)) :
- this.definition$.pipe(map(d => d.steps[0].id));
+ this.definition$.pipe(filter(d => !!d), map(d => d.steps[0].id));
- startIndex$
- .subscribe(index => {
- this.store.dispatch(new SetIndex(index));
- });
+ startIndex$.subscribe(index => this.setIndex(index));
- this.index$.subscribe(id => this.go(id));
+ this.index$.subscribe(index => index && this.go(index));
this.store
.select(fromWizard.getCurrentWizardSchema)
- .pipe(skipWhile(s => !s))
+ .pipe(filter(s => !!s))
.subscribe(s => this.store.dispatch(new LoadSchemaRequest(s)));
this.resolver$.subscribe(p => this.resolver = p);
this.store.select(fromResolver.getEntityChanges).subscribe(changes => this.latest = changes);
}
- go(id: string): void {
- this.router.navigate(['./', id], { relativeTo: this.route });
+ go(index: string): void {
+ this.router.navigate(['./', index], { relativeTo: this.route });
}
setIndex(id: string): void {
diff --git a/ui/src/app/metadata/resolver/container/resolver-wizard-step.component.html b/ui/src/app/metadata/resolver/container/resolver-wizard-step.component.html
index f69fbfdf5..926f3024c 100644
--- a/ui/src/app/metadata/resolver/container/resolver-wizard-step.component.html
+++ b/ui/src/app/metadata/resolver/container/resolver-wizard-step.component.html
@@ -2,7 +2,7 @@
diff --git a/ui/src/app/metadata/resolver/container/resolver-wizard-step.component.ts b/ui/src/app/metadata/resolver/container/resolver-wizard-step.component.ts
index cddb8e5b0..0021727b2 100644
--- a/ui/src/app/metadata/resolver/container/resolver-wizard-step.component.ts
+++ b/ui/src/app/metadata/resolver/container/resolver-wizard-step.component.ts
@@ -9,9 +9,6 @@ import * as fromWizard from '../../../wizard/reducer';
import { UpdateStatus, UpdateChanges } from '../action/entity.action';
import { Wizard } from '../../../wizard/model';
import { MetadataResolver } from '../../domain/model';
-import { FormProperty } from 'ngx-schema-form/lib/model/formproperty';
-import { ArrayProperty } from 'ngx-schema-form/lib/model/arrayproperty';
-import { ObjectProperty } from 'ngx-schema-form/lib/model/objectproperty';
@Component({
selector: 'resolver-wizard-step',
@@ -38,7 +35,7 @@ export class ResolverWizardStepComponent implements OnDestroy {
validators$: Observable<{ [key: string]: any }>;
- bindings: any;
+ bindings$: Observable;
constructor(
private store: Store,
@@ -46,10 +43,7 @@ export class ResolverWizardStepComponent implements OnDestroy {
this.schema$ = this.store.select(fromWizard.getSchema);
this.definition$ = this.store.select(fromWizard.getWizardDefinition);
this.changes$ = this.store.select(fromResolver.getEntityChanges);
-
- this.validators$ = this.definition$.pipe(
- map((def) => def.getValidators())
- );
+ this.bindings$ = this.definition$.pipe(map(d => d.bindings));
this.model$ = this.schema$.pipe(
withLatestFrom(
@@ -70,6 +64,16 @@ export class ResolverWizardStepComponent implements OnDestroy {
map(({ model, definition }) => definition.formatter(model))
);
+ this.validators$ = this.definition$.pipe(
+ withLatestFrom(
+ this.store.select(fromResolver.getAllEntityIds),
+ this.model$
+ ),
+ map(([def, ids, resolver]) => def.getValidators(
+ ids.filter(id => id !== resolver.entityId)
+ ))
+ );
+
this.valueChangeEmitted$.pipe(
withLatestFrom(this.definition$),
skipWhile(([ changes, definition ]) => !definition || !changes),
@@ -86,47 +90,6 @@ export class ResolverWizardStepComponent implements OnDestroy {
this.statusChangeEmitted$.pipe(distinctUntilChanged()).subscribe(errors => this.updateStatus(errors));
this.store.select(fromWizard.getWizardIndex).subscribe(i => this.currentPage = i);
-
- this.bindings = {
- '/securityInfo/x509CertificateAvailable': [
- {
- 'input': (event, property: FormProperty) => {
- let available = !property.value,
- parent = property.parent,
- certs = parent.getProperty('x509Certificates');
- if (available && !certs.value.length) {
- certs.setValue([
- {
- name: '',
- type: 'both',
- value: ''
- }
- ], true);
- }
-
- if (!available && certs.value.length > 0) {
- certs.setValue([], true);
- }
- }
- }
- ],
- '/assertionConsumerServices/*/makeDefault': [
- {
- 'input': (event, property: FormProperty) => {
- let parent = property.parent.parent as ArrayProperty;
- let props = parent.properties as ObjectProperty[];
- props.forEach(prop => {
- if (prop !== property) {
- prop.setValue({
- ...prop.value,
- makeDefault: false
- }, false);
- }
- });
- }
- }
- ]
- };
}
updateStatus(errors: any): void {
diff --git a/ui/src/app/metadata/resolver/effect/draft-collection.effects.ts b/ui/src/app/metadata/resolver/effect/draft-collection.effects.ts
index 024c923eb..038024f2d 100644
--- a/ui/src/app/metadata/resolver/effect/draft-collection.effects.ts
+++ b/ui/src/app/metadata/resolver/effect/draft-collection.effects.ts
@@ -75,6 +75,7 @@ export class DraftCollectionEffects {
ofType(DraftActionTypes.UPDATE_DRAFT_REQUEST),
map(getPayload),
switchMap(provider => {
+ console.log(provider);
return this.draftService
.update(provider)
.pipe(
diff --git a/ui/src/app/metadata/resolver/effect/wizard.effect.ts b/ui/src/app/metadata/resolver/effect/wizard.effect.ts
index e8ece35c7..69d24f732 100644
--- a/ui/src/app/metadata/resolver/effect/wizard.effect.ts
+++ b/ui/src/app/metadata/resolver/effect/wizard.effect.ts
@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { Effect, Actions, ofType } from '@ngrx/effects';
import { ActivatedRoute, Router } from '@angular/router';
-import { map, switchMap, tap, withLatestFrom } from 'rxjs/operators';
+import { map, filter, tap } from 'rxjs/operators';
import { Store } from '@ngrx/store';
import {
@@ -28,6 +28,7 @@ export class WizardEffects {
updateResolver$ = this.actions$.pipe(
ofType(ResolverEntityActionTypes.UPDATE_CHANGES),
map(action => action.payload),
+ filter(provider => !provider.createdDate),
map(provider => new UpdateDraftRequest(provider))
);
diff --git a/ui/src/app/wizard/model/form-definition.ts b/ui/src/app/wizard/model/form-definition.ts
index f14fd2f23..f7036014d 100644
--- a/ui/src/app/wizard/model/form-definition.ts
+++ b/ui/src/app/wizard/model/form-definition.ts
@@ -2,6 +2,7 @@ export interface FormDefinition {
label: string;
type: string;
schema?: string;
+ bindings?: any;
parser(changes: Partial, schema?: any);
formatter(changes: Partial, schema?: any);
getValidators?(...args: any[]): { [key: string]: any };
diff --git a/ui/src/app/wizard/reducer/index.ts b/ui/src/app/wizard/reducer/index.ts
index e3defa126..8540fe2ff 100644
--- a/ui/src/app/wizard/reducer/index.ts
+++ b/ui/src/app/wizard/reducer/index.ts
@@ -54,7 +54,7 @@ export const getSchemaPath = (index: string, wizard: Wizard) => {
};
export const getSplitSchema = (schema: any, step: WizardStep) => {
- if (!schema || !step.fields || !step.fields.length) {
+ if (!schema || !step.fields || !step.fields.length || !schema.properties) {
return schema;
}
const keys = Object.keys(schema.properties).filter(key => step.fields.indexOf(key) > -1);
diff --git a/ui/tsconfig.json b/ui/tsconfig.json
index 6314441c5..ff13e7e77 100644
--- a/ui/tsconfig.json
+++ b/ui/tsconfig.json
@@ -7,6 +7,7 @@
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
+ "allowSyntheticDefaultImports": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"