jb-checkbox
Version:
checkbox web component
65 lines (56 loc) • 2.21 kB
text/typescript
import type { JBCheckboxWebComponent, ValidationValue } from "jb-checkbox";
import type { ValidationItem } from "jb-validation";
import { type RefObject, useEffect } from "react";
export type JBCheckboxAttributes = {
name?: string,
value?: boolean | null | undefined,
message?: string | null | undefined,
error?:string | null | undefined
validationList?: ValidationItem<ValidationValue>[] | null,
disabled?: boolean,
required?: boolean,
}
export function useJBCheckboxAttribute(element: RefObject<JBCheckboxWebComponent|null>, props: JBCheckboxAttributes) {
useEffect(() => {
if (props.name) {
element?.current?.setAttribute('name', props.name || '');
} else {
element?.current?.removeAttribute('name');
}
}, [props.name, element?.current]);
useEffect(() => {
props.message ? element.current?.setAttribute('message', props.message) : element.current?.removeAttribute('message');
}, [props.message, element?.current])
useEffect(() => {
if (element?.current) {
element.current.validation.list = props.validationList || [];
}
}, [props.validationList, element]);
useEffect(() => {
if (typeof props.disabled == "boolean" && props.disabled) {
element?.current?.setAttribute('disabled', '');
} else {
element?.current?.removeAttribute('disabled');
}
}, [props.disabled, element?.current]);
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, element?.current]);
useEffect(() => {
if (element.current && props.value !== null && props.value !== undefined) {
element.current.value = props.value;
}
}, [props.value, element?.current]);
useEffect(() => {
if (props.error) {
element?.current?.setAttribute('error', props.error);
} else {
element?.current?.removeAttribute('error');
}
}, [props.error, element?.current]);
}