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 TitleText({children}: React.PropsWithChildren<{}>) { const {titleId} = React.useContext(Context) return ( {children} ) } export function DescriptionText({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({ cta, }: { /** * Optional i18n string. If 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({ onPress, color = 'primary', cta, testID, }: { /** * Callback to run when the action is pressed. The method is called _after_ * the dialog closes. * * Note: The dialog will close automatically when the action is pressed, you * should NOT close the dialog as a side effect of this method. */ onPress: () => void color?: ButtonColor /** * Optional i18n string. If 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 /** * Callback to run when the Confirm button is pressed. The method is called * _after_ the dialog closes. * * Note: The dialog will close automatically when the action is pressed, you * should NOT close the dialog as a side effect of this method. */ onConfirm: () => void confirmButtonColor?: ButtonColor }>) { return ( {title} {description} ) }