@e280/quay
Version:
File-browser and outliner UI for the web
35 lines (24 loc) • 642 B
text/typescript
import {signal} from "@e280/strata"
import {Schema} from "./codex/parts/types.js"
import {CodexItem} from "./codex/parts/codex-item.js"
export class TreeTrail<Sc extends Schema> {
readonly signal = signal<CodexItem<Sc>[]>([])
constructor(root: CodexItem<Sc>) {
this.signal([root])
}
setTrail(e: Event, item: CodexItem<Sc>) {
if (e.target !== e.currentTarget) return
const trail: CodexItem<Sc>[] = []
let cur = item.kind === "folder"
? item
: item.parent
while (cur) {
trail.unshift(cur)
cur = cur.parent
}
this.signal(trail)
}
get currentFolder() {
return this.signal().at(-1)?.children ?? []
}
}