fix(deals): DealsView — single reload per filter change, clear search debounce on unmount
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user