diff --git a/src/app/components/PreviewPanel.tsx b/src/app/components/PreviewPanel.tsx
index f59fb2da..bd593f10 100644
--- a/src/app/components/PreviewPanel.tsx
+++ b/src/app/components/PreviewPanel.tsx
@@ -1,6 +1,5 @@
import type { DataModel } from '@mcschema/core'
import { Path } from '@mcschema/core'
-import type { FunctionalComponent } from 'preact'
import { useState } from 'preact/hooks'
import { useModel } from '../hooks'
import type { VersionId } from '../Schemas'
@@ -8,42 +7,6 @@ import { BiomeSourcePreview, DecoratorPreview, NoiseSettingsPreview } from './pr
export const HasPreview = ['dimension', 'worldgen/noise_settings', 'worldgen/configured_feature']
-export const Previews: {
- id: string,
- generator: string,
- path: Path,
- predicate: (model: DataModel) => boolean,
- preview: FunctionalComponent<{
- lang: string,
- model: DataModel,
- data: any,
- version: VersionId,
- shown: boolean,
- }>,
-}[] = [
- {
- id: 'biome-noise',
- generator: 'dimension',
- path: new Path(['generator', 'biome_source']),
- predicate: model => model.get(new Path(['generator', 'type'])).endsWith('noise'),
- preview: BiomeSourcePreview,
- },
- {
- id: 'noise-settings',
- generator: 'worldgen/noise_settings',
- path: new Path(['noise']),
- predicate: () => true,
- preview: NoiseSettingsPreview,
- },
- {
- id: 'decorator',
- generator: 'worldgen/configured_feature',
- path: new Path([]),
- predicate: () => true,
- preview: DecoratorPreview,
- },
-]
-
type PreviewPanelProps = {
lang: string,
model: DataModel | null,
@@ -59,13 +22,20 @@ export function PreviewPanel({ lang, model, version, id, shown }: PreviewPanelPr
setCount(count => count + 1)
})
- return <>
- {Previews.filter(p => p.generator === id).map(p => {
- const data = model?.get(p.path)
- if (!model || data === undefined || !p.predicate(model)) {
- return <>>
- }
- return p.preview({ lang, model: model!, data, version, shown })
- })}
- >
+ if (id === 'dimension' && model?.get(new Path(['generator', 'type']))?.endsWith('noise')) {
+ const data = model.get(new Path(['generator', 'biome_source']))
+ if (data) return
+ }
+
+ if (id === 'worldgen/noise_settings' && model) {
+ const data = model.get(new Path(['noise']))
+ if (data) return
+ }
+
+ if (id === 'worldgen/configured_feature' && model) {
+ const data = model.get(new Path([]))
+ if (data) return
+ }
+
+ return <>>
}
diff --git a/src/app/pages/Generator.tsx b/src/app/pages/Generator.tsx
index 6f7b871a..19549f4c 100644
--- a/src/app/pages/Generator.tsx
+++ b/src/app/pages/Generator.tsx
@@ -141,8 +141,8 @@ export function Generator({ lang, changeTitle, version, onChangeVersion }: Gener
}
const [previewShown, setPreviewShown] = useState(false)
-
const hasPreview = HasPreview.includes(gen.id)
+ if (previewShown && !hasPreview) setPreviewShown(false)
let actionsShown = 1
if (hasPreview) actionsShown += 1
if (sourceShown) actionsShown += 2