monday-ui-react-core
Version:
Official monday.com UI resources for application development in React.js
61 lines (57 loc) • 1.68 kB
JavaScript
import React, { useCallback, useRef } from "react";
import classes from "./Switch.module.scss";
import { isNil } from "lodash-es";
// TODO should be migrated to TS? Not used rn
export function useHiddenSwitch({
id,
name,
value,
role,
disabled,
ariaLabel,
ariaLabelledBy,
checked,
onChange,
ariaControls,
defaultChecked
}) {
const inputRef = useRef(null);
const onSwitchClick = useCallback(() => {
const manualClickEvent = new MouseEvent("click", {
shiftKey: true,
// After dispatch this event we will want it to be captured by all the relevant event listeners which registered to this checkbox input.
bubbles: true,
cancelable: true
});
inputRef.current.dispatchEvent(manualClickEvent);
}, []);
let overrideDefaultChecked = defaultChecked;
// If component did not receive default checked and checked props, choose default checked as
// default behavior (handle isChecked logic inside input) and set default value
if (isNil(overrideDefaultChecked) && isNil(checked)) {
overrideDefaultChecked = false;
}
return {
onSwitchClick,
isChecked: overrideDefaultChecked || checked,
HiddenSwitch: (
<input
ref={inputRef}
id={id}
aria-controls={ariaControls}
className={classes["hidden-switch"]}
value={value}
name={name}
type="checkbox"
role={role ? role : "switch"}
onChange={onChange}
defaultChecked={overrideDefaultChecked}
disabled={disabled}
aria-label={ariaLabel}
aria-labelledby={ariaLabelledBy}
checked={checked}
aria-checked={checked}
/>
)
};
}