This commit is contained in:
David Lebee 2019-09-13 10:24:19 -05:00
parent 9ec3000b85
commit a911f739d8
4 changed files with 21 additions and 6 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@poweredsoft/data",
"version": "0.0.20",
"version": "0.0.22",
"peerDependencies": {
"rxjs": "^6.5.3"
}

View File

@ -6,7 +6,6 @@ import { IDataSourceOptions, IResolveCommandModelEvent } from '../public-api';
export class DataSource<TModel> implements IDataSource<TModel>
{
data: IQueryExecutionResult<TModel> & IQueryExecutionGroupResult<TModel> = null;
protected _dataSubject: BehaviorSubject<IQueryExecutionResult<TModel> & IQueryExecutionGroupResult<TModel>> = new BehaviorSubject(null);
@ -59,16 +58,29 @@ export class DataSource<TModel> implements IDataSource<TModel>
this._data$ = this._dataSubject.asObservable();
}
resolveIdField<TKeyType extends any>(model: TModel): TKeyType {
if (this.options.idField)
return model[this.options.idField];
if (this.options.resolveIdField)
return this.options.resolveIdField(model);
throw new Error("Must specify an id field or supply a method to resolve the id field.");
}
resolveCommandModelByName<T extends any>(event: IResolveCommandModelEvent<TModel>) : Observable<T> {
if (!this.options.transport.commands.hasOwnProperty(name))
return Observable.throw(`command with name ${name} not found`);
if (!this.options.transport.commands.hasOwnProperty(event.command))
return Observable.throw(`command with name ${event.command} not found`);
const commandOptions = this.options.transport.commands[name];
const commandOptions = this.options.transport.commands[event.command];
if (commandOptions.resolveCommandModel)
return commandOptions.resolveCommandModel(event);
return of<T>(event.model as any as T);
const noResolveMethod: any = event.model || {};
return of<T>(noResolveMethod as T);
}
executeCommandByName<TCommand, TResult>(name: string, command: TCommand) : Observable<TResult> {

View File

@ -8,6 +8,7 @@ export interface IDataSource<TModel>
executeCommandByName<TCommand, TResult>(name: string, command: TCommand) : Observable<TResult>;
query<TQuery extends IQueryCriteria>(query: TQuery);
refresh();
resolveIdField<TKeyType extends any>(model: TModel) : TKeyType;
data$: Observable<IQueryExecutionResult<TModel> & IQueryExecutionGroupResult<TModel>>;
loading$: Observable<boolean>;

View File

@ -5,6 +5,8 @@ import { IQueryCriteria } from "./models";
export interface IDataSourceOptions<TModel> {
transport: IDataSourceTransportOptions<TModel>;
idField?: string;
resolveIdField?: (model: TModel) => any;
defaultCriteria: IQueryCriteria;
}