dialog-save-session.component.ts 4.54 KiB
import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material";
import { Inject, Component } from "@angular/core";
import { I18nService } from "../../services/internationalisation/internationalisation.service";
@Component({
    selector: "dialog-save-session",
    templateUrl: "dialog-save-session.component.html",
    styleUrls: ["dialog-save-session.component.scss"]
})
export class DialogSaveSessionComponent {
    public calculators: any[];
    public fileName = "session";
    public dependenciesProblems: any[] = [];
    constructor(
      public dialogRef: MatDialogRef<DialogSaveSessionComponent>,
      private intlService: I18nService,
      @Inject(MAT_DIALOG_DATA) public data: any
    ) {
      this.calculators = data.calculators;
      // run dependency checking at first
      this.checkLinkedParamsAndModelsDependencies();
    public selectAll() {
      for (const c of this.calculators) {
          c.selected = true;
      // re-run dependency checking
      this.checkLinkedParamsAndModelsDependencies();
    public selectNone() {
      for (const c of this.calculators) {
        c.selected = false;
      // re-run dependency checking
      this.checkLinkedParamsAndModelsDependencies();
    /**
     * Checks the dependencies between Nubs :
     *  - linked params depend on their targets
     *  - PabCloisons depend on their models
    public checkLinkedParamsAndModelsDependencies() {
      console.log("CLPMD !", this.calculators);
      this.dependenciesProblems = [];
      // for all checked Nubs
      this.calculators.forEach((c) => {
        if (c.selected) {
          // do all required nubs are checked ?
          c.requires.forEach((r) => {
            if (! this.isCalculatorOrParentSelected(r)) {
              const realUid = this.getUidOrParentUid(r);
              const depTitle = this.getTitleFromUid(realUid);
              this.dependenciesProblems.push({
                requiring: c.title,
                required: depTitle,
                requiredUid: realUid,
                message: c.title + " " + this.intlService.localizeText("INFO_REQUIRES") + " " + depTitle
              });
          });
      });
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
public fixDependencies() { for (const dp of this.dependenciesProblems) { this.selectRequiredModule(dp.requiredUid); } } private isCalculatorOrParentSelected(uid: string): boolean { let isSelected = false; this.calculators.forEach((c) => { if (c.uid === uid || c.children.includes(uid)) { isSelected = c.selected; } }); return isSelected; } private getUidOrParentUid(uid: string): string { let realUid: string; this.calculators.forEach((c) => { if (c.uid === uid || c.children.includes(uid)) { realUid = c.uid; } }); return realUid; } private getTitleFromUid(uid: string): string { let title: string; this.calculators.forEach((c) => { if (c.uid === uid) { title = c.title; } }); return title; } private selectRequiredModule(uid: string) { this.calculators.forEach((c) => { if (c.uid === uid) { c.selected = true; } }); // re-run dependency checking this.checkLinkedParamsAndModelsDependencies(); } public saveSession() { this.dialogRef.close({ calculators: this.calculators, filename: this.fileName }); } public get atLeastOneCheckboxSelected() { let ok = false; for (const c of this.calculators) { ok = (ok || c.selected); } return ok; } public get uitextSave() { return this.intlService.localizeText("INFO_OPTION_SAVE"); } public get uitextCancel() { return this.intlService.localizeText("INFO_OPTION_CANCEL"); }
141142143144145146147148149150151152153154155156157158159160161162163164165166
public get uitextAll() { return this.intlService.localizeText("INFO_OPTION_ALL"); } public get uitextNone() { return this.intlService.localizeText("INFO_OPTION_NONE"); } public get uitextSaveSessionTitle() { return this.intlService.localizeText("INFO_DIALOG_SAVE_SESSION_TITLE"); } public get uitextFilenameInput() { return this.intlService.localizeText("INFO_DIALOG_SAVE_SESSION_FILENAME"); } public get uitextFixMissingDependencies() { return this.intlService.localizeText("INFO_DIALOG_FIX_MISSING_DEPENDENCIES"); } public onEnterPressed(event) { this.saveSession(); return false; // stops event propagation } }