1- import React , { useEffect , useState } from "react" ;
1+ import React , { useEffect , useState , useMemo } from "react" ;
22import { Route , Switch , Redirect , useParams } from "react-router-dom" ;
33import { KeycloakService , StorageService } from "@formsflow/service" ;
44import {
55 KEYCLOAK_URL_AUTH ,
66 KEYCLOAK_URL_REALM ,
77 KEYCLOAK_CLIENT ,
8- } from "./endpoints/config" ;
8+ } from "./endpoints/config" ;
99import { BASE_ROUTE , MULTITENANCY_ENABLED } from "./constants" ;
1010import i18n from "./config/i18n" ;
1111import "./index.scss" ;
@@ -16,14 +16,18 @@ const authorizedRoles = new Set(["create_submissions", "view_submissions"]);
1616
1717interface SubmissionsProps {
1818 publish ?: ( event : string , data ?: any ) => void ;
19- subscribe ?: ( event : string , callback : ( msg : string , data : any ) => void ) => void ;
19+ subscribe ?: (
20+ event : string ,
21+ callback : ( msg : string , data : any ) => void
22+ ) => void ;
2023 getKcInstance : ( ) => any ;
2124}
2225
2326const Submissions : React . FC < SubmissionsProps > = React . memo ( ( props ) => {
2427 const { publish = ( ) => { } , subscribe = ( ) => { } } = props ;
2528 const { tenantId } = useParams < { tenantId ?: string } > ( ) ;
26- const [ isAuth , setIsAuth ] = useState ( false ) ;
29+ const instance = useMemo ( ( ) => props . getKcInstance ( ) , [ ] ) ;
30+ const [ isAuth , setIsAuth ] = useState ( instance ?. isAuthenticated ( ) ) ;
2731 const [ isClient , setIsClient ] = useState ( false ) ;
2832
2933 const baseUrl = MULTITENANCY_ENABLED ? `/tenant/${ tenantId } /` : "/" ;
@@ -40,23 +44,26 @@ const Submissions: React.FC<SubmissionsProps> = React.memo((props) => {
4044 } , [ tenantId ] ) ;
4145
4246 useEffect ( ( ) => {
43- const kcInstance = KeycloakService . getInstance (
44- KEYCLOAK_URL_AUTH ,
45- KEYCLOAK_URL_REALM ,
46- KEYCLOAK_CLIENT ,
47- tenantId
48- ) ;
49-
50- kcInstance . initKeycloak ( ( ) => {
51- setIsAuth ( kcInstance . isAuthenticated ( ) ) ;
52- publish ( "FF_AUTH" , kcInstance ) ;
53- } ) ;
47+ if ( ! isAuth ) {
48+ const kcInstance = KeycloakService . getInstance (
49+ KEYCLOAK_URL_AUTH ,
50+ KEYCLOAK_URL_REALM ,
51+ KEYCLOAK_CLIENT ,
52+ tenantId
53+ ) ;
54+ kcInstance . initKeycloak ( ( ) => {
55+ setIsAuth ( kcInstance . isAuthenticated ( ) ) ;
56+ publish ( "FF_AUTH" , kcInstance ) ;
57+ } ) ;
58+ }
5459 } , [ ] ) ;
5560
5661 useEffect ( ( ) => {
5762 if ( ! isAuth ) return ;
5863
59- const roles = JSON . parse ( StorageService . get ( StorageService . User . USER_ROLE ) ?? "[]" ) ;
64+ const roles = JSON . parse (
65+ StorageService . get ( StorageService . User . USER_ROLE ) ?? "[]"
66+ ) ;
6067 if ( roles . some ( ( role : any ) => authorizedRoles . has ( role ) ) ) {
6168 setIsClient ( true ) ;
6269 }
0 commit comments