'use client' import { ChangeEvent, ChangeEventHandler, ForwardedRef, forwardRef, ReactNode, TextareaHTMLAttributes, useEffect, useState, } from 'react' import { PktInputWrapper } from '../inputwrapper/InputWrapper' export interface IPktTextarea extends TextareaHTMLAttributes { id: string ariaDescribedby?: string ariaLabelledby?: string counter?: boolean counterMaxLength?: number disabled?: boolean errorMessage?: string | ReactNode | ReactNode[] hasError?: boolean helptext?: string | ReactNode | ReactNode[] helptextDropdown?: string | ReactNode | ReactNode[] helptextDropdownButton?: string inline?: boolean fullwidth?: boolean label: string name?: string optionalTag?: boolean optionalText?: string requiredTag?: boolean requiredText?: string tagText?: string | null placeholder?: string rows?: number useWrapper?: boolean value?: string autocomplete?: string minLength?: number maxLength?: number readOnly?: boolean required?: boolean skipForwardTestid?: boolean onChange?: ChangeEventHandler } export const PktTextarea = forwardRef( ( { id, ariaDescribedby, ariaLabelledby, counter, counterMaxLength, className, disabled, errorMessage, hasError, helptext, helptextDropdown, helptextDropdownButton, inline, fullwidth = false, label, name, optionalTag = false, optionalText, requiredTag = false, requiredText, tagText = null, placeholder, rows, useWrapper = true, onChange, value, autoComplete = 'off', minLength, maxLength, readOnly, skipForwardTestid = false, ...props }: IPktTextarea, ref: ForwardedRef, ) => { const classNames = [className, 'pkt-textinput', 'pkt-textarea'].join(' ') const inputId = `${id}-input` // id til input element og sendes inn til htmlFor/forId i InputWrapper const labelId = `${inputId}-label` // id til label elementet og sendes inn til aria-labelledby i input (genereres i InputWrapper) const labelledBy = ariaLabelledby || labelId const [counterCurrent, setCounterCurrent] = useState(0) const handleChange = (e: ChangeEvent) => { if (counter) { setCounterCurrent(e.currentTarget?.value?.length || 0) } if (onChange) { onChange(e) } } useEffect(() => { if (value !== undefined) { setCounterCurrent(value?.length || 0) } }, [value]) return (