[DEV] setting form enable require mode

This commit is contained in:
Edouard DUPIN 2023-02-10 00:13:37 +01:00
parent 1e5f3541bf
commit 62c92ebe5d
2 changed files with 29 additions and 17 deletions

View File

@ -12,7 +12,7 @@
<div class="elem-description">{{elem.description}}</div> <div class="elem-description">{{elem.description}}</div>
</div> </div>
<div *ngIf="elem.type === 'STRING'"> <div *ngIf="elem.type === 'STRING'">
<div class="elem-title">{{elem.title}}:</div> <div class="elem-title">{{elem.title}}</div>
<div class="elem-description">{{elem.description}}</div> <div class="elem-description">{{elem.description}}</div>
<div class="elem-input"> <div class="elem-input">
<app-entry <app-entry

View File

@ -3,8 +3,8 @@
* @copyright 2018, Edouard DUPIN, all right reserved * @copyright 2018, Edouard DUPIN, all right reserved
* @license PROPRIETARY (see license file) * @license PROPRIETARY (see license file)
*/ */
import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { Component, EventEmitter, Input, Output } from '@angular/core';
import { isBoolean, isInArray, isNullOrUndefined, isNumber, isObject, isOptionalArrayOf, isOptionalOf, isString, isUndefined } from 'common/utils'; import { isBoolean, isInArray, isNullOrUndefined, isNumber, isObject, isOptionalOf, isString, isUndefined } from 'common/utils';
export type ReturnFunction = (a: boolean|string) => void; export type ReturnFunction = (a: boolean|string) => void;
@ -42,6 +42,8 @@ export interface SettingsItem {
checker?: CheckerParameter checker?: CheckerParameter
// result of the checker (must be set @ undefined): // result of the checker (must be set @ undefined):
state?: boolean | string; state?: boolean | string;
// The element is require to have a valid form.
require?: boolean
} }
export function isSettingsItem(data: any): data is SettingsItem { export function isSettingsItem(data: any): data is SettingsItem {
@ -76,7 +78,10 @@ export function isSettingsItem(data: any): data is SettingsItem {
if (!isUndefined(data.newValue)) { if (!isUndefined(data.newValue)) {
return false; return false;
} }
if (!isUndefined(data.state)) { if (!isOptionalOf(data.state, isString)) {
return false;
}
if (!isOptionalOf(data.require, isBoolean)) {
return false; return false;
} }
return true; return true;
@ -88,7 +93,7 @@ export function isSettingsItem(data: any): data is SettingsItem {
templateUrl: 'render-settings.html', templateUrl: 'render-settings.html',
styleUrls: ['render-settings.less'], styleUrls: ['render-settings.less'],
}) })
export class RenderSettingsComponent implements OnInit { export class RenderSettingsComponent {
/// Value of the password /// Value of the password
@Input() values: SettingsItem[] = []; @Input() values: SettingsItem[] = [];
/// Number of error detected (undefined: No change or not ready, else the number of error) /// Number of error detected (undefined: No change or not ready, else the number of error)
@ -96,14 +101,6 @@ export class RenderSettingsComponent implements OnInit {
/// event with the changed values /// event with the changed values
@Output() deltaValues: EventEmitter<any> = new EventEmitter(); @Output() deltaValues: EventEmitter<any> = new EventEmitter();
constructor(
) {
}
ngOnInit(): void {
//if (value)
}
createOutputValues(): any { createOutputValues(): any {
let out = {}; let out = {};
//console.log(" Create values ... out ... "); //console.log(" Create values ... out ... ");
@ -123,13 +120,23 @@ export class RenderSettingsComponent implements OnInit {
countErrors(): number | undefined { countErrors(): number | undefined {
let out = 0; let out = 0;
this.values.forEach( (value) => { this.values.forEach( (value) => {
if (value.state !== undefined) { if (!isUndefined(value.state)) {
out++; out++;
} }
}); });
return out; return out;
} }
checkMissing(): boolean | undefined {
let error = 0;
this.values.forEach( (value) => {
if (value.require === true && value.value === "" && isUndefined(value.newValue) ) {
error++;
}
});
return error !== 0;
}
checkParameter(newValue: string, item: SettingsItem): void { checkParameter(newValue: string, item: SettingsItem): void {
if (!isNullOrUndefined(item.checker)) { if (!isNullOrUndefined(item.checker)) {
item.state = item.checker(newValue); item.state = item.checker(newValue);
@ -139,6 +146,7 @@ export class RenderSettingsComponent implements OnInit {
} else { } else {
item.newValue = newValue; item.newValue = newValue;
} }
const missing = this.checkMissing();
const outValue = this.createOutputValues(); const outValue = this.createOutputValues();
const nbError = this.countErrors(); const nbError = this.countErrors();
const nbValuesChanges = Object.keys(outValue).length; const nbValuesChanges = Object.keys(outValue).length;
@ -146,10 +154,14 @@ export class RenderSettingsComponent implements OnInit {
//console.log(`nbError=${nbError} nbValuesChanges=${nbValuesChanges}`); //console.log(`nbError=${nbError} nbValuesChanges=${nbValuesChanges}`);
if (nbValuesChanges === 0) { if (nbValuesChanges === 0) {
this.changeState.emit(undefined); this.changeState.emit(undefined);
} else { return;
this.changeState.emit(nbError);
} }
if (nbError === 0 && nbValuesChanges !== 0) { if (missing === true) {
this.changeState.emit(undefined);
return;
}
this.changeState.emit(nbError);
if (nbError === 0) {
this.deltaValues.emit(outValue); this.deltaValues.emit(outValue);
} }
} }