'use client'; import classnames from 'classnames'; import React, { useId, useState } from 'react'; import MdHelpButton from '../help/MdHelpButton'; import MdHelpText from '../help/MdHelpText'; import MdRadioButton from './MdRadioButton'; import type { ChangeEvent } from 'react'; interface Labels { helpTextFor?: string; } export interface MdRadioGroupOption { value: string; text?: string; } export interface MdRadioGroupProps { options?: MdRadioGroupOption[]; value?: string; label?: string; labels?: Labels; id?: string; disabled?: boolean; direction?: 'horizontal' | 'vertical'; className?: string; error?: boolean; errorText?: string; helpText?: string; onChange(_e: React.ChangeEvent): void; onBlur?(_e: React.FocusEvent): void; onFocus?(_e: React.FocusEvent): void; } export const MdRadioGroup: React.FunctionComponent = ({ options = [], value, id, disabled, direction, className, label, labels = {}, helpText, error = false, errorText, onChange, onFocus, onBlur, ...otherProps }: MdRadioGroupProps) => { const uuid = useId(); const radioGroupId = id || uuid; const [helpOpen, setHelpOpen] = useState(false); const defaultLabels: Required = { helpTextFor: 'Hjelpetekst for', }; const mergedLabels: Required = { ...defaultLabels, ...labels }; const classNames = classnames( 'md-radiogroup', { 'md-radiogroup--disabled': !!disabled, }, className, ); const optionsClassNames = classnames('md-radiogroup__options', { 'md-radiogroup__options--vertical': direction === 'vertical', }); const optionIsSelected = (option: MdRadioGroupOption) => { if (value) { return option.value === value; } return false; }; const handleChange = (e: ChangeEvent) => { if (onChange) { onChange(e); } }; const handleFocus = (e: React.FocusEvent) => { if (onFocus) { onFocus(e); } }; const handleBlur = (e: React.FocusEvent) => { if (onBlur) { onBlur(e); } }; const showLabel = (label && label !== '') || (helpText && helpText !== ''); return (
{showLabel && (
{label && label !== '' &&
{label}
} {helpText && helpText !== '' && ( { return setHelpOpen(!helpOpen); }} expanded={helpOpen} /> )}
{helpText && helpText !== '' && (
{helpText}
)}
)}
{options.map(option => { return ( ); })}
{error && errorText && errorText !== '' &&
{errorText}
}
); }; export default MdRadioGroup;