fix: persist and re-apply contact saved filters correctly
This commit is contained in:
@@ -174,32 +174,58 @@ function onPageSize(size: number) {
|
||||
if (page.value === 1) void load();
|
||||
}
|
||||
|
||||
const peopleSavedFilters = computed(() => ({
|
||||
q: q.value.trim() || undefined,
|
||||
sort: sort.value === 'name' ? undefined : sort.value,
|
||||
mood: csv(moodFilters.value),
|
||||
source: csv(sourceFilters.value),
|
||||
disc: discFilter.value || undefined,
|
||||
group: csv(groupFilters.value),
|
||||
}));
|
||||
const peopleSavedFilters = computed(() => {
|
||||
const out: Record<string, string> = {};
|
||||
const nextQ = q.value.trim();
|
||||
if (nextQ) out.q = nextQ;
|
||||
if (sort.value !== 'name') out.sort = sort.value;
|
||||
const mood = csv(moodFilters.value);
|
||||
if (mood) out.mood = mood;
|
||||
const source = csv(sourceFilters.value);
|
||||
if (source) out.source = source;
|
||||
if (discFilter.value) out.disc = discFilter.value;
|
||||
const group = csv(groupFilters.value);
|
||||
if (group) out.group = group;
|
||||
return out;
|
||||
});
|
||||
|
||||
function savedText(raw: unknown): string | undefined {
|
||||
return typeof raw === 'string' && raw.trim() ? raw.trim() : undefined;
|
||||
/** مقدار ذخیرهشده: رشته یا آرایه → رشتهٔ کاماجدا برای URL */
|
||||
function savedCsv(raw: unknown): string | undefined {
|
||||
if (Array.isArray(raw)) {
|
||||
const list = raw.map((v) => String(v).trim()).filter(Boolean);
|
||||
return list.length ? list.join(',') : undefined;
|
||||
}
|
||||
if (typeof raw === 'string' && raw.trim()) return raw.trim();
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function applyPeopleSavedFilters(filters: Record<string, unknown>) {
|
||||
const nextQ = typeof filters.q === 'string' ? filters.q : '';
|
||||
q.value = nextQ;
|
||||
const nextSort = filters.sort === 'newest' ? 'newest' : 'name';
|
||||
patchQuery({
|
||||
q: nextQ.trim() || undefined,
|
||||
sort: nextSort === 'name' ? undefined : nextSort,
|
||||
mood: savedText(filters.mood),
|
||||
source: savedText(filters.source),
|
||||
disc: savedText(filters.disc),
|
||||
group: savedText(filters.group),
|
||||
page: undefined,
|
||||
tab: undefined,
|
||||
// کلیدهای فیلتر را از نو میسازیم تا فیلتر قبلی روی صفحه نماند
|
||||
const query: Record<string, string | string[]> = {};
|
||||
for (const [key, value] of Object.entries(route.query)) {
|
||||
if (['q', 'sort', 'mood', 'source', 'disc', 'group', 'page', 'tab'].includes(key)) continue;
|
||||
if (value == null || value === '') continue;
|
||||
if (Array.isArray(value)) {
|
||||
const list = value.filter((v): v is string => typeof v === 'string' && v !== '');
|
||||
if (list.length) query[key] = list;
|
||||
} else if (typeof value === 'string') {
|
||||
query[key] = value;
|
||||
}
|
||||
}
|
||||
if (nextQ.trim()) query.q = nextQ.trim();
|
||||
if (filters.sort === 'newest') query.sort = 'newest';
|
||||
const mood = savedCsv(filters.mood);
|
||||
if (mood) query.mood = mood;
|
||||
const source = savedCsv(filters.source);
|
||||
if (source) query.source = source;
|
||||
const disc = savedCsv(filters.disc);
|
||||
if (disc) query.disc = disc;
|
||||
const group = savedCsv(filters.group);
|
||||
if (group) query.group = group;
|
||||
void router.replace({ name: 'contacts', query }).then(() => {
|
||||
void load();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user