fix(web): remember selected search type (#31799)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user