Browse Source

Validation fix.

pull/346/head
Sebastian Stehle 7 years ago
parent
commit
1e95e1d2dd
  1. 56
      src/Squidex/app/shared/components/permission.directive.ts
  2. 2
      src/Squidex/app/shared/state/contents.forms.ts

56
src/Squidex/app/shared/components/permission.directive.ts

@ -5,7 +5,7 @@
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
*/
import { Directive, Input, OnChanges, TemplateRef, ViewContainerRef } from '@angular/core';
import { ChangeDetectorRef, Directive, Input, OnChanges, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';
import {
AppDto,
@ -15,11 +15,15 @@ import {
SchemaDto,
SchemasState
} from '@app/shared/internal';
import { Subscription } from 'rxjs';
@Directive({
selector: '[sqxPermission]'
})
export class PermissionDirective implements OnChanges {
export class PermissionDirective implements OnChanges, OnInit, OnDestroy {
private selectedAppSubscription: Subscription;
private selectedSchemaSubscription: Subscription;
private viewCreated = false;
@Input('sqxPermissionApp')
@ -34,14 +38,54 @@ export class PermissionDirective implements OnChanges {
constructor(
private readonly authService: AuthService,
private readonly appsState: AppsState,
private readonly changeDetector: ChangeDetectorRef,
private readonly schemasState: SchemasState,
private readonly templateRef: TemplateRef<any>,
private readonly viewContainer: ViewContainerRef
) {
}
public ngOnDestroy() {
if (this.selectedAppSubscription) {
this.selectedAppSubscription.unsubscribe();
}
if (this.selectedSchemaSubscription) {
this.selectedSchemaSubscription.unsubscribe();
}
}
public ngOnInit() {
this.selectedAppSubscription =
this.appsState.selectedApp.subscribe(app => {
if (app && !this.app) {
this.update(app, this.schemasState.snapshot.selectedSchema);
}
});
this.selectedSchemaSubscription =
this.schemasState.selectedSchema.subscribe(schema => {
if (schema && !this.schema) {
this.update(this.appsState.snapshot.selectedApp, schema);
}
});
}
public ngOnChanges() {
this.update(this.appsState.snapshot.selectedApp, this.schemasState.snapshot.selectedSchema);
}
private update(app?: AppDto | null, schema?: SchemaDto | null) {
if (this.app) {
app = this.app;
}
if (this.schema) {
schema = this.schema;
}
let permissions = this.permissions;
let show = false;
if (permissions) {
@ -54,14 +98,10 @@ export class PermissionDirective implements OnChanges {
const array = permissions.split(';');
for (let id of array) {
const app = this.app || this.appsState.snapshot.selectedApp;
if (app) {
id = id.replace('{app}', app.name);
}
const schema = this.schema || this.schemasState.snapshot.selectedSchema;
if (schema) {
id = id.replace('{name}', schema.name);
}
@ -95,9 +135,11 @@ export class PermissionDirective implements OnChanges {
if (show && !this.viewCreated) {
this.viewContainer.createEmbeddedView(this.templateRef);
this.viewCreated = true;
} else if (show && this.viewCreated) {
} else if (!show && this.viewCreated) {
this.viewContainer.clear();
this.viewCreated = false;
}
this.changeDetector.markForCheck();
}
}

2
src/Squidex/app/shared/state/contents.forms.ts

@ -147,7 +147,7 @@ export class FieldValidatorsFactory implements FieldPropertiesVisitor<ValidatorF
public visitNumber(properties: NumberFieldPropertiesDto): ValidatorFn[] {
const validators: ValidatorFn[] = [
ValidatorsEx.betweenLength(properties.minValue, properties.maxValue)
ValidatorsEx.between(properties.minValue, properties.maxValue)
];
if (properties.allowedValues && properties.allowedValues.length > 0) {

Loading…
Cancel
Save