mirror of
https://github.com/hay-kot/homebox.git
synced 2024-12-23 15:26:31 +00:00
b77c9be36f
* bump prettier/eslint-plugin * bump nuxt pwa * use typed imports * set vue version to fix layout errors * disable import
42 lines
1 KiB
TypeScript
42 lines
1 KiB
TypeScript
import type { ItemSummary, LabelSummary, LocationSummary } from "~~/lib/api/types/data-contracts";
|
|
import type { UserClient } from "~~/lib/api/user";
|
|
|
|
type SearchOptions = {
|
|
immediate?: boolean;
|
|
};
|
|
|
|
export function useItemSearch(client: UserClient, opts?: SearchOptions) {
|
|
const query = ref("");
|
|
const locations = ref<LocationSummary[]>([]);
|
|
const labels = ref<LabelSummary[]>([]);
|
|
const results = ref<ItemSummary[]>([]);
|
|
const includeArchived = ref(false);
|
|
|
|
watchDebounced(query, search, { debounce: 250, maxWait: 1000 });
|
|
async function search() {
|
|
const locIds = locations.value.map(l => l.id);
|
|
const labelIds = labels.value.map(l => l.id);
|
|
|
|
const { data, error } = await client.items.getAll({
|
|
q: query.value,
|
|
locations: locIds,
|
|
labels: labelIds,
|
|
includeArchived: includeArchived.value,
|
|
});
|
|
if (error) {
|
|
return;
|
|
}
|
|
results.value = data.items;
|
|
}
|
|
|
|
if (opts?.immediate) {
|
|
search();
|
|
}
|
|
|
|
return {
|
|
query,
|
|
results,
|
|
locations,
|
|
labels,
|
|
};
|
|
}
|