mirror of
https://github.com/johndoe6345789/low-code-react-app-b.git
synced 2026-04-25 14:14:57 +00:00
103 lines
2.9 KiB
TypeScript
103 lines
2.9 KiB
TypeScript
import { UIComponent, PageSchema } from '@/types/json-ui'
|
|
import { ComponentDefinition } from '@/lib/component-definitions'
|
|
import { SchemaEditorToolbar } from './SchemaEditorToolbar'
|
|
import { SchemaEditorSidebar } from './SchemaEditorSidebar'
|
|
import { SchemaEditorCanvas } from './SchemaEditorCanvas'
|
|
import { SchemaEditorPropertiesPanel } from './SchemaEditorPropertiesPanel'
|
|
|
|
interface SchemaEditorLayoutProps {
|
|
components: UIComponent[]
|
|
selectedId: string | null
|
|
hoveredId: string | null
|
|
draggedOverId: string | null
|
|
dropPosition: 'before' | 'after' | 'inside' | null
|
|
selectedComponent: UIComponent | null
|
|
onSelect: (id: string | null) => void
|
|
onHover: (id: string | null) => void
|
|
onHoverEnd: () => void
|
|
onComponentDragStart: (component: ComponentDefinition, e: React.DragEvent) => void
|
|
onTreeDragStart: (id: string, e: React.DragEvent) => void
|
|
onDragOver: (id: string, e: React.DragEvent) => void
|
|
onDragLeave: (e: React.DragEvent) => void
|
|
onDrop: (targetId: string, e: React.DragEvent) => void
|
|
onUpdate: (updates: Partial<UIComponent>) => void
|
|
onDelete: () => void
|
|
onImport: () => void
|
|
onExport: () => void
|
|
onCopy: () => void
|
|
onPreview: () => void
|
|
onClear: () => void
|
|
}
|
|
|
|
export function SchemaEditorLayout({
|
|
components,
|
|
selectedId,
|
|
hoveredId,
|
|
draggedOverId,
|
|
dropPosition,
|
|
selectedComponent,
|
|
onSelect,
|
|
onHover,
|
|
onHoverEnd,
|
|
onComponentDragStart,
|
|
onTreeDragStart,
|
|
onDragOver,
|
|
onDragLeave,
|
|
onDrop,
|
|
onUpdate,
|
|
onDelete,
|
|
onImport,
|
|
onExport,
|
|
onCopy,
|
|
onPreview,
|
|
onClear,
|
|
}: SchemaEditorLayoutProps) {
|
|
return (
|
|
<div className="h-full flex flex-col bg-background">
|
|
<SchemaEditorToolbar
|
|
onImport={onImport}
|
|
onExport={onExport}
|
|
onCopy={onCopy}
|
|
onPreview={onPreview}
|
|
onClear={onClear}
|
|
/>
|
|
|
|
<div className="flex-1 flex overflow-hidden">
|
|
<SchemaEditorSidebar onDragStart={onComponentDragStart} />
|
|
|
|
<SchemaEditorCanvas
|
|
components={components}
|
|
selectedId={selectedId}
|
|
hoveredId={hoveredId}
|
|
draggedOverId={draggedOverId}
|
|
dropPosition={dropPosition}
|
|
onSelect={onSelect}
|
|
onHover={onHover}
|
|
onHoverEnd={onHoverEnd}
|
|
onDragOver={onDragOver}
|
|
onDragLeave={onDragLeave}
|
|
onDrop={onDrop}
|
|
/>
|
|
|
|
<SchemaEditorPropertiesPanel
|
|
components={components}
|
|
selectedId={selectedId}
|
|
hoveredId={hoveredId}
|
|
draggedOverId={draggedOverId}
|
|
dropPosition={dropPosition}
|
|
selectedComponent={selectedComponent}
|
|
onSelect={onSelect}
|
|
onHover={onHover}
|
|
onHoverEnd={onHoverEnd}
|
|
onDragStart={onTreeDragStart}
|
|
onDragOver={onDragOver}
|
|
onDragLeave={onDragLeave}
|
|
onDrop={onDrop}
|
|
onUpdate={onUpdate}
|
|
onDelete={onDelete}
|
|
/>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|