Skip to content

Commit

Permalink
SHIBUI-914 Updated editor to use schema
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed Oct 16, 2018
1 parent 12b959e commit ab46139
Show file tree
Hide file tree
Showing 40 changed files with 597 additions and 506 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,10 @@
[attr.aria-label]="route.label"
role="button">
<translate-i18n [key]="route.label"></translate-i18n>
<valid-form-icon *ngIf="(invalidForms$ | async).indexOf(route.path) > -1" status="INVALID"></valid-form-icon>
<valid-form-icon *ngIf="status.indexOf(route.path) > -1" status="INVALID"></valid-form-icon>
</a>
<div class="dropdown-divider"></div>
<a href=""
class="dropdown-item"
[routerLink]="['../', 'filters']"
routerLinkActive="active"
aria-label="Filter List"
role="button"
translate="label.filter-list">
Filter List
</a>
<ng-content select=".dropdown-items"></ng-content>
</div>
</div>
<ng-container *ngSwitchCase="formats.TABS">
Expand All @@ -45,20 +37,20 @@
[attr.aria-label]="route.label">
<translate-i18n [key]="route.label"></translate-i18n>
<valid-form-icon
*ngIf="(invalidForms$ | async).indexOf(route.path) > -1"
*ngIf="status.indexOf(route.path) > -1"
status="INVALID">
</valid-form-icon>
</a>
</nav>
<hr />
<nav class="nav nav-pills flex-column" role="navigation">
<!--<nav class="nav nav-pills flex-column" role="navigation">
<a class="nav-link"
[routerLink]="['../', 'filters']"
routerLinkActive="active"
[attr.aria-label]="'label.filter-list' | translate"
role="button">
<translate-i18n key="label.filter-list"></translate-i18n>
</a>
</nav>
</nav>-->
</ng-container>
</ng-container>
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,23 @@ import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';
import { skipWhile, combineLatest, map } from 'rxjs/operators';

import * as fromProvider from '../reducer';
import { WizardStep, Wizard } from '../../../wizard/model';
import { WizardStep } from '../../../wizard/model';
import * as fromWizard from '../../../wizard/reducer';
import { MetadataProvider } from '../../domain/model';

export enum NAV_FORMATS {
DROPDOWN = 'NAV_DROPDOWN',
TABS = 'NAV_TABS'
}

@Component({
selector: 'provider-editor-nav',
templateUrl: './provider-editor-nav.component.html',
selector: 'editor-nav',
templateUrl: './editor-nav.component.html',
styleUrls: []
})

