fenextjs-hook
Version:
121 lines • 3.86 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.useModal = void 0;
const react_1 = require("react");
const useAction_1 = require("../useAction");
const useLocalStorage_1 = require("../useLocalStorage");
const useModal = ({ name, nameLocalStorage, active: activeProps, defaultActive: defaultActiveProps, onActive: onActiveProps, onChange: onChangeProps, onClose: onCloseProps, disabled = false, activeByNameLocalStorage = false, activeByNameContentLocalStorage = false, }) => {
const [ifReload, setIfReload] = (0, react_1.useState)(false);
const [active, setActive] = (0, react_1.useState)(defaultActiveProps ?? false);
const { value, setLocalStorage } = (0, useLocalStorage_1.useLocalStorage)({
name: nameLocalStorage ?? "fenext-modal-active-name",
parse: (e) => {
try {
return JSON.parse(e ?? "[]");
}
catch {
return [];
}
},
defaultValue: [],
});
const onLoadWindows = () => {
if (!(window && typeof window != "undefined")) {
return;
}
window.addEventListener("beforeunload", () => {
setLocalStorage([]);
setActive(false);
setIfReload(true);
});
};
(0, react_1.useEffect)(onLoadWindows, []);
const listNamesLocalStorage = (0, react_1.useMemo)(() => (value ? [value].flat(2) : []), [value]);
const onPush = (name) => {
if (name &&
(activeByNameLocalStorage || activeByNameContentLocalStorage)) {
const n = [...(listNamesLocalStorage ?? []), name];
setLocalStorage(n);
}
};
const onPop = (name) => {
if (name &&
(activeByNameLocalStorage || activeByNameContentLocalStorage)) {
const n = [...(listNamesLocalStorage ?? [])];
if (n.at(-1) === name) {
n.pop();
}
setLocalStorage(n);
}
};
const { onAction } = (0, useAction_1.useAction)({
name: name ?? "fenext-modal",
onActionExecute: name
? (e) => {
setActive(e ?? false);
}
: undefined,
});
const onChange = (d) => {
if (disabled) {
return;
}
if (d) {
onPush(name);
}
else {
onPop(name);
}
onChangeProps?.(d);
setActive(d);
onAction(d);
};
const onActive = () => {
if (disabled) {
return;
}
onChange(true);
onActiveProps?.();
};
const onClose = () => {
if (disabled) {
return;
}
onChange(false);
onCloseProps?.();
};
const { activeFinal, activeNameLast, activeName } = (0, react_1.useMemo)(() => {
let ACTIVE = undefined;
const ACTIVENAME = listNamesLocalStorage.includes(name ?? "");
const ACTIVENAMELAST = listNamesLocalStorage.at(-1) == name;
if (activeByNameContentLocalStorage && name) {
ACTIVE = ACTIVENAME;
}
if (activeByNameLocalStorage && name && listNamesLocalStorage.at(-1)) {
ACTIVE = ACTIVENAMELAST;
}
return {
activeFinal: ACTIVE ?? activeProps ?? active,
activeName: ACTIVENAME,
activeNameLast: ACTIVENAMELAST,
};
}, [
activeByNameContentLocalStorage,
activeByNameLocalStorage,
listNamesLocalStorage,
name,
activeProps,
active,
]);
return {
active: !ifReload && activeFinal,
activeNameLast,
activeName,
listNamesLocalStorage,
onChange,
onActive,
onClose,
};
};
exports.useModal = useModal;
//# sourceMappingURL=index.js.map
;