'use client'; import { ReactNode, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import useSWRImmutable from 'swr/immutable'; import { useAuth } from '@/services/hooks/useAuth'; import { httpClientFetcher, SWRHttpKey } from '@/services/http/client'; import { isResponseSuccess } from '@/lib/api-helper'; import { GetMeResponse } from '@/types/api/api-general'; // TODO: delete this later, DONT HARDCODE USER DATA const DUMMY_USER = { id: 1, email: 'admin@mbugroup.id', npk: '0001', name: 'Super Admin', image: null, created_at: '2025-09-30T03:24:20.899229Z', updated_at: '2025-09-30T03:24:20.899229Z', roles: [ { id: 1, key: 'mbu.super_admin', name: 'MBU Administrator', client: { id: 1, name: 'PT Mitra Berlian Unggas', alias: 'MBU', }, permissions: [ { id: 1, name: 'mbu:purchase:read', action: 'read', client: { id: 1, name: 'PT Mitra Berlian Unggas', alias: 'MBU', }, }, { id: 2, name: 'mbu:purchase:create', action: 'create', client: { id: 1, name: 'PT Mitra Berlian Unggas', alias: 'MBU', }, }, { id: 3, name: 'mbu:purchase:approve', action: 'approve', client: { id: 1, name: 'PT Mitra Berlian Unggas', alias: 'MBU', }, }, ], }, { id: 2, key: 'lti.super_admin', name: 'LTI Administrator', client: { id: 2, name: 'PT Lumbung Telur Indonesia', alias: 'LTI', }, permissions: [ { id: 4, name: 'lti:purchase:read', action: 'read', client: { id: 2, name: 'PT Lumbung Telur Indonesia', alias: 'LTI', }, }, { id: 5, name: 'lti:purchase:create', action: 'create', client: { id: 2, name: 'PT Lumbung Telur Indonesia', alias: 'LTI', }, }, { id: 6, name: 'lti:purchase:approve', action: 'approve', client: { id: 2, name: 'PT Lumbung Telur Indonesia', alias: 'LTI', }, }, ], }, { id: 3, key: 'manbu.super_admin', name: 'MANBU Administrator', client: { id: 3, name: 'PT Mandiri Berlian Unggas', alias: 'MANBU', }, permissions: [ { id: 7, name: 'manbu:purchase:read', action: 'read', client: { id: 3, name: 'PT Mandiri Berlian Unggas', alias: 'MANBU', }, }, { id: 8, name: 'manbu:purchase:create', action: 'create', client: { id: 3, name: 'PT Mandiri Berlian Unggas', alias: 'MANBU', }, }, { id: 9, name: 'manbu:purchase:approve', action: 'approve', client: { id: 3, name: 'PT Mandiri Berlian Unggas', alias: 'MANBU', }, }, ], }, ], }; interface RequireAuthProps { children?: ReactNode; } const RequireAuth = ({ children }: RequireAuthProps) => { const router = useRouter(); const { setUser, setIsLoadingUser } = useAuth(); const { data: userResponse, isLoading: isLoadingUserResponse } = useSWRImmutable( '/auth/sso/userinfo', httpClientFetcher, { shouldRetryOnError: false, revalidateOnFocus: false, revalidateOnReconnect: false, refreshInterval: 0, } ); useEffect(() => { setIsLoadingUser(isLoadingUserResponse); }, [isLoadingUserResponse, setIsLoadingUser]); useEffect(() => { if (isResponseSuccess(userResponse)) { setUser(userResponse.data); } else { // router.replace(process.env.NEXT_PUBLIC_SSO_LOGIN_URL as string); // TODO: remove this later, DONT HARDCODE USER DATA setUser(DUMMY_USER); } }, [userResponse, setIsLoadingUser, setUser]); // TODO: uncomment this later // if (isLoadingUserResponse && !userResponse) { // return ( //
// //
// ); // } return <>{children}; }; export default RequireAuth;