import React, { FC, PropsWithChildren } from 'react'
import { LmComponentRender } from '@LmComponentRender'
import { useAppContext } from '@context/AppContext'
import { AuthContainerStoryblok } from '../../typings/generated/components-schema'
import { hasAuth0Credentials } from '../../utils/auth0/auth0Helpers'
import { useUserData } from './useAuth'
const LmAuthContainer: FC<
PropsWithChildren<{ content: AuthContainerStoryblok }>
> = ({ content, children }) => {
const { insideStoryblok } = useAppContext() || {}
const user = useUserData()
let hideOnRole = true
let requireRole = true
let showContent = true
if (content.display) {
if (content.display === 'hide_logged_in' && !!user) {
showContent = false
} else if (content.display === 'require_logged_in' && !user) {
showContent = false
}
}
const rolesRequired = (content.require_role || '')
.split(',')
.map((string) => string.trim())
.filter((i) => i)
const rolesOnHide = (content.hide_on_role || '')
.split(',')
.map((string) => string.trim())
.filter((i) => i)
if (rolesOnHide.length) {
hideOnRole = user ? !hasAuth0Credentials(rolesOnHide, user) : false
}
if (rolesRequired.length) {
requireRole = user ? !!hasAuth0Credentials(rolesRequired, user) : false
}
if (!insideStoryblok && !(hideOnRole && showContent && requireRole)) {
return // some condition is not matched
}
if (content.body?.length) {
return (
<>
{content.body.map((blok) => {
if (blok.component === 'headline') {
blok.text = blok.text?.replace('{email}', user?.email ?? '')
blok.text = blok.text?.replace('{firstName}', user?.firstName ?? '')
blok.text = blok.text?.replace('{lastName}', user?.lastName ?? '')
} else if (blok.component === 'button') {
blok.label = blok.label?.replace('{email}', user?.email ?? '')
blok.label = blok.label?.replace(
'{firstName}',
user?.firstName ?? ''
)
blok.label = blok.label?.replace('{lastName}', user?.lastName ?? '')
}
return
})}
>
)
}
return <>{children}>
}
LmAuthContainer.displayName = 'AuthContainer'
export default LmAuthContainer