import { RCTResponderProps } from '~/components/RenderIOCall'
import IVButton from '~/components/IVButton'
import IVDialog, { useDialogState } from '~/components/IVDialog'
import XCircleIcon from '~/icons/compiled/XCircle'
import ErrorCircleIcon from '~/icons/compiled/ErrorCircle'
import CheckCircleIcon from '~/icons/compiled/CheckCircleOutline'
import RenderMarkdown, {
ALLOWED_INLINE_ELEMENTS,
} from '~/components/RenderMarkdown'
const AFFIRMATIVE_RESPONSE_LABEL = 'Confirm'
const NEGATIVE_RESPONSE_LABEL = 'Cancel'
function InlineConfirmPrompt(
props: RCTResponderProps<'CONFIRM'> & {
onRespond: (value: boolean) => void
}
) {
if (props.isCurrentCall === false) {
const Icon = props.value ? CheckCircleIcon : XCircleIcon
return (
{props.label}
{props.value ? AFFIRMATIVE_RESPONSE_LABEL : NEGATIVE_RESPONSE_LABEL}
)
}
return (
{props.label}
{props.helpText && (
)}
props.onRespond(true)}
disabled={props.isSubmitting}
loading={props.isSubmitting && props.value === true}
autoFocus
/>
props.onRespond(false)}
disabled={props.isSubmitting}
loading={props.isSubmitting && props.value === false}
/>
)
}
export default function Confirm(props: RCTResponderProps<'CONFIRM'>) {
const dialog = useDialogState({
visible: !props.disabled && !props.shouldUseAppendUi,
// non-modals are rendered within their parent component, not a
modal: props.context === 'transaction',
})
const onRespond = (value: boolean) => {
props.onUpdatePendingReturnValue(value)
if (props.context !== 'docs') dialog.hide()
}
if (props.shouldUseAppendUi) {
return (
)
}
return (
{props.helpText && (
)}
onRespond(true)}
autoFocus
/>
onRespond(false)}
/>
)
}