diff --git a/src/app/calculators/pbcloison/en.json b/src/app/calculators/pbcloison/en.json index bcd280c3ae48286d01329c713f69232a9b5c0713..2f9e9474495b783410a871c4c760bd4f12f1d9a8 100644 --- a/src/app/calculators/pbcloison/en.json +++ b/src/app/calculators/pbcloison/en.json @@ -2,5 +2,34 @@ "fs_wall_params": "Wall parameters", "select_upstream_basin": "Upstream basin", - "select_downstream_basin": "Downstream basin" + "select_downstream_basin": "Downstream basin", + + "select_structure_Orifice": "Orifice", + "select_structure_VanneRectangulaire": "Rectangular gate", + "select_structure_SeuilRectangulaire": "Rectangular weir", + "select_structure_SeuilTriangulaire": "Triangular weir", + "select_structure_SeuilTriangulaireTrunc": "Truncated triangular weir", + + "select_loidebit_Orifice_OrificeSubmerged": "Submerged orifice", + "select_loidebit_Orifice_OrificeFree": "Free orifice", + + "select_loidebit_VanneRectangulaire_GateCem88d": "Weir/Orifice Cemagref 88", + "select_loidebit_VanneRectangulaire_GateCem88v": "Weir/Undershot gate Cemagref 88", + "select_loidebit_VanneRectangulaire_GateCunge80": "Cunge (1980)", + "select_loidebit_VanneRectangulaire_RectangularOrificeFree": "Free flow gate", + "select_loidebit_VanneRectangulaire_RectangularOrificeSubmerged": "Submerged gate", + + "select_loidebit_SeuilTriangulaire_TriangularWeirFree": "V-notch sharp-crested weir (Villemonte)", + "select_loidebit_SeuilTriangulaire_TriangularWeirBroad": "V-notch broad-crested weir (Bos)", + + "select_loidebit_SeuilTriangulaireTrunc_TriangularTruncWeirFree": "Truncated triangular weir (Villemonte)", + + "select_loidebit_SeuilRectangulaire_WeirCem88d": "Weir/Orifice Cemagref 88", + "select_loidebit_SeuilRectangulaire_WeirCem88v": "Weir/Undershot gate Cemagref 88", + "select_loidebit_SeuilRectangulaire_WeirSubmergedLarinier": "Submerged slot (Larinier 1992)", + "select_loidebit_SeuilRectangulaire_WeirSubmerged": "Submerged weir", + "select_loidebit_SeuilRectangulaire_WeirVillemonte": "Villemonte 1957", + "select_loidebit_SeuilRectangulaire_WeirFree": "Free flow weir", + "select_loidebit_SeuilRectangulaire_KIVI": "Kindsvater-Carter and Villemonte", + "select_loidebit_SeuilRectangulaire_WeirCunge80": "Cunge (1980)" } diff --git a/src/app/calculators/pbcloison/fr.json b/src/app/calculators/pbcloison/fr.json index 4480513b321933fb82ec471c694ecf845462c426..e02e713f3602e08b138a20923fecca7caf3cac33 100644 --- a/src/app/calculators/pbcloison/fr.json +++ b/src/app/calculators/pbcloison/fr.json @@ -1,6 +1,36 @@ { "fs_wall_params": "Paramètres de la cloison", + "fs_wall_device": "Ouvrage", "select_upstream_basin": "Bassin amont", - "select_downstream_basin": "Bassin aval" + "select_downstream_basin": "Bassin aval", + + "select_structure_Orifice": "Orifice", + "select_structure_SeuilRectangulaire": "Seuil rectangulaire", + "select_structure_SeuilTriangulaire": "Seuil triangulaire", + "select_structure_SeuilTriangulaireTrunc": "Seuil triangulaire tronqué", + "select_structure_VanneRectangulaire": "Vanne rectangulaire", + + "select_loidebit_Orifice_OrificeSubmerged": "Orifice noyé", + "select_loidebit_Orifice_OrificeFree": "Orifice dénoyé", + + "select_loidebit_VanneRectangulaire_GateCem88d": "Déversoir/Orifice Cemagref 88", + "select_loidebit_VanneRectangulaire_GateCem88v": "Déversoir/Vanne de fond Cemagref 88", + "select_loidebit_VanneRectangulaire_GateCunge80": "Cunge (1980)", + "select_loidebit_VanneRectangulaire_RectangularOrificeFree": "Vanne dénoyée", + "select_loidebit_VanneRectangulaire_RectangularOrificeSubmerged": "Vanne noyée", + + "select_loidebit_SeuilTriangulaire_TriangularWeirFree": "Déversoir triangulaire mince (Villemonte)", + "select_loidebit_SeuilTriangulaire_TriangularWeirBroad": "Déversoir triangulaire épais (Bos)", + + "select_loidebit_SeuilTriangulaireTrunc_TriangularTruncWeirFree": "Déversoir triangulaire tronqué (Villemonte)", + + "select_loidebit_SeuilRectangulaire_WeirCem88d": "Déversoir/Orifice Cemagref 88", + "select_loidebit_SeuilRectangulaire_WeirCem88v": "Déversoir/Vanne de fond Cemagref 88", + "select_loidebit_SeuilRectangulaire_WeirSubmergedLarinier": "Fente noyée (Larinier 1992)", + "select_loidebit_SeuilRectangulaire_WeirSubmerged": "Seuil noyé", + "select_loidebit_SeuilRectangulaire_WeirVillemonte": "Villemonte 1957", + "select_loidebit_SeuilRectangulaire_WeirFree": "Seuil dénoyé", + "select_loidebit_SeuilRectangulaire_KIVI": "Kindsvater-Carter et Villemonte", + "select_loidebit_SeuilRectangulaire_WeirCunge80": "Cunge (1980)" } diff --git a/src/app/components/pb-schema/pb-schema.component.ts b/src/app/components/pb-schema/pb-schema.component.ts index 0dddab78b08f8ccded24d1421f06ae76c44c6185..fa57966e7d5c8e3deb19c52263f732acf65b3c5e 100644 --- a/src/app/components/pb-schema/pb-schema.component.ts +++ b/src/app/components/pb-schema/pb-schema.component.ts @@ -78,6 +78,11 @@ export class PbSchemaComponent implements AfterViewInit, AfterContentInit, OnIni }); this.nativeElement = this.schema.nativeElement; this.render(); + // reset form to river properties (clodo timeout to prevent ExpressionChangedAfterItHasBeenCheckedError) + setTimeout(() => { + this.unselect(); + }, 10); + // @TODO find a way to remember last selected item ? Through a service ? } private render() { diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index dd679776531c4cf0cd40287f96d078e460df5b95..721715aef9d00dc4a61acf9932bb44d6ce4fcb2b 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -413,7 +413,8 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } public isDisplayed(id: string) { - return (<FormulaireElement>this.getFormulaireNodeById(id)).isDisplayed; + const fe = <FormulaireElement>this.getFormulaireNodeById(id); + return fe !== undefined && fe.isDisplayed; } /** diff --git a/src/app/formulaire/definition/form-pb-cloison.ts b/src/app/formulaire/definition/form-pb-cloison.ts index 90ac294ecd70010c4774e85033b3eaff38795a8c..cf9801ef6299747ca7f51bbce2ed795529d638e0 100644 --- a/src/app/formulaire/definition/form-pb-cloison.ts +++ b/src/app/formulaire/definition/form-pb-cloison.ts @@ -60,6 +60,10 @@ export class FormulairePbCloison extends FormulaireParallelStructure { const oldDownstreamBasin = nub.bassinAval; pb.deleteChild(pb.findChildPosition(nub.uid)); const newWall = new PbCloison(newBasin, oldDownstreamBasin); + // copy structures + for (const s of nub.structures) { + newWall.addChild(s); + } pb.addChild(newWall); this.currentNub = newWall; } else if (sender.id === this._downstreamBasinSelectId) { @@ -67,6 +71,10 @@ export class FormulairePbCloison extends FormulaireParallelStructure { const oldUpstreamBasin = nub.bassinAmont; pb.deleteChild(pb.findChildPosition(nub.uid)); const newWall = new PbCloison(oldUpstreamBasin, newBasin); + // copy structures + for (const s of nub.structures) { + newWall.addChild(s); + } pb.addChild(newWall); this.currentNub = newWall; } diff --git a/src/app/formulaire/definition/form-prebarrage.ts b/src/app/formulaire/definition/form-prebarrage.ts index 7d69abf7ac62dfe0ce230ec6870c18b7b0f16e41..063d37ecfccda3cc4dfe8378529db6cb5643122a 100644 --- a/src/app/formulaire/definition/form-prebarrage.ts +++ b/src/app/formulaire/definition/form-prebarrage.ts @@ -21,9 +21,6 @@ export class FormulairePrebarrage extends FormulaireFixedVar { /** configuration for re-creating basin form every time needed */ private basinFormConfig: string; - /** child form for walls (repeatable devices) */ - private wallForm: FormulairePbCloison; - /** configuration for re-creating wall form every time needed */ private wallFormConfig: string; @@ -74,7 +71,6 @@ export class FormulairePrebarrage extends FormulaireFixedVar { break; case "subform_wall": // same as above - console.log("===> storing wall form config", json["config"]); this.wallFormConfig = json["config"]; break; } @@ -101,18 +97,19 @@ export class FormulairePrebarrage extends FormulaireFixedVar { this.showFormElements(this.basinForm); } else if (node instanceof PbCloison) { - console.log("---------------> new wall form !!"); - this.wallForm = new FormulairePbCloison(); - this.wallForm.defaultProperties["calcType"] = CalculatorType.PbCloison; - this.wallForm.currentNub = node; - this.wallForm.preparseConfig(this.wallFormConfig); - this.wallForm.parseConfig(this.wallFormConfig); + const wallForm = new FormulairePbCloison(); + wallForm.defaultProperties["calcType"] = CalculatorType.PbCloison; + wallForm.currentNub = node; + wallForm.preparseConfig(this.wallFormConfig); + wallForm.parseConfig(this.wallFormConfig); + // subscribe to upstream/downstream basin change + wallForm.addObserver(this); // @TODO why not this.form ? wallForm is just a dummy form to extract elements from… + ServiceFactory.instance.formulaireService.loadUpdateFormulaireLocalisation(wallForm); // add fieldsets for existing Structures console.log(`Node ${node.uid} : ${node.structures.length} structures, Form ${this.uid} : ${this._kids.length} form elements`); if (node.structures.length > 0) { - console.log(">> adding fieldsets for existing structures"); for (const struct of node.structures) { - for (const e of this.allFormElements) { + for (const e of wallForm.allFormElements) { if (e instanceof FieldsetContainer) { // @TODO manage many containers one day ? e.addFromTemplate(0, undefined, struct); } @@ -122,10 +119,7 @@ export class FormulairePrebarrage extends FormulaireFixedVar { // if there was no existing structure, add a default one ! @TODO console.log("TODO add default structure"); } - // subscribe to upstream/downstream basin change - this.wallForm.addObserver(this); - ServiceFactory.instance.formulaireService.loadUpdateFormulaireLocalisation(this.wallForm); - this.showFormElements(this.wallForm); + this.showFormElements(wallForm); } }