webapp/src/components/AuthGuard/AuthGuard.tsx

42 lines
1.1 KiB
TypeScript
Raw Normal View History

2024-02-04 11:25:21 +00:00
import { JSX, Show, createEffect } from 'solid-js'
import { useSession } from '../../context/session'
import { RootSearchParams } from '../../pages/types'
import { useRouter } from '../../stores/router'
import { hideModal } from '../../stores/ui'
import { AuthModalSearchParams } from '../Nav/AuthModal/types'
type Props = {
children: JSX.Element
disabled?: boolean
}
export const AuthGuard = (props: Props) => {
2024-01-23 16:32:57 +00:00
const { isAuthenticated, isSessionLoaded } = useSession()
const { changeSearchParams } = useRouter<RootSearchParams & AuthModalSearchParams>()
2024-01-10 12:39:02 +00:00
createEffect(async () => {
if (props.disabled) {
return
}
if (isSessionLoaded()) {
if (isAuthenticated()) {
hideModal()
} else {
changeSearchParams(
{
source: 'authguard',
2024-01-27 06:23:01 +00:00
m: 'auth',
},
true,
)
}
2024-01-10 12:39:02 +00:00
} else {
2024-01-22 17:05:13 +00:00
// await loadSession()
console.warn('session is not loaded')
}
})
return <Show when={(isSessionLoaded() && isAuthenticated()) || props.disabled}>{props.children}</Show>
}