fix(web): remember selected search type (#31799)

This commit is contained in:
DawidKrynski
2026-09-25 18:34:01 +02:00
committed by GitHub
parent 253692f279
commit efb44b8913
3 changed files with 44 additions and 2 deletions
@@ -9,7 +9,7 @@
let queryType = $derived(searchManager.filter.queryType);
const setType = (type: 'smart' | 'metadata' | 'description' | 'fullPath' | 'ocr') => {
searchManager.filter.queryType = type;
searchManager.setQueryType(type);
};
</script>
@@ -0,0 +1,35 @@
import { searchManager } from '$lib/managers/search-manager.svelte';
describe('SearchManager', () => {
beforeEach(() => {
localStorage.clear();
searchManager.reset();
});
it('defaults to smart search', () => {
expect(searchManager.filter.queryType).toBe('smart');
});
it('remembers the selected query type', () => {
searchManager.setQueryType('metadata');
expect(searchManager.filter.queryType).toBe('metadata');
searchManager.reset();
expect(searchManager.filter.queryType).toBe('metadata');
});
it('overrides a previously stored query type', () => {
localStorage.setItem('searchQueryType', 'metadata');
searchManager.reset();
searchManager.setQueryType('smart');
searchManager.reset();
expect(searchManager.filter.queryType).toBe('smart');
});
it('ignores an invalid stored query type', () => {
localStorage.setItem('searchQueryType', 'invalid');
searchManager.reset();
expect(searchManager.filter.queryType).toBe('smart');
});
});
@@ -7,6 +7,8 @@ import { Route } from '$lib/route';
import type { SearchFilter } from '$lib/types';
import { asLocalTimeISO, parseUtcDate } from '$lib/utils/date-time';
const QUERY_TYPE_STORAGE_KEY = 'searchQueryType';
class SearchManager {
#filter = $state<SearchFilter>(this.#fromQuery({}));
@@ -22,6 +24,11 @@ class SearchManager {
this.#filter = this.#fromQuery(query);
}
setQueryType(queryType: SearchFilter['queryType']) {
this.#filter.queryType = queryType;
localStorage.setItem(QUERY_TYPE_STORAGE_KEY, queryType);
}
async submit() {
await goto(Route.search(this.#toQuery()));
}
@@ -143,7 +150,7 @@ class SearchManager {
}
#defaultQueryType(): QueryType {
const storedQueryType = localStorage.getItem('searchQueryType') as QueryType;
const storedQueryType = localStorage.getItem(QUERY_TYPE_STORAGE_KEY) as QueryType;
return validQueryTypes.has(storedQueryType) ? storedQueryType : QueryType.SMART;
}
}