UNPKG

@oslokommune/punkt-react

Version:

React komponentbibliotek til Punkt, et designsystem laget av Oslo Origo

44 lines (40 loc) 1.31 kB
import { RefObject, useEffect } from 'react' /** * When `uploadStrategy="custom"` and the upload is marked `required`, the * native `required` attribute can't do the work (the input isn't posted). * This hook attaches a submit listener to the containing `<form>` that * prevents submission if the queue is empty, and surfaces a validation * error via `onMissingFiles`. * * Passive in `form` strategy — native validation handles that case. */ export const useRequiredFormValidation = ( fileInputRef: RefObject<HTMLInputElement | null>, { uploadStrategy, required, currentFileCount, onMissingFiles, }: { uploadStrategy: 'form' | 'custom' required: boolean currentFileCount: number onMissingFiles: () => void }, ) => { useEffect(() => { if (uploadStrategy !== 'custom' || !required) return const input = fileInputRef.current const form = input?.form if (!form) return const handleFormSubmit = (event: SubmitEvent) => { if (currentFileCount > 0) return event.preventDefault() onMissingFiles() } form.addEventListener('submit', handleFormSubmit) return () => { form.removeEventListener('submit', handleFormSubmit) } }, [fileInputRef, uploadStrategy, required, currentFileCount, onMissingFiles]) }