refactor(vcen-edit): elimina PanelMeta, EditorMetaTree obtiene contexto

- EditorMetaTree ahora obtiene glob, locales, defaultLocale, tags del contexto si no se pasan
- Elimina PanelMeta.svelte (wrapper innecesario)
- Actualiza CatalogLayout, PanelObject, PanelSection, PanelOptionDetail

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
glm
dev 7 months ago
parent 02fdf3b4c9
commit f4c8fb04ef

@ -1,6 +1,9 @@
<script lang="ts">
import type { Metadata, MetadataField, MetadataFieldType } from '@/mtas/lib'
import type { GlobState } from '@/glob/adapters/svelte'
import { getContext } from 'svelte'
import type { CatalogEditorStore } from '@/vcen-edit/stores/catalog-editor.svelte.js'
import type { EditorGlob } from '@/vcen-edit/lib/editor-glob.svelte.ts'
import { validateMetadata, field as f } from '@/mtas/lib'
import { makeLingRecord } from '@/ling/lib'
import AddFieldMenu from './metas/MetaAddFieldMenu.svelte'
@ -11,20 +14,29 @@ import EditorTreeNodes from './EditorTreeNodes.svelte'
let {
value = $bindable<Metadata>({}),
tags = [],
glob,
locales,
defaultLocale,
tags: tagsProp,
glob: globProp,
locales: localesProp,
defaultLocale: defaultLocaleProp,
onUpdate,
}: {
value?: Metadata
tags?: string[]
glob: GlobState
locales: string[]
defaultLocale: string
glob?: GlobState
locales?: string[]
defaultLocale?: string
onUpdate?: (metadata: Metadata) => void
} = $props()
// Obtener del contexto si no se pasan como props
const editor = getContext<CatalogEditorStore>('catalog-editor')
const globCtx = getContext<EditorGlob>('editor-glob')
const glob = $derived(globProp ?? globCtx)
const locales = $derived(localesProp ?? (editor?.cat?.langs as string[]) ?? [])
const defaultLocale = $derived(defaultLocaleProp ?? editor?.cat?.lang ?? 'es')
const tags = $derived(tagsProp ?? ((editor?.cat as any)?.metaTags as string[]) ?? [])
let selectedPath = $state<string[]>([])
let showDeleteConfirm = $state(false)
let sidebarWidth = $state(200)

@ -1,34 +0,0 @@
<script lang="ts">
import type { Metadata } from '@/mtas/lib'
import { getContext } from 'svelte'
import type { EditorGlob } from '@/vcen-edit/lib/editor-glob.svelte.ts'
import type { CatalogEditorStore } from '@/vcen-edit/stores/catalog-editor.svelte.js'
import EditorMetaTree from './EditorMetaTree.svelte'
let {
value = $bindable<Metadata | undefined>(undefined),
onUpdate,
}: {
value?: Metadata
onUpdate: (meta: Metadata | undefined) => void
} = $props()
const glob = getContext<EditorGlob>('editor-glob')
const editor = getContext<CatalogEditorStore>('catalog-editor')
const meta = $derived(value ?? {})
const locales = $derived(editor.cat.langs as string[])
const defaultLocale = $derived(editor.cat.lang as string)
const tags = $derived((editor.cat as any).metaTags as string[] ?? [])
</script>
<div class="h-full flex flex-col">
<EditorMetaTree
value={meta}
{glob}
{locales}
{defaultLocale}
{tags}
onUpdate={(m) => onUpdate(Object.keys(m).filter(k => k !== 'order').length === 0 ? undefined : m)}
/>
</div>

