From f57b41f86d020a125d72c5aa0be3f0692d30dfc2 Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Sat, 27 Dec 2025 18:48:15 +0000 Subject: [PATCH] refactor: extract dialog fields and hierarchy tree --- .../component/ComponentConfigDialog.tsx | 230 ++--------------- .../ComponentConfigDialog/Actions.tsx | 20 ++ .../ComponentConfigDialog/Fields.tsx | 238 ++++++++++++++++++ .../component/ComponentHierarchyEditor.tsx | 68 ++--- .../ComponentHierarchyEditor/Tree.tsx | 65 +++++ .../ComponentHierarchyEditor/selectors.ts | 10 + 6 files changed, 364 insertions(+), 267 deletions(-) create mode 100644 frontends/nextjs/src/components/managers/component/ComponentConfigDialog/Actions.tsx create mode 100644 frontends/nextjs/src/components/managers/component/ComponentConfigDialog/Fields.tsx create mode 100644 frontends/nextjs/src/components/managers/component/ComponentHierarchyEditor/Tree.tsx create mode 100644 frontends/nextjs/src/components/managers/component/ComponentHierarchyEditor/selectors.ts diff --git a/frontends/nextjs/src/components/managers/component/ComponentConfigDialog.tsx b/frontends/nextjs/src/components/managers/component/ComponentConfigDialog.tsx index f4da06685..33f5af4f8 100644 --- a/frontends/nextjs/src/components/managers/component/ComponentConfigDialog.tsx +++ b/frontends/nextjs/src/components/managers/component/ComponentConfigDialog.tsx @@ -1,24 +1,10 @@ import { useState, useEffect, useCallback } from 'react' -import { Button } from '@/components/ui' -import { Input } from '@/components/ui' -import { Label } from '@/components/ui' -import { Textarea } from '@/components/ui' -import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui' -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui' -import { Switch } from '@/components/ui' -import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui' -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui' -import { ScrollArea } from '@/components/ui' +import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui' import { Database, ComponentNode, ComponentConfig } from '@/lib/database' import { componentCatalog } from '@/lib/components/component-catalog' import { toast } from 'sonner' -import type { PropDefinition } from '@/lib/builder-types' - -/** Select option type for property schema options */ -interface SelectOption { - value: string - label: string -} +import { ComponentConfigActions } from './ComponentConfigDialog/Actions' +import { ComponentConfigFields } from './ComponentConfigDialog/Fields' interface ComponentConfigDialogProps { node: ComponentNode @@ -74,65 +60,6 @@ export function ComponentConfigDialog({ node, isOpen, onClose, onSave, nerdMode const componentDef = componentCatalog.find(c => c.type === node.type) - const renderPropEditor = (propSchema: PropDefinition) => { - const value = props[propSchema.name] ?? propSchema.defaultValue - - switch (propSchema.type) { - case 'string': - return ( - setProps({ ...props, [propSchema.name]: e.target.value })} - placeholder={String(propSchema.defaultValue || '')} - /> - ) - - case 'number': - return ( - setProps({ ...props, [propSchema.name]: Number(e.target.value) })} - /> - ) - - case 'boolean': - return ( - setProps({ ...props, [propSchema.name]: checked })} - /> - ) - - case 'select': - return ( - - ) - - default: - return ( - setProps({ ...props, [propSchema.name]: e.target.value })} - /> - ) - } - } - return ( @@ -143,147 +70,18 @@ export function ComponentConfigDialog({ node, isOpen, onClose, onSave, nerdMode - - - Properties - Styles - {nerdMode && Events} - + - - - {componentDef?.propSchema && componentDef.propSchema.length > 0 ? ( - componentDef.propSchema.map((propSchema) => ( -
- - {renderPropEditor(propSchema)} -
- )) - ) : ( -
-

No configurable properties for this component

-
- )} - - {nerdMode && ( - - - Custom Properties (JSON) - - Add additional props as JSON - - - -