before read in generic ds.

This commit is contained in:
David Lebee 2021-03-18 17:55:50 -04:00
parent 5fae118850
commit 99bcbf45ed
2 changed files with 13 additions and 7 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "@poweredsoft/ngx-data", "name": "@poweredsoft/ngx-data",
"version": "0.0.18", "version": "0.0.19",
"peerDependencies": { "peerDependencies": {
"@angular/common": "^8.2.4", "@angular/common": "^8.2.4",
"@angular/core": "^8.2.4", "@angular/core": "^8.2.4",

View File

@ -3,8 +3,8 @@ import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { IDataSourceTransportOptions, IDataSourceCommandAdapterOptions, IDataSourceOptions, IResolveCommandModelEvent, IDataSourceError, IDataSourceErrorMessage, IDataSourceValidationError } from '@poweredsoft/data'; import { IDataSourceTransportOptions, IDataSourceCommandAdapterOptions, IDataSourceOptions, IResolveCommandModelEvent, IDataSourceError, IDataSourceErrorMessage, IDataSourceValidationError } from '@poweredsoft/data';
import { IQueryExecutionResult, IQueryExecutionGroupResult, IQueryCriteria } from '@poweredsoft/data'; import { IQueryExecutionResult, IQueryExecutionGroupResult, IQueryCriteria } from '@poweredsoft/data';
import { IDataSourceQueryAdapterOptions } from '@poweredsoft/data'; import { IDataSourceQueryAdapterOptions } from '@poweredsoft/data';
import { catchError} from 'rxjs/operators'; import { catchError, switchMap} from 'rxjs/operators';
import { throwError, Observable } from 'rxjs'; import { throwError, Observable, of } from 'rxjs';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@ -56,9 +56,9 @@ export class GenericRestDataSourceService
}); });
} }
createDataSourceOptions<TModel, TKey>(route: string, keyResolver: (model: TModel) => TKey, defaultCriteria: IQueryCriteria, manageNotificationMessage: boolean = true) : IDataSourceOptions<TModel> createDataSourceOptions<TModel, TKey>(route: string, keyResolver: (model: TModel) => TKey, defaultCriteria: IQueryCriteria, beforeRead?: (query: IQueryCriteria) => Observable<IQueryCriteria>) : IDataSourceOptions<TModel>
{ {
const dataSourceTransportOptions = this.createStandardRestTransportOptions<TModel, TKey>(route, keyResolver); const dataSourceTransportOptions = this.createStandardRestTransportOptions<TModel, TKey>(route, keyResolver, beforeRead);
const dataSourceOptions: IDataSourceOptions<TModel> = { const dataSourceOptions: IDataSourceOptions<TModel> = {
defaultCriteria: defaultCriteria, defaultCriteria: defaultCriteria,
@ -73,13 +73,19 @@ export class GenericRestDataSourceService
options.transport.commands[name].resolveCommandModel = resolveCommandModel; options.transport.commands[name].resolveCommandModel = resolveCommandModel;
} }
createStandardRestTransportOptions<TModel, TKey>(route: string, keyResolver: (model: TModel) => TKey) : IDataSourceTransportOptions<TModel> { createStandardRestTransportOptions<TModel, TKey>(route: string, keyResolver: (model: TModel) => TKey, beforeRead?: (query: IQueryCriteria) => Observable<IQueryCriteria>) : IDataSourceTransportOptions<TModel> {
const query: IDataSourceQueryAdapterOptions<TModel> = { const query: IDataSourceQueryAdapterOptions<TModel> = {
adapter: { adapter: {
handle: (criteria: IQueryCriteria) => { handle: (criteria: IQueryCriteria) => {
const queryRoute = `${route}/read`; const queryRoute = `${route}/read`;
return this.http.post<IQueryExecutionResult<TModel> & IQueryExecutionGroupResult<TModel>>(queryRoute, criteria); const finalBeforeRead = beforeRead || (t => of(criteria));
return finalBeforeRead(criteria)
.pipe(
switchMap(finalQuery => {
return this.http.post<IQueryExecutionResult<TModel> & IQueryExecutionGroupResult<TModel>>(queryRoute, finalQuery);
})
);
} }
} }
}; };