export class ProviderEditorNavComponent {
export class EditorNavComponent {
@Input() format: string;
@Input() status: string[];

@Output() onPageSelect: EventEmitter<string> = new EventEmitter();

Expand All @@ -32,22 +31,20 @@ export class ProviderEditorNavComponent {
current$: Observable<WizardStep>;

index$: Observable<string>;
invalidForms$: Observable<string[]>;
routes$: Observable<{ path: string, label: string }[]>;

getFilterId = p => p ? p.id : 'filters';
getFilterLabel = p => p ? p.label : 'Filter List';

constructor(
private store: Store<fromProvider.ProviderState>
private store: Store<fromWizard.WizardState>
) {
this.index$ = this.store.select(fromWizard.getWizardIndex).pipe(skipWhile(i => !i));
this.routes$ = this.store.select(fromWizard.getRoutes);
this.current$ = this.store.select(fromWizard.getCurrent);
this.currentPage$ = this.current$.pipe(map(this.getFilterId));

this.currentLabel$ = this.current$.pipe(map(this.getFilterLabel));
this.invalidForms$ = this.store.select(fromProvider.getInvalidEditorForms);
}

gotoPage(page: string = ''): void {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
import { Component, Input } from '@angular/core';

import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { Store, Action } from '@ngrx/store';
import { Subject } from 'rxjs/Subject';

import * as fromEditor from '../reducer';

@Component({
selector: 'unsaved-provider',
templateUrl: './unsaved-provider.dialog.html'
selector: 'unsaved-entity',
templateUrl: './unsaved-entity.dialog.html'
})
export class UnsavedProviderComponent {
export class UnsavedEntityComponent {
readonly subject: Subject<boolean> = new Subject<boolean>();

constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export function getStepProperties(schema: any, model: any, definitions: any = {}
.map(property => {
return getStepProperty(
schema.properties[property],
model[property],
model && model.hasOwnProperty(property) ? model[property] : null,
definitions
);
});
Expand Down
15 changes: 12 additions & 3 deletions ui/src/app/metadata/domain/domain.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,18 @@ import { AttributesService } from './service/attributes.service';
import { I18nModule } from '../../i18n/i18n.module';
import { WizardSummaryComponent } from './component/wizard-summary.component';
import { SummaryPropertyComponent } from './component/summary-property.component';
import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap';
import { NgbPopoverModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
import { UnsavedEntityComponent } from './component/unsaved-entity.dialog';
import { EditorNavComponent } from './component/editor-nav.component';
import { RouterModule } from '@angular/router';
import { SharedModule } from '../../shared/shared.module';

export const COMPONENTS = [
PreviewDialogComponent,
WizardSummaryComponent,
SummaryPropertyComponent
UnsavedEntityComponent,
SummaryPropertyComponent,
EditorNavComponent
];

export const DECLARATIONS = [
Expand All @@ -36,7 +42,10 @@ export const DECLARATIONS = [
HttpModule,
CommonModule,
I18nModule,
NgbPopoverModule
NgbPopoverModule,
RouterModule,
NgbDropdownModule,
SharedModule
],
exports: DECLARATIONS,
providers: []
Expand Down
4 changes: 2 additions & 2 deletions ui/src/app/metadata/domain/domain.util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ export const getEntityIdsFn = list => list.map(entity => entity.entityId);
export const mergeOrderFn = (entities: Metadata[], order: string[]): Metadata[] => {
return [...entities.sort(
(a: Metadata, b: Metadata) => {
const aIndex = order.indexOf(a.resourceId);
const bIndex = order.indexOf(b.resourceId);
const aIndex = order.indexOf(a.id);
const bIndex = order.indexOf(b.id);
return aIndex > bIndex ? 1 : bIndex > aIndex ? -1 : 0;
}
)];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { MetadataTypes } from '../../domain.type';
import { MetadataEntity } from '../../model/metadata-entity';

export class FileBackedHttpMetadataResolver implements MetadataResolver, MetadataEntity {
resourceId = '';
id = '';
createdDate?: string;
modifiedDate?: string;
version: string;
Expand Down Expand Up @@ -53,7 +53,7 @@ export class FileBackedHttpMetadataResolver implements MetadataResolver, Metadat
}

getId(): string {
return this.resourceId;
return this.id;
}

getDisplayId(): string {
Expand Down
2 changes: 1 addition & 1 deletion ui/src/app/metadata/domain/model/metadata-resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
} from '../model';

export interface MetadataResolver extends MetadataBase {
resourceId: string;
id: string;
entityId?: string;
serviceProviderName: string;
organization?: Organization;
Expand Down
147 changes: 147 additions & 0 deletions ui/src/app/metadata/domain/model/wizards/metadata-source-editor.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
import { Wizard, WizardStep } from '../../../../wizard/model';
import { MetadataResolver } from '../metadata-resolver';

export class MetadataSourceEditor implements Wizard<MetadataResolver> {
label = 'Metadata Source';
type = '@MetadataProvider';
steps: WizardStep[] = [
{
index: 1,
id: 'common',
label: 'label.resolver-common-attributes',
schema: 'assets/schema/source/metadata-source.json',
fields: [
'serviceProviderName',
'entityId',
'serviceEnabled',
'organization',
'contacts'
],
fieldsets: [
{
type: 'group',
fields: [
'serviceProviderName',
'entityId',
'serviceEnabled',
'organization'
]
},
{
type: 'group',
fields: [
'contacts'
]
}
]
},
{
index: 3,
id: 'metadata-ui',
label: 'label.metadata-ui',
schema: 'assets/schema/source/metadata-source.json',
fields: [
'mdui'
]
},
{
index: 4,
id: 'descriptor-info',
label: 'label.descriptor-info',
schema: 'assets/schema/source/metadata-source.json',
fields: [
'serviceProviderSsoDescriptor'
]
},
{
index: 5,
id: 'logout-endpoints',
label: 'label.logout-endpoints',
schema: 'assets/schema/source/metadata-source.json',
fields: [
'logoutEndpoints'
],
fieldsets: [
{
type: 'group',
fields: [
'logoutEndpoints'
]
}
]
},
{
index: 6,
id: 'key-info',
label: 'label.key-info',
schema: 'assets/schema/source/metadata-source.json',
fields: [
'securityInfo'
]
},
{
index: 7,
id: 'assertion',
label: 'label.assertion',
schema: 'assets/schema/source/metadata-source.json',
fields: [
'assertionConsumerServices'
],
fieldsets: [
{
type: 'group',
fields: [
'assertionConsumerServices'
]
}
]
},
{
index: 8,
id: 'relying-party',
label: 'label.relying-party',
schema: 'assets/schema/source/metadata-source.json',
fields: [
'relyingPartyOverrides'
],
fieldsets: [
{
type: 'group',
fields: [
'relyingPartyOverrides'
]
}
]
},
{
index: 9,
id: 'attribute',
label: 'label.attribute-release',
schema: 'assets/schema/source/metadata-source.json',
fields: [
'attributeRelease'
],
fieldsets: [
{
type: 'group',
fields: [
'attributeRelease'
]
}
]
}
];

parser(changes: Partial<MetadataResolver>, schema?: any): any {
return changes;
}

formatter(changes: Partial<MetadataResolver>, schema?: any): any {
return changes;
}

getValidators(...args: any[]): { [key: string]: any } {
const validators = {};
return validators;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -169,3 +169,4 @@ export class MetadataSourceWizard implements Wizard<MetadataResolver> {
return validators;
}
}

8 changes: 4 additions & 4 deletions ui/src/app/metadata/domain/service/draft.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export class EntityDraftService {
return of(this.storage.query());
}

find(id: string, attr: string = 'resourceId'): Observable<MetadataResolver> {
find(id: string, attr: string = 'id'): Observable<MetadataResolver> {
if (!id) {
return throwError(404);
}
Expand All @@ -35,15 +35,15 @@ export class EntityDraftService {
}

remove(provider: MetadataResolver): Observable<MetadataResolver> {
this.storage.removeByAttr(provider.resourceId, 'resourceId');
this.storage.removeByAttr(provider.id, 'id');
return of(provider);
}

update(provider: MetadataResolver): Observable<MetadataResolver> {
let stored = this.storage.findByAttr(provider.resourceId, 'resourceId');
let stored = this.storage.findByAttr(provider.id, 'id');
if (stored) {
stored = { ...stored, ...provider };
this.storage.removeByAttr(provider.resourceId, 'resourceId');
this.storage.removeByAttr(provider.id, 'id');
this.storage.add(stored);
return of(stored);
} else {
Expand Down
Loading

0 comments on commit ab46139

Please sign in to comment.