Clear stale WS locks on reconnect to fix phantom overlays

When WS reconnects after a disconnect, the browser may have missed unlock/booking:created
messages, leaving gray striped overlays stuck forever. Clearing all locks on reconnect
ensures stale state is removed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-17 20:13:10 +03:00
parent bda0cbb7d5
commit cbd85c5c7e

View File

@@ -1,4 +1,4 @@
import { useState, useEffect, useCallback } from 'react'
import { useState, useEffect, useCallback, useRef } from 'react'
import { BookingCalendar } from '../components/calendar/BookingCalendar'
import { RENTAL_OBJECTS, MOCK_RENTAL_BOOKINGS } from '../data/rentalData'
import { useModules } from '../contexts/ModulesContext'
@@ -51,6 +51,15 @@ export function CalendarPage() {
const { send, connected } = useHotelSocket({ slug, token: session?.token ?? null, onMessage: handleWsMessage })
// Clear stale locks on WS reconnect (may have missed unlock/booking:created while disconnected)
const prevConnected = useRef(false)
useEffect(() => {
if (connected && !prevConnected.current) {
setLocks(new Map())
}
prevConnected.current = connected
}, [connected])
const handleCreate = async (data: Partial<Booking>) => {
try {
const created = await api.bookings.create(slug, {