import * as React from "react"; import { ClassHelpers } from "../../../utilities/classHelpers"; import { generateUniqueId } from "../form"; import { DataValidationMessage, DataValidationMode } from "../formCore"; import { ValidationLabel } from "../validationWrapper"; export interface IRadioListInput { focus: () => void blur: () => void } export interface IRadioListInputOption { labelContent: React.ReactNode; value: string } export interface IRadioListInputProps extends React.InputHTMLAttributes { options: IRadioListInputOption[] } const RadioListInputRef: React.RefForwardingComponent = (props, ref) => { const { options, id, value, ...attrs } = props const input = React.useRef(undefined) const refCallback = React.useCallback(() => { return { focus() { if (input.current) { input.current.focus() } }, blur() { if (input.current) { input.current.blur() } }, } }, [input]) React.useImperativeHandle(ref, refCallback, [refCallback]) const validationMessage = DataValidationMessage.get(props) const validationMode = DataValidationMode.get(props) const classes = React.useMemo(() => ClassHelpers.classNames( "armstrong-input", "radio-list", props.className, { "show-validation": (validationMode !== "none" && validationMessage), }, ), [props.className, validationMode, validationMessage]); const autoId = React.useMemo(() => id || generateUniqueId(u => "radio_" + u), [id]); return (
{options && options.map((o, i) => )}
); } const RadioOption: React.FC & { autoId: string, labelContent: React.ReactNode, input: React.MutableRefObject }> = p => { const { input, labelContent, autoId, ...attrs } = p return (
) } export const RadioListInput = React.forwardRef(RadioListInputRef)