diff --git a/DEVELOPERS.md b/DEVELOPERS.md index 6c7ea22aa7575c2c9760d6e13a8e206a9b081127..05022eb491ec5d8762735bff2c6c8b05ea9f2ecc 100644 --- a/DEVELOPERS.md +++ b/DEVELOPERS.md @@ -124,6 +124,8 @@ Les tests unitaires dits "end-to-end" ou "e2e" sont réalisés avec Protractor, Bien qu'elle soit supposée fonctionner avec d'autres navigateurs, l'exécution des tests n'est garantie qu'avec Chrome / Chromium. Le pilote Selenium pour Chrome ("chromedriver") posant parfois problème, `protractor.conf.js` contient une astuce qui recherche le pilote dans le système avant de le rechercher dans node_modules. +Pour plus d'informations sur les problèmes liés à la version du pilote Selenium pour Chrome, consulter le chapitre "chromedriver version in e2e tests" dans la documentation développeurs (en anglais). + ### scripts Le dossier `scripts` contient des scripts d'aide à la compilation, utilisés par les commandes `npm` déclarées dans `package.json`. @@ -238,7 +240,7 @@ En général la classe `FormulaireBase` est suffisante pour gérer un nouveau mo Mais dans des cas plus complexes, par exemple si le module contient des listes déroulantes ou des sous-modules, répétables ou non, il est nécessaire de créer de nouvelles classes de formulaires dérivées de celles-ci. -Dans un tel cas, créer la classe du formulaire dans un nouveau fichier, dans le dossier `src/app/formulaire/definition/concrete` Par exemple `form-macrorugo-compound.ts`. +Dans un tel cas, créer la classe du formulaire dans un nouveau fichier, dans le dossier `src/app/formulaire/definition` Par exemple `form-macrorugo-compound.ts`. Si les mécanismes de calcul ou de récupération des résultats doivent être modifiés, créer les classes nécessaires dans le dossier `src/app/formulaire/definition`, par exemple `form-compute-macrorugo-compound.ts` et `form-result-macrorugo-compound.ts`. Sinon, agréger des classes `FormCompute*` et `FormResult*` existantes. @@ -347,7 +349,7 @@ Dans ce même fichier de configuration, dans le dernier élément "options", ajo #### sources -Chaque liste déroulante est associée à une **source** (voir "configuration" plus haut), qui détermine quels sont les choix possibles. Pour ajouter une source, modifier la méthode `parseConfig()` de la classe `SelectField`, dans le fichier `src/app/formulaire/select-field.ts`. Exemple pour "trigoOperation" : +Chaque liste déroulante est associée à une **source** (voir "configuration" plus haut), qui détermine quels sont les choix possibles. Pour ajouter une source, modifier la méthode `parseConfig()` de la classe `SelectField`, dans le fichier `src/app/formulaire/elements/select-field.ts`. Exemple pour "trigoOperation" : ```TypeScript case "trigo_operation": // (cos, sin…) @@ -359,7 +361,7 @@ case "trigo_operation": // (cos, sin…) #### lien avec les propriétés -Les listes déroulantes doivent être liées à des **propriétés** du Nub. Pour ce faire, modifier la classe `FieldSet` dans le fichier `src/app/formulaire/fieldset.ts` comme suit (exemple pour le module `Trigo`). +Les listes déroulantes doivent être liées à des **propriétés** du Nub. Pour ce faire, modifier la classe `FieldSet` dans le fichier `src/app/formulaire/elements/fieldset.ts` comme suit (exemple pour le module `Trigo`). Ajouter un `case` dans la fonction `updateFields()` diff --git a/README.md b/README.md index a3bcbdc413aa88e447e32bbaee534471fc799dc6..6c2ae08118ff38d1f1adb466d0f69f70befb5868 100644 --- a/README.md +++ b/README.md @@ -225,6 +225,14 @@ npm run viz Custom Material SVG Icons will only show up when the application is deployed on the domain root (no subfolders), see [this feature request](https://github.com/angular/material2/issues/4263) +### chromedriver version in e2e tests + +It is possible that Chrome / Chromium version installed on your system evolves faster than the Chrome Selenium driver (`chromedriver`) installed by "protractor" dependency of Angular, which makes e2e tests fail with an error message about versions compatibility. In this case, it's possible to install an updated system-wide version of the pilot: +```bash +sudo npm install -g protractor +sudo webdriver-manager update +sudo find /usr/lib/node_modules/protractor -regextype sed -regex "^.*/chromedriver.*[0-9]$" -exec ln -s '{}' /usr/bin/chromedriver ';' +``` ## Release policy diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 6f2375744cffb7798869c6862506f078a8a12878..55812e840fb7f24c1c242175a27c7e767b1955cc 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -747,6 +747,7 @@ export class AppComponent implements OnInit, OnDestroy, Observer { */ public scrollToQuicknav(itemId: string, behavior: ScrollBehavior = "smooth") { const idx = this.getCalculatorIndexFromId(this.currentFormId); + let succeeded = false; if (idx > -1) { const id = QuicknavComponent.prefix + itemId; // Scroll https://stackoverflow.com/a/56391657/5986614 @@ -757,10 +758,17 @@ export class AppComponent implements OnInit, OnDestroy, Observer { top: yCoordinate - 60, // substract a little more than navbar height behavior: behavior }); + succeeded = true; // Save position this._calculators[idx].latestAnchor = itemId; } } + if (! succeeded) { + // throw an error so that caller CalculatorComponent.scrollToResults() + // switches to plan B, in case we're trying to scroll to results pane + // after a module is calculated + throw Error("unable to scroll to quicknav anchor"); + } } /** diff --git a/src/app/components/base-param-input/base-param-input.component.ts b/src/app/components/base-param-input/base-param-input.component.ts index 49d20f3ef665a87cb124645ae0f97c647249929f..44ea91b9bca8a41df6a9a965deed76c31588b1c3 100644 --- a/src/app/components/base-param-input/base-param-input.component.ts +++ b/src/app/components/base-param-input/base-param-input.component.ts @@ -7,7 +7,7 @@ import { Message, ParamDefinition, ParamDomain, ParamDomainValue, Observable } f import { I18nService } from "../../services/internationalisation.service"; import { GenericInputComponent } from "../generic-input/generic-input.component"; import { ServiceFactory } from "../../services/service-factory"; -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { ApplicationSetupService } from "../../services/app-setup.service"; export class NgBaseParam extends Observable { diff --git a/src/app/components/calculator-list/calculator-list.component.ts b/src/app/components/calculator-list/calculator-list.component.ts index d9047b66fae3207605a3bd936b965c20d63e2373..f64758d72c38940e6b46b3723434e9d6980974f5 100644 --- a/src/app/components/calculator-list/calculator-list.component.ts +++ b/src/app/components/calculator-list/calculator-list.component.ts @@ -6,13 +6,13 @@ import { CalculatorType, EnumEx, Session } from "jalhyd"; import { FormulaireDefinition } from "../../formulaire/definition/form-definition"; import { ServiceFactory } from "../../services/service-factory"; import { I18nService } from "../../services/internationalisation.service"; -import { FormulaireParallelStructure } from "../../formulaire/definition/concrete/form-parallel-structures"; -import { FieldsetContainer } from "../../formulaire/fieldset-container"; -import { FormulairePab } from "../../formulaire/definition/concrete/form-pab"; +import { FormulaireParallelStructure } from "../../formulaire/definition/form-parallel-structures"; +import { FieldsetContainer } from "../../formulaire/elements/fieldset-container"; +import { FormulairePab } from "../../formulaire/definition/form-pab"; import { HttpService } from "../../services/http.service"; import { AppComponent } from "../../app.component"; -import { FormulaireMacrorugoCompound } from "../../formulaire/definition/concrete/form-macrorugo-compound"; -import { FormulaireSPP } from "../../formulaire/definition/concrete/form-spp"; +import { FormulaireMacrorugoCompound } from "../../formulaire/definition/form-macrorugo-compound"; +import { FormulaireSPP } from "../../formulaire/definition/form-spp"; import { ApplicationSetupService } from "../../services/app-setup.service"; diff --git a/src/app/components/dialog-edit-param-computed/dialog-edit-param-computed.component.ts b/src/app/components/dialog-edit-param-computed/dialog-edit-param-computed.component.ts index eeaa8ccd12f96c56ece0f346896df27e6a0ad289..ca943003aff94ac0d478bdf84d522021d7c6b833 100644 --- a/src/app/components/dialog-edit-param-computed/dialog-edit-param-computed.component.ts +++ b/src/app/components/dialog-edit-param-computed/dialog-edit-param-computed.component.ts @@ -1,7 +1,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material"; import { Inject, Component, ViewChild, OnInit } from "@angular/core"; import { I18nService } from "../../services/internationalisation.service"; -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { NgParamInputComponent } from "../ngparam-input/ngparam-input.component"; @Component({ diff --git a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts index 5032b6ecabcd10e9d7eff45f5675645d8b7ecae8..80bd1baff0b5eb1e3cef0f8a8bb29007339b4a61 100644 --- a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts +++ b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts @@ -3,7 +3,7 @@ import { Inject, Component, OnInit } from "@angular/core"; import { FormBuilder, FormGroup, Validators } from "@angular/forms"; import { I18nService } from "../../services/internationalisation.service"; -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { ResultsComponent } from "../fixedvar-results/results.component"; import { sprintf } from "sprintf-js"; diff --git a/src/app/components/field-set/field-set.component.ts b/src/app/components/field-set/field-set.component.ts index ef2cc68855cbce89b5b6a56d865b40d53c807124..c8201280bb34e938b9a24d7faad1516efe3e1825 100644 --- a/src/app/components/field-set/field-set.component.ts +++ b/src/app/components/field-set/field-set.component.ts @@ -1,14 +1,14 @@ import { Component, Input, Output, EventEmitter, ViewChildren, QueryList, DoCheck } from "@angular/core"; -import { ParamRadioConfig } from "../../formulaire/ngparam"; -import { FieldSet } from "../../formulaire/fieldset"; +import { ParamRadioConfig } from "../../formulaire/elements/ngparam"; +import { FieldSet } from "../../formulaire/elements/fieldset"; import { ParamFieldLineComponent } from "../param-field-line/param-field-line.component"; -import { Field } from "../../formulaire/field"; -import { InputField } from "../../formulaire/input-field"; -import { SelectField } from "../../formulaire/select-field"; -import { FormulairePab } from "../../formulaire/definition/concrete/form-pab"; +import { Field } from "../../formulaire/elements/field"; +import { InputField } from "../../formulaire/elements/input-field"; +import { SelectField } from "../../formulaire/elements/select-field"; +import { FormulairePab } from "../../formulaire/definition/form-pab"; import { SelectFieldLineComponent } from "../select-field-line/select-field-line.component"; -import { FieldsetContainer } from "../../formulaire/fieldset-container"; +import { FieldsetContainer } from "../../formulaire/elements/fieldset-container"; import { NotificationsService } from "../../services/notifications.service"; import { ApplicationSetupService } from "../../services/app-setup.service"; import { I18nService } from "../../services/internationalisation.service"; diff --git a/src/app/components/fieldset-container/fieldset-container.component.ts b/src/app/components/fieldset-container/fieldset-container.component.ts index 2d206a1336a2f68d031fed3d1e2c4731a34a9fb7..dbc3a5a2270764b3a93f35d5b8fbe6a17d61c851 100644 --- a/src/app/components/fieldset-container/fieldset-container.component.ts +++ b/src/app/components/fieldset-container/fieldset-container.component.ts @@ -1,8 +1,8 @@ import { Component, Input, Output, EventEmitter, QueryList, ViewChildren, DoCheck, AfterViewInit } from "@angular/core"; -import { FieldsetContainer } from "../../formulaire/fieldset-container"; +import { FieldsetContainer } from "../../formulaire/elements/fieldset-container"; import { FieldSetComponent } from "../field-set/field-set.component"; -import { FieldSet } from "../../formulaire/fieldset"; +import { FieldSet } from "../../formulaire/elements/fieldset"; import { FormulaireDefinition } from "../../formulaire/definition/form-definition"; import { I18nService } from "../../services/internationalisation.service"; import { ApplicationSetupService } from "../../services/app-setup.service"; diff --git a/src/app/components/fixedvar-results/fixed-results.component.ts b/src/app/components/fixedvar-results/fixed-results.component.ts index ab00d23500b5ffc722e01a3bcae00b68a843ccd4..9681fa15da7ce184b68697e835608192087cfd49 100644 --- a/src/app/components/fixedvar-results/fixed-results.component.ts +++ b/src/app/components/fixedvar-results/fixed-results.component.ts @@ -1,7 +1,7 @@ import { Component, ViewChild, ElementRef } from "@angular/core"; import { FixedResults } from "../../results/fixed-results"; -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { CalculatorResults } from "../../results/calculator-results"; import { I18nService } from "../../services/internationalisation.service"; import { FormulaireService } from "../../services/formulaire.service"; diff --git a/src/app/components/fixedvar-results/fixedvar-results.component.ts b/src/app/components/fixedvar-results/fixedvar-results.component.ts index 58bbbf90ce9027236b72fed848e2bbc46a772dbf..6aa179c305126a56f844e8f5ac57048501d09648 100644 --- a/src/app/components/fixedvar-results/fixedvar-results.component.ts +++ b/src/app/components/fixedvar-results/fixedvar-results.component.ts @@ -6,7 +6,7 @@ import { VarResults } from "../../results/var-results"; import { ResultsChartComponent } from "../results-chart/results-chart.component"; import { CalculatorResults } from "../../results/calculator-results"; import { Result, cLog } from "jalhyd"; -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { FixedResultsComponent } from "./fixed-results.component"; import { VarResultsComponent } from "./var-results.component"; import { ResultsComponent } from "./results.component"; diff --git a/src/app/components/fixedvar-results/results.component.ts b/src/app/components/fixedvar-results/results.component.ts index 355a28b3193eb978f220e79bd5f2b04d194ef3b1..296ba3edf322b9be39d6b2b002eb7158762c25a2 100644 --- a/src/app/components/fixedvar-results/results.component.ts +++ b/src/app/components/fixedvar-results/results.component.ts @@ -1,7 +1,7 @@ import * as screenfull from "screenfull"; import { Screenfull } from "screenfull"; // @see https://github.com/sindresorhus/screenfull.js/issues/126#issuecomment-488796645 -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { ServiceFactory } from "../../services/service-factory"; import { fv } from "../../util"; diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index 8e256b367d71586b1bb20bc1d18830f8b0e472f9..44f7e7e262430cbe4b7c27c8085039bbaa9487f3 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -8,20 +8,20 @@ import { AppComponent } from "../../app.component"; import { FormulaireService } from "../../services/formulaire.service"; import { ApplicationSetupService } from "../../services/app-setup.service"; import { I18nService } from "../../services/internationalisation.service"; -import { FieldSet } from "../../formulaire/fieldset"; +import { FieldSet } from "../../formulaire/elements/fieldset"; import { FormulaireDefinition } from "../../formulaire/definition/form-definition"; import { CalculatorResultsComponent } from "../../components/calculator-results/calculator-results.component"; import { Subscription } from "rxjs"; import { FieldSetComponent } from "../field-set/field-set.component"; import { CalculatorNameComponent } from "./calc-name.component"; -import { FormulaireElement } from "../../formulaire/formulaire-element"; -import { FieldsetContainer } from "../../formulaire/fieldset-container"; +import { FormulaireElement } from "../../formulaire/elements/formulaire-element"; +import { FieldsetContainer } from "../../formulaire/elements/fieldset-container"; import { FieldsetContainerComponent } from "../fieldset-container/fieldset-container.component"; import { PabTableComponent } from "../pab-table/pab-table.component"; import { MatDialog } from "@angular/material"; import { DialogConfirmCloseCalcComponent } from "../dialog-confirm-close-calc/dialog-confirm-close-calc.component"; import { DialogGeneratePABComponent } from "../dialog-generate-pab/dialog-generate-pab.component"; -import { PabTable } from "../../formulaire/pab-table"; +import { PabTable } from "../../formulaire/elements/pab-table"; import { HotkeysService, Hotkey } from "angular2-hotkeys"; diff --git a/src/app/components/generic-input/generic-input.component.ts b/src/app/components/generic-input/generic-input.component.ts index bbc0476d9c1cc930d0a7612e6f6bfe0641ad7b11..3339ae54db76964c3262e5cff87df8ca477173f5 100644 --- a/src/app/components/generic-input/generic-input.component.ts +++ b/src/app/components/generic-input/generic-input.component.ts @@ -2,7 +2,7 @@ import { Input, Output, EventEmitter, ChangeDetectorRef, OnChanges, ViewChild } import { NgModel } from "@angular/forms"; import { isNumeric } from "jalhyd"; import { FormulaireDefinition } from "../../formulaire/definition/form-definition"; -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { I18nService } from "../../services/internationalisation.service"; import { ApplicationSetupService } from "../../services/app-setup.service"; diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts index a969d0cce6acbfc82adcdb8a6813feea25bf9514..948a63d4b08f6e6f9ccc9eb004753f2dd012fbd6 100644 --- a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts @@ -6,7 +6,7 @@ import { fv } from "../../../app/util"; import { LogComponent } from "../../components/log/log.component"; import { CalculatorResults } from "../../results/calculator-results"; -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { ApplicationSetupService } from "../../services/app-setup.service"; import { PlottableData } from "../../results/plottable-data"; import { ResultsChartComponent } from "../results-chart/results-chart.component"; diff --git a/src/app/components/ngparam-input/ngparam-input.component.ts b/src/app/components/ngparam-input/ngparam-input.component.ts index 1a06a691d6f01172203187bc6b6ea6c71242b1bb..a9608f9cd454b7d4a84dd5058a57b6b61ed19d69 100644 --- a/src/app/components/ngparam-input/ngparam-input.component.ts +++ b/src/app/components/ngparam-input/ngparam-input.component.ts @@ -5,7 +5,7 @@ import { Component, ChangeDetectorRef, OnDestroy } from "@angular/core"; import { Message, Observer } from "jalhyd"; import { I18nService } from "../../services/internationalisation.service"; -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { GenericInputComponent } from "../generic-input/generic-input.component"; import { ApplicationSetupService } from "../../services/app-setup.service"; diff --git a/src/app/components/pab-results/pab-results.component.ts b/src/app/components/pab-results/pab-results.component.ts index 137d6c1b69708e006fdb26d13ba0a294abd7749f..25127b986e892f51bc3332610407d7a97d933493 100644 --- a/src/app/components/pab-results/pab-results.component.ts +++ b/src/app/components/pab-results/pab-results.component.ts @@ -4,7 +4,7 @@ import { Result, cLog, Message, MessageCode, MessageSeverity } from "jalhyd"; import { LogComponent } from "../../components/log/log.component"; import { CalculatorResults } from "../../results/calculator-results"; -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { PabResultsTableComponent } from "./pab-results-table.component"; import { PabResults } from "../../results/pab-results"; import { VariableResultsSelectorComponent } from "../variable-results-selector/variable-results-selector.component"; diff --git a/src/app/components/pab-table/pab-table.component.ts b/src/app/components/pab-table/pab-table.component.ts index 3c965c1032f7d9236c649295cea03895bfc66c14..e3308fc84c04d5184f0cde555a73543a6b6f837e 100644 --- a/src/app/components/pab-table/pab-table.component.ts +++ b/src/app/components/pab-table/pab-table.component.ts @@ -22,7 +22,7 @@ import { I18nService } from "../../services/internationalisation.service"; import { FormulaireService } from "../../services/formulaire.service"; import { ApplicationSetupService } from "../../services/app-setup.service"; import { NotificationsService } from "../../services/notifications.service"; -import { PabTable } from "../../formulaire/pab-table"; +import { PabTable } from "../../formulaire/elements/pab-table"; import { DialogEditPabComponent } from "../dialog-edit-pab/dialog-edit-pab.component"; import { AppComponent } from "../../app.component"; diff --git a/src/app/components/param-computed/param-computed.component.ts b/src/app/components/param-computed/param-computed.component.ts index 54bbe75fb9a94dcd6d9c9e3b8046aae442fbc1ae..ac7e7c2e716714af3047d137f6b877a4b4f24cce 100644 --- a/src/app/components/param-computed/param-computed.component.ts +++ b/src/app/components/param-computed/param-computed.component.ts @@ -1,6 +1,6 @@ import { Component, Input } from "@angular/core"; import { MatDialog } from "@angular/material"; -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { ParamCalculability, Structure } from "jalhyd"; import { DialogEditParamComputedComponent } from "../dialog-edit-param-computed/dialog-edit-param-computed.component"; import { I18nService } from "../../services/internationalisation.service"; diff --git a/src/app/components/param-field-line/param-field-line.component.ts b/src/app/components/param-field-line/param-field-line.component.ts index 58d0b5d624a667414216aeb080a03df1bac1ccf9..cf0570d2df9e6de326ab67e03557c504451926f8 100644 --- a/src/app/components/param-field-line/param-field-line.component.ts +++ b/src/app/components/param-field-line/param-field-line.component.ts @@ -1,7 +1,7 @@ import { Component, ViewChild, Input, Output, EventEmitter, OnChanges } from "@angular/core"; import { I18nService } from "../../services/internationalisation.service"; -import { NgParameter, ParamRadioConfig } from "../../formulaire/ngparam"; +import { NgParameter, ParamRadioConfig } from "../../formulaire/elements/ngparam"; import { NgParamInputComponent } from "../ngparam-input/ngparam-input.component"; import { ServiceFactory } from "../../services/service-factory"; import { ParamValueMode, ParallelStructure } from "jalhyd"; diff --git a/src/app/components/param-link/param-link.component.ts b/src/app/components/param-link/param-link.component.ts index 0db7fb0376ed46f7d5573de1a52aaa2e2892eb73..c2463904a654898f20a8c5b5583d67a886994f64 100644 --- a/src/app/components/param-link/param-link.component.ts +++ b/src/app/components/param-link/param-link.component.ts @@ -1,6 +1,6 @@ import { Component, Input, Output, EventEmitter, OnChanges, OnDestroy } from "@angular/core"; -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { LinkedValue, ParamValueMode, Observer, Structure, acSection, ParamDefinition, ChildNub } from "jalhyd"; import { FormulaireService } from "../../services/formulaire.service"; import { I18nService } from "../../services/internationalisation.service"; diff --git a/src/app/components/param-values/param-values.component.ts b/src/app/components/param-values/param-values.component.ts index 6246b682532bdbb0ae75c66e2926be2b2934aec3..9279c976b66ca1e01d69ee424685d826b25eca10 100644 --- a/src/app/components/param-values/param-values.component.ts +++ b/src/app/components/param-values/param-values.component.ts @@ -1,5 +1,5 @@ import { Component, Input, AfterViewInit, Output, EventEmitter } from "@angular/core"; -import { NgParameter } from "../../formulaire/ngparam"; +import { NgParameter } from "../../formulaire/elements/ngparam"; import { DialogEditParamValuesComponent } from "../dialog-edit-param-values/dialog-edit-param-values.component"; import { MatDialog } from "@angular/material"; import { ParamValueMode, Observer, Structure } from "jalhyd"; diff --git a/src/app/components/select-field-line/select-field-line.component.ts b/src/app/components/select-field-line/select-field-line.component.ts index 6b863acda453ccaeeab67460d99d0bc977657da8..2cdeca62c46a426e2d6881fc135cd167f7fc55e3 100644 --- a/src/app/components/select-field-line/select-field-line.component.ts +++ b/src/app/components/select-field-line/select-field-line.component.ts @@ -1,9 +1,9 @@ import { Component, Input, OnInit } from "@angular/core"; -import { SelectField } from "../../formulaire/select-field"; -import { SelectEntry } from "../../formulaire/select-entry"; +import { SelectField } from "../../formulaire/elements/select-field"; +import { SelectEntry } from "../../formulaire/elements/select-entry"; import { I18nService } from "../../services/internationalisation.service"; -import { SelectFieldReference } from "../../formulaire/select-field-reference"; +import { SelectFieldReference } from "../../formulaire/elements/select-field-reference"; import { ApplicationSetupService } from "../../services/app-setup.service"; @Component({ diff --git a/src/app/components/select-model-field-line/select-model-field-line.component.ts b/src/app/components/select-model-field-line/select-model-field-line.component.ts index 853d0077ab453bc44bf3ae6aae997adb388a3134..592e3032e496ee1ec51c3e534a6d2cf99bf87218 100644 --- a/src/app/components/select-model-field-line/select-model-field-line.component.ts +++ b/src/app/components/select-model-field-line/select-model-field-line.component.ts @@ -1,10 +1,10 @@ import { Component, Input, OnInit } from "@angular/core"; import { Router } from "@angular/router"; -import { SelectEntry } from "../../formulaire/select-entry"; +import { SelectEntry } from "../../formulaire/elements/select-entry"; import { FormulaireService } from "../../services/formulaire.service"; -import { FieldsetContainer } from "../../formulaire/fieldset-container"; -import { SelectFieldModel } from "../../formulaire/select-field-model"; +import { FieldsetContainer } from "../../formulaire/elements/fieldset-container"; +import { SelectFieldModel } from "../../formulaire/elements/select-field-model"; @Component({ selector: "select-model-field-line", diff --git a/src/app/directives/jalhyd-model-validation.directive.ts b/src/app/directives/jalhyd-model-validation.directive.ts index 8d7d527716d035b5cd68f1216744ac21cf607197..41d4bbe9c2c2cf778fb878a4d63227cfa1806e60 100644 --- a/src/app/directives/jalhyd-model-validation.directive.ts +++ b/src/app/directives/jalhyd-model-validation.directive.ts @@ -1,7 +1,7 @@ import { NG_VALIDATORS, Validator, AbstractControl, ValidatorFn } from "@angular/forms"; import { Directive, Input } from "@angular/core"; import { NgBaseParam } from "../components/base-param-input/base-param-input.component"; -import { NgParameter } from "../formulaire/ngparam"; +import { NgParameter } from "../formulaire/elements/ngparam"; import { sprintf } from "sprintf-js"; import { ServiceFactory } from "../services/service-factory"; diff --git a/src/app/formulaire/definition/concrete/form-base.ts b/src/app/formulaire/definition/concrete/form-base.ts deleted file mode 100644 index 35f9b9cc84320b494f815e516b3666abc8a07c8b..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/concrete/form-base.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { FormulaireDefinition } from "../form-definition"; -import { CalculatorResults } from "../../../results/calculator-results"; -import { FormResult } from "../form-result"; -import { FormCompute } from "../form-compute"; -import { FormResultFixedVar } from "../form-result-fixedvar"; -import { FormComputeFixedVar } from "../form-compute-fixedvar"; -import { ServiceFactory } from "../../../services/service-factory"; - -export class FormulaireBase extends FormulaireDefinition { - - protected _formCompute: FormCompute; - - protected _formResult: FormResult; - - constructor() { - super(); - this._formResult = new FormResultFixedVar(this); - this._formCompute = new FormComputeFixedVar(this, (this._formResult as FormResultFixedVar)); - } - - protected completeParse(json: {}) { - super.completeParse(json); - this._formResult.helpLinks = this._resultsHelpLinks; - } - - /** - * Resets the form results, the results panel on screen, the model - * results, and does the same for all depending modules - * @param symbol symbol of the parameter whose value change triggered this method - * @param forceResetAllDependencies if true, even non-calculated non-modified parameters - * links will be considered as dependencies @see jalhyd#98 - */ - public resetResults(visited: string[] = [], symbol?: string, forceResetAllDependencies: boolean = false) { - visited.push(this.currentNub.uid); - // reset GUI results - this._formResult.resetResults(); - // reset model results - this.currentNub.resetResult(); - // reset the result panels of all forms depending on this one - ServiceFactory.instance.formulaireService.resetAllDependingFormsResults(this, visited, symbol, forceResetAllDependencies); - } - - public doCompute() { - this._formCompute.doCompute(); - } - - public get hasResults(): boolean { - return this._formResult.hasResults; - } - - public get results(): CalculatorResults[] { - return this._formResult.results; - } -} diff --git a/src/app/formulaire/definition/concrete/form-courbe-remous.ts b/src/app/formulaire/definition/concrete/form-courbe-remous.ts deleted file mode 100644 index ce98814c1544a6d32ba0184bbcdf96fec384cbbb..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/concrete/form-courbe-remous.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { IObservable, MethodeResolution, SectionNub, Session } from "jalhyd"; - -import { FormResultRemous } from "../form-result-remous"; -import { FormDefSection } from "../form-def-section"; -import { FormComputeCourbeRemous } from "../form-compute-courbe-remous"; -import { FieldSet } from "../../fieldset"; -import { FormulaireBase } from "./form-base"; - -export class FormulaireCourbeRemous extends FormulaireBase { - - private _formSection: FormDefSection; - - /** - * id du select configurant la méthode de résolution - */ - private _resolveMethSelectId: string; - - constructor() { - super(); - this._formSection = new FormDefSection(this); - this._formResult = new FormResultRemous(this); - - // remove obsolete observer set by super() - this.removeObserver(this._formCompute); - this._formCompute = new FormComputeCourbeRemous(this, (this._formResult as FormResultRemous)); - // default properties - this._props["methodeResolution"] = MethodeResolution.Trapezes; - this._props["varCalc"] = ""; // important - } - - protected parseOptions(json: {}) { - super.parseOptions(json); - this._formSection.parseOptions(json); - - // id du select configurant la méthode de résolution - this._resolveMethSelectId = this.getOption(json, "methodSelectId"); - } - - public afterParseFieldset(fs: FieldSet) { - this._formSection.afterParseFieldset(fs); - - // si le FieldSet contient le select de méthode de résolution - if (this._resolveMethSelectId) { - const sel = fs.getFormulaireNodeById(this._resolveMethSelectId); - if (sel) { - // on abonne le formulaire aux propriétés du FieldSet - fs.properties.addObserver(this); - } - } - } - - // interface Observer - - update(sender: IObservable, data: any) { - - super.update(sender, data); - - if (sender instanceof FieldSet && data.action === "propertyChange") { - switch (sender.id) { - case "fs_section": - // replace underlying section without replacing whole Nub - const newSect = Session.getInstance().createSection(data.value); - (this._currentNub as SectionNub).setSection(newSect); - // reflect changes in GUI - for (const fs of this.allFieldsets) { - // show / hide dependent fields - fs.updateFields(); - } - this.reset(); - break; - - case "fs_param_calc": - case "fs_target_data": - this.reset(); - break; - } - } - } -} diff --git a/src/app/formulaire/definition/concrete/form-pab.ts b/src/app/formulaire/definition/concrete/form-pab.ts deleted file mode 100644 index ca5311fa1e1e737a7d209756c6a376e5b601c7ab..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/concrete/form-pab.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Pab } from "jalhyd"; - -import { FormulaireBase } from "./form-base"; -import { FormComputePab } from "../form-compute-pab"; -import { FormResultPab } from "../form-result-pab"; - -/** - * Formulaire pour les passes à bassins, inspiré du formulaire - * pour les structures en parallèle - */ -export class FormulairePab extends FormulaireBase { - - constructor() { - super(); - this._formResult = new FormResultPab(this); - - // remove obsolete observer set by super() - this.removeObserver(this._formCompute); - this._formCompute = new FormComputePab(this, (this._formResult as FormResultPab)); - } - - public get pabNub(): Pab { - return this.currentNub as Pab; - } -} diff --git a/src/app/formulaire/definition/concrete/form-section-parametree.ts b/src/app/formulaire/definition/concrete/form-section-parametree.ts deleted file mode 100644 index 3bb8a56c757d4bac5384070e9605527aff47f60c..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/concrete/form-section-parametree.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { IObservable, Nub, Session, SectionNub } from "jalhyd"; - -import { FormResultSection } from "../form-result-section"; -import { FormDefSection } from "../form-def-section"; -import { FormComputeSectionParametree } from "../form-compute-section-parametree"; -import { FieldSet } from "../../fieldset"; -import { FormulaireBase } from "./form-base"; - -export class FormulaireSectionParametree extends FormulaireBase { - - private _formSection: FormDefSection; - - constructor() { - super(); - this._formSection = new FormDefSection(this); - this._formResult = new FormResultSection(this); - - // remove obsolete observer set by super() - this.removeObserver(this._formCompute); - this._formCompute = new FormComputeSectionParametree( - this, this._formSection, (this._formResult as FormResultSection) - ); - } - - protected parseOptions(json: {}) { - super.parseOptions(json); - this._formSection.parseOptions(json); - } - - public afterParseFieldset(fs: FieldSet) { - this._formSection.afterParseFieldset(fs); - } - - // interface Observer - - update(sender: IObservable, data: any) { - // super.update(sender, data); - - if (sender instanceof Nub) { - switch (data.action) { - case "resultUpdated": - // forward Nub results update notification to FormCompute objects - this.notifyNubResultUpdated(sender); - break; - } - } - - // changement de propriété du FieldSet contenant le select de choix du type de section - if (sender instanceof FieldSet && data.action === "propertyChange") { - switch (sender.id) { - case "fs_section": - // replace underlying section without replacing whole Nub - const newSect = Session.getInstance().createSection(data.value); - (this._currentNub as SectionNub).setSection(newSect); - // reflect changes in GUI - for (const fs of this.allFieldsets) { - // show / hide dependent fields - fs.updateFields(); - } - this.reset(); - break; - - case "fs_computed_var": - this.reset(); - break; - } - } - } -} diff --git a/src/app/formulaire/definition/concrete/form-bief.ts b/src/app/formulaire/definition/form-bief.ts similarity index 83% rename from src/app/formulaire/definition/concrete/form-bief.ts rename to src/app/formulaire/definition/form-bief.ts index 90edbe1357d1acfa7892966c702b05bbd1e08eb3..46b7ffad662ed47c7001e97e69ece33d4e2bae19 100644 --- a/src/app/formulaire/definition/concrete/form-bief.ts +++ b/src/app/formulaire/definition/form-bief.ts @@ -1,34 +1,26 @@ import { IObservable, SectionNub, Session, BiefRegime } from "jalhyd"; -import { FormDefSection } from "../form-def-section"; -import { FieldSet } from "../../fieldset"; -import { FormulaireBase } from "./form-base"; +import { FieldSet } from "../elements/fieldset"; +import { FormulaireSection } from "./form-section"; -export class FormulaireBief extends FormulaireBase { - - private _formSection: FormDefSection; +export class FormulaireBief extends FormulaireSection { /** id du select configurant le régime */ private _regimeSelectId: string; constructor() { super(); - this._formSection = new FormDefSection(this); // default properties this._props["regime"] = BiefRegime.Fluvial; } protected parseOptions(json: {}) { super.parseOptions(json); - this._formSection.parseOptions(json); - // id du select configurant la méthode de résolution this._regimeSelectId = this.getOption(json, "regimeSelectId"); } public afterParseFieldset(fs: FieldSet) { - this._formSection.afterParseFieldset(fs); - // si le FieldSet contient le select de méthode de résolution if (this._regimeSelectId) { const sel = fs.getFormulaireNodeById(this._regimeSelectId); diff --git a/src/app/formulaire/definition/form-compute-courbe-remous.ts b/src/app/formulaire/definition/form-compute-courbe-remous.ts deleted file mode 100644 index a4cff1cbd33cf69a83d6b5c460d0947fa63aa967..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/form-compute-courbe-remous.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { acSection, Result, CourbeRemousParams, CourbeRemous } from "jalhyd"; - -import { RemousResults } from "../../results/remous-results"; -import { FormulaireDefinition } from "./form-definition"; -import { FormCompute } from "./form-compute"; -import { FormResultRemous } from "./form-result-remous"; - -export class FormComputeCourbeRemous extends FormCompute { - - private resultYn: Result; - - private resultYc: Result; - - constructor(formBase: FormulaireDefinition, formResult: FormResultRemous) { - super(formBase, formResult); - } - - private get remousResults(): RemousResults { - const f = this._formResult as FormResultRemous; - return f.remousResults; - } - - protected compute() { - this.reaffectResultComponents(); - } - - protected reaffectResultComponents() { - const cr: CourbeRemous = this._formBase.currentNub as CourbeRemous; - const prmCR: CourbeRemousParams = cr.prms as CourbeRemousParams; - - this.remousResults.parameters = prmCR; - - // variable supplémentaire à calculer - this.remousResults.extraParamSymbol = this._formBase.currentNub.properties.getPropValue("varCalc"); - - // calcul - this.remousResults.result = cr.CalcSerie(); - - const sect: acSection = cr.Sn; - this.resultYn = sect.CalcSection("Yn"); // hauteur normale - this.resultYc = sect.CalcSection("Yc"); // hauteur critique - - // données du graphe - this.remousResults.hauteurNormale = this.resultYn.resultElement; - this.remousResults.hauteurCritique = this.resultYc.resultElement; - if (this.remousResults.extraParamSymbol) { - this.remousResults.extraChart = ! ["Hs", "Hsc", "Ycor", "Ycon"].includes(this.remousResults.extraParamSymbol); - } else { - this.remousResults.extraChart = false; - } - } -} diff --git a/src/app/formulaire/definition/form-compute-fixedvar.ts b/src/app/formulaire/definition/form-compute-fixedvar.ts deleted file mode 100644 index 9a9bf1d91d8fe82908a612119aa36d115f7d1668..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/form-compute-fixedvar.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Nub } from "jalhyd"; - -import { FormCompute } from "./form-compute"; -import { NgParameter } from "../ngparam"; -import { FormResultFixedVar } from "./form-result-fixedvar"; -import { FormulaireDefinition } from "./form-definition"; - -export class FormComputeFixedVar extends FormCompute { - constructor(formBase: FormulaireDefinition, formResult: FormResultFixedVar) { - super(formBase, formResult); - } - - protected get formResult(): FormResultFixedVar { - return this._formResult as FormResultFixedVar; - } - - protected compute() { - this.runNubCalc(this._formBase.currentNub); - this.reaffectResultComponents(); - } - - protected reaffectResultComponents() { - const nub: Nub = this._formBase.currentNub; - const computedParam: NgParameter = this.getComputedParameter(); - this.formResult.resetResults(); // to avoid adding fixed parameters more than once (see below) - this.formResult.addFixedParameters(); - const varParams: NgParameter[] = this.getVariatedParameters(); - - if (varParams.length === 0) { - // pas de paramètre à varier - this.formResult.fixedResults.result = nub.result; - if (computedParam !== undefined) { - this.formResult.fixedResults.calculatedParameter = computedParam; - } - } else { - // il y a un paramètre à varier - this.formResult.varResults.variatedParameters = varParams; - if (computedParam !== undefined) { - this.formResult.varResults.calculatedParameter = computedParam; - } - - this.formResult.varResults.result = nub.result; - this.formResult.varResults.update(); - } - } -} diff --git a/src/app/formulaire/definition/form-compute-macrorugo-compound.ts b/src/app/formulaire/definition/form-compute-macrorugo-compound.ts deleted file mode 100644 index 6f2b4c3030bb7060f39c947742ee86307b4aea78..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/form-compute-macrorugo-compound.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Result, MacrorugoCompound } from "jalhyd"; - -import { FormulaireDefinition } from "./form-definition"; -import { FormCompute } from "./form-compute"; -import { FormResultMacrorugoCompound } from "./form-result-macrorugo-compound"; -import { NgParameter } from "../ngparam"; - -export class FormComputeMacrorugoCompound extends FormCompute { - - constructor(formBase: FormulaireDefinition, formResult: FormResultMacrorugoCompound) { - super(formBase, formResult); - } - - protected get formResult(): FormResultMacrorugoCompound { - return this._formResult as FormResultMacrorugoCompound; - } - - protected compute() { - this.runNubCalc(this._formBase.currentNub); - // reset variable index to avoid trying to access an index > 0 when nothing varies - const mrcr = this.formResult.mrcResults; - mrcr.variableIndex = 0; - - this.reaffectResultComponents(); - } - - protected reaffectResultComponents() { - const mrc: MacrorugoCompound = (this._formBase.currentNub as MacrorugoCompound); - const computedParam: NgParameter = this.getComputedParameter(); - const varParams: NgParameter[] = this.getVariatedParameters(); - - // résultat de calcul de la passe à macrorugo complexe - const mrcr = this.formResult.mrcResults; - mrcr.calculatedParameter = computedParam; - mrcr.result = mrc.result; - if (varParams) { - mrcr.variatedParameters = varParams; - } - // résultat de chaque enfant - const cr: Result[] = []; - for (const c of mrc.children) { - cr.push(c.result); - } - mrcr.childrenResults = cr; - } -} diff --git a/src/app/formulaire/definition/form-compute-parallel-structures.ts b/src/app/formulaire/definition/form-compute-parallel-structures.ts deleted file mode 100644 index c673ab46d44964c535f2be48f0ae666953df7578..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/form-compute-parallel-structures.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Structure, ParamDefinition } from "jalhyd"; - -import { FormComputeFixedVar } from "./form-compute-fixedvar"; - -export class FormComputeParallelStructures extends FormComputeFixedVar { - - /** - * construit un identifiant de type { uid: "abcdef", symbol: "X" } - * avec "abcdef" l'index de l'ouvrage et "X" son paramètre - */ - protected getParameterRefid(p: ParamDefinition): any { - const nub = p.parentComputeNode; - if (nub instanceof Structure) { - return { - uid: nub.uid, - symbol: p.symbol - }; - } else { - return super.getParameterRefid(p); - } - } -} diff --git a/src/app/formulaire/definition/form-compute-section-parametree.ts b/src/app/formulaire/definition/form-compute-section-parametree.ts deleted file mode 100644 index 0a47bd11f781257ea477756b926edea37e12ef65..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/form-compute-section-parametree.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { SectionParametree, acSection, Result, ParamDefinition, Nub } from "jalhyd"; - -import { FormCompute } from "./form-compute"; -import { FormDefSection } from "./form-def-section"; -import { FormResultSection } from "./form-result-section"; -import { VarResults } from "../../results/var-results"; -import { SectionResults } from "../../results/section-results"; -import { FormulaireDefinition } from "./form-definition"; - -export class FormComputeSectionParametree extends FormCompute { - - constructor(formBase: FormulaireDefinition, private _formSection: FormDefSection, formResult: FormResultSection) { - super(formBase, formResult); - } - - private get _formSectionResult(): FormResultSection { - return this._formResult as FormResultSection; - } - - private get _varResults(): VarResults { - return this._formSectionResult.varResults; - } - - private get _sectionResults(): SectionResults { - return this._formSectionResult.sectionResults; - } - - protected compute() { - this.runNubCalc(this._formBase.currentNub); - this.reaffectResultComponents(); - } - - protected runNubCalc(nub: Nub, computedParam?: ParamDefinition): Result { - return nub.CalcSerie(); - } - - protected reaffectResultComponents() { - const sectNub: SectionParametree = this._formBase.currentNub as SectionParametree; - const sect: acSection = sectNub.section; - this._sectionResults.section = sect; - - const varParams = this._formSection.getSectionVariatedParameters(); - if (varParams.length > 0) { - // résultats variés avec tous les résultats complémentaires - this._varResults.variatedParameters = varParams; - this._varResults.result = sectNub.result; - this._varResults.update(); - } else { - // résultats de section (avec le graphique de section) - this._sectionResults.result = sectNub.result; - // résultats complémentaires des paramètres fixés - this._formSectionResult.addSectionFixedParameters(); - this._formSectionResult.fixedResults.result = sectNub.result; - } - - } -} diff --git a/src/app/formulaire/definition/form-compute.ts b/src/app/formulaire/definition/form-compute.ts deleted file mode 100644 index 3e4c20fa6369b442c162c918e70cc9b80a0d3ba9..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/form-compute.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { Nub, Result, ParamDomainValue, Observer, ParamDefinition } from "jalhyd"; - -import { FormResult } from "./form-result"; -import { FormulaireDefinition } from "./form-definition"; -import { NgParameter, ParamRadioConfig } from "../ngparam"; - -export abstract class FormCompute implements Observer { - - constructor(protected _formBase: FormulaireDefinition, protected _formResult: FormResult) { - // indirectly subscribe to Nub result updates - this._formBase.addObserver(this); - } - - protected abstract compute(); - - protected get formResult(): FormResult { - return this._formResult; - } - - /** - * retourne un identifiant du paramètre dans le formulaire - * surchargé dans le cas des ouvrages // - */ - protected getParameterRefid(p: ParamDefinition) { - return p.symbol; - } - - /** - * Copies current Nub result into result components for display on page. - * Should be called every time the Nub result changes. - * Must be idempotent. - */ - protected abstract reaffectResultComponents(); - - /** - * Lance le calcul d'un paramètre en déterminant une valeur initiale. - * Si nécessaire déclenche un calcul en chaîne des modules en amont. - */ - protected runNubCalc(nub: Nub): Result { - return nub.CalcSerie(); - } - - protected getComputedParameter(): NgParameter { - const cpd = this._formBase.currentNub.calculatedParam; - let ngparam: NgParameter; - if (cpd !== undefined) { - ngparam = this._formBase.getParamFromSymbol(cpd.symbol); - if (ngparam === undefined) { // calculated parameter is not displayed on screen - ngparam = new NgParameter(cpd, this._formBase); - } - } - return ngparam; - } - - protected getVariatedParameters(): NgParameter[] { - let res: NgParameter[] = []; - // find variated local parameters - res = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.VAR); - // add variated linked parameters - const pms = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.LINK); - for (const p of pms) { - if (p.paramDefinition.hasMultipleValues) { - res.push(p); - } - } - return res; - } - - /** - * Triggers computation of the Nub, updates form results - */ - public doCompute() { - // calculate module - this.compute(); - // refresh results - this._formBase.notifyObservers({ - "action": "resultsUpdated", - }, this._formBase); - } - - // interface Observer - - public update(sender: any, data: any): void { - if (sender instanceof Nub) { - switch (data.action) { - case "nubResultUpdated": - // forward Nub results update notification to FormCompute objects - this.reaffectResultComponents(); - break; - } - } - } -} diff --git a/src/app/formulaire/definition/form-courbe-remous.ts b/src/app/formulaire/definition/form-courbe-remous.ts new file mode 100644 index 0000000000000000000000000000000000000000..38d112690d6e76e60423815de2f2d437f8dfdaba --- /dev/null +++ b/src/app/formulaire/definition/form-courbe-remous.ts @@ -0,0 +1,122 @@ +import { IObservable, MethodeResolution, SectionNub, Session, Result, CourbeRemous, CourbeRemousParams, acSection } from "jalhyd"; + +import { FieldSet } from "../elements/fieldset"; +import { FormulaireSection } from "./form-section"; +import { RemousResults } from "../../results/remous-results"; +import { CalculatorResults } from "../../results/calculator-results"; + +export class FormulaireCourbeRemous extends FormulaireSection { + + /** résultats de courbes de remous */ + private _remousResults: RemousResults; + + private resultYn: Result; + + private resultYc: Result; + + /** + * id du select configurant la méthode de résolution + */ + private _resolveMethSelectId: string; + + constructor() { + super(); + this._remousResults = new RemousResults(); + // default properties + this._props["methodeResolution"] = MethodeResolution.Trapezes; + this._props["varCalc"] = ""; // important + } + + protected parseOptions(json: {}) { + super.parseOptions(json); + // id du select configurant la méthode de résolution + this._resolveMethSelectId = this.getOption(json, "methodSelectId"); + } + + public afterParseFieldset(fs: FieldSet) { + // si le FieldSet contient le select de méthode de résolution + if (this._resolveMethSelectId) { + const sel = fs.getFormulaireNodeById(this._resolveMethSelectId); + if (sel) { + // on abonne le formulaire aux propriétés du FieldSet + fs.properties.addObserver(this); + } + } + } + + protected compute() { + this.reaffectResultComponents(); + } + + protected reaffectResultComponents() { + const cr: CourbeRemous = this.currentNub as CourbeRemous; + const prmCR: CourbeRemousParams = cr.prms as CourbeRemousParams; + + this.remousResults.parameters = prmCR; + + // variable supplémentaire à calculer + this.remousResults.extraParamSymbol = this.currentNub.properties.getPropValue("varCalc"); + + // calcul + this.remousResults.result = cr.CalcSerie(); + + const sect: acSection = cr.Sn; + this.resultYn = sect.CalcSection("Yn"); // hauteur normale + this.resultYc = sect.CalcSection("Yc"); // hauteur critique + + // données du graphe + this.remousResults.hauteurNormale = this.resultYn.resultElement; + this.remousResults.hauteurCritique = this.resultYc.resultElement; + if (this.remousResults.extraParamSymbol) { + this.remousResults.extraChart = ! ["Hs", "Hsc", "Ycor", "Ycon"].includes(this.remousResults.extraParamSymbol); + } else { + this.remousResults.extraChart = false; + } + } + + public get remousResults() { + return this._remousResults; + } + + public resetFormResults() { + this._remousResults.reset(); + } + + public get hasResults(): boolean { + return this._remousResults.hasResults; + } + + public get results(): CalculatorResults[] { + // ensure help links are propagated + this._remousResults.helpLinks = this.helpLinks; + return [ this._remousResults ]; + } + + // interface Observer + + update(sender: IObservable, data: any) { + + super.update(sender, data); + + if (sender instanceof FieldSet && data.action === "propertyChange") { + switch (sender.id) { + case "fs_section": + // replace underlying section without replacing whole Nub + const newSect = Session.getInstance().createSection(data.value); + (this._currentNub as SectionNub).setSection(newSect); + // reflect changes in GUI + for (const fs of this.allFieldsets) { + // show / hide dependent fields + fs.updateFields(); + } + this.reset(); + break; + + case "fs_param_calc": + case "fs_target_data": + this.reset(); + break; + } + } + } +} diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index 908c91caf63ede6c0ae62c72ee39b72d6734b91b..f6cf46ffcceaca89dcf91f75e76208a5b5e20e9b 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -1,18 +1,18 @@ -import { CalculatorType, ComputeNodeType, Nub, Props, Observer, Session, SectionNub, acSection, ParamValueMode } from "jalhyd"; +import { CalculatorType, ComputeNodeType, Nub, Props, Observer, Session, SectionNub, acSection, ParamDefinition, Result } from "jalhyd"; -import { FormulaireElement } from "../formulaire-element"; -import { NgParameter, ParamRadioConfig } from "../ngparam"; -import { Field } from "../field"; +import { FormulaireElement } from "../elements/formulaire-element"; +import { NgParameter, ParamRadioConfig } from "../elements/ngparam"; +import { Field } from "../elements/field"; import { StringMap } from "../../stringmap"; -import { FormulaireNode } from "../formulaire-node"; -import { FieldSet } from "../fieldset"; -import { FieldsetContainer } from "../fieldset-container"; -import { SelectField } from "../select-field"; +import { FormulaireNode } from "../elements/formulaire-node"; +import { FieldSet } from "../elements/fieldset"; +import { FieldsetContainer } from "../elements/fieldset-container"; +import { SelectField } from "../elements/select-field"; import { DeepFieldsetIterator } from "../form-iterator/deep-fieldset-iterator"; import { TopFormulaireElementIterator } from "../form-iterator/top-element-iterator"; import { CalculatorResults } from "../../results/calculator-results"; import { ServiceFactory } from "../../services/service-factory"; -import { PabTable } from "../pab-table"; +import { PabTable } from "../elements/pab-table"; /** * classe de base pour tous les formulaires @@ -43,6 +43,9 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs /** ISO 639-1 language code of the current language (to avoid unnecessary localisation reload) */ private _currentLanguage: string; + /** copy of options.resultsHelp read by FormDefinition.parseOptions() */ + public helpLinks: { [key: string]: string }; + constructor() { super(undefined); } @@ -106,9 +109,10 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs if (this.currentNub instanceof SectionNub) { // add new Section as first child, from given nodeType - p.setPropValue("calcType", CalculatorType.Section); - p.setPropValue("nodeType", this._defaultNodeType); - const section = Session.getInstance().createNub(p); + const propsSection = new Props(); + propsSection.setPropValue("calcType", CalculatorType.Section); + propsSection.setPropValue("nodeType", this._defaultNodeType); + const section = Session.getInstance().createNub(propsSection); this.currentNub.setSection(section as acSection); } } @@ -149,6 +153,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs /** called at the end of parseConfig() */ protected completeParse(json: {}) { + this.helpLinks = this._resultsHelpLinks; } public getOption(json: {}, option: string): string { @@ -157,8 +162,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } } - public afterParseFieldset(fs: FieldSet) { - } + public afterParseFieldset(fs: FieldSet) { } public createFieldset(parent: FormulaireNode, json: {}, data?: {}, nub?: Nub): FieldSet { const res: FieldSet = new FieldSet(parent); @@ -216,7 +220,6 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs // il est utile de le faire avant le reste pour les modules de calcul utilisant // des sections (id des selects type de section/variable à calculer) - // tslint:disable-next-line:forin for (const conf_index in json) { const conf = json[conf_index]; const type: string = conf["type"]; @@ -239,7 +242,6 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs // analyse des éléments du formulaire const templates: any[] = []; - // tslint:disable-next-line:forin for (const conf_index in this._jsonConfig) { const conf = this._jsonConfig[conf_index]; const type: string = conf["type"]; @@ -352,16 +354,6 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs }, this); } - /** - * Forwards Nub's result updated notification. - * Used by FormCompute to update results display - */ - protected notifyNubResultUpdated(sender) { - this.notifyObservers({ - action: "nubResultUpdated" - }, sender); - } - /** * Forwards Nub's progress updated notification. * Used by CalculatorComponent to update progress bar @@ -400,11 +392,6 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs return select.getValue().label; } - public abstract resetResults(visited: string[], symbol?: string, forceResetAllDependencies?: boolean); - public abstract doCompute(); - public abstract get hasResults(): boolean; - public abstract get results(): CalculatorResults[]; - public updateLocalisation(localisation: StringMap, lang: string) { this._specificLocalisation = localisation; this._currentLanguage = lang; @@ -442,7 +429,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } /** - * Appelé par CalculatorComponent lrosque le Formulaire est chargé dans la vue, + * Appelé par CalculatorComponent lorsque le Formulaire est chargé dans la vue, * c'est à dire lorsqu'on affiche un module de calcul à l'écran */ public onCalculatorInit() {} @@ -454,9 +441,95 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs switch (data.action) { case "resultUpdated": // forward Nub results update notification to FormCompute objects - this.notifyNubResultUpdated(sender); + this.reaffectResultComponents(); break; } } } + + /** + * Resets the form results, the results panel on screen, the model + * results, and does the same for all depending modules + * @param symbol symbol of the parameter whose value change triggered this method + * @param forceResetAllDependencies if true, even non-calculated non-modified parameters + * links will be considered as dependencies @see jalhyd#98 + */ + public resetResults(visited: string[] = [], symbol?: string, forceResetAllDependencies: boolean = false) { + visited.push(this.currentNub.uid); + // reset GUI results + this.resetFormResults(); + // reset model results + this.currentNub.resetResult(); + // reset the result panels of all forms depending on this one + ServiceFactory.instance.formulaireService.resetAllDependingFormsResults(this, visited, symbol, forceResetAllDependencies); + } + + protected abstract compute(); + + public abstract get hasResults(): boolean; + + public abstract get results(): CalculatorResults[]; + + /** + * Copies current Nub result into result components for display on page. + * Should be called every time the Nub result changes. + * Must be idempotent. + */ + protected abstract reaffectResultComponents(); + + /** + * retourne un identifiant du paramètre dans le formulaire + * surchargé dans le cas des ouvrages // + */ + protected getParameterRefid(p: ParamDefinition) { + return p.symbol; + } + + /** + * Lance le calcul d'un paramètre en déterminant une valeur initiale. + * Si nécessaire déclenche un calcul en chaîne des modules en amont. + */ + protected runNubCalc(nub: Nub): Result { + return nub.CalcSerie(); + } + + protected getComputedParameter(): NgParameter { + const cpd = this.currentNub.calculatedParam; + let ngparam: NgParameter; + if (cpd !== undefined) { + ngparam = this.getParamFromSymbol(cpd.symbol); + if (ngparam === undefined) { // calculated parameter is not displayed on screen + ngparam = new NgParameter(cpd, this); + } + } + return ngparam; + } + + protected getVariatedParameters(): NgParameter[] { + let res: NgParameter[] = []; + // find variated local parameters + res = this.getDisplayedParamListFromState(ParamRadioConfig.VAR); + // add variated linked parameters + const pms = this.getDisplayedParamListFromState(ParamRadioConfig.LINK); + for (const p of pms) { + if (p.paramDefinition.hasMultipleValues) { + res.push(p); + } + } + return res; + } + + /** + * Triggers computation of the Nub, updates form results + */ + public doCompute() { + // calculate module + this.compute(); + // refresh results + this.notifyObservers({ + "action": "resultsUpdated", + }, this); + } + + public resetFormResults() {} } diff --git a/src/app/formulaire/definition/form-result-fixedvar.ts b/src/app/formulaire/definition/form-fixedvar.ts similarity index 50% rename from src/app/formulaire/definition/form-result-fixedvar.ts rename to src/app/formulaire/definition/form-fixedvar.ts index 512a6342d031505c83ffdc5aa99a28488cb3c8f8..9a5f38b9d69bbc269e8e90f456d1abf2afcfc42d 100644 --- a/src/app/formulaire/definition/form-result-fixedvar.ts +++ b/src/app/formulaire/definition/form-fixedvar.ts @@ -1,22 +1,19 @@ +import { FormulaireDefinition } from "./form-definition"; import { FixedResults } from "../../results/fixed-results"; import { VarResults } from "../../results/var-results"; -import { ParamRadioConfig } from "../ngparam"; -import { FormResult } from "./form-result"; -import { FormulaireDefinition } from "./form-definition"; -import { CalculatorResults } from "../../results/calculator-results"; import { ChartType } from "../../results/chart-type"; +import { CalculatorResults } from "../../results/calculator-results"; +import { ParamRadioConfig, NgParameter } from "../elements/ngparam"; -export class FormResultFixedVar extends FormResult { +import { Nub } from "jalhyd"; + +export class FormulaireFixedVar extends FormulaireDefinition { - /** résultats fixes/variables */ protected _fixedResults: FixedResults; protected _varResults: VarResults; - protected _formBase: FormulaireDefinition; - - constructor(base: FormulaireDefinition) { + constructor() { super(); - this._formBase = base; this._fixedResults = new FixedResults(); this._varResults = new VarResults(); } @@ -29,17 +26,17 @@ export class FormResultFixedVar extends FormResult { return this._varResults; } - public resetResults() { + public resetFormResults() { this._fixedResults.reset(); this._varResults.reset(); } public addFixedParameters() { - for (const p of this._formBase.getDisplayedParamListFromState(ParamRadioConfig.FIX)) { + for (const p of this.getDisplayedParamListFromState(ParamRadioConfig.FIX)) { this._fixedResults.addFixedParameter(p); } - for (const p of this._formBase.getDisplayedParamListFromState(ParamRadioConfig.LINK)) { + for (const p of this.getDisplayedParamListFromState(ParamRadioConfig.LINK)) { if (!p.paramDefinition.hasMultipleValues) { this._fixedResults.addFixedParameter(p); } @@ -63,4 +60,34 @@ export class FormResultFixedVar extends FormResult { res.push(this._varResults); return res; } + + protected compute() { + this.runNubCalc(this.currentNub); + this.reaffectResultComponents(); + } + + protected reaffectResultComponents() { + const nub: Nub = this.currentNub; + const computedParam: NgParameter = this.getComputedParameter(); + this.resetFormResults(); // to avoid adding fixed parameters more than once (see below) + this.addFixedParameters(); + const varParams: NgParameter[] = this.getVariatedParameters(); + + if (varParams.length === 0) { + // pas de paramètre à varier + this.fixedResults.result = nub.result; + if (computedParam !== undefined) { + this.fixedResults.calculatedParameter = computedParam; + } + } else { + // il y a un paramètre à varier + this.varResults.variatedParameters = varParams; + if (computedParam !== undefined) { + this.varResults.calculatedParameter = computedParam; + } + + this.varResults.result = nub.result; + this.varResults.update(); + } + } } diff --git a/src/app/formulaire/definition/concrete/form-grille.ts b/src/app/formulaire/definition/form-grille.ts similarity index 88% rename from src/app/formulaire/definition/concrete/form-grille.ts rename to src/app/formulaire/definition/form-grille.ts index b8b9760de218daf067c06116342e01ad0f0b5d39..c66630c1af4dffb17aa583f4e982f0ddaf85834e 100644 --- a/src/app/formulaire/definition/concrete/form-grille.ts +++ b/src/app/formulaire/definition/form-grille.ts @@ -1,13 +1,12 @@ import { IObservable } from "jalhyd"; -import { FormulaireBase } from "./form-base"; -import { FieldSet } from "../../fieldset"; -import { FormResultFixedVar } from "../form-result-fixedvar"; +import { FieldSet } from "../elements/fieldset"; +import { FormulaireFixedVar } from "./form-fixedvar"; /** * Formulaire pour les Grilles (perte de charge) */ -export class FormulaireGrille extends FormulaireBase { +export class FormulaireGrille extends FormulaireFixedVar { /** id of select configuring grid profile */ private _gridProfileSelectId: string; @@ -18,7 +17,7 @@ export class FormulaireGrille extends FormulaireBase { constructor() { super(); // custom variables order for results tables - (this._formResult as FormResultFixedVar).fixedResults.variablesOrder = [ + this.fixedResults.variablesOrder = [ "QMax", "CRad", "CEau", "H", "CSomGrille", "HG", "B", "S", "SPDG", "VA", "VAPDG", "Beta", "Alpha", "LG", "D", "DG", "SG", "VN", "b", "p", "e", "a", "c", "RFB", "REEB", "OB", "O", "OEntH", "cIncl", diff --git a/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts b/src/app/formulaire/definition/form-lechapt-calmon.ts similarity index 83% rename from src/app/formulaire/definition/concrete/form-lechapt-calmon.ts rename to src/app/formulaire/definition/form-lechapt-calmon.ts index 0bdda676d2eaa94ff25e59316a075aba46c2fcc2..cedc683c5264b0bf45605bd4b99b8043b57d0150 100644 --- a/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts +++ b/src/app/formulaire/definition/form-lechapt-calmon.ts @@ -1,12 +1,12 @@ import { IObservable } from "jalhyd"; -import { FormulaireBase } from "./form-base"; -import { FieldSet } from "../../fieldset"; +import { FieldSet } from "../elements/fieldset"; +import { FormulaireFixedVar } from "./form-fixedvar"; /** * Formulaire pour Lechapt et Calmon */ -export class FormulaireLechaptCalmon extends FormulaireBase { +export class FormulaireLechaptCalmon extends FormulaireFixedVar { /** id of select configuring material */ private _lcMaterialSelectId: string; diff --git a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts b/src/app/formulaire/definition/form-macrorugo-compound.ts similarity index 69% rename from src/app/formulaire/definition/concrete/form-macrorugo-compound.ts rename to src/app/formulaire/definition/form-macrorugo-compound.ts index cd4810da7c8fa9722e9392028f74f17d5c2dcb55..8c38f31ec341430f6579974449c85f0bc5b2127d 100644 --- a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts +++ b/src/app/formulaire/definition/form-macrorugo-compound.ts @@ -1,12 +1,12 @@ -import { IObservable, Nub } from "jalhyd"; - -import { FieldSet } from "../../fieldset"; -import { FieldsetContainer } from "../../fieldset-container"; -import { FormulaireNode } from "../../formulaire-node"; -import { NgParameter } from "../../ngparam"; -import { FormResultMacrorugoCompound } from "../form-result-macrorugo-compound"; -import { FormComputeMacrorugoCompound } from "../form-compute-macrorugo-compound"; +import { IObservable, Nub, MacrorugoCompound, Result } from "jalhyd"; + +import { FieldSet } from "../elements/fieldset"; +import { FieldsetContainer } from "../elements/fieldset-container"; +import { FormulaireNode } from "../elements/formulaire-node"; +import { NgParameter } from "../elements/ngparam"; import { FormulaireRepeatableFieldset } from "./form-repeatable-fieldset"; +import { MacrorugoCompoundResults } from "../../results/macrorugo-compound-results"; +import { CalculatorResults } from "../../results/calculator-results"; /** * Formulaire pour les passes à macrorugosités complexes @@ -16,16 +16,13 @@ export class FormulaireMacrorugoCompound extends FormulaireRepeatableFieldset { /** id of select configuring apron type */ private _apronTypeSelectId: string; + protected _mrcResults: MacrorugoCompoundResults; + constructor() { super(); - this._formResult = new FormResultMacrorugoCompound(this); - + this._mrcResults = new MacrorugoCompoundResults(); // default properties this._props["inclinedApron"] = false; - - // remove obsolete observer set by super() - this.removeObserver(this._formCompute); - this._formCompute = new FormComputeMacrorugoCompound(this, (this._formResult as FormResultMacrorugoCompound)); } protected parseOptions(json: {}) { @@ -76,7 +73,7 @@ export class FormulaireMacrorugoCompound extends FormulaireRepeatableFieldset { protected completeParse(json: {}) { this.subscribeFieldsetContainer(); this.updateApronState(this.currentNub.properties.getPropValue("inclinedApron")); - this._formResult.helpLinks = this._resultsHelpLinks; + this.helpLinks = this._resultsHelpLinks; } protected get fieldsetContainer(): FieldsetContainer { @@ -133,6 +130,53 @@ export class FormulaireMacrorugoCompound extends FormulaireRepeatableFieldset { } } + protected compute() { + this.runNubCalc(this.currentNub); + // reset variable index to avoid trying to access an index > 0 when nothing varies + const mrcr = this.mrcResults; + mrcr.variableIndex = 0; + + this.reaffectResultComponents(); + } + + protected reaffectResultComponents() { + const mrc: MacrorugoCompound = (this.currentNub as MacrorugoCompound); + const computedParam: NgParameter = this.getComputedParameter(); + const varParams: NgParameter[] = this.getVariatedParameters(); + + // résultat de calcul de la passe à macrorugo complexe + const mrcr = this.mrcResults; + mrcr.calculatedParameter = computedParam; + mrcr.result = mrc.result; + if (varParams) { + mrcr.variatedParameters = varParams; + } + // résultat de chaque enfant + const cr: Result[] = []; + for (const c of mrc.children) { + cr.push(c.result); + } + mrcr.childrenResults = cr; + } + + public get mrcResults() { + return this._mrcResults; + } + + public resetFormResults() { + this._mrcResults.reset(); + } + + public get results(): CalculatorResults[] { + // ensure help links are propagated + this._mrcResults.helpLinks = this.helpLinks; + return [ this._mrcResults ]; + } + + public get hasResults(): boolean { + return this._mrcResults.hasResults; + } + // interface Observer public update(sender: IObservable, data: any) { diff --git a/src/app/formulaire/definition/form-compute-pab.ts b/src/app/formulaire/definition/form-pab.ts similarity index 59% rename from src/app/formulaire/definition/form-compute-pab.ts rename to src/app/formulaire/definition/form-pab.ts index a0ebc6f32572291da7d54ffd92ded324a0c757ed..f4ba51958b1326a7299f58a06f7fd64bb1c77cc9 100644 --- a/src/app/formulaire/definition/form-compute-pab.ts +++ b/src/app/formulaire/definition/form-pab.ts @@ -1,37 +1,44 @@ -import { Result, Pab } from "jalhyd"; +import { Pab, Result } from "jalhyd"; import { FormulaireDefinition } from "./form-definition"; -import { FormResultPab } from "./form-result-pab"; -import { FormCompute } from "./form-compute"; -import { NgParameter } from "../ngparam"; -import { longestVarParam } from "../../../app/util"; +import { PabResults } from "../../results/pab-results"; +import { NgParameter } from "../elements/ngparam"; +import { longestVarParam } from "../../util"; +import { CalculatorResults } from "../../results/calculator-results"; -export class FormComputePab extends FormCompute { +/** + * Formulaire pour les passes à bassins, inspiré du formulaire + * pour les structures en parallèle + */ +export class FormulairePab extends FormulaireDefinition { - constructor(formBase: FormulaireDefinition, formResult: FormResultPab) { - super(formBase, formResult); + protected _pabResults: PabResults; + + constructor() { + super(); + this._pabResults = new PabResults(); } - protected get formResult(): FormResultPab { - return this._formResult as FormResultPab; + public get pabNub(): Pab { + return this.currentNub as Pab; } protected compute() { - this.runNubCalc(this._formBase.currentNub); + this.runNubCalc(this.currentNub); // reset variable index to avoid trying to access an index > 0 when nothing varies - const pabr = this.formResult.pabResults; + const pabr = this.pabResults; pabr.variableIndex = 0; this.reaffectResultComponents(); } protected reaffectResultComponents() { - const pab: Pab = (this._formBase.currentNub as Pab); + const pab: Pab = (this.currentNub as Pab); const computedParam: NgParameter = this.getComputedParameter(); const varParams: NgParameter[] = this.getVariatedParameters(); // résultat de calcul de la passe à bassins - const pabr = this.formResult.pabResults; + const pabr = this.pabResults; pabr.calculatedParameter = computedParam; pabr.result = pab.result; @@ -70,4 +77,22 @@ export class FormComputePab extends FormCompute { pabr.variatedParameters = varParams; } } + + public get pabResults() { + return this._pabResults; + } + + public resetResults() { + this._pabResults.reset(); + } + + public get results(): CalculatorResults[] { + // ensure help links are propagated + this._pabResults.helpLinks = this.helpLinks; + return [ this._pabResults ]; + } + + public get hasResults(): boolean { + return this._pabResults.hasResults; + } } diff --git a/src/app/formulaire/definition/concrete/form-parallel-structures.ts b/src/app/formulaire/definition/form-parallel-structures.ts similarity index 88% rename from src/app/formulaire/definition/concrete/form-parallel-structures.ts rename to src/app/formulaire/definition/form-parallel-structures.ts index 2ed380c04ccd83565945c10179e703b290aca0a3..fa8a481f93fcbb0efb9933e7676ba8d9839b1205 100644 --- a/src/app/formulaire/definition/concrete/form-parallel-structures.ts +++ b/src/app/formulaire/definition/form-parallel-structures.ts @@ -1,13 +1,11 @@ -import { Structure, Nub, ParallelStructure, StructureProperties, Props, Session } from "jalhyd"; - -import { FormComputeParallelStructures } from "../form-compute-parallel-structures"; -import { FormResultFixedVar } from "../form-result-fixedvar"; -import { FieldsetContainer } from "../../fieldset-container"; -import { FieldSet } from "../../fieldset"; -import { SelectField } from "../../select-field"; -import { NgParameter } from "../../ngparam"; -import { FieldsetTemplate } from "../../fieldset-template"; -import { FormulaireNode } from "../../formulaire-node"; +import { Structure, Nub, ParallelStructure, StructureProperties, Props, Session, ParamDefinition } from "jalhyd"; + +import { FieldsetContainer } from "../elements/fieldset-container"; +import { FieldSet } from "../elements/fieldset"; +import { SelectField } from "../elements/select-field"; +import { NgParameter } from "../elements/ngparam"; +import { FieldsetTemplate } from "../elements/fieldset-template"; +import { FormulaireNode } from "../elements/formulaire-node"; import { FormulaireRepeatableFieldset } from "./form-repeatable-fieldset"; export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { @@ -17,15 +15,6 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { */ private __ouvrageSelectId: string; - constructor() { - super(); - this._formResult = new FormResultFixedVar(this); - - // remove obsolete observer set by super() - this.removeObserver(this._formCompute); - this._formCompute = new FormComputeParallelStructures(this, (this._formResult as FormResultFixedVar)); - } - protected parseOptions(json: {}) { super.parseOptions(json); @@ -44,6 +33,22 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { } } + /** + * construit un identifiant de type { uid: "abcdef", symbol: "X" } + * avec "abcdef" l'index de l'ouvrage et "X" son paramètre + */ + protected getParameterRefid(p: ParamDefinition): any { + const nub = p.parentComputeNode; + if (nub instanceof Structure) { + return { + uid: nub.uid, + symbol: p.symbol + }; + } else { + return super.getParameterRefid(p); + } + } + public createFieldset(parent: FormulaireNode, json: {}, data?: {}, nub?: Nub): FieldSet { if (json["calcType"] === "Structure") { // indice après lequel insérer le nouveau FieldSet @@ -112,7 +117,7 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset { protected completeParse(json: {}) { this.subscribeFieldsetContainer(); - this._formResult.helpLinks = this._resultsHelpLinks; + this.helpLinks = this._resultsHelpLinks; } protected get fieldsetContainer(): FieldsetContainer { diff --git a/src/app/formulaire/definition/concrete/form-regime-uniforme.ts b/src/app/formulaire/definition/form-regime-uniforme.ts similarity index 51% rename from src/app/formulaire/definition/concrete/form-regime-uniforme.ts rename to src/app/formulaire/definition/form-regime-uniforme.ts index 791fd322c962dbaf6e90dc87e8897d92d1de6e1d..f1630343a0ccaf89640002e4b440940c282a0e42 100644 --- a/src/app/formulaire/definition/concrete/form-regime-uniforme.ts +++ b/src/app/formulaire/definition/form-regime-uniforme.ts @@ -1,32 +1,9 @@ import { IObservable, Observer, Session, SectionNub } from "jalhyd"; -import { FormDefSection } from "../form-def-section"; -import { FieldSet } from "../../fieldset"; -import { FormulaireBase } from "./form-base"; -export class FormulaireRegimeUniforme extends FormulaireBase implements Observer { +import { FieldSet } from "../elements/fieldset"; +import { FormulaireSection } from "./form-section"; - private _formSection: FormDefSection; - - constructor() { - super(); - this._formSection = new FormDefSection(this); - } - - protected parseOptions(json: {}) { - super.parseOptions(json); - this._formSection.parseOptions(json); - } - - public afterParseFieldset(fs: FieldSet) { - this._formSection.afterParseFieldset(fs); - } - - protected completeParse(json: {}) { - super.completeParse(json); - this._formResult.helpLinks = this._resultsHelpLinks; - } - - // interface Observer +export class FormulaireRegimeUniforme extends FormulaireSection implements Observer { update(sender: IObservable, data: any) { super.update(sender, data); diff --git a/src/app/formulaire/definition/concrete/form-repeatable-fieldset.ts b/src/app/formulaire/definition/form-repeatable-fieldset.ts similarity index 84% rename from src/app/formulaire/definition/concrete/form-repeatable-fieldset.ts rename to src/app/formulaire/definition/form-repeatable-fieldset.ts index 6cec8f90aa2b70d22bea57d4f23cbd515f3e2dcc..68ca2692d1ff5ceb259fd93b58ee6972fff3723a 100644 --- a/src/app/formulaire/definition/concrete/form-repeatable-fieldset.ts +++ b/src/app/formulaire/definition/form-repeatable-fieldset.ts @@ -1,11 +1,11 @@ -import { FieldSet } from "../../fieldset"; -import { FieldsetContainer } from "../../fieldset-container"; -import { FormulaireBase } from "./form-base"; -import { FieldsetTemplate } from "../../fieldset-template"; +import { FieldSet } from "../elements/fieldset"; +import { FieldsetContainer } from "../elements/fieldset-container"; +import { FormulaireFixedVar } from "./form-fixedvar"; +import { FieldsetTemplate } from "../elements/fieldset-template"; import { Props, Session, Nub } from "jalhyd"; -export abstract class FormulaireRepeatableFieldset extends FormulaireBase { +export abstract class FormulaireRepeatableFieldset extends FormulaireFixedVar { protected abstract get fieldsetContainer(): FieldsetContainer; diff --git a/src/app/formulaire/definition/form-result-macrorugo-compound.ts b/src/app/formulaire/definition/form-result-macrorugo-compound.ts deleted file mode 100644 index d73ec051c96c669638fb0135d9c8937a46675e9e..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/form-result-macrorugo-compound.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { FormulaireDefinition } from "./form-definition"; -import { FormResult } from "./form-result"; -import { CalculatorResults } from "../../results/calculator-results"; -import { MacrorugoCompoundResults } from "../../results/macrorugo-compound-results"; - -export class FormResultMacrorugoCompound extends FormResult { - - protected _formBase: FormulaireDefinition; - - protected _mrcResults: MacrorugoCompoundResults; - - constructor(base: FormulaireDefinition) { - super(); - this._formBase = base; - this._mrcResults = new MacrorugoCompoundResults(); - } - - public get mrcResults() { - return this._mrcResults; - } - - public resetResults() { - this._mrcResults.reset(); - } - - public get results(): CalculatorResults[] { - // ensure help links are propagated - this._mrcResults.helpLinks = this.helpLinks; - return [ this._mrcResults ]; - } - - public get hasResults(): boolean { - return this._mrcResults.hasResults; - } -} diff --git a/src/app/formulaire/definition/form-result-pab.ts b/src/app/formulaire/definition/form-result-pab.ts deleted file mode 100644 index 6a4cd34fdcad78ac0c4267403b85d5b6ab691b4c..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/form-result-pab.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { FormulaireDefinition } from "./form-definition"; -import { FormResult } from "./form-result"; -import { CalculatorResults } from "../../results/calculator-results"; -import { PabResults } from "../../results/pab-results"; - -export class FormResultPab extends FormResult { - - protected _formBase: FormulaireDefinition; - - protected _pabResults: PabResults; - - constructor(base: FormulaireDefinition) { - super(); - this._formBase = base; - this._pabResults = new PabResults(); - } - - public get pabResults() { - return this._pabResults; - } - - public resetResults() { - this._pabResults.reset(); - } - - public get results(): CalculatorResults[] { - // ensure help links are propagated - this._pabResults.helpLinks = this.helpLinks; - return [ this._pabResults ]; - } - - public get hasResults(): boolean { - return this._pabResults.hasResults; - } -} diff --git a/src/app/formulaire/definition/form-result-remous.ts b/src/app/formulaire/definition/form-result-remous.ts deleted file mode 100644 index 4ae14b792de50ac48a24af0bd857d68afdee3b39..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/form-result-remous.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { RemousResults } from "../../results/remous-results"; -import { FormResult } from "./form-result"; -import { FormulaireDefinition } from "./form-definition"; -import { CalculatorResults } from "../../results/calculator-results"; - -export class FormResultRemous extends FormResult { - - /** - * résultats de courbes de remous - */ - private _remousResults: RemousResults; - - constructor(base: FormulaireDefinition) { - super(); - this._remousResults = new RemousResults(); - } - - public get remousResults() { - return this._remousResults; - } - - public resetResults() { - this._remousResults.reset(); - } - - public get hasResults(): boolean { - return this._remousResults.hasResults; - } - - public get results(): CalculatorResults[] { - // ensure help links are propagated - this._remousResults.helpLinks = this.helpLinks; - return [ this._remousResults ]; - } -} diff --git a/src/app/formulaire/definition/form-result-section.ts b/src/app/formulaire/definition/form-result-section.ts deleted file mode 100644 index e4acf4a41b00bf2d536af982268afab11afa2547..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/form-result-section.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { SectionResults } from "../../results/section-results"; -import { ParamRadioConfig } from "../ngparam"; -import { FixedResults } from "../../results/fixed-results"; -import { VarResults } from "../../results/var-results"; -import { FormResult } from "./form-result"; -import { FormulaireDefinition } from "./form-definition"; -import { CalculatorResults } from "../../results/calculator-results"; - -export class FormResultSection extends FormResult { - private _formBase: FormulaireDefinition; - - /** - * résultats fixes/variables - */ - private _fixedResults: FixedResults; - private _varResults: VarResults; - - /** - * résultats de section paramétrée - */ - private _sectionResults: SectionResults; - - constructor(base: FormulaireDefinition) { - super(); - this._formBase = base; - this._fixedResults = new FixedResults(); - this._varResults = new VarResults(); - this._sectionResults = new SectionResults(); - } - - public get fixedResults() { - return this._fixedResults; - } - - public get varResults() { - return this._varResults; - } - - public get sectionResults() { - return this._sectionResults; - } - - public resetResults() { - this._fixedResults.reset(); - this._varResults.reset(); - this._sectionResults.reset(); - } - - public addSectionFixedParameters() { - for (const p of this._formBase.getDisplayedParamListFromState(ParamRadioConfig.FIX)) { - this._fixedResults.addFixedParameter(p); - } - } - - public get hasResults(): boolean { - return (this._fixedResults !== undefined && this._fixedResults.hasResults) - || (this._varResults !== undefined && this._varResults.hasResults) - || (this._sectionResults !== undefined && this._sectionResults.hasResults); - } - - public get results(): CalculatorResults[] { - const res: CalculatorResults[] = []; - // ensure help links are propagated - this._fixedResults.helpLinks = this.helpLinks; - this._varResults.helpLinks = this.helpLinks; - this._sectionResults.helpLinks = this.helpLinks; - res.push(this._fixedResults); - res.push(this._varResults); - res.push(this._sectionResults); - return res; - } -} diff --git a/src/app/formulaire/definition/form-result.ts b/src/app/formulaire/definition/form-result.ts deleted file mode 100644 index 5e5fa62ebea1dcf30167f44e1a63132d432a0d6f..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/form-result.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { CalculatorResults } from "../../results/calculator-results"; - -export abstract class FormResult { - - /** copy of options.resultsHelp read by FormDefinition.parseOptions() */ - public helpLinks: { [key: string]: string }; - - public abstract resetResults(); - - public abstract get hasResults(): boolean; - - public abstract get results(): CalculatorResults[]; -} diff --git a/src/app/formulaire/definition/form-section-parametree.ts b/src/app/formulaire/definition/form-section-parametree.ts new file mode 100644 index 0000000000000000000000000000000000000000..a18349a53e998295a6e761ba3a1862d03c27bdb5 --- /dev/null +++ b/src/app/formulaire/definition/form-section-parametree.ts @@ -0,0 +1,107 @@ +import { IObservable, Nub, Session, SectionNub, ParamDefinition, Result, SectionParametree, acSection } from "jalhyd"; + +import { FieldSet } from "../elements/fieldset"; +import { FormulaireSection } from "./form-section"; +import { SectionResults } from "../../results/section-results"; +import { ParamRadioConfig } from "../elements/ngparam"; +import { CalculatorResults } from "../../results/calculator-results"; + +export class FormulaireSectionParametree extends FormulaireSection { + + /** + * résultats de section paramétrée + */ + private _sectionResults: SectionResults; + + public constructor() { + super(); + this._sectionResults = new SectionResults(); + } + + protected compute() { + this.runNubCalc(this.currentNub); + this.reaffectResultComponents(); + } + + protected runNubCalc(nub: Nub, computedParam?: ParamDefinition): Result { + return nub.CalcSerie(); + } + + protected reaffectResultComponents() { + const sectNub: SectionParametree = this.currentNub as SectionParametree; + const sect: acSection = sectNub.section; + this._sectionResults.section = sect; + + const varParams = this.getSectionVariatedParameters(); + if (varParams.length > 0) { + // résultats variés avec tous les résultats complémentaires + this._varResults.variatedParameters = varParams; + this._varResults.result = sectNub.result; + this._varResults.update(); + } else { + // résultats de section (avec le graphique de section) + this._sectionResults.result = sectNub.result; + // résultats complémentaires des paramètres fixés + this.addSectionFixedParameters(); + this.fixedResults.result = sectNub.result; + } + + } + + public resetFormResults() { + this._fixedResults.reset(); + this._varResults.reset(); + this._sectionResults.reset(); + } + + public addSectionFixedParameters() { + for (const p of this.getDisplayedParamListFromState(ParamRadioConfig.FIX)) { + this._fixedResults.addFixedParameter(p); + } + } + + public get hasResults(): boolean { + return (this._fixedResults !== undefined && this._fixedResults.hasResults) + || (this._varResults !== undefined && this._varResults.hasResults) + || (this._sectionResults !== undefined && this._sectionResults.hasResults); + } + + public get results(): CalculatorResults[] { + const res: CalculatorResults[] = []; + // ensure help links are propagated + this._fixedResults.helpLinks = this.helpLinks; + this._varResults.helpLinks = this.helpLinks; + this._sectionResults.helpLinks = this.helpLinks; + res.push(this._fixedResults); + res.push(this._varResults); + res.push(this._sectionResults); + return res; + } + + // interface Observer + + update(sender: IObservable, data: any) { + super.update(sender, data); + + // changement de propriété du FieldSet contenant le select de choix du type de section + if (sender instanceof FieldSet && data.action === "propertyChange") { + switch (sender.id) { + case "fs_section": + // replace underlying section without replacing whole Nub + const newSect = Session.getInstance().createSection(data.value); + (this._currentNub as SectionNub).setSection(newSect); + // reflect changes in GUI + for (const fs of this.allFieldsets) { + // show / hide dependent fields + fs.updateFields(); + } + this.reset(); + break; + + case "fs_computed_var": + this.reset(); + break; + } + } + } +} diff --git a/src/app/formulaire/definition/form-def-section.ts b/src/app/formulaire/definition/form-section.ts similarity index 53% rename from src/app/formulaire/definition/form-def-section.ts rename to src/app/formulaire/definition/form-section.ts index a2c011e8df49e4a62fa8010da406a92e1322c1dd..e645b98aca767333ab40f809c5e86eae32925c38 100644 --- a/src/app/formulaire/definition/form-def-section.ts +++ b/src/app/formulaire/definition/form-section.ts @@ -1,36 +1,30 @@ -import { NgParameter, ParamRadioConfig } from "../ngparam"; -import { FormulaireDefinition } from "./form-definition"; -import { FieldSet } from "../fieldset"; +import { NgParameter, ParamRadioConfig } from "../elements/ngparam"; +import { FieldSet } from "../elements/fieldset"; +import { FormulaireFixedVar } from "./form-fixedvar"; -export class FormDefSection { - /** - * id de l'élément configurant le type de section - */ - private _sectionSourceId: string; +export abstract class FormulaireSection extends FormulaireFixedVar { - private _formBase: FormulaireDefinition; - - constructor(base: FormulaireDefinition) { - this._formBase = base; - } + /** id de l'élément configurant le type de section */ + private _sectionSourceId: string; private get hasSectionNodeTypeSource(): boolean { return this._sectionSourceId !== undefined; } public getSectionVariatedParameters(): NgParameter[] { - return this._formBase.getDisplayedParamListFromState(ParamRadioConfig.VAR); + return this.getDisplayedParamListFromState(ParamRadioConfig.VAR); } public getSectionComputedParam(): { symbol: string, label: string } { - const symbol = this._formBase.getSelectedValue("select_target"); - const label = this._formBase.getSelectedLabel("select_target"); + const symbol = this.getSelectedValue("select_target"); + const label = this.getSelectedLabel("select_target"); return { symbol, label }; } - public parseOptions(json: {}) { + protected parseOptions(json: {}) { + super.parseOptions(json); // id de l'élément configurant le type de section - this._sectionSourceId = this._formBase.getOption(json, "sectionSourceId"); + this._sectionSourceId = this.getOption(json, "sectionSourceId"); } /** @@ -42,7 +36,7 @@ export class FormDefSection { const sel = fs.getFormulaireNodeById(this._sectionSourceId); if (sel) { // on abonne le formulaire aux propriétés du FieldSet pour MAJ du nub, reset du formulaire, ... - fs.properties.addObserver(this._formBase); + fs.properties.addObserver(this); } } } diff --git a/src/app/formulaire/definition/concrete/form-solveur.ts b/src/app/formulaire/definition/form-solveur.ts similarity index 89% rename from src/app/formulaire/definition/concrete/form-solveur.ts rename to src/app/formulaire/definition/form-solveur.ts index 2856388e617642516c87f0a562f50c697c1d089c..2057ce08427b4e991fe65ca58e57c0cf8c1e7775 100644 --- a/src/app/formulaire/definition/concrete/form-solveur.ts +++ b/src/app/formulaire/definition/form-solveur.ts @@ -1,14 +1,14 @@ -import { IObservable, ParamDefinition, Solveur } from "jalhyd"; +import { IObservable, ParamDefinition } from "jalhyd"; -import { FormulaireBase } from "./form-base"; -import { SelectFieldNub } from "../../select-field-nub"; -import { SelectFieldParameter } from "../../select-field-parameter"; -import { NgParameter } from "../../ngparam"; +import { SelectFieldNub } from "../elements/select-field-nub"; +import { SelectFieldParameter } from "../elements/select-field-parameter"; +import { NgParameter } from "../elements/ngparam"; +import { FormulaireFixedVar } from "./form-fixedvar"; /** * Formulaire pour les Solveurs */ -export class FormulaireSolveur extends FormulaireBase { +export class FormulaireSolveur extends FormulaireFixedVar { /** id of select configuring target Nub */ private _targetNubSelectId: string; diff --git a/src/app/formulaire/definition/concrete/form-spp.ts b/src/app/formulaire/definition/form-spp.ts similarity index 92% rename from src/app/formulaire/definition/concrete/form-spp.ts rename to src/app/formulaire/definition/form-spp.ts index e5430273cf8c375eb4407a416d04f60119ba9393..e7ddf4e1aeb3a964a7a50082230842970f8c06b0 100644 --- a/src/app/formulaire/definition/concrete/form-spp.ts +++ b/src/app/formulaire/definition/form-spp.ts @@ -1,7 +1,7 @@ import { FormulaireRepeatableFieldset } from "./form-repeatable-fieldset"; -import { FieldSet } from "../../fieldset"; -import { FormulaireNode } from "../../formulaire-node"; -import { FieldsetContainer } from "../../fieldset-container"; +import { FieldSet } from "../elements/fieldset"; +import { FormulaireNode } from "../elements/formulaire-node"; +import { FieldsetContainer } from "../elements/fieldset-container"; import { Nub, IObservable } from "jalhyd"; diff --git a/src/app/formulaire/definition/concrete/form-trigo.ts b/src/app/formulaire/definition/form-trigo.ts similarity index 87% rename from src/app/formulaire/definition/concrete/form-trigo.ts rename to src/app/formulaire/definition/form-trigo.ts index 499d6e03a4365f25b74545581edd6c882f84a97f..332325710e2cd28720ae7b36bf1d0a05f7af945b 100644 --- a/src/app/formulaire/definition/concrete/form-trigo.ts +++ b/src/app/formulaire/definition/form-trigo.ts @@ -1,12 +1,12 @@ import { IObservable } from "jalhyd"; -import { FormulaireBase } from "./form-base"; -import { FieldSet } from "../../fieldset"; +import { FieldSet } from "../elements/fieldset"; +import { FormulaireFixedVar } from "./form-fixedvar"; /** * Formulaire pour les fonctions trigonométriques */ -export class FormulaireTrigo extends FormulaireBase { +export class FormulaireTrigo extends FormulaireFixedVar { /** id of select configuring operation */ private _operationSelectId: string; diff --git a/src/app/formulaire/field.ts b/src/app/formulaire/elements/field.ts similarity index 100% rename from src/app/formulaire/field.ts rename to src/app/formulaire/elements/field.ts diff --git a/src/app/formulaire/fieldset-container.ts b/src/app/formulaire/elements/fieldset-container.ts similarity index 98% rename from src/app/formulaire/fieldset-container.ts rename to src/app/formulaire/elements/fieldset-container.ts index 3e2c3d3b774dd62cd05a2d9eca825fbb24031b5e..1c31212daed733bd6a8a84e360f6b4a9ed09b5c0 100644 --- a/src/app/formulaire/fieldset-container.ts +++ b/src/app/formulaire/elements/fieldset-container.ts @@ -1,7 +1,7 @@ import { FormulaireElement } from "./formulaire-element"; import { FieldSet } from "./fieldset"; import { FieldsetTemplate } from "./fieldset-template"; -import { StringMap } from "../stringmap"; +import { StringMap } from "../../stringmap"; import { FormulaireNode } from "./formulaire-node"; import { Nub } from "jalhyd"; diff --git a/src/app/formulaire/fieldset-template.ts b/src/app/formulaire/elements/fieldset-template.ts similarity index 96% rename from src/app/formulaire/fieldset-template.ts rename to src/app/formulaire/elements/fieldset-template.ts index 97b0a9d4679e1284264a48e284d136aa0dbd9ff5..de8c1e2d84ed973b8adf9c11de575143eb11eb03 100644 --- a/src/app/formulaire/fieldset-template.ts +++ b/src/app/formulaire/elements/fieldset-template.ts @@ -1,6 +1,6 @@ import { FieldSet } from "./fieldset"; import { CalculatorType, ComputeNodeType, LoiDebit, Nub, StructureType } from "jalhyd"; -import { FormulaireDefinition } from "./definition/form-definition"; +import { FormulaireDefinition } from "../definition/form-definition"; import { FieldsetContainer } from "./fieldset-container"; export class FieldsetTemplate { diff --git a/src/app/formulaire/fieldset.ts b/src/app/formulaire/elements/fieldset.ts similarity index 99% rename from src/app/formulaire/fieldset.ts rename to src/app/formulaire/elements/fieldset.ts index 03cfa6701d32dda84e711697deacfaeaa9bee182..5e36142cc6c992e91d9edb77a6a332575cf59f3e 100644 --- a/src/app/formulaire/fieldset.ts +++ b/src/app/formulaire/elements/fieldset.ts @@ -19,8 +19,8 @@ import { FormulaireElement } from "./formulaire-element"; import { Field } from "./field"; import { SelectField } from "./select-field"; import { NgParameter, ParamRadioConfig } from "./ngparam"; -import { FormulaireDefinition } from "./definition/form-definition"; -import { StringMap } from "../stringmap"; +import { FormulaireDefinition } from "../definition/form-definition"; +import { StringMap } from "../../stringmap"; import { FormulaireNode } from "./formulaire-node"; import { FieldsetContainer } from "./fieldset-container"; import { SelectFieldNub } from "./select-field-nub"; diff --git a/src/app/formulaire/formulaire-element.ts b/src/app/formulaire/elements/formulaire-element.ts similarity index 88% rename from src/app/formulaire/formulaire-element.ts rename to src/app/formulaire/elements/formulaire-element.ts index 96153bcc4be56b488a79e7c5a61b59121d410d99..19b0d58276670c7833b9c6a8129c76af7d3538c5 100644 --- a/src/app/formulaire/formulaire-element.ts +++ b/src/app/formulaire/elements/formulaire-element.ts @@ -1,9 +1,8 @@ import { FormulaireNode } from "./formulaire-node"; -import { StringMap } from "../stringmap"; -import { DeepFormulaireElementIterator } from "./form-iterator/deep-element-iterator"; -import { I18nService } from "../services/internationalisation.service"; -import { ServiceFactory } from "../services/service-factory"; -import { FormulaireDefinition } from "./definition/form-definition"; +import { StringMap } from "../../stringmap"; +import { I18nService } from "../../services/internationalisation.service"; +import { ServiceFactory } from "../../services/service-factory"; +import { FormulaireDefinition } from "../definition/form-definition"; /** * élément (enfant) du formulaire : fieldset, input, container, ... diff --git a/src/app/formulaire/formulaire-node.ts b/src/app/formulaire/elements/formulaire-node.ts similarity index 97% rename from src/app/formulaire/formulaire-node.ts rename to src/app/formulaire/elements/formulaire-node.ts index 8f3ccf188fdf7a01c55464adfa62eaed2912a6a6..cffa97d86e32fa4427d9b114bc02015ecba93805 100644 --- a/src/app/formulaire/formulaire-node.ts +++ b/src/app/formulaire/elements/formulaire-node.ts @@ -1,6 +1,7 @@ import { JalhydObject, IObservable, Observer, Observable, ParamValueMode } from "jalhyd"; + import { FormulaireElement } from "./formulaire-element"; -import { DeepFormulaireElementIterator } from "./form-iterator/deep-element-iterator"; +import { DeepFormulaireElementIterator } from "../form-iterator/deep-element-iterator"; import { NgParameter } from "./ngparam"; /** diff --git a/src/app/formulaire/input-field.ts b/src/app/formulaire/elements/input-field.ts similarity index 100% rename from src/app/formulaire/input-field.ts rename to src/app/formulaire/elements/input-field.ts diff --git a/src/app/formulaire/ngparam.ts b/src/app/formulaire/elements/ngparam.ts similarity index 99% rename from src/app/formulaire/ngparam.ts rename to src/app/formulaire/elements/ngparam.ts index c4ab16b6b363baaae786f6de81ae7096be1567cd..f09c9081b36966b048104b443e7430b0c7ada3ae 100644 --- a/src/app/formulaire/ngparam.ts +++ b/src/app/formulaire/elements/ngparam.ts @@ -4,9 +4,9 @@ import { Interval, ParamDefinition, ParamDomain, ParamValueMode, INumberIterator import { sprintf } from "sprintf-js"; import { InputField } from "./input-field"; -import { ServiceFactory } from "../services/service-factory"; +import { ServiceFactory } from "../../services/service-factory"; import { FormulaireNode } from "./formulaire-node"; -import { fv } from "../util"; +import { fv } from "../../util"; export enum ParamRadioConfig { /** pas de radio, paramètre modifiable à la main uniquement */ diff --git a/src/app/formulaire/pab-table.ts b/src/app/formulaire/elements/pab-table.ts similarity index 93% rename from src/app/formulaire/pab-table.ts rename to src/app/formulaire/elements/pab-table.ts index a31529bc573e56b4712c33cf3e4338216fbff768..aea39c56e070c4123365d0e40345562572ac0dfd 100644 --- a/src/app/formulaire/pab-table.ts +++ b/src/app/formulaire/elements/pab-table.ts @@ -2,7 +2,7 @@ import { Pab } from "jalhyd"; import { FormulaireElement } from "./formulaire-element"; import { FormulaireNode } from "./formulaire-node"; -import { FormulairePab } from "./definition/concrete/form-pab"; +import { FormulairePab } from "../definition/form-pab"; /** * The big editable data grid for calculator type "Pab" (form element). diff --git a/src/app/formulaire/select-entry.ts b/src/app/formulaire/elements/select-entry.ts similarity index 100% rename from src/app/formulaire/select-entry.ts rename to src/app/formulaire/elements/select-entry.ts diff --git a/src/app/formulaire/select-field-model.ts b/src/app/formulaire/elements/select-field-model.ts similarity index 100% rename from src/app/formulaire/select-field-model.ts rename to src/app/formulaire/elements/select-field-model.ts diff --git a/src/app/formulaire/select-field-nub.ts b/src/app/formulaire/elements/select-field-nub.ts similarity index 93% rename from src/app/formulaire/select-field-nub.ts rename to src/app/formulaire/elements/select-field-nub.ts index b19492cc0abbdb67f34c4c8325cd3fc694fbdaca..52053385b1d60ab815d01f3caf4aa08387a9ad8e 100644 --- a/src/app/formulaire/select-field-nub.ts +++ b/src/app/formulaire/elements/select-field-nub.ts @@ -1,7 +1,7 @@ import { SelectFieldReference } from "./select-field-reference"; import { SelectEntry } from "./select-entry"; -import { ServiceFactory } from "../services/service-factory"; -import { decodeHtml } from "../util"; +import { ServiceFactory } from "../../services/service-factory"; +import { decodeHtml } from "../../util"; import { Session, Solveur } from "jalhyd"; diff --git a/src/app/formulaire/select-field-parameter.ts b/src/app/formulaire/elements/select-field-parameter.ts similarity index 94% rename from src/app/formulaire/select-field-parameter.ts rename to src/app/formulaire/elements/select-field-parameter.ts index c0ddf2b6eb03b7795e42cb255d33533b80852bda..c643edd71e6ac55182836239774f6bb69d96d2c7 100644 --- a/src/app/formulaire/select-field-parameter.ts +++ b/src/app/formulaire/elements/select-field-parameter.ts @@ -1,7 +1,7 @@ import { SelectFieldReference } from "./select-field-reference"; import { SelectEntry } from "./select-entry"; -import { decodeHtml } from "../util"; -import { ServiceFactory } from "../services/service-factory"; +import { decodeHtml } from "../../util"; +import { ServiceFactory } from "../../services/service-factory"; import { Nub, Solveur } from "jalhyd"; diff --git a/src/app/formulaire/select-field-reference.ts b/src/app/formulaire/elements/select-field-reference.ts similarity index 100% rename from src/app/formulaire/select-field-reference.ts rename to src/app/formulaire/elements/select-field-reference.ts diff --git a/src/app/formulaire/select-field.ts b/src/app/formulaire/elements/select-field.ts similarity index 98% rename from src/app/formulaire/select-field.ts rename to src/app/formulaire/elements/select-field.ts index c67f117d19be4fb69686f3d6edb804decce6ecab..0d98274bb9d0a81f8891e02e80bcf0d3a5696cde 100644 --- a/src/app/formulaire/select-field.ts +++ b/src/app/formulaire/elements/select-field.ts @@ -16,9 +16,9 @@ import { import { Field } from "./field"; import { SelectEntry } from "./select-entry"; -import { StringMap } from "../stringmap"; +import { StringMap } from "../../stringmap"; import { FormulaireNode } from "./formulaire-node"; -import { FormulaireDefinition } from "./definition/form-definition"; +import { FormulaireDefinition } from "../definition/form-definition"; export class SelectField extends Field { diff --git a/src/app/formulaire/form-iterator/abstract-node-iterator.ts b/src/app/formulaire/form-iterator/abstract-node-iterator.ts index f089870064405dbbb87bed59d0600e04a4585281..a57b7fbc9f83ee347d5f9f2c06cc455ac7693cb0 100644 --- a/src/app/formulaire/form-iterator/abstract-node-iterator.ts +++ b/src/app/formulaire/form-iterator/abstract-node-iterator.ts @@ -1,4 +1,4 @@ -import { FormulaireNode } from "../formulaire-node"; +import { FormulaireNode } from "../elements/formulaire-node"; /** * classe de construction d'itérateurs qui parcourent un arbre de FormulaireNode diff --git a/src/app/formulaire/form-iterator/deep-element-iterator.ts b/src/app/formulaire/form-iterator/deep-element-iterator.ts index 8834c284738b5bc8011d30821f68012d6e851158..336ac5e7253ecf3333e6c11880136d99569c5251 100644 --- a/src/app/formulaire/form-iterator/deep-element-iterator.ts +++ b/src/app/formulaire/form-iterator/deep-element-iterator.ts @@ -1,5 +1,5 @@ import { AbstractFormulaireNodeIterator } from "./abstract-node-iterator"; -import { FormulaireElement } from "../formulaire-element"; +import { FormulaireElement } from "../elements/formulaire-element"; /** * itérateur qui extrait récursivement les FormulaireElement dans un tableau de FormulaireElement diff --git a/src/app/formulaire/form-iterator/deep-fieldset-iterator.ts b/src/app/formulaire/form-iterator/deep-fieldset-iterator.ts index 7bc3624682ac639aa44f48fcb5d89fa8e5e202f8..b87c598e637bbc33ae965e57cf28503c01418863 100644 --- a/src/app/formulaire/form-iterator/deep-fieldset-iterator.ts +++ b/src/app/formulaire/form-iterator/deep-fieldset-iterator.ts @@ -1,6 +1,6 @@ import { AbstractFormulaireNodeIterator } from "./abstract-node-iterator"; -import { FieldSet } from "../fieldset"; -import { FormulaireNode } from "../formulaire-node"; +import { FieldSet } from "../elements/fieldset"; +import { FormulaireNode } from "../elements/formulaire-node"; /** * itérateur qui extrait récursivement les FieldSet dans un tableau de FormulaireElement diff --git a/src/app/formulaire/form-iterator/top-element-iterator.ts b/src/app/formulaire/form-iterator/top-element-iterator.ts index 32f9e63e96e217f2fd5cd571b1917b3da5e77330..ef0bdbace3b653366459fc55e4a48e337700543d 100644 --- a/src/app/formulaire/form-iterator/top-element-iterator.ts +++ b/src/app/formulaire/form-iterator/top-element-iterator.ts @@ -1,5 +1,5 @@ import { AbstractFormulaireNodeIterator } from "./abstract-node-iterator"; -import { FormulaireElement } from "../formulaire-element"; +import { FormulaireElement } from "../elements/formulaire-element"; /** * itérateur qui extrait les FormulaireElement de 1er niveau dans un tableau de FormulaireElement diff --git a/src/app/results/calculator-results.ts b/src/app/results/calculator-results.ts index 53e7a58b01ffce2a44db4fcb2fb9aab88ea364a1..344364bbbef331c2a61c20f92dd5c448cd4755f7 100644 --- a/src/app/results/calculator-results.ts +++ b/src/app/results/calculator-results.ts @@ -1,6 +1,6 @@ import { Nub, capitalize } from "jalhyd"; -import { NgParameter } from "../formulaire/ngparam"; +import { NgParameter } from "../formulaire/elements/ngparam"; import { ServiceFactory } from "../services/service-factory"; import { sprintf } from "sprintf-js"; diff --git a/src/app/results/fixed-results.ts b/src/app/results/fixed-results.ts index 1c02b1e040dced35cf7f618c722f7bbe750dfc95..3aa8a407abb568ab7bac8f5ea6b722f95db0e818 100644 --- a/src/app/results/fixed-results.ts +++ b/src/app/results/fixed-results.ts @@ -1,4 +1,4 @@ -import { NgParameter } from "../formulaire/ngparam"; +import { NgParameter } from "../formulaire/elements/ngparam"; import { CalculatedParamResults } from "./param-calc-results"; export class FixedResults extends CalculatedParamResults { diff --git a/src/app/results/multidimension-results.ts b/src/app/results/multidimension-results.ts index b0ecbca0e0ac8e011740abbd1509cf810d7fe7a8..4b2aee2ed330a5bf7a59c008debf9ce2a034f117 100644 --- a/src/app/results/multidimension-results.ts +++ b/src/app/results/multidimension-results.ts @@ -1,5 +1,5 @@ import { CalculatedParamResults } from "./param-calc-results"; -import { NgParameter } from "../formulaire/ngparam"; +import { NgParameter } from "../formulaire/elements/ngparam"; export class MultiDimensionResults extends CalculatedParamResults { diff --git a/src/app/results/param-calc-results.ts b/src/app/results/param-calc-results.ts index 3f5c8c4b0e8364c7e2486e6300f8103a4304dff4..62cd26f84b8ca682534471461b54e08fe38f259d 100644 --- a/src/app/results/param-calc-results.ts +++ b/src/app/results/param-calc-results.ts @@ -1,5 +1,5 @@ import { CalculatorResults } from "./calculator-results"; -import { NgParameter } from "../formulaire/ngparam"; +import { NgParameter } from "../formulaire/elements/ngparam"; import { Result, cLog } from "jalhyd"; /** diff --git a/src/app/results/remous-results.ts b/src/app/results/remous-results.ts index 7b31ad6e5b85f34454fa3fc6510b9beb1f20ce80..a499c835533201b36c1403f87bd7211e14925c45 100644 --- a/src/app/results/remous-results.ts +++ b/src/app/results/remous-results.ts @@ -2,7 +2,7 @@ import { cLog, CourbeRemousParams, Result, ResultElement, ParamDefinition, Param import { CalculatorResults } from "./calculator-results"; import { VarResults } from "./var-results"; -import { NgParameter } from "../formulaire/ngparam"; +import { NgParameter } from "../formulaire/elements/ngparam"; import { ServiceFactory } from "../services/service-factory"; export class RemousResults extends CalculatorResults { diff --git a/src/app/results/var-results.ts b/src/app/results/var-results.ts index 72664aea53f4648cc6c90dde0e9fec560a89ed8c..79dbca9fd63579039c5c9e2c0071f1ddf94a771e 100644 --- a/src/app/results/var-results.ts +++ b/src/app/results/var-results.ts @@ -1,6 +1,6 @@ import { CalculatorResults } from "./calculator-results"; import { CalculatedParamResults } from "./param-calc-results"; -import { NgParameter } from "../formulaire/ngparam"; +import { NgParameter } from "../formulaire/elements/ngparam"; import { ResultElement, ParamFamily, capitalize, Nub } from "jalhyd"; import { ServiceFactory } from "../services/service-factory"; import { PlottableData } from "./plottable-data"; diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts index 6db648c1bf3c9464a2e4a737c77c8e028fa29c6b..4f506cb1131a745ed8843742f830db8d9022f736 100644 --- a/src/app/services/formulaire.service.ts +++ b/src/app/services/formulaire.service.ts @@ -23,26 +23,26 @@ import { I18nService } from "./internationalisation.service"; import { NotificationsService } from "./notifications.service"; import { FormulaireDefinition } from "../formulaire/definition/form-definition"; -import { FormulaireElement } from "../formulaire/formulaire-element"; -import { InputField } from "../formulaire/input-field"; -import { SelectField } from "../formulaire/select-field"; +import { FormulaireElement } from "../formulaire/elements/formulaire-element"; +import { InputField } from "../formulaire/elements/input-field"; +import { SelectField } from "../formulaire/elements/select-field"; import { StringMap } from "../stringmap"; -import { FormulaireBase } from "../formulaire/definition/concrete/form-base"; -import { FormulaireSectionParametree } from "../formulaire/definition/concrete/form-section-parametree"; -import { FormulaireCourbeRemous } from "../formulaire/definition/concrete/form-courbe-remous"; -import { FormulaireRegimeUniforme } from "../formulaire/definition/concrete/form-regime-uniforme"; -import { FormulaireParallelStructure } from "../formulaire/definition/concrete/form-parallel-structures"; -import { NgParameter } from "../formulaire/ngparam"; -import { FieldsetContainer } from "../formulaire/fieldset-container"; -import { FormulairePab } from "../formulaire/definition/concrete/form-pab"; -import { FormulaireMacrorugoCompound } from "../formulaire/definition/concrete/form-macrorugo-compound"; -import { FormulaireLechaptCalmon } from "../formulaire/definition/concrete/form-lechapt-calmon"; -import { FormulaireGrille } from "../formulaire/definition/concrete/form-grille"; -import { FormulaireBief } from "../formulaire/definition/concrete/form-bief"; -import { FormulaireSolveur } from "../formulaire/definition/concrete/form-solveur"; +import { FormulaireSectionParametree } from "../formulaire/definition/form-section-parametree"; +import { FormulaireCourbeRemous } from "../formulaire/definition/form-courbe-remous"; +import { FormulaireRegimeUniforme } from "../formulaire/definition/form-regime-uniforme"; +import { FormulaireParallelStructure } from "../formulaire/definition/form-parallel-structures"; +import { NgParameter } from "../formulaire/elements/ngparam"; +import { FieldsetContainer } from "../formulaire/elements/fieldset-container"; +import { FormulairePab } from "../formulaire/definition/form-pab"; +import { FormulaireMacrorugoCompound } from "../formulaire/definition/form-macrorugo-compound"; +import { FormulaireLechaptCalmon } from "../formulaire/definition/form-lechapt-calmon"; +import { FormulaireGrille } from "../formulaire/definition/form-grille"; +import { FormulaireBief } from "../formulaire/definition/form-bief"; +import { FormulaireSolveur } from "../formulaire/definition/form-solveur"; import { AppComponent } from "../app.component"; -import { FormulaireSPP } from "../formulaire/definition/concrete/form-spp"; -import { FormulaireTrigo } from "../formulaire/definition/concrete/form-trigo"; +import { FormulaireSPP } from "../formulaire/definition/form-spp"; +import { FormulaireTrigo } from "../formulaire/definition/form-trigo"; +import { FormulaireFixedVar } from "../formulaire/definition/form-fixedvar"; @Injectable() export class FormulaireService extends Observable { @@ -297,7 +297,7 @@ export class FormulaireService extends Observable { return this._httpService.httpGetRequestPromise(f); } - private newFormulaire(ct: CalculatorType, jsonState?: {}): FormulaireDefinition { + private newFormulaire(ct: CalculatorType): FormulaireDefinition { let f: FormulaireDefinition; switch (ct) { @@ -313,6 +313,10 @@ export class FormulaireService extends Observable { f = new FormulaireCourbeRemous(); break; + case CalculatorType.Bief: + f = new FormulaireBief(); + break; + case CalculatorType.LechaptCalmon: f = new FormulaireLechaptCalmon(); break; @@ -335,10 +339,6 @@ export class FormulaireService extends Observable { f = new FormulaireGrille(); break; - case CalculatorType.Bief: - f = new FormulaireBief(); - break; - case CalculatorType.Solveur: f = new FormulaireSolveur(); break; @@ -352,7 +352,7 @@ export class FormulaireService extends Observable { break; default: - f = new FormulaireBase(); + f = new FormulaireFixedVar(); } f.defaultProperties["calcType"] = ct; diff --git a/src/app/util.ts b/src/app/util.ts index 73ca8da3a937697f6e0aded347fe3dbea0eab23c..a8fbfd5723fa756d191d574510cf9c183af16267 100644 --- a/src/app/util.ts +++ b/src/app/util.ts @@ -1,4 +1,4 @@ -import { NgParameter } from "./formulaire/ngparam"; +import { NgParameter } from "./formulaire/elements/ngparam"; import { ServiceFactory } from "./services/service-factory"; import { formattedValue } from "jalhyd";