From 8eac0b74fcbaaeeecb3e6dae8b4477b528251d6b Mon Sep 17 00:00:00 2001 From: vladtechno Date: Mon, 25 May 2026 12:44:41 +1000 Subject: [PATCH] fix(pwa): drop stale parts-suggestion responses to stop input self-erasing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В CreateRepairPage queryPartSuggestions после await перезаписывал partsDraft.name значением q из момента старта запроса. При быстром вводе ("К" → "Ке" → "Кеп" → "Кепу") поздно вернувшийся ответ для "К" откатывал поле обратно на "К" — пользователи это видели как «текст частично сам стирается». Делаем функциональный setState и роняем ответ если name уже другой. EditRepairPage не задет (там корректный паттерн). --- .../frontend/src/pages/repairs/CreateRepairPage.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mechanic-pwa/frontend/src/pages/repairs/CreateRepairPage.tsx b/mechanic-pwa/frontend/src/pages/repairs/CreateRepairPage.tsx index 53a6dcd..e7e881a 100644 --- a/mechanic-pwa/frontend/src/pages/repairs/CreateRepairPage.tsx +++ b/mechanic-pwa/frontend/src/pages/repairs/CreateRepairPage.tsx @@ -259,7 +259,14 @@ export default function CreateRepairPage() { setPartsDraft({ name: q, suggestions: [] }); if (!q.trim()) return; const list = await suggestParts(q); - setPartsDraft({ name: q, suggestions: list.map((s) => s.name) }); + // У43 race-fix: пока запрос для "К" летел, юзер дописал до "Кепу" — поздний + // ответ не должен перезаписывать .name старым значением (это и есть + // «текст частично сам стирается»). Применяем suggestions только если + // ввод не менялся; иначе тихо роняем ответ. + setPartsDraft((prev) => { + if (prev.name !== q) return prev; + return { name: q, suggestions: list.map((s) => s.name) }; + }); }; const addPart = (name: string) => {