Files
var-monorepo/apps/dispatch/app/_store/connectionStore.ts
2025-03-15 20:40:40 -07:00

42 lines
912 B
TypeScript

import { create } from "zustand";
import { socket } from "../(dispatch)/socket";
interface ConnectionStore {
isConnected: boolean;
selectedZone: string;
connect: (
uid: string,
selectedZone: string,
logoffTime: string,
) => Promise<void>;
disconnect: () => void;
}
export const connectionStore = create<ConnectionStore>((set) => ({
isConnected: false,
selectedZone: "LST_01",
connect: async (uid, selectedZone, logoffTime) =>
new Promise((resolve) => {
socket.auth = { uid };
set({ selectedZone });
socket.connect();
socket.once("connect", () => {
socket.emit("connect-dispatch", {
logoffTime,
selectedZone,
});
resolve();
});
}),
disconnect: () => {
socket.disconnect();
},
}));
socket.on("connect", () => {
connectionStore.setState({ isConnected: true });
});
socket.on("disconnect", () => {
connectionStore.setState({ isConnected: false });
});