Refactor alias filter handling in Svelte components for improved clarity and performance
- Consolidated alias filter change logic into a single function to streamline updates and reduce redundancy. - Removed the previous `applyAliasIfChanged` function, simplifying the alias filter handling process. - Ensured immediate data reload upon alias filter change to maintain up-to-date information display.
This commit is contained in:
+10
-24
@@ -219,26 +219,18 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function applyAliasIfChanged(nextAlias: string) {
|
|
||||||
const currentAlias = parseAliasFilter(page.url.searchParams.get('aliases'));
|
|
||||||
if (nextAlias === currentAlias) return;
|
|
||||||
const q = new URLSearchParams(page.url.searchParams);
|
|
||||||
if (nextAlias === 'all') q.delete('aliases');
|
|
||||||
else q.set('aliases', nextAlias);
|
|
||||||
const qs = q.toString();
|
|
||||||
await goto(`${page.url.pathname}${qs ? `?${qs}` : ''}`, {
|
|
||||||
replaceState: true,
|
|
||||||
noScroll: true,
|
|
||||||
keepFocus: true
|
|
||||||
});
|
|
||||||
// Для стабильности сразу перезагружаем данные по новому фильтру.
|
|
||||||
await load();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function handleAliasFilterChange(nextAlias: string) {
|
async function handleAliasFilterChange(nextAlias: string) {
|
||||||
if (nextAlias === aliasFilter) return;
|
|
||||||
aliasFilter = nextAlias;
|
aliasFilter = nextAlias;
|
||||||
await applyAliasIfChanged(nextAlias);
|
const q = new URLSearchParams(page.url.searchParams);
|
||||||
|
if (nextAlias === 'all') q.delete('aliases');
|
||||||
|
else q.set('aliases', nextAlias);
|
||||||
|
const qs = q.toString();
|
||||||
|
await goto(`${page.url.pathname}${qs ? `?${qs}` : ''}`, {
|
||||||
|
replaceState: true,
|
||||||
|
noScroll: true,
|
||||||
|
keepFocus: true
|
||||||
|
});
|
||||||
|
await load();
|
||||||
}
|
}
|
||||||
|
|
||||||
let queryKey = $derived(page.url.searchParams.toString());
|
let queryKey = $derived(page.url.searchParams.toString());
|
||||||
@@ -252,12 +244,6 @@ async function handleAliasFilterChange(nextAlias: string) {
|
|||||||
void load();
|
void load();
|
||||||
});
|
});
|
||||||
|
|
||||||
$effect(() => {
|
|
||||||
if (typeof window === 'undefined') return;
|
|
||||||
const nextAlias = aliasFilter;
|
|
||||||
void applyAliasIfChanged(nextAlias);
|
|
||||||
});
|
|
||||||
|
|
||||||
let staleSeconds = $derived.by(() =>
|
let staleSeconds = $derived.by(() =>
|
||||||
lastSuccessAtMs == null ? null : Math.max(0, Math.floor((nowMs - lastSuccessAtMs) / 1000))
|
lastSuccessAtMs == null ? null : Math.max(0, Math.floor((nowMs - lastSuccessAtMs) / 1000))
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -117,9 +117,8 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function applyAliasIfChanged(nextAlias: string) {
|
async function handleAliasFilterChange(nextAlias: string) {
|
||||||
const currentAlias = parseAliasFilter(page.url.searchParams.get('aliases'));
|
aliasFilter = nextAlias;
|
||||||
if (nextAlias === currentAlias) return;
|
|
||||||
const q = new URLSearchParams(page.url.searchParams);
|
const q = new URLSearchParams(page.url.searchParams);
|
||||||
if (nextAlias === 'all') q.delete('aliases');
|
if (nextAlias === 'all') q.delete('aliases');
|
||||||
else q.set('aliases', nextAlias);
|
else q.set('aliases', nextAlias);
|
||||||
@@ -129,17 +128,9 @@
|
|||||||
noScroll: true,
|
noScroll: true,
|
||||||
keepFocus: true
|
keepFocus: true
|
||||||
});
|
});
|
||||||
// В некоторых сценариях shallow-навигации page.url обновляется не сразу,
|
|
||||||
// поэтому дополнительно перезапрашиваем данные по текущему фильтру.
|
|
||||||
await load();
|
await load();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleAliasFilterChange(nextAlias: string) {
|
|
||||||
if (nextAlias === aliasFilter) return;
|
|
||||||
aliasFilter = nextAlias;
|
|
||||||
await applyAliasIfChanged(nextAlias);
|
|
||||||
}
|
|
||||||
|
|
||||||
let queryKey = $derived(page.url.searchParams.toString());
|
let queryKey = $derived(page.url.searchParams.toString());
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
queryKey;
|
queryKey;
|
||||||
@@ -152,12 +143,6 @@
|
|||||||
void load();
|
void load();
|
||||||
});
|
});
|
||||||
|
|
||||||
$effect(() => {
|
|
||||||
if (typeof window === 'undefined') return;
|
|
||||||
const nextAlias = aliasFilter;
|
|
||||||
void applyAliasIfChanged(nextAlias);
|
|
||||||
});
|
|
||||||
|
|
||||||
let staleSeconds = $derived.by(() =>
|
let staleSeconds = $derived.by(() =>
|
||||||
lastSuccessAtMs == null ? null : Math.max(0, Math.floor((nowMs - lastSuccessAtMs) / 1000))
|
lastSuccessAtMs == null ? null : Math.max(0, Math.floor((nowMs - lastSuccessAtMs) / 1000))
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user