diff --git a/src/app/components/pb-results/pb-results-table.component.ts b/src/app/components/pb-results/pb-results-table.component.ts index b1ab9838b5fec90c1c89405d38f302397c347412..de2545a6c84fc94575d064d190a05c617180b9e0 100644 --- a/src/app/components/pb-results/pb-results-table.component.ts +++ b/src/app/components/pb-results/pb-results-table.component.ts @@ -35,22 +35,6 @@ export class PbResultsTableComponent extends ResultsComponentDirective { super(); } - /* private getJetTypes(re: Result, vi: number): string { - // jet type for each device - const devices = re.sourceNub.getChildren(); - const jetTypes: string[] = devices.map((device) => { - const jt = device.result.resultElements[vi].getValue("ENUM_StructureJetType"); - let jetType = this.intlService.localizeText("INFO_ENUM_STRUCTUREJETTYPE_" + jt); - if (devices.length > 1) { - // evil HTML injection in table cell (simpler) - jetType = this.intlService.localizeText("INFO_LIB_FS_OUVRAGE") + " n°" - + (device.findPositionInParent() + 1) + ": " + jetType; - } - return jetType; - }); - return `<div class="inner-cell-line">` + jetTypes.join(`, </div><div class="inner-cell-line">`) + `</div>`; - } */ - public set results(r: PrebarrageResults) { this._pbResults = r; console.log("Set results dans PBRTC !", r); diff --git a/src/app/formulaire/definition/form-parallel-structures.ts b/src/app/formulaire/definition/form-parallel-structures.ts index c985f288b7ab0d25f945992739a68e03d3632c73..f304c1c2b289895b334e8ead3ffcf53754195706 100644 --- a/src/app/formulaire/definition/form-parallel-structures.ts +++ b/src/app/formulaire/definition/form-parallel-structures.ts @@ -112,7 +112,7 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { * @param name nom de la propriété qui vient de changer * @param val nouvelle valeur de la propriété */ - private adjustProperties(props: Props, name: string, val: any) { + protected adjustProperties(props: Props, name: string, val: any) { if (name === "structureType") { if (! StructureProperties.isCompatibleValues( val, props.getPropValue("loiDebit"), this.currentNub as ParallelStructure @@ -138,7 +138,7 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { /** * abonnement en tant qu'observateur des NgParameter des FieldSet contenus dans le FieldsetContainer */ - private subscribeStructureInputFields(fs: FieldSet) { + protected subscribeStructureInputFields(fs: FieldSet) { for (const n of fs.allFormElements) { if (n instanceof NgParameter) { n.addObserver(this); @@ -148,7 +148,7 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { /** * abonnement en tant qu'observateur du SelectField des FieldSet contenus dans le FieldsetContainer */ - private subscribeStructureSelectFields(fs: FieldSet) { + protected subscribeStructureSelectFields(fs: FieldSet) { for (const n of fs.allFormElements) { if (n instanceof SelectField) { n.addObserver(this); diff --git a/src/app/formulaire/definition/form-pb-cloison.ts b/src/app/formulaire/definition/form-pb-cloison.ts index db7272f523bccc9c5e5dc5833305fa9365a1d20d..d41333580e3ebd3864c97beb0f08b6d5223eafad 100644 --- a/src/app/formulaire/definition/form-pb-cloison.ts +++ b/src/app/formulaire/definition/form-pb-cloison.ts @@ -1,7 +1,10 @@ import { FormulaireParallelStructure } from "./form-parallel-structures"; import { SelectFieldNub } from "../elements/select-field-nub"; -import { IObservable, Nub, PbCloison, PbBassin } from "jalhyd"; +import { IObservable, Nub, PbCloison, PbBassin, Structure } from "jalhyd"; +import { FieldSet } from '../elements/fieldset'; +import { FormulaireNode } from '../elements/formulaire-node'; +import { FieldsetContainer } from '../elements/fieldset-container'; export class FormulairePbCloison extends FormulaireParallelStructure { @@ -36,7 +39,31 @@ export class FormulairePbCloison extends FormulaireParallelStructure { // interface Observer public update(sender: IObservable, data: any) { - super.update(sender, data); + // do NOT call super.update() or "newFieldset" action will reset results + if (sender instanceof FieldsetContainer) { + switch (data.action) { + case "newFieldset": + // this.reset(); + console.log("||| reset PAS NON PLUS :) |||"); + this.subscribeStructureInputFields(data["fieldset"]); + this.subscribeStructureSelectFields(data["fieldset"]); + } + } else if (sender instanceof FieldSet && data.action === "propertyChange") { + switch (sender.id) { + case "fs_ouvrage": + const props = sender.properties; + // ensure loiDebit is set + props.setPropValue("loiDebit", data.value); + this.adjustProperties(props, data["name"], data["value"]); + // replace Structure Nub + const newNub = this.replaceNub((sender.nub as Structure), props); + sender.setNub(newNub); + // treat the fieldset as new to re-subscribe to Nub properties change events + this.afterParseFieldset(sender); + this.reset(); + break; + } + } if (sender instanceof SelectFieldNub) { const nub = this._currentNub as PbCloison; @@ -72,4 +99,37 @@ export class FormulairePbCloison extends FormulaireParallelStructure { }, this); } } + + // do not reset results after adding fieldset (when switching results view + // from one wall to another, the form is rebuilt) @TODO anyway, we should + // reset when a fieldset is manually added from "input" (form) view + public createFieldset(parent: FormulaireNode, json: {}, data?: {}, nub?: Nub): FieldSet { + if (json["calcType"] === "Structure") { + // indice après lequel insérer le nouveau FieldSet + const after = data["after"]; + + const res: FieldSet = new FieldSet(parent); + let sn: Nub; + if (nub) { // use existing Nub (build interface based on model) + sn = nub; + } else { + sn = this.createChildNub(data["template"]); + this.currentNub.addChild(sn, after); + } + res.setNub(sn, false); + + if (after !== undefined) { + parent.kids.splice(after + 1, 0, res); + } else { + parent.kids.push(res); + } + + console.log("\\\ reset PAS ///"); + // this.resetResults(); + + return res; + } else { + return super.createFieldset(parent, json, data); + } + } } diff --git a/src/app/formulaire/definition/form-prebarrage.ts b/src/app/formulaire/definition/form-prebarrage.ts index 8cd69289368fb5ea5936366e9b2fa2d35f51b3fe..3027888615f593d83ecc161f6d8d36b2d8e19ba0 100644 --- a/src/app/formulaire/definition/form-prebarrage.ts +++ b/src/app/formulaire/definition/form-prebarrage.ts @@ -47,7 +47,6 @@ export class FormulairePrebarrage extends FormulaireFixedVar { public get results(): CalculatorResults[] { // ensure help links are propagated this._pbResults.helpLinks = this.helpLinks; - console.log("RENVOI", [ this.fixedResults, this._pbResults ]); return [ this.fixedResults, this._pbResults ]; } @@ -120,7 +119,6 @@ export class FormulairePrebarrage extends FormulaireFixedVar { public nodeSelected(node: PbBassin | PbCloison) { // store for results formatting this._selectedItem = node; - this.reaffectResultComponents(); // show only the relevant form if (node === undefined) { @@ -164,6 +162,7 @@ export class FormulairePrebarrage extends FormulaireFixedVar { } this.showFormElements(wallForm); } + this.reaffectResultComponents(); } /** @@ -216,6 +215,10 @@ export class FormulairePrebarrage extends FormulaireFixedVar { this.pbResults.variatedParameters = varParams; } + // cacher les résultats de la cloison + this.fixedResults.reset(); + this.addFixedParameters(); + // résultats selon l'objet sélectionné sur le schéma if (this._selectedItem !== undefined && this._selectedItem instanceof PbCloison) { // cacher les résultats de bassins @@ -228,10 +231,6 @@ export class FormulairePrebarrage extends FormulaireFixedVar { this.fixedResults.calculatedParameter = computedParam; } } else { - // cacher les résultats de la cloison - this.fixedResults.reset(); - this.addFixedParameters(); - // afficher les résultats des bassins this.pbResults.reset(); // résultat général du Nub (amont, aval, débit)