diff --git a/src/ageAssurance/index.tsx b/src/ageAssurance/index.tsx index a5cca327ae..d16827f28d 100644 --- a/src/ageAssurance/index.tsx +++ b/src/ageAssurance/index.tsx @@ -14,13 +14,13 @@ import { } from '#/ageAssurance/state' import { AgeAssuranceAccess, + type AgeAssuranceFlags, type AgeAssuranceState, AgeAssuranceStatus, } from '#/ageAssurance/types' import { - isUnderAge, + computeAgeAssuranceFlags, maybeRestrictChatSettings, - MIN_ACCESS_AGE, useAgeAssuranceRegionConfigWithFallback, } from '#/ageAssurance/util' @@ -38,13 +38,7 @@ const AgeAssuranceStateContext = createContext<{ Access: typeof AgeAssuranceAccess Status: typeof AgeAssuranceStatus state: AgeAssuranceState - flags: { - adultContentDisabled: boolean - chatDisabled: boolean - isDeclaredUnderAdultAge: boolean - isOverRegionMinAccessAge: boolean - isOverAppMinAccessAge: boolean - } + flags: AgeAssuranceFlags }>({ Access: AgeAssuranceAccess, Status: AgeAssuranceStatus, @@ -107,29 +101,15 @@ function InnerProvider({children}: {children: React.ReactNode}) { return ( { - 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 { Access: AgeAssuranceAccess, Status: AgeAssuranceStatus, state, - flags: { - adultContentDisabled, - chatDisabled, - isDeclaredUnderAdultAge, - isOverRegionMinAccessAge, - isOverAppMinAccessAge, - }, + flags: computeAgeAssuranceFlags({ + state, + config, + data, + }), } }, [state, data, config])}> {children} diff --git a/src/ageAssurance/types.ts b/src/ageAssurance/types.ts index f34ed10aea..d6a5b7889c 100644 --- a/src/ageAssurance/types.ts +++ b/src/ageAssurance/types.ts @@ -21,6 +21,14 @@ export type AgeAssuranceState = { 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) { switch (raw) { case 'unknown': diff --git a/src/ageAssurance/util.ts b/src/ageAssurance/util.ts index 310725db8f..151fb1ebfa 100644 --- a/src/ageAssurance/util.ts +++ b/src/ageAssurance/util.ts @@ -11,11 +11,16 @@ import {getAge} from '#/lib/strings/time' import {restrictChatSettings} from '#/state/queries/messages/restrictChatSettings' import {DEFAULT_LOGGED_OUT_LABEL_PREFERENCES} from '#/state/queries/preferences/moderation' import { + type AgeAssuranceData, getDidFromAgentSession, getOtherRequiredDataFromCache, useAgeAssuranceDataContext, } from '#/ageAssurance/data' -import {AgeAssuranceAccess} from '#/ageAssurance/types' +import { + AgeAssuranceAccess, + type AgeAssuranceFlags, + type AgeAssuranceState, +} from '#/ageAssurance/types' import {type Geolocation, useGeolocation} from '#/geolocation' export const MIN_ACCESS_AGE = 13 @@ -128,3 +133,34 @@ export function maybeRestrictChatSettings({agent}: {agent: AtpAgent}) { if (data?.actorDeclaration?.allowIncoming === 'none') return 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, + } +}