Skip to content

Commit 26434d1

Browse files
Update guard and interceptors to prevent conflicts (#1716)
<!-- Ensure the title clearly reflects what was changed. Provide a clear and concise description of the changes made. The PR should only contain the changes related to the issue, and no other unrelated changes. --> Fixes OPS-3144
1 parent 1b1bfcb commit 26434d1

3 files changed

Lines changed: 30 additions & 12 deletions

File tree

packages/react-ui/src/app/common/guards/intial-data-guard.tsx

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import { LoadingSpinner } from '@openops/components/ui';
2-
import { Suspense, useEffect } from 'react';
2+
import { Suspense, useEffect, useState } from 'react';
33

44
import { flagsHooks } from '@/app/common/hooks/flags-hooks';
5-
import { setupResponseInterceptor } from '@/app/interceptors';
5+
import {
6+
setupRequestInterceptor,
7+
setupResponseInterceptor,
8+
} from '@/app/interceptors';
69

710
type InitialDataGuardProps = {
811
children: React.ReactNode;
@@ -11,16 +14,31 @@ export const InitialDataGuard = ({
1114
children,
1215
}: Readonly<InitialDataGuardProps>) => {
1316
const { data: flags } = flagsHooks.useFlags();
17+
const [interceptorsReady, setInterceptorsReady] = useState(false);
1418

1519
useEffect(() => {
1620
if (!flags) {
1721
console.error('Missing flags for response interceptor configuration');
22+
return;
1823
}
24+
const isFederatedAuth = Boolean(flags?.FEDERATED_LOGIN_ENABLED);
25+
setupRequestInterceptor({
26+
isFederatedAuth,
27+
});
1928
setupResponseInterceptor({
20-
isFederatedAuth: Boolean(flags?.FEDERATED_LOGIN_ENABLED),
29+
isFederatedAuth,
2130
});
31+
setInterceptorsReady(true);
2232
}, [flags]);
2333

34+
if (!interceptorsReady) {
35+
return (
36+
<div className="bg-background flex h-screen w-screen items-center justify-center ">
37+
<LoadingSpinner size={50}></LoadingSpinner>
38+
</div>
39+
);
40+
}
41+
2442
return (
2543
<Suspense
2644
fallback={

packages/react-ui/src/app/interceptors/index.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,22 @@ import {
99
let requestInterceptorId: number | null = null;
1010
let responseInterceptorId: number | null = null;
1111

12-
function setupRequestInterceptor(): void {
12+
type InterceptorOptions = {
13+
isFederatedAuth: boolean;
14+
};
15+
16+
export function setupRequestInterceptor({
17+
isFederatedAuth,
18+
}: InterceptorOptions): void {
1319
if (requestInterceptorId === null) {
1420
const requestInterceptor = createRequestInterceptor();
1521
requestInterceptorId = axios.interceptors.request.use(requestInterceptor);
1622
}
1723
}
1824

19-
setupRequestInterceptor();
20-
21-
type ResponseInterceptorOptions = {
22-
isFederatedAuth: boolean;
23-
};
24-
2525
export function setupResponseInterceptor({
2626
isFederatedAuth,
27-
}: ResponseInterceptorOptions): void {
27+
}: InterceptorOptions): void {
2828
if (responseInterceptorId === null) {
2929
const responseInterceptor = isFederatedAuth
3030
? createFederatedResponseInterceptor()

packages/react-ui/src/app/interceptors/response-interceptor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export function createResponseInterceptor(): {
4343

4444
export function createFederatedResponseInterceptor(): {
4545
onFulfilled: (response: AxiosResponse) => AxiosResponse;
46-
onRejected: (error: AxiosError) => Promise<never>;
46+
onRejected: (error: AxiosError) => Promise<AxiosResponse | never>;
4747
} {
4848
throw new Error('Not implemented in OSS');
4949
}

0 commit comments

Comments
 (0)