import { DataModel, ModelPath, Path } from '@mcschema/core'; import { App, checkVersion, Previews } from '../../App'; import { Tracker } from '../../Tracker' import { toggleMenu, View } from '../../views/View'; import { Octicon } from '../Octicon'; import { renderHtml } from '../../hooks/renderHtml'; import config from '../../../config.json' import { BiomeNoisePreview } from '../../preview/BiomeNoisePreview'; export const TreePanel = (view: View, model: DataModel) => { const getContent = () => { if (App.loaded.get()) { const path = new ModelPath(model) const rendered = model.schema.hook(renderHtml, path, model.data, view) const category = model.schema.category(path) if (rendered[1]) { return `
${rendered[1]}
${rendered[2]}
` } return rendered[2] } return '
' } const tree = view.register(el => { App.loaded.watchRun((value) => { if (!value) { // If loading is taking more than 100 ms, show spinner new Promise(r => setTimeout(r, 100)).then(() => { if (!App.loaded.get()) { view.mount(el, getContent(), false) } }) } else { view.mount(el, getContent(), false) } }) App.treeMinimized.watch(() => { view.mount(el, getContent(), false) }) model.addListener({ invalidated() { view.mount(el, getContent(), false) } }) ;(Previews.biome_noise as BiomeNoisePreview).biomeColors.watch(() => { view.mount(el, getContent(), false) }, 'tree-panel') }) return `
${Octicon.fold}
${Octicon.tag} ${App.version.get()}
${config.versions .filter(v => checkVersion(v.id, App.model.get()!.minVersion ?? '1.15')) .reverse() .map(v => `
${v.id}
`).join('')}
${Octicon.kebab_horizontal}
${Octicon.history}
${Octicon.arrow_left}
${Octicon.arrow_right}
` }