61 lines
1.4 KiB
TypeScript
61 lines
1.4 KiB
TypeScript
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<void>;
|
|
disconnect: () => void;
|
|
}
|
|
|
|
export const useDispatchConnectionStore = create<ConnectionStore>((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,
|
|
});
|
|
});
|