From f36fb146b65bd0aa984a0b9f2ab6f044b519da91 Mon Sep 17 00:00:00 2001 From: nns Date: Sat, 30 May 2026 13:06:57 +0500 Subject: [PATCH] =?UTF-8?q?fix(employees):=20=D0=BF=D0=BE=D1=81=D0=BB?= =?UTF-8?q?=D0=B5=20create=20=E2=80=94=20invalidate=20list=20query=20(?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D1=8B=D0=B2=D0=B0?= =?UTF-8?q?=D0=BB=D1=81=D1=8F=20=D1=81=D1=80=D0=B0=D0=B7=D1=83)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Найдено через UI-deep: после успешного создания нового сотрудника EmployeesPage не вызывал refetch/invalidate на list-query, и список показывал старые данные до ручного refresh страницы. Причина: direct api.post вместо useCatalogMutations.create (нужен custom response shape с generatedPassword для one-shot модалки). Фикс: await qc.invalidateQueries({queryKey:[URL]}) сразу после успеха. Co-Authored-By: Claude Opus 4.7 --- src/food-market.web/src/pages/EmployeesPage.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/food-market.web/src/pages/EmployeesPage.tsx b/src/food-market.web/src/pages/EmployeesPage.tsx index 9ab4814..d8964e7 100644 --- a/src/food-market.web/src/pages/EmployeesPage.tsx +++ b/src/food-market.web/src/pages/EmployeesPage.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react' -import { useQuery } from '@tanstack/react-query' +import { useQuery, useQueryClient } from '@tanstack/react-query' import { validateEmail, validatePhone } from '@/lib/validation' import { Plus, Trash2, Copy } from 'lucide-react' import { api, humanizeError } from '@/lib/api' @@ -82,6 +82,7 @@ const blankForm = (): Form => ({ }) export function EmployeesPage() { + const qc = useQueryClient() const { update, remove } = useCatalogMutations(URL, URL) const [form, setForm] = useState
(null) // Сгенерированный пароль возвращается с сервера один раз — показываем @@ -140,6 +141,9 @@ export function EmployeesPage() { } else { const res = await api.post<{ employee: EmployeeDto; generatedPassword: string | null }>(URL, payload) setForm(null); setActiveEmployee(null); setFieldErrors({}) + // Direct api.post — invalidate сам, useCatalogMutations.create мы тут + // не используем (нужен custom response shape с generatedPassword). + await qc.invalidateQueries({ queryKey: [URL] }) // Если сервер вернул password — показываем модалку one-shot. if (res.data.generatedPassword && res.data.employee.email) { setCreatedAccount({ email: res.data.employee.email, password: res.data.generatedPassword })