refactor(backend): dock door scanning socket and perms
This commit is contained in:
@@ -11,10 +11,12 @@ type RoomErrorPayload = {
|
||||
message?: string;
|
||||
};
|
||||
|
||||
type UpdateMode = "append" | "replace";
|
||||
|
||||
export function useSocketRoom<T>(
|
||||
roomId: string,
|
||||
enabled = true,
|
||||
getKey?: (item: T) => string | number,
|
||||
updateMode: UpdateMode = "append",
|
||||
) {
|
||||
const [data, setData] = useState<T[]>([]);
|
||||
const [info, setInfo] = useState(
|
||||
@@ -36,7 +38,6 @@ export function useSocketRoom<T>(
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (!roomId || !enabled) return;
|
||||
function handleConnect() {
|
||||
socket.emit("join-room", roomId);
|
||||
setInfo(`Joined room: ${roomId}`);
|
||||
@@ -46,7 +47,13 @@ export function useSocketRoom<T>(
|
||||
// protects against other room updates hitting this hook
|
||||
if (payload.roomId !== roomId) return;
|
||||
|
||||
setData((prev) => [...payload.payloads, ...prev]);
|
||||
// resetting room data for rooms that just need updated data.
|
||||
if (updateMode === "replace") {
|
||||
setData(payload.payloads);
|
||||
} else {
|
||||
setData((prev) => [...payload.payloads, ...prev]);
|
||||
}
|
||||
|
||||
setInfo("");
|
||||
}
|
||||
|
||||
@@ -55,14 +62,14 @@ export function useSocketRoom<T>(
|
||||
setInfo(err.message ?? "Room error");
|
||||
}
|
||||
|
||||
if (!socket.connected) {
|
||||
socket.connect();
|
||||
}
|
||||
|
||||
socket.on("connect", handleConnect);
|
||||
socket.on("room-update", handleUpdate);
|
||||
socket.on("room-error", handleError);
|
||||
|
||||
if (!socket.connected && socket.disconnected) {
|
||||
socket.connect();
|
||||
}
|
||||
|
||||
// If already connected, join immediately
|
||||
if (socket.connected) {
|
||||
socket.emit("join-room", roomId);
|
||||
@@ -76,7 +83,7 @@ export function useSocketRoom<T>(
|
||||
socket.off("room-update", handleUpdate);
|
||||
socket.off("room-error", handleError);
|
||||
};
|
||||
}, [roomId, enabled]);
|
||||
}, [roomId, updateMode]);
|
||||
|
||||
return { data, info, clearRoom };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user