Nux the prompt
This commit is contained in:
@@ -3,6 +3,7 @@ import {msg, Trans} from '@lingui/macro'
|
|||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
|
|
||||||
import {useAgeAssuranceContext} from '#/state/age-assurance'
|
import {useAgeAssuranceContext} from '#/state/age-assurance'
|
||||||
|
import {Nux, useNux, useSaveNux} from '#/state/queries/nuxs'
|
||||||
import {atoms as a, select, useTheme, type ViewStyleProp} from '#/alf'
|
import {atoms as a, select, useTheme, type ViewStyleProp} from '#/alf'
|
||||||
import {AgeAssuranceBadge} from '#/components/ageAssurance/AgeAssuranceBadge'
|
import {AgeAssuranceBadge} from '#/components/ageAssurance/AgeAssuranceBadge'
|
||||||
import {
|
import {
|
||||||
@@ -10,14 +11,19 @@ import {
|
|||||||
useDialogControl,
|
useDialogControl,
|
||||||
} from '#/components/ageAssurance/AgeAssuranceInitDialog'
|
} from '#/components/ageAssurance/AgeAssuranceInitDialog'
|
||||||
import {IsAgeRestricted} from '#/components/ageAssurance/IsAgeRestricted'
|
import {IsAgeRestricted} from '#/components/ageAssurance/IsAgeRestricted'
|
||||||
import {Button, ButtonText} from '#/components/Button'
|
import {Button, ButtonIcon, ButtonText} from '#/components/Button'
|
||||||
import type * as Dialog from '#/components/Dialog'
|
import type * as Dialog from '#/components/Dialog'
|
||||||
import {Divider} from '#/components/Divider'
|
import {Divider} from '#/components/Divider'
|
||||||
|
import {TimesLarge_Stroke2_Corner0_Rounded as X} from '#/components/icons/Times'
|
||||||
import {Text} from '#/components/Typography'
|
import {Text} from '#/components/Typography'
|
||||||
|
|
||||||
export function AgeAssurancePrompt({style}: ViewStyleProp & {}) {
|
export function AgeAssurancePrompt({style}: ViewStyleProp & {}) {
|
||||||
const control = useDialogControl()
|
const control = useDialogControl()
|
||||||
const {hasInitiated} = useAgeAssuranceContext()
|
const {hasInitiated} = useAgeAssuranceContext()
|
||||||
|
const {nux} = useNux(Nux.AgeAssurancePrompt)
|
||||||
|
|
||||||
|
if (nux && nux.completed) return null
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<IsAgeRestricted.True>
|
<IsAgeRestricted.True>
|
||||||
@@ -34,6 +40,7 @@ function Inner({
|
|||||||
}: ViewStyleProp & {control: Dialog.DialogControlProps}) {
|
}: ViewStyleProp & {control: Dialog.DialogControlProps}) {
|
||||||
const t = useTheme()
|
const t = useTheme()
|
||||||
const {_} = useLingui()
|
const {_} = useLingui()
|
||||||
|
const {mutate: save} = useSaveNux()
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -114,6 +121,29 @@ function Inner({
|
|||||||
</ButtonText>
|
</ButtonText>
|
||||||
</Button>
|
</Button>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
label={_(msg`Don't show again`)}
|
||||||
|
size="tiny"
|
||||||
|
variant="solid"
|
||||||
|
color="secondary_inverted"
|
||||||
|
shape="round"
|
||||||
|
onPress={() =>
|
||||||
|
save({
|
||||||
|
id: Nux.AgeAssurancePrompt,
|
||||||
|
completed: true,
|
||||||
|
data: undefined,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
style={[
|
||||||
|
a.absolute,
|
||||||
|
{
|
||||||
|
top: 12,
|
||||||
|
right: 12,
|
||||||
|
},
|
||||||
|
]}>
|
||||||
|
<ButtonIcon icon={X} />
|
||||||
|
</Button>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ export enum Nux {
|
|||||||
ExploreInterestsCard = 'ExploreInterestsCard',
|
ExploreInterestsCard = 'ExploreInterestsCard',
|
||||||
InitialVerificationAnnouncement = 'InitialVerificationAnnouncement',
|
InitialVerificationAnnouncement = 'InitialVerificationAnnouncement',
|
||||||
ActivitySubscriptions = 'ActivitySubscriptions',
|
ActivitySubscriptions = 'ActivitySubscriptions',
|
||||||
|
AgeAssurancePrompt = 'AgeAssurancePrompt',
|
||||||
}
|
}
|
||||||
|
|
||||||
export const nuxNames = new Set(Object.values(Nux))
|
export const nuxNames = new Set(Object.values(Nux))
|
||||||
@@ -28,6 +29,10 @@ export type AppNux = BaseNux<
|
|||||||
id: Nux.ActivitySubscriptions
|
id: Nux.ActivitySubscriptions
|
||||||
data: undefined
|
data: undefined
|
||||||
}
|
}
|
||||||
|
| {
|
||||||
|
id: Nux.AgeAssurancePrompt
|
||||||
|
data: undefined
|
||||||
|
}
|
||||||
>
|
>
|
||||||
|
|
||||||
export const NuxSchemas: Record<Nux, zod.ZodObject<any> | undefined> = {
|
export const NuxSchemas: Record<Nux, zod.ZodObject<any> | undefined> = {
|
||||||
@@ -35,4 +40,5 @@ export const NuxSchemas: Record<Nux, zod.ZodObject<any> | undefined> = {
|
|||||||
[Nux.ExploreInterestsCard]: undefined,
|
[Nux.ExploreInterestsCard]: undefined,
|
||||||
[Nux.InitialVerificationAnnouncement]: undefined,
|
[Nux.InitialVerificationAnnouncement]: undefined,
|
||||||
[Nux.ActivitySubscriptions]: undefined,
|
[Nux.ActivitySubscriptions]: undefined,
|
||||||
|
[Nux.AgeAssurancePrompt]: undefined,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {useMutation, useQueryClient} from '@tanstack/react-query'
|
import {useMutation, useQueryClient} from '@tanstack/react-query'
|
||||||
|
|
||||||
import {AppNux, Nux} from '#/state/queries/nuxs/definitions'
|
import {type AppNux, type Nux} from '#/state/queries/nuxs/definitions'
|
||||||
import {parseAppNux, serializeAppNux} from '#/state/queries/nuxs/util'
|
import {parseAppNux, serializeAppNux} from '#/state/queries/nuxs/util'
|
||||||
import {
|
import {
|
||||||
preferencesQueryKey,
|
preferencesQueryKey,
|
||||||
@@ -40,6 +40,20 @@ export function useNuxs():
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if (__DEV__) {
|
||||||
|
// const queryClient = useQueryClient()
|
||||||
|
// const agent = useAgent()
|
||||||
|
|
||||||
|
// // @ts-ignore
|
||||||
|
// window.clearNux = async (ids: string[]) => {
|
||||||
|
// await agent.bskyAppRemoveNuxs(ids)
|
||||||
|
// // triggers a refetch
|
||||||
|
// await queryClient.invalidateQueries({
|
||||||
|
// queryKey: preferencesQueryKey,
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
return {
|
return {
|
||||||
nuxs: undefined,
|
nuxs: undefined,
|
||||||
status,
|
status,
|
||||||
|
|||||||
Reference in New Issue
Block a user