diff --git a/api/src/api/v1/websocket.py b/api/src/api/v1/websocket.py index 662b57c..0f00d49 100644 --- a/api/src/api/v1/websocket.py +++ b/api/src/api/v1/websocket.py @@ -272,7 +272,7 @@ class ConnectionManager: for lock_key in lock_keys: self.cell_locks.pop(lock_key, None) - def is_locked_by_other( + def is_cell_available_for_edit( self, con_key: ConnectionKeyEnum, user_id: int, @@ -280,10 +280,10 @@ class ConnectionManager: form_key, ) -> bool: if not cell_key: - return False + return True cell_key = frozenset(cell_key.items()) lock_owner_id = self.cell_locks.get((con_key, frozenset(form_key.items()), cell_key)) - return lock_owner_id is not None and lock_owner_id != user_id + return lock_owner_id is not None and lock_owner_id == user_id def is_row_locked_by_other( self, @@ -662,7 +662,7 @@ def resolve_cell_key(event_data: dict) -> dict | None: if not data or "line_id" not in data or "column" not in data: return None return { - "line_id": data["line_id"], + "line_id": data.get("line_id_code", data["line_id"]), "column": data["column"], } @@ -750,7 +750,7 @@ async def process_websocket( ) continue case "cell_updated": - if manager.is_locked_by_other( + if not manager.is_cell_available_for_edit( con_key=con_key, user_id=user_id, cell_key=cell_key, @@ -762,18 +762,18 @@ async def process_websocket( websocket, ) continue - if cell_key and not manager.acquire_cell_lock( - con_key=con_key, - user_id=user_id, - cell_key=cell_key, - form_key=kwargs_process, - ): - data["error"] = "Ячейка уже редактируется другим пользователем" - await manager.send_back( - data, - websocket, - ) - continue + # if cell_key and not manager.acquire_cell_lock( + # con_key=con_key, + # user_id=user_id, + # cell_key=cell_key, + # form_key=kwargs_process, + # ): + # data["error"] = "Ячейка уже редактируется другим пользователем" + # await manager.send_back( + # data, + # websocket, + # ) + # continue case "row_deleted": if manager.is_row_locked_by_other( con_key=con_key, diff --git a/web/src/components/RealtimeTable/contexts/RealtimeContext.js b/web/src/components/RealtimeTable/contexts/RealtimeContext.js index 5274d4f..58182a8 100644 --- a/web/src/components/RealtimeTable/contexts/RealtimeContext.js +++ b/web/src/components/RealtimeTable/contexts/RealtimeContext.js @@ -249,6 +249,7 @@ export const RealtimeProvider = ({ event: "cell_updated", data: { line_id: lineId, + line_id_code: row.id, column: colId, value: value, },