as-app/src/stores/tree.js

63 lines
1.3 KiB
JavaScript

import { createAtom } from "~/lib/atomic-zustand";
const reloadCallbacks = [];
export default createAtom(({ merge, getActions }) => {
const sessionActions = getActions("session");
const networkActions = getActions("network");
const alertActions = getActions("alert");
const navActions = getActions("alert");
const fcmActions = getActions("fcm");
const paramsActions = getActions("params");
const notificationsActions = getActions("notifications");
const resetStores = () => {
navActions.reset();
paramsActions.reset();
fcmActions.reset();
alertActions.reset();
notificationsActions.reset();
};
const triggerReload = (callback) => {
if (callback) {
reloadCallbacks.push(callback);
}
networkActions.triggerReload();
sessionActions.clear();
resetStores();
merge({
triggerReload: true,
suspend: false,
});
};
const onReload = async () => {
merge({
triggerReload: false,
});
while (reloadCallbacks.length > 0) {
let callback = reloadCallbacks.shift();
if (callback) {
callback();
}
}
};
const suspendTree = () => {
merge({ suspend: true });
};
return {
default: {
triggerReload: false,
suspend: false,
},
actions: {
triggerReload,
suspendTree,
onReload,
},
};
});