Extract flag computation into shared util
This commit is contained in:
@@ -14,13 +14,13 @@ import {
|
|||||||
} from '#/ageAssurance/state'
|
} from '#/ageAssurance/state'
|
||||||
import {
|
import {
|
||||||
AgeAssuranceAccess,
|
AgeAssuranceAccess,
|
||||||
|
type AgeAssuranceFlags,
|
||||||
type AgeAssuranceState,
|
type AgeAssuranceState,
|
||||||
AgeAssuranceStatus,
|
AgeAssuranceStatus,
|
||||||
} from '#/ageAssurance/types'
|
} from '#/ageAssurance/types'
|
||||||
import {
|
import {
|
||||||
isUnderAge,
|
computeAgeAssuranceFlags,
|
||||||
maybeRestrictChatSettings,
|
maybeRestrictChatSettings,
|
||||||
MIN_ACCESS_AGE,
|
|
||||||
useAgeAssuranceRegionConfigWithFallback,
|
useAgeAssuranceRegionConfigWithFallback,
|
||||||
} from '#/ageAssurance/util'
|
} from '#/ageAssurance/util'
|
||||||
|
|
||||||
@@ -38,13 +38,7 @@ const AgeAssuranceStateContext = createContext<{
|
|||||||
Access: typeof AgeAssuranceAccess
|
Access: typeof AgeAssuranceAccess
|
||||||
Status: typeof AgeAssuranceStatus
|
Status: typeof AgeAssuranceStatus
|
||||||
state: AgeAssuranceState
|
state: AgeAssuranceState
|
||||||
flags: {
|
flags: AgeAssuranceFlags
|
||||||
adultContentDisabled: boolean
|
|
||||||
chatDisabled: boolean
|
|
||||||
isDeclaredUnderAdultAge: boolean
|
|
||||||
isOverRegionMinAccessAge: boolean
|
|
||||||
isOverAppMinAccessAge: boolean
|
|
||||||
}
|
|
||||||
}>({
|
}>({
|
||||||
Access: AgeAssuranceAccess,
|
Access: AgeAssuranceAccess,
|
||||||
Status: AgeAssuranceStatus,
|
Status: AgeAssuranceStatus,
|
||||||
@@ -107,29 +101,15 @@ function InnerProvider({children}: {children: React.ReactNode}) {
|
|||||||
return (
|
return (
|
||||||
<AgeAssuranceStateContext.Provider
|
<AgeAssuranceStateContext.Provider
|
||||||
value={useMemo(() => {
|
value={useMemo(() => {
|
||||||
const chatDisabled = state.access !== AgeAssuranceAccess.Full
|
|
||||||
const isDeclaredUnderAdultAge = data?.birthdate
|
|
||||||
? isUnderAge(data.birthdate, 18)
|
|
||||||
: true
|
|
||||||
const isOverRegionMinAccessAge = data?.birthdate
|
|
||||||
? !isUnderAge(data.birthdate, config.minAccessAge)
|
|
||||||
: false
|
|
||||||
const isOverAppMinAccessAge = data?.birthdate
|
|
||||||
? !isUnderAge(data.birthdate, MIN_ACCESS_AGE)
|
|
||||||
: false
|
|
||||||
const adultContentDisabled =
|
|
||||||
state.access !== AgeAssuranceAccess.Full || isDeclaredUnderAdultAge
|
|
||||||
return {
|
return {
|
||||||
Access: AgeAssuranceAccess,
|
Access: AgeAssuranceAccess,
|
||||||
Status: AgeAssuranceStatus,
|
Status: AgeAssuranceStatus,
|
||||||
state,
|
state,
|
||||||
flags: {
|
flags: computeAgeAssuranceFlags({
|
||||||
adultContentDisabled,
|
state,
|
||||||
chatDisabled,
|
config,
|
||||||
isDeclaredUnderAdultAge,
|
data,
|
||||||
isOverRegionMinAccessAge,
|
}),
|
||||||
isOverAppMinAccessAge,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}, [state, data, config])}>
|
}, [state, data, config])}>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -21,6 +21,14 @@ export type AgeAssuranceState = {
|
|||||||
error?: 'config' // maybe other specific cases in the future
|
error?: 'config' // maybe other specific cases in the future
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type AgeAssuranceFlags = {
|
||||||
|
adultContentDisabled: boolean
|
||||||
|
chatDisabled: boolean
|
||||||
|
isDeclaredUnderAdultAge: boolean
|
||||||
|
isOverRegionMinAccessAge: boolean
|
||||||
|
isOverAppMinAccessAge: boolean
|
||||||
|
}
|
||||||
|
|
||||||
export function parseStatusFromString(raw: string) {
|
export function parseStatusFromString(raw: string) {
|
||||||
switch (raw) {
|
switch (raw) {
|
||||||
case 'unknown':
|
case 'unknown':
|
||||||
|
|||||||
@@ -11,11 +11,16 @@ import {getAge} from '#/lib/strings/time'
|
|||||||
import {restrictChatSettings} from '#/state/queries/messages/restrictChatSettings'
|
import {restrictChatSettings} from '#/state/queries/messages/restrictChatSettings'
|
||||||
import {DEFAULT_LOGGED_OUT_LABEL_PREFERENCES} from '#/state/queries/preferences/moderation'
|
import {DEFAULT_LOGGED_OUT_LABEL_PREFERENCES} from '#/state/queries/preferences/moderation'
|
||||||
import {
|
import {
|
||||||
|
type AgeAssuranceData,
|
||||||
getDidFromAgentSession,
|
getDidFromAgentSession,
|
||||||
getOtherRequiredDataFromCache,
|
getOtherRequiredDataFromCache,
|
||||||
useAgeAssuranceDataContext,
|
useAgeAssuranceDataContext,
|
||||||
} from '#/ageAssurance/data'
|
} from '#/ageAssurance/data'
|
||||||
import {AgeAssuranceAccess} from '#/ageAssurance/types'
|
import {
|
||||||
|
AgeAssuranceAccess,
|
||||||
|
type AgeAssuranceFlags,
|
||||||
|
type AgeAssuranceState,
|
||||||
|
} from '#/ageAssurance/types'
|
||||||
import {type Geolocation, useGeolocation} from '#/geolocation'
|
import {type Geolocation, useGeolocation} from '#/geolocation'
|
||||||
|
|
||||||
export const MIN_ACCESS_AGE = 13
|
export const MIN_ACCESS_AGE = 13
|
||||||
@@ -128,3 +133,34 @@ export function maybeRestrictChatSettings({agent}: {agent: AtpAgent}) {
|
|||||||
if (data?.actorDeclaration?.allowIncoming === 'none') return
|
if (data?.actorDeclaration?.allowIncoming === 'none') return
|
||||||
restrictChatSettings({agent, did})
|
restrictChatSettings({agent, did})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function computeAgeAssuranceFlags({
|
||||||
|
state,
|
||||||
|
config,
|
||||||
|
data,
|
||||||
|
}: {
|
||||||
|
state: AgeAssuranceState
|
||||||
|
config: AppBskyAgeassuranceDefs.ConfigRegion
|
||||||
|
data: AgeAssuranceData['data']
|
||||||
|
}): AgeAssuranceFlags {
|
||||||
|
const chatDisabled = state.access !== AgeAssuranceAccess.Full
|
||||||
|
const isDeclaredUnderAdultAge = data?.birthdate
|
||||||
|
? isUnderAge(data.birthdate, 18)
|
||||||
|
: true
|
||||||
|
const isOverRegionMinAccessAge = data?.birthdate
|
||||||
|
? !isUnderAge(data.birthdate, config.minAccessAge)
|
||||||
|
: false
|
||||||
|
const isOverAppMinAccessAge = data?.birthdate
|
||||||
|
? !isUnderAge(data.birthdate, MIN_ACCESS_AGE)
|
||||||
|
: false
|
||||||
|
const adultContentDisabled =
|
||||||
|
state.access !== AgeAssuranceAccess.Full || isDeclaredUnderAdultAge
|
||||||
|
|
||||||
|
return {
|
||||||
|
adultContentDisabled,
|
||||||
|
chatDisabled,
|
||||||
|
isDeclaredUnderAdultAge,
|
||||||
|
isOverRegionMinAccessAge,
|
||||||
|
isOverAppMinAccessAge,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user