Skip to content
Snippets Groups Projects
calculator-list.component.ts 2.39 KiB
import { Component, OnInit } from "@angular/core";
import { Router } from "@angular/router";

import { CalculatorType, EnumEx } from "jalhyd";

import { FormulaireDefinition } from "../../formulaire/definition/form-definition";
import { ServiceFactory } from "../../services/service-factory";
import { InternationalisationService } from "../../services/internationalisation/internationalisation.service";
import { FormulaireParallelStructure } from "../../formulaire/definition/concrete/form-parallel-structures";
import { FieldsetContainer } from "../../formulaire/fieldset-container";

class ListElement {
    private _label: string;

    constructor(private _type: CalculatorType) {
        this._label = ServiceFactory.instance.formulaireService.getLocalisedTitleFromCalculatorType(_type);
    }

    public get label() { return this._label }
    public get type() { return this._type }
}

@Component({
    selector: "list",
    templateUrl: "./calculator-list.component.html",
    styleUrls: ["./calculator-list.component.css"]
})
export class CalculatorListComponent implements OnInit {
    private _items: ListElement[];

    constructor(private router: Router) {
        ServiceFactory.instance.internationalisationService.addObserver(this);
    }

    private updateLocale() {
        this._items = [];
        for (const t of EnumEx.getValues(CalculatorType)) {
            if (t !== CalculatorType.Structure) {
                this._items.push(new ListElement(t));
            }
        }
    }

    private create(t: CalculatorType) {
        const p: Promise<FormulaireDefinition> = ServiceFactory.instance.formulaireService.createFormulaire(t);
        p.then(f => {
            this.router.navigate(["/calculator", f.uid]);
            return f;
        }).then(f => {
            // on ajoute un ouvrage après l'ouverture de la calculette "ouvrages parallèles"
            if (f instanceof FormulaireParallelStructure) {
                for (const e of f.allFormElements) {
                    if (e instanceof FieldsetContainer) {
                        e.addFromTemplate(0);
                        break;
                    }
                }
            }
        });
    }

    // interface Observer

    update(sender: any, data: any): void {
        if (sender instanceof InternationalisationService) {
            this.updateLocale();
        }
    }

    // OnInit

    ngOnInit() {
        this.updateLocale();
    }
}