react-elegant-ui
Version:
Elegant UI components, made by BEM best practices for react
29 lines • 769 B
JavaScript
import { useRef } from 'react';
import { useImmutableCallback } from '../useImmutableCallback';
/**
* Manage enable state
*/
export var useToggleable = function (_a) {
var state = _a.state,
setStateExternal = _a.setState,
disabled = _a.disabled;
var control = useRef(null);
var setState = useImmutableCallback(function (state) {
if (setStateExternal !== undefined && !disabled) {
setStateExternal(state);
}
}, [disabled, setStateExternal]);
var toggle = useImmutableCallback(function () {
if (!disabled) {
setState(!state);
}
}, [disabled, state, setState]);
// Initialize
if (control.current === null) {
control.current = {
setState: setState,
toggle: toggle
};
}
return control.current;
};