andy-stack_vaultkeeper-ai/Services/UserInputService.ts
Andrew Beal 63bcfdeae9 fix: remove min query length requirement and improve search UI styling
- Remove 3-character minimum search query requirement
- Add dynamic padding to search results container
- Style search results with icons, grid layout, and hover states
- Fix missing semicolons in ChatInput event handlers
- Implement auto-scroll for selected search result
- Initialize vault cache after metadata resolution
- Update tests to reflect removed query length validation
2025-10-29 21:33:45 +00:00

46 lines
No EOL
1.6 KiB
TypeScript

import { SearchTrigger } from "Enums/SearchTrigger";
import { Resolve } from "./DependencyService";
import { Services } from "./Services";
import type { VaultCacheService } from "./VaultCacheService";
import type { SearchStateStore } from "Stores/SearchStateStore";
import { get } from "svelte/store";
export class UserInputService {
private readonly vaultCacheService: VaultCacheService;
private readonly searchStateStore: SearchStateStore;
public constructor() {
this.vaultCacheService = Resolve<VaultCacheService>(Services.VaultCacheService);
this.searchStateStore = Resolve<SearchStateStore>(Services.SearchStateStore);
}
public get searchState() {
return this.searchStateStore.searchState;
}
public performSearch() {
const state = get(this.searchStateStore.searchState);
if (!state.active || state.trigger == null) {
this.searchStateStore.setResults([]);
return;
}
let results: string[] = [];
switch (state.trigger) {
case SearchTrigger.Tag:
results = this.vaultCacheService.matchTag(state.query).map(result => result.obj.tag);
break;
case SearchTrigger.File:
results = this.vaultCacheService.matchFile(state.query).map(result => result.obj.file.path);
break;
case SearchTrigger.Folder:
results = this.vaultCacheService.matchFolder(state.query).map(result => result.obj.folder.path);
break;
}
this.searchStateStore.setResults(results);
}
}