From fc7d34a131b1ba73ee5e25ea0d4456f58aa58d3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 17 May 2026 15:56:32 +0300 Subject: [PATCH] =?UTF-8?q?fix(deals):=20DealsView=20=E2=80=94=20single=20?= =?UTF-8?q?reload=20per=20filter=20change,=20clear=20search=20debounce=20o?= =?UTF-8?q?n=20unmount?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/resources/js/views/DealsView.vue | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/app/resources/js/views/DealsView.vue b/app/resources/js/views/DealsView.vue index 3da60328..31d1cf5b 100644 --- a/app/resources/js/views/DealsView.vue +++ b/app/resources/js/views/DealsView.vue @@ -9,7 +9,7 @@ * * Спека: docs/superpowers/specs/2026-05-17-deals-page-redesign-design.md */ -import { computed, onMounted, reactive, ref, watch } from 'vue'; +import { computed, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue'; import { useRoute } from 'vue-router'; import type { MockDeal } from '../composables/mockDeals'; import { mapApiDeal } from '../composables/dealsApiMapper'; @@ -103,10 +103,14 @@ async function loadProjects() { } } -// Фильтры (кроме поиска) и perPage → сброс на стр.1 + перезагрузка. +// Фильтры (кроме поиска) и perPage → стр.1 + ОДНА перезагрузка. +// page!==1 → меняем page, перезагрузку делает watch(page); page===1 → грузим напрямую. watch([filterStatus, filterProject, receivedFrom, receivedTo, perPage], () => { - page.value = 1; - void loadDeals(); + if (page.value !== 1) { + page.value = 1; + } else { + void loadDeals(); + } }); watch(page, () => void loadDeals()); @@ -115,11 +119,18 @@ let searchTimer: ReturnType | undefined; watch(searchPhone, () => { if (searchTimer) clearTimeout(searchTimer); searchTimer = setTimeout(() => { - page.value = 1; - void loadDeals(); + if (page.value !== 1) { + page.value = 1; + } else { + void loadDeals(); + } }, 350); }); +onBeforeUnmount(() => { + if (searchTimer) clearTimeout(searchTimer); +}); + function clearFilters() { searchPhone.value = ''; filterStatus.value = null;