import React from 'react' import {View} from 'react-native' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {atoms as a, useBreakpoints, useTheme} from '#/alf' import {Button, ButtonColor, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {Text} from '#/components/Typography' export {useDialogControl as usePromptControl} from '#/components/Dialog' const Context = React.createContext<{ titleId: string descriptionId: string }>({ titleId: '', descriptionId: '', }) export function Outer({ children, control, testID, }: React.PropsWithChildren<{ control: Dialog.DialogOuterProps['control'] testID?: string }>) { const {gtMobile} = useBreakpoints() const titleId = React.useId() const descriptionId = React.useId() const context = React.useMemo( () => ({titleId, descriptionId}), [titleId, descriptionId], ) return ( {children} ) } export function Title({children}: React.PropsWithChildren<{}>) { const {titleId} = React.useContext(Context) return ( {children} ) } export function Description({children}: React.PropsWithChildren<{}>) { const t = useTheme() const {descriptionId} = React.useContext(Context) return ( {children} ) } export function Actions({children}: React.PropsWithChildren<{}>) { const {gtMobile} = useBreakpoints() return ( {children} ) } export function Cancel({ children, cta, }: React.PropsWithChildren<{ /** * Optional i18n string, used in lieu of `children` for simple buttons. If * undefined (and `children` is undefined), it will default to "Cancel". */ cta?: string }>) { const {_} = useLingui() const {gtMobile} = useBreakpoints() const {close} = Dialog.useDialogContext() const onPress = React.useCallback(() => { close() }, [close]) return ( ) } export function Action({ children, onPress, color = 'primary', cta, testID, }: React.PropsWithChildren<{ onPress: () => void color?: ButtonColor /** * Optional i18n string, used in lieu of `children` for simple buttons. If * undefined (and `children` is undefined), it will default to "Confirm". */ cta?: string testID?: string }>) { const {_} = useLingui() const {gtMobile} = useBreakpoints() const {close} = Dialog.useDialogContext() const handleOnPress = React.useCallback(() => { close() onPress() }, [close, onPress]) return ( ) } export function Basic({ control, title, description, cancelButtonCta, confirmButtonCta, onConfirm, confirmButtonColor, }: React.PropsWithChildren<{ control: Dialog.DialogOuterProps['control'] title: string description: string cancelButtonCta?: string confirmButtonCta?: string onConfirm: () => void confirmButtonColor?: ButtonColor }>) { return ( {title} {description} ) }