/* eslint-disable jsx-a11y/no-static-element-interactions */ /* eslint-disable jsx-a11y/click-events-have-key-events */ import React, { forwardRef } from "react"; import { CircleSlashIcon, CloudUpIcon } from "@navikt/aksel-icons"; import { Button } from "../../../button"; import { BodyShort, ErrorMessage, Label } from "../../../typography"; import { omit, useId } from "../../../utils-external"; import { cl, composeEventHandlers } from "../../../utils/helpers"; import { useI18n } from "../../../utils/i18n/i18n.hooks"; import { useFormField } from "../../useFormField"; import { useFileUpload } from "../hooks/useFileUpload"; import { useFileUploadTranslation } from "../root/FileUploadRoot.context"; import { FileUploadDropzoneProps } from "./dropzone.types"; import { useDropzone } from "./useDropzone"; const FileUploadDropzone = forwardRef< HTMLInputElement, FileUploadDropzoneProps >((props: FileUploadDropzoneProps, ref) => { const { onSelect, error, label, description, className, multiple = true, accept, validator, maxSizeInBytes, fileLimit, icon: DropzoneIcon = CloudUpIcon, disabled, translations, onClick, id: buttonId, "data-color": color, ...rest } = props; const context = useFileUploadTranslation(false); const translate = useI18n( "FileUpload", { dropzone: translations }, context?.translations, ); const fileLimitReached = fileLimit && fileLimit?.current >= fileLimit?.max && fileLimit?.max > 0; const _disabled = disabled ?? fileLimitReached; const { inputProps, errorId, showErrorMsg, hasError, inputDescriptionId } = useFormField({ ...omit(props, ["id"]), disabled: _disabled }, "fileUpload"); const { id: inputId, "aria-describedby": ariaDescribedby, ...inputPropsRest } = inputProps; const labelId = useId(); const { upload, onChange, inputRef, mergedRef } = useFileUpload({ ref, onSelect, validator, accept, maxSizeInBytes, disabled: inputProps.disabled, }); const dropzoneCtx = useDropzone({ upload, disabled: inputProps.disabled, }); return (