2 Commits

Author SHA1 Message Date
mathias 5ed370c4e2 minor adjustment 2025-09-23 15:28:29 -04:00
mathias d0be1dd789 resolve command can return a Partial of TCommand instead of allowing any 2025-09-23 15:19:56 -04:00
4 changed files with 6 additions and 5 deletions
@@ -16,7 +16,7 @@ import {Observable, of, throwError} from "rxjs";
import {catchError, switchMap} from "rxjs/operators";
export abstract class BaseHttpDataSourceOptionsBuilder<TQuery extends IQueryCriteria, TModel extends {}> {
protected _commands: { [key: string]: IDataSourceCommandAdapterOptions<any>; } = {};
protected _commands: { [key: string]: IDataSourceCommandAdapterOptions<unknown>; } = {};
protected _keyResolver?: (model: TModel) => TModel[keyof TModel];
protected _defaultCriteria!: IQueryCriteria;
protected _query!: IDataSourceQueryAdapterOptions<TQuery, TModel>;
@@ -93,7 +93,7 @@ export abstract class BaseHttpDataSourceOptionsBuilder<TQuery extends IQueryCrit
return this._messageErrorHandler(err);
}
public addCommandByCallback<TCommand, TCommandResult>(name: string, commandHandler: (command: TCommand) => Observable<TCommandResult>, resolveCommandModel?: (event: IResolveCommandModelEvent<TModel>) => Observable<TCommand & any>) {
public addCommandByCallback<TCommand, TCommandResult>(name: string, commandHandler: (command: TCommand) => Observable<TCommandResult>, resolveCommandModel?: (event: IResolveCommandModelEvent<TModel>) => Observable<Partial<TCommand>>) {
const handleWrapper = (command: TCommand) => {
return commandHandler(command).pipe(catchError(this._handleErrorPipe.bind(this)));
};
@@ -108,7 +108,7 @@ export abstract class BaseHttpDataSourceOptionsBuilder<TQuery extends IQueryCrit
return this;
}
public addCommandByUrl<TCommand, TCommandResult>(name: string, url: string, resolveCommandModel?: (event: IResolveCommandModelEvent<TModel>) => Observable<TCommand & any>, beforeCommand?: (command: TCommand) => Observable<TCommand>) {
public addCommandByUrl<TCommand, TCommandResult>(name: string, url: string, resolveCommandModel?: (event: IResolveCommandModelEvent<TModel>) => Observable<Partial<TCommand>>, beforeCommand?: (command: TCommand) => Observable<TCommand>) {
const handleWrapper = (command: TCommand) => {
const finalBeforeCommand = beforeCommand || (_ => of(command));
return finalBeforeCommand(command)
@@ -43,7 +43,7 @@ export class HttpDataSourceOptionsBuilder<TQuery extends IQueryCriteria, TModel
return finalBeforeRead(query)
.pipe(
switchMap(finalQuery => {
return queryHandler(finalQuery as any);
return queryHandler(finalQuery);
})
);
}
@@ -45,6 +45,7 @@ export class SingleDataSourceOptionsBuilder<TQuery extends IQueryCriteria, TMode
}
protected convertToParams(finalQuery: TQuery) {
// todo: could use an alternative method to avoid casting to any
return Object.keys(finalQuery).reduce((prev, key) => {
prev[key] = (finalQuery as any)[key]; // Cast finalQuery to any to bypass the error
return prev;
@@ -75,7 +75,7 @@ export class GenericRestDataSourceService
};
}
setResolveCommand<TQuery extends IQueryCriteria, TModel>(options: IDataSourceOptions<TQuery, TModel>, name: string, resolveCommandModel: (event: IResolveCommandModelEvent<TModel>) => Observable<any>) {
setResolveCommand<TQuery extends IQueryCriteria, TModel>(options: IDataSourceOptions<TQuery, TModel>, name: string, resolveCommandModel: (event: IResolveCommandModelEvent<TModel>) => Observable<unknown>) {
options.transport.commands[name].resolveCommandModel = resolveCommandModel;
}