import { connectStore, customElement, GemElement, html, TemplateResult } from '@mantou/gem'; import { bridgeStore, fetchFolderContent, Item } from '../store'; @connectStore(bridgeStore) @customElement('bridge-panel-folders') export class BridgePanelFoldersElement extends GemElement { static openedFolders = new Set(); #toggleFolder = (evt: Event, item: Item) => { evt.stopPropagation(); const { openedFolders } = BridgePanelFoldersElement; if (openedFolders.has(item)) { openedFolders.delete(item); } else { openedFolders.add(item); fetchFolderContent(item); } this.update(); }; #renderList = (list: Item[]): TemplateResult => { if (!list.length) return html``; return html`
${list .filter((item) => item.type === 'folder') .map( (item) => html`
this.#toggleFolder(evt, item)}>
${item.filename}
${BridgePanelFoldersElement.openedFolders.has(item) ? this.#renderList(Object.values(item.content || {})) : ''}
`, )}
`; }; render() { return html`
Home
${this.#renderList(Object.values(bridgeStore.content || {}))} `; } }