import { create } from "zustand"; import { socket } from "../dispatch/socket"; interface ConnectionStore { status: "connected" | "disconnected" | "connecting" | "error"; message: string; selectedZone: string; connect: ( uid: string, selectedZone: string, logoffTime: string, ) => Promise; disconnect: () => void; } export const useDispatchConnectionStore = create((set) => ({ status: "disconnected", message: "", selectedZone: "LST_01", connect: async (uid, selectedZone, logoffTime) => new Promise((resolve) => { set({ status: "connecting", message: "" }); socket.auth = { uid }; set({ selectedZone }); socket.connect(); socket.once("connect", () => { socket.emit("connect-dispatch", { logoffTime, selectedZone, }); resolve(); }); }), disconnect: () => { socket.disconnect(); }, })); socket.on("connect", () => { useDispatchConnectionStore.setState({ status: "connected", message: "" }); }); socket.on("connect_error", (err) => { useDispatchConnectionStore.setState({ status: "error", message: err.message, }); }); socket.on("disconnect", () => { useDispatchConnectionStore.setState({ status: "disconnected", message: "" }); }); socket.on("force-disconnect", (reason: string) => { console.log("force-disconnect", reason); useDispatchConnectionStore.setState({ status: "disconnected", message: reason, }); });