fix(deals): DealsView — single reload per filter change, clear search debounce on unmount

This commit is contained in:
Дмитрий
2026-05-17 15:56:32 +03:00
parent efc6dbeb0a
commit fc7d34a131
+17 -6
View File
@@ -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<typeof setTimeout> | 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;