diff --git a/projects/poweredsoft/ngx-data/package.json b/projects/poweredsoft/ngx-data/package.json index dd38021..7282783 100644 --- a/projects/poweredsoft/ngx-data/package.json +++ b/projects/poweredsoft/ngx-data/package.json @@ -1,6 +1,6 @@ { "name": "@poweredsoft/ngx-data", - "version": "0.0.18", + "version": "0.0.19", "peerDependencies": { "@angular/common": "^8.2.4", "@angular/core": "^8.2.4", diff --git a/projects/poweredsoft/ngx-data/src/lib/ngx-data.service.ts b/projects/poweredsoft/ngx-data/src/lib/ngx-data.service.ts index 30cd784..b3447b3 100644 --- a/projects/poweredsoft/ngx-data/src/lib/ngx-data.service.ts +++ b/projects/poweredsoft/ngx-data/src/lib/ngx-data.service.ts @@ -3,8 +3,8 @@ import { HttpClient, HttpErrorResponse } from '@angular/common/http'; import { IDataSourceTransportOptions, IDataSourceCommandAdapterOptions, IDataSourceOptions, IResolveCommandModelEvent, IDataSourceError, IDataSourceErrorMessage, IDataSourceValidationError } from '@poweredsoft/data'; import { IQueryExecutionResult, IQueryExecutionGroupResult, IQueryCriteria } from '@poweredsoft/data'; import { IDataSourceQueryAdapterOptions } from '@poweredsoft/data'; -import { catchError} from 'rxjs/operators'; -import { throwError, Observable } from 'rxjs'; +import { catchError, switchMap} from 'rxjs/operators'; +import { throwError, Observable, of } from 'rxjs'; @Injectable({ providedIn: 'root' @@ -56,9 +56,9 @@ export class GenericRestDataSourceService }); } - createDataSourceOptions(route: string, keyResolver: (model: TModel) => TKey, defaultCriteria: IQueryCriteria, manageNotificationMessage: boolean = true) : IDataSourceOptions + createDataSourceOptions(route: string, keyResolver: (model: TModel) => TKey, defaultCriteria: IQueryCriteria, beforeRead?: (query: IQueryCriteria) => Observable) : IDataSourceOptions { - const dataSourceTransportOptions = this.createStandardRestTransportOptions(route, keyResolver); + const dataSourceTransportOptions = this.createStandardRestTransportOptions(route, keyResolver, beforeRead); const dataSourceOptions: IDataSourceOptions = { defaultCriteria: defaultCriteria, @@ -73,13 +73,19 @@ export class GenericRestDataSourceService options.transport.commands[name].resolveCommandModel = resolveCommandModel; } - createStandardRestTransportOptions(route: string, keyResolver: (model: TModel) => TKey) : IDataSourceTransportOptions { + createStandardRestTransportOptions(route: string, keyResolver: (model: TModel) => TKey, beforeRead?: (query: IQueryCriteria) => Observable) : IDataSourceTransportOptions { const query: IDataSourceQueryAdapterOptions = { adapter: { handle: (criteria: IQueryCriteria) => { const queryRoute = `${route}/read`; - return this.http.post & IQueryExecutionGroupResult>(queryRoute, criteria); + const finalBeforeRead = beforeRead || (t => of(criteria)); + return finalBeforeRead(criteria) + .pipe( + switchMap(finalQuery => { + return this.http.post & IQueryExecutionGroupResult>(queryRoute, finalQuery); + }) + ); } } };