11import type { DependencyList } from 'react' ;
2+ import type { FlatResponseData } from '@sa/axios' ;
3+ import type { AxiosError } from 'axios' ;
24import type Fetch from './Fetch' ;
35import type { CachedData } from './utils/cache' ;
46
@@ -7,19 +9,20 @@ export type Subscribe = () => void;
79
810// for Fetch
911
10- export interface FetchState < TData , TParams extends any [ ] > {
12+ export interface FetchState < TData extends FlatResponseData , TParams extends any [ ] > {
1113 loading : boolean ;
1214 params ?: TParams ;
13- data ?: TData ;
14- error ?: Error ;
15+ response : TData [ 'response' ] ;
16+ data : null | TData [ 'data' ] ;
17+ error : AxiosError | null ;
1518}
1619
1720export interface PluginReturn < TData , TParams extends any [ ] > {
1821 onBefore ?: ( params : TParams ) =>
1922 | ( {
2023 stopNow ?: boolean ;
2124 returnNow ?: boolean ;
22- } & Partial < FetchState < TData , TParams > > )
25+ } & Partial < FetchState < FlatResponseData , TParams > > )
2326 | null ;
2427
2528 onRequest ?: (
@@ -30,25 +33,21 @@ export interface PluginReturn<TData, TParams extends any[]> {
3033 } ;
3134
3235 onSuccess ?: ( data : TData , params : TParams ) => void ;
33- onError ?: ( e : Error , params : TParams ) => void ;
34- onFinally ?: ( params : TParams , data ?: TData , e ?: Error ) => void ;
36+ onError ?: ( e : AxiosError , params : TParams ) => void ;
37+ onFinally ?: ( params : TParams , data ?: TData , e ?: AxiosError ) => void ;
3538 onCancel ?: ( ) => void ;
3639 onMutate ?: ( data : TData ) => void ;
3740}
3841
3942// for useRequestImplement
4043
41- export interface Options < TData , TParams extends any [ ] > {
44+ export interface Options < TData extends FlatResponseData , TParams extends any [ ] > {
4245 manual ?: boolean ;
43-
4446 onBefore ?: ( params : TParams ) => void ;
45- onSuccess ?: ( data : TData , params : TParams ) => void ;
47+ onSuccess ?: ( data : TData [ 'data' ] , params : TParams ) => void ;
4648 onError ?: ( e : Error , params : TParams ) => void ;
47- // formatResult?: (res: any) => TData;
48- onFinally ?: ( params : TParams , data ?: TData , e ?: Error ) => void ;
49-
49+ onFinally ?: ( params : TParams , data : TData [ 'data' ] | null , e : Error | null ) => void ;
5050 defaultParams ?: TParams ;
51-
5251 // refreshDeps
5352 refreshDeps ?: DependencyList ;
5453 refreshDepsAction ?: ( ) => void ;
@@ -93,23 +92,12 @@ export interface Options<TData, TParams extends any[]> {
9392 // [key: string]: any;
9493}
9594
96- export type Plugin < TData , TParams extends any [ ] > = {
95+ export type Plugin < TData extends FlatResponseData , TParams extends any [ ] > = {
9796 ( fetchInstance : Fetch < TData , TParams > , options : Options < TData , TParams > ) : PluginReturn < TData , TParams > ;
9897 onInit ?: ( options : Options < TData , TParams > ) => Partial < FetchState < TData , TParams > > ;
9998} ;
10099
101- // for index
102- // export type OptionsWithoutFormat<TData, TParams extends any[]> = Omit<Options<TData, TParams>, 'formatResult'>;
103-
104- // export interface OptionsWithFormat<TData, TParams extends any[], TFormated, TTFormated extends TFormated = any> extends Omit<Options<TTFormated, TParams>, 'formatResult'> {
105- // formatResult: (res: TData) => TFormated;
106- // };
107-
108- export interface Result < TData , TParams extends any [ ] > {
109- loading : boolean ;
110- data ?: TData ;
111- error ?: Error ;
112- params : TParams | [ ] ;
100+ export interface Result < TData extends FlatResponseData , TParams extends any [ ] > extends FetchState < TData , TParams > {
113101 cancel : Fetch < TData , TParams > [ 'cancel' ] ;
114102 refresh : Fetch < TData , TParams > [ 'refresh' ] ;
115103 refreshAsync : Fetch < TData , TParams > [ 'refreshAsync' ] ;
0 commit comments