@orsetra/shared-ui 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/base-service.ts +3 -3
- package/lib/http-client.ts +5 -4
- package/lib/interceptors.ts +35 -0
- package/package.json +1 -1
package/lib/base-service.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import HttpClient, { type AuthHeadersProvider, type Interceptors } from './http-client';
|
|
2
|
-
|
|
2
|
+
import { interceptors as defaultInterceptors } from './interceptors';
|
|
3
3
|
/**
|
|
4
4
|
* Classe de base pour tous les services qui utilisent HttpClient
|
|
5
5
|
*/
|
|
6
6
|
export abstract class BaseService {
|
|
7
7
|
protected httpClient: HttpClient;
|
|
8
8
|
|
|
9
|
-
constructor(baseUrl: string, authHeadersProvider?: AuthHeadersProvider, interceptors
|
|
9
|
+
constructor(baseUrl: string, authHeadersProvider?: AuthHeadersProvider, interceptors: Interceptors = defaultInterceptors) {
|
|
10
10
|
this.httpClient = HttpClient.getInstance(baseUrl, authHeadersProvider, interceptors);
|
|
11
11
|
}
|
|
12
12
|
|
|
@@ -16,4 +16,4 @@ export abstract class BaseService {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
export type { AuthHeadersProvider, Interceptors };
|
|
19
|
+
export type { AuthHeadersProvider, Interceptors , defaultInterceptors};
|
package/lib/http-client.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios';
|
|
4
4
|
|
|
5
|
+
|
|
5
6
|
export type AuthHeadersProvider = () => Promise<Record<string, string>> | Record<string, string>;
|
|
6
7
|
|
|
7
8
|
export type RequestInterceptor = (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig | Promise<InternalAxiosRequestConfig>;
|
|
@@ -37,7 +38,7 @@ class HttpClient {
|
|
|
37
38
|
private authHeadersProvider?: AuthHeadersProvider;
|
|
38
39
|
private axiosInstance: AxiosInstance;
|
|
39
40
|
|
|
40
|
-
private constructor(baseUrl: string, authHeadersProvider?: AuthHeadersProvider, interceptors?: Interceptors) {
|
|
41
|
+
private constructor(baseUrl: string , authHeadersProvider?: AuthHeadersProvider , interceptors?: Interceptors) {
|
|
41
42
|
this.baseUrl = baseUrl || '';
|
|
42
43
|
this.authHeadersProvider = authHeadersProvider;
|
|
43
44
|
|
|
@@ -74,7 +75,7 @@ class HttpClient {
|
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
|
|
77
|
-
public static getInstance(baseUrl: string, authHeadersProvider?: AuthHeadersProvider, interceptors?: Interceptors): HttpClient {
|
|
78
|
+
public static getInstance(baseUrl: string, authHeadersProvider?: AuthHeadersProvider , interceptors?: Interceptors): HttpClient {
|
|
78
79
|
return new HttpClient(baseUrl, authHeadersProvider, interceptors);
|
|
79
80
|
}
|
|
80
81
|
|
|
@@ -254,8 +255,8 @@ class HttpClient {
|
|
|
254
255
|
}
|
|
255
256
|
}
|
|
256
257
|
|
|
257
|
-
export function useHttpClient(baseUrl: string, authHeadersProvider?: AuthHeadersProvider, interceptors?: Interceptors) {
|
|
258
|
-
return HttpClient.getInstance(baseUrl, authHeadersProvider,
|
|
258
|
+
export function useHttpClient(baseUrl: string, authHeadersProvider?: AuthHeadersProvider , interceptors?: Interceptors) {
|
|
259
|
+
return HttpClient.getInstance(baseUrl, authHeadersProvider,interceptors);
|
|
259
260
|
}
|
|
260
261
|
|
|
261
262
|
export default HttpClient;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Interceptors } from "./http-client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export const interceptors: Interceptors = {
|
|
5
|
+
onResponse: (response: any) => {
|
|
6
|
+
return response;
|
|
7
|
+
},
|
|
8
|
+
onResponseError: (error: any) => {
|
|
9
|
+
if (error.response?.status) {
|
|
10
|
+
const status = error.response.status;
|
|
11
|
+
|
|
12
|
+
if (typeof window !== 'undefined') {
|
|
13
|
+
switch (status) {
|
|
14
|
+
case 401:
|
|
15
|
+
window.location.href = '/login';
|
|
16
|
+
break;
|
|
17
|
+
|
|
18
|
+
case 403:
|
|
19
|
+
window.location.href = '/access-denied';
|
|
20
|
+
break;
|
|
21
|
+
|
|
22
|
+
case 404:
|
|
23
|
+
window.location.href = '/not-found';
|
|
24
|
+
break;
|
|
25
|
+
|
|
26
|
+
case 500:
|
|
27
|
+
default:
|
|
28
|
+
window.location.href = '/error';
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return Promise.reject(error);
|
|
34
|
+
}
|
|
35
|
+
};
|