1
- import type { ValidatorType } from './Validator'
2
1
import type { AxiosError , AxiosInstance , Method , AxiosRequestConfig , AxiosResponse } from 'axios'
3
2
import type { IParseOptions } from 'qs'
4
3
import { isObject , isArray } from 'lodash'
@@ -13,23 +12,18 @@ interface AxiosResponseData {
13
12
[ key : string | number ] : any
14
13
}
15
14
16
- class BaseService {
17
- errors : ValidatorType
18
- parameters : Record < string , any >
19
- endpoint : string
15
+ export default class BaseService {
16
+ public errors = Validator
20
17
static $http : AxiosInstance
21
18
static $errorProperty = 'errors'
19
+ static $resetParameter ? = false
22
20
static $parsedQs : IParseOptions = {
23
21
comma : true ,
24
22
allowDots : true ,
25
23
ignoreQueryPrefix : true ,
26
24
}
27
25
28
- constructor ( endpoint : string , parameters : Record < string , any > ) {
29
- this . endpoint = endpoint
30
- this . parameters = parameters
31
- this . errors = Validator
32
- }
26
+ constructor ( readonly endpoint : string , public parameters : Record < string , any > = { } ) { }
33
27
34
28
get $http ( ) {
35
29
return BaseService . $http
@@ -39,6 +33,10 @@ class BaseService {
39
33
return BaseService . $errorProperty
40
34
}
41
35
36
+ get $resetParameter ( ) {
37
+ return BaseService . $resetParameter
38
+ }
39
+
42
40
get $parsedQs ( ) {
43
41
return BaseService . $parsedQs
44
42
}
@@ -85,15 +83,7 @@ class BaseService {
85
83
return this . delete < T > ( id )
86
84
}
87
85
88
- submit < T = any > ( method : Method , url ?: string | number , form ?: any , config ?: AxiosRequestConfig ) {
89
- return new Promise < T > ( ( resolve , reject ) => {
90
- this . $submit < T > ( method , url , form , config )
91
- . then ( ( { data } ) => resolve ( data ) )
92
- . catch ( ( err ) => reject ( err ) )
93
- } )
94
- }
95
-
96
- $submit < T = any > ( method : Method , param ?: string | number , form ?: any , config ?: AxiosRequestConfig ) {
86
+ $submit < T = any , F = any > ( method : Method , param ?: string | number , form ?: F , config ?: AxiosRequestConfig ) {
97
87
this . beforeSubmit ( )
98
88
return new Promise < AxiosResponse < T > > ( ( resolve , reject ) => {
99
89
const data = hasFiles ( form ) ? objectToFormData ( form ) : form
@@ -117,6 +107,15 @@ class BaseService {
117
107
}
118
108
reject ( error )
119
109
} )
110
+ if ( this . $resetParameter ) this . removeParameters ( )
111
+ } )
112
+ }
113
+
114
+ submit < T = any , F = any > ( method : Method , url ?: string | number , form ?: F , config ?: AxiosRequestConfig ) {
115
+ return new Promise < T > ( ( resolve , reject ) => {
116
+ this . $submit < T > ( method , url , form , config )
117
+ . then ( ( { data } ) => resolve ( data ) )
118
+ . catch ( ( err ) => reject ( err ) )
120
119
} )
121
120
}
122
121
@@ -125,14 +124,14 @@ class BaseService {
125
124
return `${ url } ${ query } `
126
125
}
127
126
128
- setParameters ( parameters : Record < string , any > ) : this {
127
+ setParameters ( parameters : Record < string , any > ) {
129
128
Object . keys ( parameters ) . forEach ( ( key ) => {
130
129
this . parameters [ key ] = parameters [ key ]
131
130
} )
132
131
return this
133
132
}
134
133
135
- setParameter ( parameter : string , value ?: any ) : this {
134
+ setParameter ( parameter : string , value ?: any ) {
136
135
if ( ! value ) {
137
136
const options : IParseOptions = Object . assign ( { } , this . $parsedQs , {
138
137
comma : true ,
@@ -146,16 +145,16 @@ class BaseService {
146
145
return this
147
146
}
148
147
149
- removeParameters ( parameters = [ ] as any [ ] ) : this {
148
+ removeParameters ( parameters : string [ ] = [ ] ) {
150
149
if ( ! parameters || ! parameters . length ) {
151
- this . parameters = [ ]
150
+ this . parameters = { }
152
151
} else if ( isArray ( parameters ) ) {
153
152
for ( const parameter of parameters ) delete this . parameters [ parameter ]
154
153
}
155
154
return this
156
155
}
157
156
158
- removeParameter ( parameter : string ) : this {
157
+ removeParameter ( parameter : string ) {
159
158
delete this . parameters [ parameter ]
160
159
return this
161
160
}
@@ -182,5 +181,3 @@ class BaseService {
182
181
validator . successful = true
183
182
}
184
183
}
185
-
186
- export default BaseService
0 commit comments