@@ -36,20 +36,24 @@ export class ServiceFactory<TDetailsDTO, TDetails> {
3636 }
3737
3838 addGetMany < TInfosDTO , TInfos , TFilter > ( url : string | ( ( ) => string ) , entity : new ( dto : TInfosDTO ) => TInfos )
39- : { getMany : ( filter ?: TFilter ) => Promise < TInfos [ ] > } {
39+ : { getMany : ( filter ?: TFilter , controller ?: AbortController ) => Promise < TInfos [ ] > } {
4040
41- const getMany = async ( filter ?: TFilter ) => {
41+ const getMany = async ( filter ?: TFilter , controller ?: AbortController ) => {
4242 const realUrl = typeof url === "string" ? url : url ( ) ;
4343
4444 let response ;
4545
4646 // If the service is configured to use GET as POST to prevent issues with large query strings,
4747 // we send the filter as a POST request with a "_method" parameter to indicate it's a GET request.
4848 if ( ServiceFactory . getAsPost && filter ) {
49- response = await ServiceFactory . http . post ( buildURL ( realUrl , { "_method" : "GET" } ) , filter ) ;
49+ response = await ServiceFactory . http . post ( buildURL ( realUrl , { "_method" : "GET" } ) , filter , {
50+ signal : controller ?. signal
51+ } ) ;
5052 }
5153 else {
52- response = await ServiceFactory . http . get ( buildURL ( realUrl , filter ) ) ;
54+ response = await ServiceFactory . http . get ( buildURL ( realUrl , filter ) , {
55+ signal : controller ?. signal
56+ } ) ;
5357 }
5458
5559 const dtos : TInfosDTO [ ] = response . data ;
@@ -76,7 +80,7 @@ export class ServiceFactory<TDetailsDTO, TDetails> {
7680 return { get } ;
7781 }
7882
79- static addCustom < T extends string , TArgs extends any [ ] , TResultDTO , TResult > ( name : T , call : ( axios : AxiosInstance , ...args : TArgs ) => Promise < AxiosResponse > , mapper : ( dto : TResultDTO ) => TResult ) : Record < T , ( ... args : TArgs ) => Promise < TResult > > {
83+ static addCustom < T extends string , TArgs extends any [ ] , TResultDTO , TResult > ( name : T , call : ( axios : AxiosInstance , ...args : TArgs ) => Promise < AxiosResponse > , mapper : ( dto : TResultDTO ) => TResult ) {
8084
8185 const fetch = async ( ...args : TArgs ) => {
8286 const response = await call ( ServiceFactory . http , ...args ) ;
@@ -90,6 +94,21 @@ export class ServiceFactory<TDetailsDTO, TDetails> {
9094 return { [ name ] : fetch } as Record < T , ( ...args : TArgs ) => Promise < TResult > > ;
9195 }
9296
97+
98+ static addCustomCancellable < T extends string , TArgs extends any [ ] , TResultDTO , TResult > ( name : T , call : ( axios : AxiosInstance , ...args : [ ...TArgs , AbortController ] ) => Promise < AxiosResponse > , mapper : ( dto : TResultDTO ) => TResult ) {
99+
100+ const fetch = async ( ...args : [ ...TArgs , AbortController ] ) => {
101+ const response = await call ( ServiceFactory . http , ...args ) ;
102+ const dto : TResultDTO = response . data ;
103+
104+ const result = mapper ( dto ) ;
105+
106+ return result ;
107+ }
108+
109+ return { [ name ] : fetch } as Record < T , ( ...args : [ ...TArgs , AbortController ] ) => Promise < TResult > > ;
110+ }
111+
93112 addCreate < TCreateDTO > ( url : string | ( ( ) => string ) )
94113 : { create : ( dto : TCreateDTO ) => Promise < TDetails > } {
95114
0 commit comments