Commit 8be6cb96 authored by Mathias Chouet's avatar Mathias Chouet 🍝
Browse files

Simplified code of forms with repeatable fieldsets

parent 31851818
Pipeline #9594 passed with stages
in 61 minutes and 40 seconds
......@@ -134,7 +134,7 @@ export class CalculatorListComponent implements OnInit {
if (f instanceof FormulaireMacrorugoCompound) {
for (const e of f.allFormElements) {
if (e instanceof FieldsetContainer) {
e.addFromTemplate(0, 0, f.mrcNub.children[0]);
e.addFromTemplate(0, 0, f.currentNub.getChildren()[0]);
break;
}
}
......
import { IObservable, MacroRugo, MacrorugoCompound, Nub, Props, Session } from "jalhyd";
import { IObservable, Nub } from "jalhyd";
import { FormulaireBase } from "./form-base";
import { FieldSet } from "../../fieldset";
import { FieldsetContainer } from "../../fieldset-container";
import { FormulaireNode } from "../../formulaire-node";
import { FieldsetTemplate } from "../../fieldset-template";
import { NgParameter } from "../../ngparam";
import { FormResultMacrorugoCompound } from "../form-result-macrorugo-compound";
import { FormComputeMacrorugoCompound } from "../form-compute-macrorugo-compound";
import { FormulaireRepeatableFieldset } from "./form-repeatable-fieldset";
/**
* Formulaire pour les passes à macrorugosités complexes
*/
export class FormulaireMacrorugoCompound extends FormulaireBase {
export class FormulaireMacrorugoCompound extends FormulaireRepeatableFieldset {
/** id of select configuring apron type */
private _apronTypeSelectId: string;
......@@ -29,32 +28,20 @@ export class FormulaireMacrorugoCompound extends FormulaireBase {
this._formCompute = new FormComputeMacrorugoCompound(this, (this._formResult as FormResultMacrorugoCompound));
}
public get mrcNub(): MacrorugoCompound {
return this.currentNub as MacrorugoCompound;
}
private createMacroRugoNub(templ: FieldsetTemplate): Nub {
const params = {};
params["calcType"] = templ.calcTypeFromConfig;
return this.createMacroRugo(new Props(params));
}
/**
* ajoute un nub MacroRugo
* @param mr nub à ajouter
* @param after position après laquelle insérer le nub, à la fin sinon
*/
private addMacroRugoNub(mr: MacroRugo, after?: number) {
this.mrcNub.addChild(mr, after);
protected parseOptions(json: {}) {
super.parseOptions(json);
this._apronTypeSelectId = this.getOption(json, "apronTypeSelectId");
}
/**
* Asks JaLHyd to create a MacroRugo nub as a child of the current Calculator Module
* and return it; does not store it in the Session (for MacroRugo, not for Calculator Modules)
* @param p properties for the new Nub
*/
protected createMacroRugo(p: Props): MacroRugo {
return Session.getInstance().createNub(p, this.mrcNub) as MacroRugo;
public afterParseFieldset(fs: FieldSet) {
// if Fieldset contains apron type selector
if (this._apronTypeSelectId) {
const sel = fs.getFormulaireNodeById(this._apronTypeSelectId);
if (sel) {
// on abonne le formulaire aux propriétés du FieldSet
fs.properties.addObserver(this);
}
}
}
public createFieldset(parent: FormulaireNode, json: {}, data?: {}, nub?: Nub): FieldSet {
......@@ -67,8 +54,8 @@ export class FormulaireMacrorugoCompound extends FormulaireBase {
if (nub) { // use existing Nub (build interface based on model)
mrn = nub;
} else {
mrn = this.createMacroRugoNub(data["template"]);
this.addMacroRugoNub(mrn as MacroRugo, after);
mrn = this.createChildNub(data["template"]);
this.currentNub.addChild(mrn, after);
}
res.setNub(mrn, false);
......@@ -86,64 +73,13 @@ export class FormulaireMacrorugoCompound extends FormulaireBase {
}
}
protected parseOptions(json: {}) {
super.parseOptions(json);
this._apronTypeSelectId = this.getOption(json, "apronTypeSelectId");
}
public afterParseFieldset(fs: FieldSet) {
// if Fieldset contains apron type selector
if (this._apronTypeSelectId) {
const sel = fs.getFormulaireNodeById(this._apronTypeSelectId);
if (sel) {
// on abonne le formulaire aux propriétés du FieldSet
fs.properties.addObserver(this);
}
}
}
public moveFieldsetUp(fs: FieldSet) {
if (fs.nub instanceof MacroRugo) {
// déplacement du nub
fs.nub.parent.moveChildUp(fs.nub);
// déplacement du fieldset
this.fieldsetContainer.moveFieldsetUp(fs);
this.resetResults();
} else {
super.moveFieldsetUp(fs);
}
}
public moveFieldsetDown(fs: FieldSet) {
if (fs.nub instanceof MacroRugo) {
// déplacement du nub
fs.nub.parent.moveChildDown(fs.nub);
// déplacement du fieldset
this.fieldsetContainer.moveFieldsetDown(fs);
this.resetResults();
} else { super.moveFieldsetDown(fs); }
}
public removeFieldset(fs: FieldSet) {
if (fs.nub instanceof MacroRugo) {
// suppression du sous-nub dans le Nub parent
this.mrcNub.deleteChild(fs.nub.findPositionInParent());
// suppression du fieldset
this.fieldsetContainer.removeFieldset(fs);
this.resetResults();
} else { super.removeFieldset(fs); }
}
protected completeParse(json: {}) {
this.subscribeFieldsetContainer();
this.updateApronState(this.mrcNub.properties.getPropValue("inclinedApron"));
this.updateApronState(this.currentNub.properties.getPropValue("inclinedApron"));
this._formResult.helpLinks = this._resultsHelpLinks;
}
private get fieldsetContainer(): FieldsetContainer {
protected get fieldsetContainer(): FieldsetContainer {
const n = this.getFormulaireNodeById("macrorugo_container");
if (n === undefined || !(n instanceof FieldsetContainer)) {
throw new Error("l'élément 'macrorugo_container' n'est pas du type FieldsetContainer");
......@@ -189,7 +125,7 @@ export class FormulaireMacrorugoCompound extends FormulaireBase {
for (const elt of this.allFormElements) {
if (elt instanceof FieldsetContainer) {
elt.clearKids();
for (const c of this.mrcNub.children) {
for (const c of this.currentNub.getChildren()) {
elt.addFromTemplate(0, undefined, c);
}
}
......@@ -200,9 +136,7 @@ export class FormulaireMacrorugoCompound extends FormulaireBase {
// interface Observer
public update(sender: IObservable, data: any) {
super.update(sender, data);
if (sender instanceof FieldsetContainer) {
switch (data.action) {
case "newFieldset":
......
......@@ -8,9 +8,9 @@ import { SelectField } from "../../select-field";
import { NgParameter } from "../../ngparam";
import { FieldsetTemplate } from "../../fieldset-template";
import { FormulaireNode } from "../../formulaire-node";
import { FormulaireBase } from "./form-base";
import { FormulaireRepeatableFieldset } from "./form-repeatable-fieldset";
export class FormulaireParallelStructure extends FormulaireBase {
export class FormulaireParallelStructure extends FormulaireRepeatableFieldset {
/**
* id du select configurant le type d'ouvrage
......@@ -26,63 +26,22 @@ export class FormulaireParallelStructure extends FormulaireBase {
this._formCompute = new FormComputeParallelStructures(this, (this._formResult as FormResultFixedVar));
}
private createStructNub(templ: FieldsetTemplate): Nub {
// !!! attention !!!
// Il doit y avoir cohérence dans le fichier de conf entre les valeurs defaultXXX et les valeurs possibles pour les select
// cad valeur par défaut du 1er select (type d'ouvrage), du 2ème (loi de débit).
// A terme, il faudrait analyser le fichier de conf (dépendances d'existence) pour déterminer automatiquement ces valeurs
const params = {};
params["calcType"] = templ.calcTypeFromConfig;
params["nodeType"] = templ.defaultNodeTypeFromConfig;
params["structureType"] = templ.defaultStructTypeFromConfig;
params["loiDebit"] = templ.defaultLoiDebitFromConfig;
return this.createStructure(new Props(params));
}
/**
* ajoute un Nub Structure
* @param st structure à ajouter
* @param after position après laquelle insérer la structure, à la fin sinon
*/
private addStructureNub(st: Structure, after?: number) {
this.parallelStructureNub.addChild(st, after);
}
private get parallelStructureNub(): ParallelStructure {
return this.currentNub as ParallelStructure;
}
/**
* Asks JaLHyd to create a Structure Nub as a child of the current Calculator Module
* and return it; does not store it in the Session (for Structures, not for Calculator Modules)
* @param p properties for the new Nub
*/
protected createStructure(p: Props): Structure {
return Session.getInstance().createNub(p, this.currentNub as ParallelStructure) as Structure;
}
protected parseOptions(json: {}) {
super.parseOptions(json);
/**
* Replaces the geiven Structure sn in the current calculator module,
* with a new one built with properties "params"
* @param sn Structure to replace
* @param params properties to build the new Nub (calcType, loiDebit...)
*/
protected replaceNub(sn: Structure, params: Props): Nub {
const parent = (this.currentNub as ParallelStructure);
const newStructure = this.createStructure(params);
parent.replaceChildInplace(sn, newStructure);
return newStructure;
// id du select configurant le type d'ouvrage
this.__ouvrageSelectId = this.getOption(json, "ouvrageSelectId");
}
/**
* Deleted the given child Nub in the current calculator module
* @param params properties to build the new Nub (calcType, loiDebit...)
*/
protected deleteNub(sn: Structure) {
const parent = (this.currentNub as ParallelStructure);
parent.deleteChild(parent.getIndexForChild(sn));
public afterParseFieldset(fs: FieldSet) {
// si le FieldSet contient le select de type d'ouvrage
if (this.__ouvrageSelectId) {
const sel = fs.getFormulaireNodeById(this.__ouvrageSelectId);
if (sel) {
// on abonne le formulaire aux propriétés du FieldSet
fs.properties.addObserver(this);
}
}
}
public createFieldset(parent: FormulaireNode, json: {}, data?: {}, nub?: Nub): FieldSet {
......@@ -95,8 +54,8 @@ export class FormulaireParallelStructure extends FormulaireBase {
if (nub) { // use existing Nub (build interface based on model)
sn = nub;
} else {
sn = this.createStructNub(data["template"]);
this.addStructureNub(sn as Structure, after);
sn = this.createChildNub(data["template"]);
this.currentNub.addChild(sn, after);
}
res.setNub(sn, false);
......@@ -114,58 +73,41 @@ export class FormulaireParallelStructure extends FormulaireBase {
}
}
protected parseOptions(json: {}) {
super.parseOptions(json);
// id du select configurant le type d'ouvrage
this.__ouvrageSelectId = this.getOption(json, "ouvrageSelectId");
}
public afterParseFieldset(fs: FieldSet) {
// si le FieldSet contient le select de type d'ouvrage
if (this.__ouvrageSelectId) {
const sel = fs.getFormulaireNodeById(this.__ouvrageSelectId);
if (sel) {
// on abonne le formulaire aux propriétés du FieldSet
fs.properties.addObserver(this);
}
}
}
protected createChildNub(templ: FieldsetTemplate): Nub {
// !!! attention !!!
// Il doit y avoir cohérence dans le fichier de conf entre les valeurs defaultXXX et les valeurs possibles pour les select
// cad valeur par défaut du 1er select (type d'ouvrage), du 2ème (loi de débit).
// A terme, il faudrait analyser le fichier de conf (dépendances d'existence) pour déterminer automatiquement ces valeurs
public moveFieldsetUp(fs: FieldSet) {
if (fs.nub instanceof Structure) {
// déplacement du nub
fs.nub.parent.moveChildUp(fs.nub);
// déplacement du fieldset
this.fieldsetContainer.moveFieldsetUp(fs);
const params = {};
params["calcType"] = templ.calcTypeFromConfig;
params["nodeType"] = templ.defaultNodeTypeFromConfig;
params["structureType"] = templ.defaultStructTypeFromConfig;
params["loiDebit"] = templ.defaultLoiDebitFromConfig;
this.resetResults();
} else {
super.moveFieldsetUp(fs);
}
return this.createStructure(new Props(params));
}
public moveFieldsetDown(fs: FieldSet) {
if (fs.nub instanceof Structure) {
// déplacement du nub
fs.nub.parent.moveChildDown(fs.nub);
// déplacement du fieldset
this.fieldsetContainer.moveFieldsetDown(fs);
this.resetResults();
} else { super.moveFieldsetDown(fs); }
/**
* Asks JaLHyd to create a Structure Nub as a child of the current Calculator Module
* and return it; does not store it in the Session (for Structures, not for Calculator Modules)
* @param p properties for the new Nub
*/
protected createStructure(p: Props): Structure {
return Session.getInstance().createNub(p, this.currentNub as ParallelStructure) as Structure;
}
public removeFieldset(fs: FieldSet) {
if (fs.nub instanceof Structure) {
// suppression du sous-nub dans le Nub parent
this.deleteNub(fs.nub);
// suppression du fieldset
this.fieldsetContainer.removeFieldset(fs);
this.resetResults();
} else { super.removeFieldset(fs); }
/**
* Replaces the given Structure sn in the current calculator module,
* with a new one built with properties "params"
* @param sn Structure to replace
* @param params properties to build the new Nub (calcType, loiDebit...)
*/
protected replaceNub(sn: Structure, params: Props): Nub {
const parent = (this.currentNub as ParallelStructure);
const newStructure = this.createStructure(params);
parent.replaceChildInplace(sn, newStructure);
return newStructure;
}
protected completeParse(json: {}) {
......@@ -173,7 +115,7 @@ export class FormulaireParallelStructure extends FormulaireBase {
this._formResult.helpLinks = this._resultsHelpLinks;
}
private get fieldsetContainer(): FieldsetContainer {
protected get fieldsetContainer(): FieldsetContainer {
const n = this.getFormulaireNodeById("struct_container");
if (n === undefined || !(n instanceof FieldsetContainer)) {
throw new Error("l'élément 'struct_container' n'est pas du type FieldsetContainer");
......@@ -235,9 +177,7 @@ export class FormulaireParallelStructure extends FormulaireBase {
// interface Observer
public update(sender: any, data: any) {
super.update(sender, data);
if (sender instanceof FieldsetContainer) {
switch (data.action) {
case "newFieldset":
......
import { FieldSet } from "../../fieldset";
import { FieldsetContainer } from "../../fieldset-container";
import { FormulaireBase } from "./form-base";
import { FieldsetTemplate } from "../../fieldset-template";
import { Props, Session, Nub } from "jalhyd";
export abstract class FormulaireRepeatableFieldset extends FormulaireBase {
protected abstract get fieldsetContainer(): FieldsetContainer;
public moveFieldsetUp(fs: FieldSet) {
// déplacement du nub
fs.nub.parent.moveChildUp(fs.nub);
// déplacement du fieldset
this.fieldsetContainer.moveFieldsetUp(fs);
this.resetResults();
}
public moveFieldsetDown(fs: FieldSet) {
// déplacement du nub
fs.nub.parent.moveChildDown(fs.nub);
// déplacement du fieldset
this.fieldsetContainer.moveFieldsetDown(fs);
this.resetResults();
}
public removeFieldset(fs: FieldSet) {
// suppression du sous-nub dans le Nub parent
this.currentNub.deleteChild(fs.nub.findPositionInParent());
// suppression du fieldset
this.fieldsetContainer.removeFieldset(fs);
this.resetResults();
}
/**
* Asks JaLHyd to create a nub as a child of the current Calculator Module
* and return it; does not store it in the Session
* @param p properties for the new Nub
*/
protected createChildNub(templ: FieldsetTemplate): Nub {
const params = {};
params["calcType"] = templ.calcTypeFromConfig;
return Session.getInstance().createNub(new Props(params), this.currentNub);
}
}
import { FormulaireBase } from "./form-base";
import { FieldsetTemplate } from "../../fieldset-template";
import { FormulaireRepeatableFieldset } from "./form-repeatable-fieldset";
import { FieldSet } from "../../fieldset";
import { FormulaireNode } from "../../formulaire-node";
import { FieldsetContainer } from "../../fieldset-container";
import { SPP, Nub, Props, Session, YAXN, IObservable } from "jalhyd";
import { Nub, IObservable } from "jalhyd";
/**
* Formulaire pour "somme / produit de puissances"
*/
export class FormulaireSPP extends FormulaireBase {
export class FormulaireSPP extends FormulaireRepeatableFieldset {
/** id of select configuring operation */
private _operationSelectId: string;
public get sppNub(): SPP {
return this.currentNub as SPP;
}
protected parseOptions(json: {}) {
super.parseOptions(json);
this._operationSelectId = this.getOption(json, "operationSelectId");
......@@ -32,30 +27,6 @@ export class FormulaireSPP extends FormulaireBase {
}
}
private createYaxnNub(templ: FieldsetTemplate): Nub {
const params = {};
params["calcType"] = templ.calcTypeFromConfig;
return this.createYaxn(new Props(params));
}
/**
* ajoute un nub YAXN
* @param mr nub à ajouter
* @param after position après laquelle insérer le nub, à la fin sinon
*/
private addYaxnNub(mr: YAXN, after?: number) {
this.sppNub.addChild(mr, after);
}
/**
* Asks JaLHyd to create a YAXN nub as a child of the current Calculator Module
* and return it; does not store it in the Session (for YAXN, not for Calculator Modules)
* @param p properties for the new Nub
*/
protected createYaxn(p: Props): YAXN {
return Session.getInstance().createNub(p, this.sppNub) as YAXN;
}
public createFieldset(parent: FormulaireNode, json: {}, data?: {}, nub?: Nub): FieldSet {
if (json["calcType"] === "YAXN") {
// indice après lequel insérer le nouveau FieldSet
......@@ -66,8 +37,8 @@ export class FormulaireSPP extends FormulaireBase {
if (nub) { // use existing Nub (build interface based on model)
mrn = nub;
} else {
mrn = this.createYaxnNub(data["template"]);
this.addYaxnNub(mrn as YAXN, after);
mrn = this.createChildNub(data["template"]);
this.currentNub.addChild(mrn, after);
}
res.setNub(mrn, false);
......@@ -85,39 +56,12 @@ export class FormulaireSPP extends FormulaireBase {
}
}
public moveFieldsetUp(fs: FieldSet) {
if (fs.nub instanceof YAXN) {
// déplacement du nub
fs.nub.parent.moveChildUp(fs.nub);
// déplacement du fieldset
this.fieldsetContainer.moveFieldsetUp(fs);
this.resetResults();
} else {
super.moveFieldsetUp(fs);
protected get fieldsetContainer(): FieldsetContainer {
const n = this.getFormulaireNodeById("yaxn_container");
if (n === undefined || !(n instanceof FieldsetContainer)) {
throw new Error("l'élément 'yaxn_container' n'est pas du type FieldsetContainer");
}
}
public moveFieldsetDown(fs: FieldSet) {
if (fs.nub instanceof YAXN) {
// déplacement du nub
fs.nub.parent.moveChildDown(fs.nub);
// déplacement du fieldset
this.fieldsetContainer.moveFieldsetDown(fs);
this.resetResults();
} else { super.moveFieldsetDown(fs); }
}
public removeFieldset(fs: FieldSet) {
if (fs.nub instanceof YAXN) {
// suppression du sous-nub dans le Nub parent
this.sppNub.deleteChild(fs.nub.findPositionInParent());
// suppression du fieldset
this.fieldsetContainer.removeFieldset(fs);
this.resetResults();
} else { super.removeFieldset(fs); }
return n as FieldsetContainer;
}
// interface Observer
......@@ -128,12 +72,4 @@ export class FormulaireSPP extends FormulaireBase {
this.reset();
}
}
private get fieldsetContainer(): FieldsetContainer {
const n = this.getFormulaireNodeById("yaxn_container");
if (n === undefined || !(n instanceof FieldsetContainer)) {
throw new Error("l'élément 'yaxn_container' n'est pas du type FieldsetContainer");
}
return n as FieldsetContainer;
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment