'use client'; import classnames from 'classnames'; import React, { useId, useState } from 'react'; import MdHelpButton from '../help/MdHelpButton'; import MdHelpText from '../help/MdHelpText'; interface Labels { helpTextFor?: string; } export interface MdTextAreaProps extends React.TextareaHTMLAttributes { label?: string; labels?: Labels; error?: boolean; errorText?: string; helpText?: string; outerWrapperClass?: string; } export const MdTextArea = React.forwardRef( ( { label, labels = {}, id, rows = 10, value, disabled = false, readOnly = false, error = false, errorText, helpText, outerWrapperClass = '', className, ...otherProps }, ref, ) => { const uuid = useId(); const textAreaId = id && id !== '' ? id : uuid; const [helpOpen, setHelpOpen] = useState(false); const defaultLabels: Required = { helpTextFor: 'Hjelpetekst for', }; const mergedLabels: Required = { ...defaultLabels, ...labels }; const classNames = classnames( 'md-textarea', { 'md-textarea--disabled': !!disabled, 'md-textarea--readonly': !!readOnly, 'md-textarea--error': !!error, }, className, ); let ariaDescribedBy = helpText && helpText !== '' ? `md-textarea_help-text_${textAreaId}` : undefined; ariaDescribedBy = error && errorText && errorText !== '' ? `md-textarea_error_${textAreaId}` : ariaDescribedBy; const showLabel = (label && label !== '') || (helpText && helpText !== ''); return (
{showLabel && (
{label && label !== '' && } {helpText && helpText !== '' && (
{ return setHelpOpen(!helpOpen); }} expanded={helpOpen} />
)}
{helpText && helpText !== '' && (
{helpText}
)}
)}