From 9671f304f77a9638609f6ba073b6f9cf26987066 Mon Sep 17 00:00:00 2001 From: Misode Date: Fri, 10 Sep 2021 23:58:18 +0200 Subject: [PATCH] Fix error when switching generators with previews --- src/app/components/PreviewPanel.tsx | 62 ++++++++--------------------- src/app/pages/Generator.tsx | 2 +- 2 files changed, 17 insertions(+), 47 deletions(-) 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