From 2e760e476c16ed377ceb8c1fcc068584486e889b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 8 Sep 2022 09:47:34 +0200 Subject: [PATCH] refactor: make FieldsetContainerComponent generic, create StructureFieldsetContainerComponent inherited class refs #522 --- e2e/calculator.po.ts | 4 +-- src/app/app.module.ts | 2 ++ .../fieldset-container.component.ts | 14 ++------ .../calculator.component.html | 13 +++++-- .../calculator.component.ts | 21 +++++++++-- .../structure-fieldset-container.component.ts | 36 +++++++++++++++++++ 6 files changed, 72 insertions(+), 18 deletions(-) create mode 100644 src/app/components/structure-fieldset-container/structure-fieldset-container.component.ts diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 757a2fa70..a0648690a 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -64,11 +64,11 @@ export class CalculatorPage { } getAddStructureButton() { - return element(by.css("fieldset-container .hyd-window-btns button.add-structure")); + return element(by.css("structure-fieldset-container .hyd-window-btns button.add-structure")); } getCopyStructureButton() { - return element(by.css("fieldset-container .hyd-window-btns button.copy-structure")); + return element(by.css("structure-fieldset-container .hyd-window-btns button.copy-structure")); } getAllLinkButtons() { diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 468ee73c9..cfcff201e 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -120,6 +120,7 @@ import { ImmediateErrorStateMatcher } from "./formulaire/immediate-error-state-m import { LoadSessionURLComponent } from "./components/load-session-url/load-session-url.component"; import { DialogShowMessageComponent } from "./components/dialog-show-message/dialog-show-message.component"; import { DialogConfirmLoadSessionURLComponent } from "./components/dialog-confirm-load-session-url/dialog-confirm-load-session-url.component"; +import { StructureFieldsetContainerComponent } from "./components/structure-fieldset-container/structure-fieldset-container.component"; const appRoutes: Routes = [ { path: "list/search", component: CalculatorListComponent }, @@ -209,6 +210,7 @@ const appRoutes: Routes = [ DialogConfirmLoadSessionURLComponent, FieldSetComponent, FieldsetContainerComponent, + StructureFieldsetContainerComponent, FixedResultsComponent, FixedVarResultsComponent, FlexGtXxsShowHideDirective, diff --git a/src/app/components/fieldset-container/fieldset-container.component.ts b/src/app/components/fieldset-container/fieldset-container.component.ts index add37e2be..bbaa490da 100644 --- a/src/app/components/fieldset-container/fieldset-container.component.ts +++ b/src/app/components/fieldset-container/fieldset-container.component.ts @@ -31,7 +31,7 @@ export class FieldsetContainerComponent implements DoCheck, AfterViewInit { return this._isValid.value; } @Input() - private _container: FieldsetContainer; + protected _container: FieldsetContainer; /** * liste des composants FieldSet enfants @@ -82,16 +82,8 @@ export class FieldsetContainerComponent implements DoCheck, AfterViewInit { * Ajoute un nouveau sous-nub (Structure, PabCloisons, YAXN… selon le cas) * dans un nouveau fieldset */ - private addSubNub(after: FieldSet, clone: boolean = false) { - const newFs = this._container.addFromTemplate(0, after.indexAsKid()); - if (clone) { - const prms = after.backupParameters(); - // replace in-place to change properties (overkill) - // @WTF why only those two ? - newFs.setPropValue("structureType", after.properties.getPropValue("structureType")); - newFs.setPropValue("loiDebit", after.properties.getPropValue("loiDebit")); - newFs.restoreParameters(prms); - } + protected addSubNub(after: FieldSet, clone: boolean = false) { + this._container.addFromTemplate(0, after.indexAsKid()); } private onFieldsetListChange() { diff --git a/src/app/components/generic-calculator/calculator.component.html b/src/app/components/generic-calculator/calculator.component.html index a560138f5..b713123c1 100644 --- a/src/app/components/generic-calculator/calculator.component.html +++ b/src/app/components/generic-calculator/calculator.component.html @@ -104,11 +104,11 @@ (tabPressed)="onTabPressed($event)"> </field-set> - <fieldset-container *ngIf="isFieldsetContainer(fe)" + <structure-fieldset-container *ngIf="isStructureFieldsetContainer(fe)" [style.display]="getElementStyleDisplay(fe.id)" [_container]=fe (radio)=onRadioClick($event) (validChange)=onElementValid() (inputChange)=onInputChange($event) (tabPressed)="onTabPressed($event)"> - </fieldset-container> + </structure-fieldset-container> </ng-template> </div> @@ -130,6 +130,13 @@ fxFlex="1 0 auto"> </fieldset-container> + <structure-fieldset-container *ngIf="isStructureFieldsetContainer(fe)" + [style.display]="getElementStyleDisplay(fe.id)" [_container]=fe + (radio)=onRadioClick($event) (validChange)=onElementValid() (inputChange)=onInputChange($event) + (tabPressed)="onTabPressed($event)" + fxFlex="1 0 auto"> + </structure-fieldset-container> + <pab-table *ngIf="isPabTable(fe)" [pabTable]=fe (radio)=onRadioClick($event) (validChange)=onElementValid() (inputChange)=onInputChange($event) fxFlex="1 0 auto"> @@ -206,4 +213,4 @@ </form> -</mat-card> \ No newline at end of file +</mat-card> diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index 06c2735f6..c72aa6cbc 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -199,9 +199,26 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe return fe instanceof FieldSet; } - /** détermine si un FormulaireElement est du type FieldsetContainer */ + /** détermine si un FormulaireElement est du type FieldsetContainer et générique */ public isFieldsetContainer(fe: any): boolean { - return fe instanceof FieldsetContainer; + if (fe instanceof FieldsetContainer) { + switch (fe.getTemplate(0).calcTypeFromConfig) { + case CalculatorType.Structure: + return false; + + default: + return true; + } + } + return false; + } + + /** détermine si un FormulaireElement est du type FieldsetContainer contenant des structures */ + public isStructureFieldsetContainer(fe: any): boolean { + if (fe instanceof FieldsetContainer) { + return fe.getTemplate(0).calcTypeFromConfig === CalculatorType.Structure; + } + return false; } /** détermine si un FormulaireElement est du type PabTable */ diff --git a/src/app/components/structure-fieldset-container/structure-fieldset-container.component.ts b/src/app/components/structure-fieldset-container/structure-fieldset-container.component.ts new file mode 100644 index 000000000..4b18a21f4 --- /dev/null +++ b/src/app/components/structure-fieldset-container/structure-fieldset-container.component.ts @@ -0,0 +1,36 @@ +import { Component } from "@angular/core"; + +import { FieldSet } from "../../formulaire/elements/fieldset"; +import { I18nService } from "../../services/internationalisation.service"; +import { ApplicationSetupService } from "../../services/app-setup.service"; +import { FieldsetContainerComponent } from "../fieldset-container/fieldset-container.component"; + +@Component({ + selector: "structure-fieldset-container", + templateUrl: "../fieldset-container/fieldset-container.component.html", + styleUrls: [ + "../fieldset-container/fieldset-container.component.scss" + ] +}) +export class StructureFieldsetContainerComponent extends FieldsetContainerComponent { + + constructor(i18nService: I18nService, appSetupService: ApplicationSetupService) { + super(i18nService, appSetupService); + } + + /** + * Ajoute un nouveau sous-nub (Structure, PabCloisons, YAXN… selon le cas) + * dans un nouveau fieldset + */ + protected addSubNub(after: FieldSet, clone: boolean = false) { + const newFs = this._container.addFromTemplate(0, after.indexAsKid()); + if (clone) { + const prms = after.backupParameters(); + // replace in-place to change properties (overkill) + // @WTF why only those two ? + newFs.setPropValue("structureType", after.properties.getPropValue("structureType")); + newFs.setPropValue("loiDebit", after.properties.getPropValue("loiDebit")); + newFs.restoreParameters(prms); + } + } +} -- GitLab