Партия: совместное заполнение формы завершения на клиенте
Раскладка, комментарии, причина победы и комментарий о партии уходят в общий черновик через ~0.6с после последнего действия, а чужие правки подтягиваются по SSE. Чужой черновик применяется, только если с момента моего последнего действия прошло больше 1.5с — иначе правка соседа перетирала бы тайл прямо под рукой. Перед «Завершить» отложенная запись дожимается: иначе последняя правка попала бы в результаты, но не в черновик, и второй участник увидел бы не то, что записалось. Само завершение по-прежнему шлёт тело запроса, так что работает и без черновика. Под подсказкой о перетаскивании появилась строка «Результаты заполняет также <Ник>», а если партию завершил кто-то другой — тост вместо молча исчезающей формы. В админке у идущей партии вместо формы правки — пояснение и переход на страницу партии: сервер её результаты всё равно не примет. #28 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BoiJK9ux8peeyjLb8TYjFf
This commit is contained in:
@@ -4,7 +4,7 @@ import { useEffect } from "react";
|
||||
import { matchAffectedKeys, qk } from "../api/queryKeys";
|
||||
|
||||
interface ServerEvent {
|
||||
type: "match" | "group" | "invitations" | "notifications";
|
||||
type: "match" | "match_draft" | "group" | "invitations" | "notifications";
|
||||
match_id?: number;
|
||||
group_id?: number;
|
||||
}
|
||||
@@ -32,6 +32,10 @@ export function useServerEvents(enabled: boolean) {
|
||||
qc.invalidateQueries({ queryKey: qk.invitations });
|
||||
} else if (ev.type === "notifications") {
|
||||
qc.invalidateQueries({ queryKey: qk.notifications });
|
||||
} else if (ev.type === "match_draft") {
|
||||
// Черновик меняется на каждое движение тайла: трогаем только саму партию,
|
||||
// без лидерборда и историй — иначе группа захлебнётся перезапросами.
|
||||
if (ev.match_id != null) qc.invalidateQueries({ queryKey: qk.match(ev.match_id) });
|
||||
} else if (ev.type === "match") {
|
||||
if (ev.match_id != null) qc.invalidateQueries({ queryKey: qk.match(ev.match_id) });
|
||||
if (ev.group_id != null) {
|
||||
|
||||
Reference in New Issue
Block a user