import {Host, Injectable} from '@angular/core'; import {Observable} from 'rxjs'; import PageRecord from '../structures/PageRecord'; import {ApiService} from './api.service'; import HostRecord from '../structures/HostRecord'; @Injectable({ providedIn: 'root' }) export class PageService { constructor( protected api: ApiService, ) { } load(id: string): Observable { return new Observable(sub => { this.api.get(`/page/${id}`).subscribe(response => { if ( response.status === 200 ) { sub.next(new PageRecord(response.data)); sub.complete(); } else { throw new Error(response.message); } }); }); } save(page: PageRecord): Observable { return new Observable(sub => { this.api.post(`/page/${page.UUID}/save`, page.toSave()).subscribe(res => { sub.next(new PageRecord(res.data)); sub.complete(); }); }); } get_nodes(page: PageRecord): Observable> { return new Observable>(sub => { this.api.get(`/page/${page.UUID}/nodes`).subscribe(res => { const returns = []; res.data.forEach(rec => { const host = new HostRecord(rec.Value.Value); host.load(rec); returns.push(host); }); sub.next(returns); sub.complete(); }); }); } save_nodes(page: PageRecord, nodes: Array): Observable> { return new Observable>(sub => { nodes = nodes.map(x => { x.PageId = page.UUID; return x.toSave(); }); this.api.post(`/page/${page.UUID}/nodes/save`, nodes).subscribe(res => { const returns = []; res.data.forEach(rec => { const host = new HostRecord(rec.Value.Value); host.load(rec); returns.push(host); }); sub.next(returns); sub.complete(); }); }); } }