import IVButton from '~/components/IVButton' import ErrorMessage from '~/components/ErrorMessage' import { ButtonConfig, ChoiceButtonConfig } from '@interval/sdk/dist/types' type SubmittedChoice = { value: string label: string index: number } type ChoiceButtonsProps = { disabled: boolean isSubmitting: boolean submittedChoice?: SubmittedChoice | null onSubmit: ( props: SubmittedChoice ) => (e: React.MouseEvent) => void validationErrorMessage?: string | undefined | null choices?: (Omit & { theme?: ButtonConfig['theme'] | 'default' })[] continueButton?: Omit & { theme?: ButtonConfig['theme'] | 'default' } extraLoadingMessage?: string } export default function ChoiceButtons({ disabled, isSubmitting, submittedChoice, onSubmit, validationErrorMessage, choices, extraLoadingMessage, }: ChoiceButtonsProps) { if (!choices || choices.length < 1) { choices = [{ label: 'Continue', theme: 'primary', value: 'Continue' }] } return (
{validationErrorMessage && (
)}
{choices.map((choice, index) => { const defaultTheme = index === 0 ? 'primary' : 'secondary' return ( onSubmit({ ...choice, index, })(e) } label={choice.label} theme={ choice.theme === 'default' ? defaultTheme : choice.theme ?? defaultTheme } disabled={disabled || isSubmitting} loading={isSubmitting && submittedChoice?.index === index} data-pw="continue-button" /> ) })} {isSubmitting && extraLoadingMessage && (

{extraLoadingMessage}...

)}
) }