@ -12,7 +12,7 @@ import Panel from './Panel.svelte'
import RuleList from './RuleList.svelte'
import SectionIssue from './SectionIssue.svelte'
import PanelObjectAtts from './PanelObjectAtts.svelte'
import PanelMeta from './PanelMeta.svelte'
import EditorMetaTree from './EditorMetaTree.svelte'
import PanelVisual from './PanelVisual.svelte'
import ButtonDelete from './ButtonDelete.svelte'
import SectionPricing from './SectionPricing.svelte'
@ -229,9 +229,9 @@ function cancelNew() {
{:else if tab === 'meta'}
<div class="flex-1 min-h-0 overflow-hidden">
<PanelMeta
value={obj.metadata}
onUpdate={m => editor.updateObjMeta(objId, m)}
<EditorMetaTree
value={obj.metadata ?? {}}
onUpdate={m => editor.updateObjMeta(objId, Object.keys(m).filter(k => k !== 'order').length === 0 ? undefined : m)}
/>
</div>
{/if}

@ -12,7 +12,7 @@ import Panel from './Panel.svelte'
import ButtonDelete from './ButtonDelete.svelte'
import SectionPricing from './SectionPricing.svelte'
import BadgeCount from './BadgeCount.svelte'
import PanelMeta from './PanelMeta.svelte'
import EditorMetaTree from './EditorMetaTree.svelte'
import SectionIssue from './SectionIssue.svelte'
import RuleList from './RuleList.svelte'
import Tabs from './Tabs.svelte'
@ -332,9 +332,9 @@ const OPT_TABS = $derived([
<!-- ── Meta ─────────────────────────────────────────────────────── -->
{:else if tab === 'meta'}
<div class="flex-1 min-h-0 overflow-hidden">
<PanelMeta
value={opt.metadata}
onUpdate={m => editor.updateOpt(opt.id, { metadata: m })}
<EditorMetaTree
value={opt.metadata ?? {}}
onUpdate={m => editor.updateOpt(opt.id, { metadata: Object.keys(m).filter(k => k !== 'order').length === 0 ? undefined : m })}
/>
</div>
{/if}

@ -12,7 +12,7 @@ import Panel from './Panel.svelte'
import RuleList from './RuleList.svelte'
import SectionIssue from './SectionIssue.svelte'
import PanelSectionAtts from './PanelSectionAtts.svelte'
import PanelMeta from './PanelMeta.svelte'
import EditorMetaTree from './EditorMetaTree.svelte'
import PanelVisual from './PanelVisual.svelte'
import ButtonDelete from './ButtonDelete.svelte'
import SectionPricing from './SectionPricing.svelte'
@ -233,9 +233,9 @@ function cancelNew() {
{:else if tab === 'meta'}
<div class="flex-1 min-h-0 overflow-hidden">
<PanelMeta
value={sec.metadata}
onUpdate={m => editor.updateSecMeta(objId, secId, m)}
<EditorMetaTree
value={sec.metadata ?? {}}
onUpdate={m => editor.updateSecMeta(objId, secId, Object.keys(m).filter(k => k !== 'order').length === 0 ? undefined : m)}
/>
</div>
{/if}

@ -8,7 +8,7 @@ import { labelOf } from '@/vcen-edit/lib/label.ts'
import CatalogSidebar from '../comps/CatalogSidebar.svelte'
import PanelCatalogoMeta from '../comps/PanelCatalogoMeta.svelte'
import PanelCatalogoAtts from '../comps/PanelCatalogoAtts.svelte'
import PanelMeta from '../comps/PanelMeta.svelte'
import EditorMetaTree from '../comps/EditorMetaTree.svelte'
import PanelOptions from '../comps/PanelOptions.svelte'
import PanelObject from '../comps/PanelObject.svelte'
import PanelSection from '../comps/PanelSection.svelte'
@ -155,7 +155,7 @@ const isValid = $derived(graphResult.graph !== null)
<div class="flex-1 min-w-0 overflow-hidden relative">
{#if sel.kind === 'cat-info'} <PanelCatalogoMeta />
{:else if sel.kind === 'cat-atts'} <PanelCatalogoAtts />
{:else if sel.kind === 'cat-meta'} <PanelMeta value={editor.cat.metadata} onUpdate={m => editor.updateCatMeta(m)} />
{:else if sel.kind === 'cat-meta'} <EditorMetaTree value={editor.cat.metadata ?? {}} onUpdate={m => editor.updateCatMeta(Object.keys(m).filter(k => k !== 'order').length === 0 ? undefined : m)} />
{:else if sel.kind === 'cat-opts'} <PanelOptions />
{:else if sel.kind === 'obj-info' || sel.kind === 'obj-atts' || sel.kind === 'obj-meta' || sel.kind === 'obj-issues' || sel.kind === 'obj-rules'} <PanelObject />
{:else if sel.kind === 'sec-info' || sel.kind === 'sec-atts' || sel.kind === 'sec-meta' || sel.kind === 'sec-rules' || sel.kind === 'sec-issues'} <PanelSection />

Loading…
Cancel
Save

Powered by TurnKey Linux.