39 lines
1.2 KiB
JavaScript
39 lines
1.2 KiB
JavaScript
|
|
/**
|
||
|
|
* Account-Lifecycle-Helfer (CAPABILITY_CATALOG §3, Phase A Onboarding).
|
||
|
|
*/
|
||
|
|
|
||
|
|
export function resolveAccountState(user) {
|
||
|
|
if (!user) return 'anonymous'
|
||
|
|
if (user.account_state) return user.account_state
|
||
|
|
const clubs = user.clubs || []
|
||
|
|
const hasActive = clubs.some(
|
||
|
|
(c) => String(c.membership_status || 'active').toLowerCase() === 'active'
|
||
|
|
)
|
||
|
|
if (hasActive) return 'active_member'
|
||
|
|
const verified =
|
||
|
|
user.email_verified === true ||
|
||
|
|
user.email_verified === 't' ||
|
||
|
|
user.email_verified === 1 ||
|
||
|
|
user.email_verified === 'true'
|
||
|
|
if (!verified) return 'unverified'
|
||
|
|
return 'verified_pending_club'
|
||
|
|
}
|
||
|
|
|
||
|
|
export function isPlatformAccountState(state) {
|
||
|
|
return state === 'platform_admin'
|
||
|
|
}
|
||
|
|
|
||
|
|
/** Eingeschränkter Modus: noch kein aktiver Vereinszugang bzw. E-Mail offen. */
|
||
|
|
export function isOnboardingRestricted(user) {
|
||
|
|
const state = resolveAccountState(user)
|
||
|
|
if (isPlatformAccountState(state)) return false
|
||
|
|
return state === 'verified_pending_club' || state === 'unverified'
|
||
|
|
}
|
||
|
|
|
||
|
|
const ONBOARDING_PATHS = ['/onboarding', '/settings', '/settings/legal', '/settings/system']
|
||
|
|
|
||
|
|
export function isOnboardingAllowedPath(pathname) {
|
||
|
|
const p = pathname || ''
|
||
|
|
return ONBOARDING_PATHS.some((base) => p === base || p.startsWith(`${base}/`))
|
||
|
|
}
|