import {Expand, ODataQuery, ODataService} from 'odata-v4-ng'; import {Observable} from 'rxjs'; import {map, tap} from 'rxjs/operators'; import {base} from './urls'; export class ODataBaseService { private url: string; constructor(private odataService: ODataService, private entity: string) { this.url = base + '/odata/'; } public list$(properties: string[]): Observable { const query = new ODataQuery(this.odataService, this.url) .entitySet(this.entity) .select(properties); const get = query.get().pipe(map(_ => _.toPropertyValue())); return get; } public get$( id: number, select: string[], expands: string[] ): Observable { const query = new ODataQuery(this.odataService, this.url) .entitySet(this.entity) .entityKey(id) .expand(expands.map(_ => new Expand(_))) .select(select); const get = query.get().pipe(map(_ => _.toEntity())); return get; } public patch$(id: number, control: string, value: any): Observable { const valueSet = {[control]: value}; const query = new ODataQuery(this.odataService, this.url) .entitySet(this.entity) .entityKey(id); const get = query.patch(valueSet).pipe(map(() => true)); return get; } public post$(values: any): Observable { const querry = new ODataQuery(this.odataService, this.url); const post = querry .entitySet(this.entity) .post(values) .pipe( tap(_ => console.log(_)), map(_ => { const mapped = _.toEntity(); return mapped; }), tap(_ => console.log(_)) ); return post; } }