diff --git a/src/app/_services/plan.service.ts b/src/app/_services/plan.service.ts index e4c00c9..f5cfeb1 100644 --- a/src/app/_services/plan.service.ts +++ b/src/app/_services/plan.service.ts @@ -13,9 +13,11 @@ export class PlanService { private _currentPlanSubject: Subject = new ReplaySubject(1); private _basePlanSubject: Subject = new ReplaySubject(1); + private _storedPlansSubject: Subject = new ReplaySubject(1); constructor(private dialog: MatDialog) { this.loadBasePlan(); + this.loadStoredPlans(); } public getBasePlan(): Observable { @@ -30,15 +32,19 @@ export class PlanService { this._currentPlanSubject.next(plan); } - public enumerateStoredPlans(): Observable { - return from(invoke('enumerate_stored_plans')); + public getStoredPlans(): Observable { + return this._storedPlansSubject.asObservable(); } public loadPlanFromPath(path: string, save_local: boolean = true): Observable { - return from(invoke('load_plan_at_path', { path, saveLocal: save_local })).pipe(map(plan => { return new Plan(plan) })); + return from(invoke('load_plan_at_path', { path, saveLocal: save_local })).pipe(map(plan => { + return new Plan(plan) + })).pipe(tap(() => { + this.loadStoredPlans(); + })); } - public loadFromUrl(url?: string, name?: string): Observable { + public loadFromUrl(url?: string, name?: string, save_local: boolean = false): Observable { if (!url || !name) { const dialogRef = this.dialog.open(UrlDialog, { data: { @@ -49,14 +55,14 @@ export class PlanService { return dialogRef.afterClosed().pipe(switchMap(data => { if (data.url) { - return this._loadFromUrl(data.url, data.name); + return this._loadFromUrl(data.url, data.name, save_local); } return new Observable((s) => s.complete()); })); } else { - return this._loadFromUrl(url, name); + return this._loadFromUrl(url, name, save_local); } } @@ -69,10 +75,10 @@ export class PlanService { } public savePlanAtStore(name: string, plan: Plan) { - return from(invoke('save_plan_at_store', { name, plan: plan.toInterface() })); + return from(invoke('save_plan_at_store', { name, plan: plan.toInterface() })).pipe(tap(() => this.loadStoredPlans())); } - private _loadFromUrl(url: string, name: string): Observable { + private _loadFromUrl(url: string, name: string, save_local: boolean): Observable { //Tauri fetch return from(fetch( url, @@ -84,6 +90,10 @@ export class PlanService { })).pipe(tap(plan => { plan.update_url = url; plan.name = name; + + if (save_local) { + this.savePlanAtStore(name, plan).subscribe(); + } })); } @@ -93,4 +103,10 @@ export class PlanService { this._basePlanSubject?.next(new Plan(plan)); }); } + + private loadStoredPlans() { + from(invoke('enumerate_stored_plans')).subscribe(plans => { + this._storedPlansSubject.next(plans); + }) + } } diff --git a/src/app/plan-display/plan-display.component.ts b/src/app/plan-display/plan-display.component.ts index 467bc08..ce13d88 100644 --- a/src/app/plan-display/plan-display.component.ts +++ b/src/app/plan-display/plan-display.component.ts @@ -52,13 +52,14 @@ export class PlanDisplayComponent implements AfterViewInit, OnInit { }) }); - - this.planService.enumerateStoredPlans().subscribe(plans => { + this.planService.getStoredPlans().subscribe(plans => { this.previousPlans = plans; }) this.planService.getCurrentPlan().subscribe(plan => { this.currentPlan = plan; + //Close settings anytime we get a new current plan. + this.settingsOpen = false; setTimeout(() => this.setIndex(plan.current), 0); }) @@ -256,7 +257,6 @@ export class PlanDisplayComponent implements AfterViewInit, OnInit { this.planService.loadPlanFromPath(file as string).subscribe(plan => { if (plan) { this.planService.setCurrentPlan(plan); - this.settingsOpen = false; } }); } @@ -302,10 +302,8 @@ export class PlanDisplayComponent implements AfterViewInit, OnInit { loadFromUrl() { this.planService.loadFromUrl().subscribe(plan => { - console.log("plan", plan); if (plan) { this.planService.savePlanAtStore(plan.name!, plan).subscribe((path) => { - console.log("path", path); if(path) { plan.setPath(path); }