refactor(backend): dock door scanning socket and perms

This commit is contained in:
2026-06-01 14:23:26 -05:00
parent 2a35381fe4
commit f8335f5217
11 changed files with 391 additions and 38 deletions

View File

@@ -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 };
}