mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	fix: reset loader when fetch receives 401 and fix no auth type (#549)
This commit is contained in:
		
							parent
							
								
									f8710e61cc
								
							
						
					
					
						commit
						1f133beb46
					
				| @ -28,13 +28,24 @@ interface IAppProps extends RouteComponentProps { | |||||||
| const App = ({ location, user, fetchUiBootstrap }: IAppProps) => { | const App = ({ location, user, fetchUiBootstrap }: IAppProps) => { | ||||||
|     const { toast, setToastData } = useToast(); |     const { toast, setToastData } = useToast(); | ||||||
|     // because we need the userId when the component load.
 |     // because we need the userId when the component load.
 | ||||||
|     const { splash, user: userFromUseUser } = useUser(); |     const { splash, user: userFromUseUser, authDetails } = useUser(); | ||||||
|     const [showSplash, setShowSplash] = useState(false); |     const [showSplash, setShowSplash] = useState(false); | ||||||
|  |     const [showLoader, setShowLoader] = useState(false); | ||||||
|     useEffect(() => { |     useEffect(() => { | ||||||
|         fetchUiBootstrap(); |         fetchUiBootstrap(); | ||||||
|         /* eslint-disable-next-line */ |         /* eslint-disable-next-line */ | ||||||
|     }, [user.authDetails?.type]); |     }, [user.authDetails?.type]); | ||||||
| 
 | 
 | ||||||
|  |     useEffect(() => { | ||||||
|  |         // Temporary duality until redux store is removed
 | ||||||
|  |         if (!isUnauthorized() && !userFromUseUser?.id && !authDetails) { | ||||||
|  |             setShowLoader(true); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         setShowLoader(false); | ||||||
|  |         /* eslint-disable-next-line */ | ||||||
|  |     }, [user.authDetails, userFromUseUser.id]); | ||||||
|  | 
 | ||||||
|     useEffect(() => { |     useEffect(() => { | ||||||
|         if (splash?.environment === undefined) return; |         if (splash?.environment === undefined) return; | ||||||
|         if (!splash?.environment && !isUnauthorized()) { |         if (!splash?.environment && !isUnauthorized()) { | ||||||
| @ -92,9 +103,10 @@ const App = ({ location, user, fetchUiBootstrap }: IAppProps) => { | |||||||
|         <SWRProvider |         <SWRProvider | ||||||
|             setToastData={setToastData} |             setToastData={setToastData} | ||||||
|             isUnauthorized={isUnauthorized} |             isUnauthorized={isUnauthorized} | ||||||
|  |             setShowLoader={setShowLoader} | ||||||
|         > |         > | ||||||
|             <ConditionallyRender |             <ConditionallyRender | ||||||
|                 condition={!isUnauthorized() && !userFromUseUser?.id} |                 condition={showLoader} | ||||||
|                 show={<Loader />} |                 show={<Loader />} | ||||||
|                 elseShow={ |                 elseShow={ | ||||||
|                     <div className={styles.container}> |                     <div className={styles.container}> | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ import { IToast } from '../../../hooks/useToast'; | |||||||
| 
 | 
 | ||||||
| interface ISWRProviderProps { | interface ISWRProviderProps { | ||||||
|     setToastData: (toastData: IToast) => void; |     setToastData: (toastData: IToast) => void; | ||||||
|  |     setShowLoader: React.Dispatch<React.SetStateAction<boolean>>; | ||||||
|     isUnauthorized: () => boolean; |     isUnauthorized: () => boolean; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -12,15 +13,16 @@ const SWRProvider: React.FC<ISWRProviderProps> = ({ | |||||||
|     children, |     children, | ||||||
|     setToastData, |     setToastData, | ||||||
|     isUnauthorized, |     isUnauthorized, | ||||||
|  |     setShowLoader, | ||||||
| }) => { | }) => { | ||||||
|     const { cache } = useSWRConfig(); |     const { cache } = useSWRConfig(); | ||||||
|     const history = useHistory(); |     const history = useHistory(); | ||||||
| 
 | 
 | ||||||
|     const handleFetchError = error => { |     const handleFetchError = error => { | ||||||
|  |         setShowLoader(false); | ||||||
|         if (error.status === 401) { |         if (error.status === 401) { | ||||||
|             cache.clear(); |             cache.clear(); | ||||||
|             const path = location.pathname; |             const path = location.pathname; | ||||||
| 
 |  | ||||||
|             mutate(USER_CACHE_KEY, { ...error.info }, false); |             mutate(USER_CACHE_KEY, { ...error.info }, false); | ||||||
|             if (path === '/login') { |             if (path === '/login') { | ||||||
|                 return; |                 return; | ||||||
|  | |||||||
| @ -25,7 +25,6 @@ const Login = () => { | |||||||
|     }, [permissions.length]); |     }, [permissions.length]); | ||||||
| 
 | 
 | ||||||
|     const resetPassword = query.get('reset') === 'true'; |     const resetPassword = query.get('reset') === 'true'; | ||||||
| 
 |  | ||||||
|     return ( |     return ( | ||||||
|         <StandaloneLayout> |         <StandaloneLayout> | ||||||
|             <div className={styles.loginFormContainer}> |             <div className={styles.loginFormContainer}> | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ import { IPermission } from '../../../../interfaces/user'; | |||||||
| import handleErrorResponses from '../httpErrorResponseHandler'; | import handleErrorResponses from '../httpErrorResponseHandler'; | ||||||
| 
 | 
 | ||||||
| export const USER_CACHE_KEY = `api/admin/user`; | export const USER_CACHE_KEY = `api/admin/user`; | ||||||
|  | const NO_AUTH_USERNAME = 'unknown'; | ||||||
| 
 | 
 | ||||||
| const useUser = ( | const useUser = ( | ||||||
|     options: SWRConfiguration = { |     options: SWRConfiguration = { | ||||||
| @ -33,12 +34,20 @@ const useUser = ( | |||||||
|         setLoading(!error && !data); |         setLoading(!error && !data); | ||||||
|     }, [data, error]); |     }, [data, error]); | ||||||
| 
 | 
 | ||||||
|  |     let user = data?.user; | ||||||
|  |     // Set a user id if no authentication is on
 | ||||||
|  |     // to cancel the loader.
 | ||||||
|  | 
 | ||||||
|  |     if (data && user?.username === NO_AUTH_USERNAME) { | ||||||
|  |         user = { ...user, id: 1 }; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     return { |     return { | ||||||
|         user: data?.user || {}, |         user: user || {}, | ||||||
|         permissions: (data?.permissions || []) as IPermission[], |         permissions: (data?.permissions || []) as IPermission[], | ||||||
|         feedback: data?.feedback || [], |         feedback: data?.feedback || [], | ||||||
|         splash: data?.splash || {}, |         splash: data?.splash || {}, | ||||||
|         authDetails: data || {}, |         authDetails: data || undefined, | ||||||
|         error, |         error, | ||||||
|         loading, |         loading, | ||||||
|         refetch, |         refetch, | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user