Skip to content
Snippets Groups Projects
Commit 7d86fb31 authored by francois.grand's avatar francois.grand
Browse files

#45 implémentation du chargement de la session

parent 7b3f6531
No related branches found
No related tags found
1 merge request!20Resolve "Ouvrir / Enregistrer une session / une calculette"
......@@ -201,11 +201,6 @@ export class AppComponent implements OnInit, OnDestroy, Observer {
this._calculators[formIndex]["title"] = title;
}
private loadSession() {
this.formulaireService.loadSession();
this.closeNav();
}
/**
* sauvegarde du/des formulaires
* @param form formulaire à sélectionner par défaut dans la liste
......@@ -336,6 +331,19 @@ export class AppComponent implements OnInit, OnDestroy, Observer {
this.toList();
}
private loadSession() {
this.closeNav();
// création du dialogue de sélection des formulaires à sauver
const compRef: ComponentRef<LoadCalculatorComponent> = this.loadCalcDialogAnchor.createDialog();
const prom: Promise<any[]> = compRef.instance.run();
prom.then(list => {
this.formulaireService.loadSession(compRef.instance.selectedFile);
compRef.destroy();
});
}
private params() {
this.closeNav();
this.router.navigate(['/setup']);
......
......@@ -28,6 +28,16 @@ export class FieldsetContainer extends FormulaireElement {
return this._templates[index];
}
private getTemplateIndex(id: string): number {
let i = 0;
for (const t of this._templates) {
if (t.config["id"] == id)
return i;
i++;
}
throw new Error(`template ${id} non trouvé`);
}
public addFieldset(fs: FieldSet) {
this.fieldsets.push(fs);
}
......@@ -68,7 +78,7 @@ export class FieldsetContainer extends FormulaireElement {
* @param templateIndex indice du template dans la liste
* @param after insère le nouveau FieldSet après cette position, à la fin sinon
*/
public addFromTemplate(templateIndex: number, after?: number) {
public addFromTemplate(templateIndex: number, after?: number): FieldSet {
const templ: FieldsetTemplate = this._templates[templateIndex];
const inst: FieldSet = templ.instantiateTemplate(this, after);
......@@ -80,6 +90,8 @@ export class FieldsetContainer extends FormulaireElement {
"action": "newFieldset",
"fieldset": inst
}, this);
return inst;
}
public get fieldsets(): FieldSet[] {
......
......@@ -146,7 +146,7 @@ export class FormulaireService extends Observable {
return this._httpService.httpGetRequest(undefined, undefined, undefined, f, processData);
}
public createFormulaire(ct: CalculatorType): Promise<FormulaireDefinition> {
private newFormulaire(ct: CalculatorType, jsonState?: {}): FormulaireDefinition {
let f: FormulaireDefinition;
switch (ct) {
case CalculatorType.ConduiteDistributrice:
......@@ -185,10 +185,31 @@ export class FormulaireService extends Observable {
throw new Error(`FormulaireService.createFormulaire() : type de calculette ${ct} non pris en charge`)
}
f.calculatorName = decode(this.getLocalisedTitleFromCalculatorType(ct) + " (" + f.uid + ")");
if (jsonState !== undefined) {
const props = jsonState["props"];
f.initSessionNub(props);
}
else
f.initSessionNub();
return f;
}
/**
* crée un formulaire d'un type donné
* @param ct type de formulaire
* @param jsonState
*/
public createFormulaire(ct: CalculatorType, jsonState?: {}): Promise<FormulaireDefinition> {
const f: FormulaireDefinition = this.newFormulaire(ct, jsonState);
if (jsonState === undefined)
f.calculatorName = decode(this.getLocalisedTitleFromCalculatorType(ct) + " (" + f.uid + ")");
this._formulaires.push(f);
let prom: Promise<Response> = this.loadConfig(f, ct);
return prom.then(_ => {
if (jsonState !== undefined)
f.deserialiseJSON(jsonState);
return f;
}).then(f => {
this.loadUpdateFormulaireLocalisation(f);
......@@ -328,7 +349,38 @@ export class FormulaireService extends Observable {
return false;
}
public loadSession() {
private readSingleFile(file: File): Promise<any> {
return new Promise<any>((resolve, reject) => {
var fr = new FileReader();
fr.onload = () => {
resolve(fr.result);
};
fr.onerror = () => {
fr.abort();
reject(new Error(`Erreur de lecture du fichier ${file.name}`));
};
fr.readAsText(file);
});
}
public loadSession(f: File) {
this.readSingleFile(f).then(s => {
const session = JSON.parse(s);
for (const k in session)
switch (k) {
case "session":
this.deserialiseSession(session[k]);
break;
default:
throw new Error(`session file : invalid key '${k}'`);
}
}).catch(err => {
throw err;
});
}
public saveForm(f: FormulaireDefinition) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment