diff --git a/src/food-market.web/src/lib/useLookups.ts b/src/food-market.web/src/lib/useLookups.ts index a1be6fe..055e442 100644 --- a/src/food-market.web/src/lib/useLookups.ts +++ b/src/food-market.web/src/lib/useLookups.ts @@ -9,7 +9,14 @@ function useLookup(key: string, url: string) { return useQuery({ queryKey: [`lookup:${key}`], queryFn: async () => (await api.get>(`${url}?pageSize=500`)).data.items, - staleTime: 5 * 60 * 1000, + // staleTime=0 + refetchOnMount: 'always' гарантируют что любая страница + // (например ProductEditPage), монтирующая usePriceTypes / useUnits / etc, + // сразу подтянет свежий снапшот справочника после правки в его UI — + // без необходимости явно прокидывать invalidate-pair (lookup-ключ ↔ + // URL-ключ useCatalogMutations). + staleTime: 0, + refetchOnMount: 'always', + refetchOnWindowFocus: true, }) } diff --git a/src/food-market.web/src/pages/PriceTypesPage.tsx b/src/food-market.web/src/pages/PriceTypesPage.tsx index df7fe04..e7e96e7 100644 --- a/src/food-market.web/src/pages/PriceTypesPage.tsx +++ b/src/food-market.web/src/pages/PriceTypesPage.tsx @@ -8,6 +8,7 @@ import { Button } from '@/components/Button' import { Modal } from '@/components/Modal' import { Field, TextInput, Checkbox } from '@/components/Field' import { useCatalogList, useCatalogMutations } from '@/lib/useCatalog' +import { useQueryClient } from '@tanstack/react-query' import type { PriceType } from '@/lib/types' const URL = '/api/catalog/price-types' @@ -26,6 +27,7 @@ export function PriceTypesPage() { const { data, isLoading, page, setPage, search, setSearch, sortKey, sortOrder, setSort } = useCatalogList(URL) const { create, update, remove } = useCatalogMutations(URL, URL) const [form, setForm] = useState
(null) + const qc = useQueryClient() const save = async () => { if (!form) return @@ -33,6 +35,11 @@ export function PriceTypesPage() { void _omit if (id) await update.mutateAsync({ id, input: payload }) else await create.mutateAsync(payload) + // useCatalogMutations инвалидирует ['/api/catalog/price-types'] (List на этой + // странице), но usePriceTypes-хук живёт под ключом 'lookup:price-types' — + // явно тригерим перефетч чтобы карточка товара сразу увидела новый + // IsRequired/IsRetail без перезагрузки страницы. + await qc.invalidateQueries({ queryKey: ['lookup:price-types'] }) setForm(null) } @@ -86,6 +93,7 @@ export function PriceTypesPage() {