@stimulus-library/mixins
Version:
A library of useful controllers for Stimulus
39 lines (38 loc) • 1.21 kB
JavaScript
import { useMixin } from "./use_mixin";
import { useTimeout } from "./use_timeout";
import { isHTMLInputElement } from "@stimulus-library/utilities";
export function useTemporaryContent(controller, target, content, timeout, teardownCallback) {
const setContent = (element, text) => {
if (isHTMLInputElement(element)) {
element.value = text;
}
else {
element.textContent = text;
}
};
const getContent = (element) => {
return isHTMLInputElement(element) ? element.value : element.innerHTML;
};
let cleanupTimeout = () => void 0;
const originalText = getContent(target);
const teardown = () => {
setContent(target, originalText);
cleanupTimeout();
if (teardownCallback) {
teardownCallback.call(controller);
}
};
const setup = () => {
setContent(target, content);
if (timeout !== undefined) {
cleanupTimeout = useTimeout(controller, teardown, timeout);
}
};
useMixin(controller, setup, teardown);
return {
teardown,
update(newContent) {
setContent(target, newContent);
},
};
}