@stimulus-library/mixins
Version:
A library of useful controllers for Stimulus
21 lines (20 loc) • 680 B
JavaScript
import { useMixin } from "./use_mixin";
export function useTimeout(controller, handler, timeout) {
let controllerDisconnect;
let timeoutHandle = null;
handler = handler.bind(controller);
const newHandler = () => {
handler();
timeoutHandle = null;
Object.assign(controller, { disconnect: controllerDisconnect });
};
const setup = () => timeoutHandle = setTimeout(newHandler, timeout);
const teardown = () => {
if (timeoutHandle !== null) {
clearTimeout(timeoutHandle);
timeoutHandle = null;
}
};
controllerDisconnect = useMixin(controller, setup, teardown);
return teardown;
}