mirror of
https://github.com/hay-kot/homebox.git
synced 2024-11-22 08:35:43 +00:00
b655cfab28
* offload search to lunr.js * update location search when locations are mutated
52 lines
1.1 KiB
TypeScript
52 lines
1.1 KiB
TypeScript
import { Ref } from "vue";
|
|
import { TreeItem } from "~~/lib/api/types/data-contracts";
|
|
|
|
export interface FlatTreeItem {
|
|
id: string;
|
|
name: string;
|
|
treeString: string;
|
|
}
|
|
|
|
function flatTree(tree: TreeItem[]): FlatTreeItem[] {
|
|
const v = [] as FlatTreeItem[];
|
|
|
|
// turns the nested items into a flat items array where
|
|
// the display is a string of the tree hierarchy separated by breadcrumbs
|
|
|
|
function flatten(items: TreeItem[], display: string) {
|
|
if (!items) {
|
|
return;
|
|
}
|
|
|
|
for (const item of items) {
|
|
v.push({
|
|
id: item.id,
|
|
name: item.name,
|
|
treeString: display + item.name,
|
|
});
|
|
if (item.children) {
|
|
flatten(item.children, display + item.name + " > ");
|
|
}
|
|
}
|
|
}
|
|
|
|
flatten(tree, "");
|
|
|
|
return v;
|
|
}
|
|
|
|
export function useFlatLocations(): Ref<FlatTreeItem[]> {
|
|
const locations = useLocationStore();
|
|
|
|
if (locations.tree === null) {
|
|
locations.refreshTree();
|
|
}
|
|
|
|
return computed(() => {
|
|
if (locations.tree === null) {
|
|
return [];
|
|
}
|
|
|
|
return flatTree(locations.tree);
|
|
});
|
|
}
|