Fix/book 115 hidden focus indicators * added focus ring to "how it works" text and close button in modal * fix(BOOK-115): added focus ring to Hotel Sidepeek close button * fix(BOOK-115): enabled selecting ancillaries with keyboard nav * fix(BOOK-115): added focus indicator to "View and print receipt" in Manage Stay * fix(BOOK-105 & BOOK-115): combined the two radio groups in payment selection to one, fixes focus indicator issue * fix(BOOK-115): added focus indicator to shortcut links * fix(BOOK-115): updated ancillaries keyboard selection * fix(BOOK-115): removed tabIndex from Link component * fix(BOOK-115): fixed single payment radio button not focusable * fix(BOOK-115): updated to onKeyDown * added id to "credit card" * removed toUpperCase() on lables * removed brackets * moved the focus indicator to the DS Button component * removed !important from ButtonLink css * changed <label> to <fieldset> and <legend> and added aria-label to PaymentOptionGroup * removed css class from sidepeek that was previously removed * reverted changes and synced Guarantee radiogroup with Payment radiogroup to use same semantics * removed duplicate label * removed old sub heading Approved-by: Erik Tiekstra
54 lines
1.1 KiB
TypeScript
54 lines
1.1 KiB
TypeScript
'use client'
|
|
|
|
import { Label, RadioGroup } from 'react-aria-components'
|
|
import { useController, useFormContext } from 'react-hook-form'
|
|
import type { ReactNode } from 'react'
|
|
import { Typography } from '../../../components/Typography'
|
|
|
|
interface PaymentOptionsGroupProps {
|
|
name: string
|
|
label?: string
|
|
children: ReactNode
|
|
className?: string
|
|
initalValue?: string
|
|
onChange?: (newValue: string) => void
|
|
}
|
|
|
|
export function PaymentOptionsGroup({
|
|
name,
|
|
label,
|
|
children,
|
|
className,
|
|
onChange,
|
|
initalValue,
|
|
}: PaymentOptionsGroupProps) {
|
|
const { control } = useFormContext()
|
|
|
|
const {
|
|
field: { value, onChange: formOnChange },
|
|
} = useController({
|
|
name,
|
|
control,
|
|
})
|
|
|
|
const handleChange = (newValue: string) => {
|
|
formOnChange(newValue)
|
|
onChange?.(newValue)
|
|
}
|
|
|
|
return (
|
|
<RadioGroup
|
|
value={initalValue || value}
|
|
onChange={handleChange}
|
|
className={className}
|
|
>
|
|
{label ? (
|
|
<Typography variant="Title/Overline/sm">
|
|
<Label>{label}</Label>
|
|
</Typography>
|
|
) : null}
|
|
{children}
|
|
</RadioGroup>
|
|
)
|
|
}
|