47 lines
1.1 KiB
JavaScript
47 lines
1.1 KiB
JavaScript
import { createAtom } from "~/lib/atomic-zustand";
|
|
|
|
export default createAtom(({ merge, get }) => {
|
|
return {
|
|
default: {
|
|
wsConnected: false,
|
|
wsConnectedDate: null,
|
|
wsClosedDate: null,
|
|
triggerReload: false,
|
|
initialized: true,
|
|
hasInternetConnection: true,
|
|
},
|
|
actions: {
|
|
triggerReload: () => {
|
|
merge({
|
|
initialized: false,
|
|
triggerReload: true,
|
|
});
|
|
},
|
|
onReload: () => {
|
|
merge({
|
|
initialized: true,
|
|
triggerReload: false,
|
|
});
|
|
},
|
|
WSConnected: () => {
|
|
merge({
|
|
wsConnected: true,
|
|
wsConnectedDate: new Date().toISOString(),
|
|
});
|
|
},
|
|
WSClosed: () => {
|
|
const wsConnected = get("wsConnected");
|
|
if (!wsConnected) {
|
|
// avoid trigger wsClosedDate update that could re-run in loop data subscriptions
|
|
return;
|
|
}
|
|
merge({
|
|
wsConnected: false,
|
|
wsClosedDate: new Date().toISOString(),
|
|
});
|
|
},
|
|
setHasInternetConnection: (status) =>
|
|
merge({ hasInternetConnection: status }),
|
|
},
|
|
};
|
|
});
|