import { JBImageInputWebComponent, type JBImageInputBridge, type JBImageInputConfig, type ValidationValue } from "jb-image-input"; import { type ValidationItem } from "jb-validation"; import { RefObject, useEffect } from "react"; export type JBImageInputAttributes = { validationList?: ValidationItem>[], config?: JBImageInputConfig, value?: TValue, bridge?: JBImageInputBridge, multiple?: boolean, name?: string, file?: File, acceptTypes?: string, maxFileSize?: number, required?: boolean | string, label?: string, message?: string, } export function useJBImageInputAttribute(element: RefObject>, props: JBImageInputAttributes) { useEffect(() => { if (props.config && element.current) { element.current.config = props.config; } }, [props.config]); useEffect(() => { if (props.bridge && element.current) { element.current.bridge = props.bridge; } }, [props.bridge]); useEffect(() => { if (props.validationList && element.current) { element.current.validation.list = props.validationList; } }, [props.validationList]); useEffect(() => { if (props.multiple) { element.current?.setAttribute('multiple', 'true'); } else { element.current?.removeAttribute('multiple'); } }, [props.multiple]); useEffect(() => { if (props.value !== undefined && element.current) { element.current.value = props.value; } }, [props.value]); useEffect(() => { if (props.file) { element.current?.selectImageByFile(props.file); } }, [props.file]); useEffect(() => { if (props.acceptTypes && element.current) { element.current.acceptTypes = props.acceptTypes; } }, [props.acceptTypes]); useEffect(() => { if (props.maxFileSize !== undefined && element.current) { element.current.maxFileSize = props.maxFileSize; } }, [props.maxFileSize]); useEffect(() => { if (props.name) { element?.current?.setAttribute('name', props.name || ''); } else { element?.current?.removeAttribute('name'); } }, [props.name]); useEffect(() => { if (props.label) { element?.current?.setAttribute('label', props.label || ''); } else { element?.current?.removeAttribute('label'); } }, [props.label]); useEffect(() => { if (props.message) { element?.current?.setAttribute('message', props.message || ''); } else { element?.current?.removeAttribute('message'); } }, [props.message]); useEffect(() => { if (typeof props.required === "string") { element?.current?.setAttribute('required', props.required); } if (typeof props.required === "boolean") { props.required?element?.current?.setAttribute('required', ''):element?.current?.removeAttribute('required'); } }, [props.required]); }