Files
low-code-react-app-b/src/components/DataBindingDesigner.tsx
johndoe6345789 94d67dfed5 feat: migrate DataSourceManager to JSON (Tier 2 - Organism 1)
- Create JSON definition in src/components/json-definitions/data-source-manager.json
- Create TypeScript interface in src/lib/json-ui/interfaces/data-source-manager.ts
- Create custom hook useDataSourceManagerState in src/hooks/use-data-source-manager-state.ts
- Register hook in src/lib/json-ui/hooks-registry.ts
- Export DataSourceManager from src/lib/json-ui/json-components.ts
- Update imports in src/components/DataBindingDesigner.tsx
- Remove legacy TSX files and sub-components
- Update exports in src/components/organisms/index.ts
- Add hook export in src/hooks/index.ts

DataSourceManager now uses JSON-driven architecture with custom hooks for state management.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-01-21 01:29:19 +00:00

70 lines
2.3 KiB
TypeScript

import { useState } from 'react'
import { DataSourceManager, ComponentBindingDialog } from '@/lib/json-ui/json-components'
import { DataSource, UIComponent } from '@/types/json-ui'
import { DataBindingHeader } from '@/components/data-binding-designer/DataBindingHeader'
import { ComponentBindingsCard } from '@/components/data-binding-designer/ComponentBindingsCard'
import { HowItWorksCard } from '@/components/data-binding-designer/HowItWorksCard'
import dataBindingCopy from '@/data/data-binding-designer.json'
export function DataBindingDesigner() {
const [dataSources, setDataSources] = useState<DataSource[]>(
dataBindingCopy.seed.dataSources as DataSource[],
)
const [mockComponents] = useState<UIComponent[]>(dataBindingCopy.seed.components)
const [selectedComponent, setSelectedComponent] = useState<UIComponent | null>(null)
const [bindingDialogOpen, setBindingDialogOpen] = useState(false)
const handleEditBinding = (component: UIComponent) => {
setSelectedComponent(component)
setBindingDialogOpen(true)
}
const handleSaveBinding = (updatedComponent: UIComponent) => {
console.log('Updated component bindings:', updatedComponent)
}
return (
<div className="h-full overflow-auto">
<div className="p-6 space-y-6">
<DataBindingHeader
title={dataBindingCopy.header.title}
description={dataBindingCopy.header.description}
/>
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
<div className="space-y-6">
<DataSourceManager
dataSources={dataSources}
onChange={setDataSources}
/>
</div>
<div className="space-y-6">
<ComponentBindingsCard
components={mockComponents}
dataSources={dataSources}
copy={dataBindingCopy.bindingsCard}
onEditBinding={handleEditBinding}
/>
<HowItWorksCard
title={dataBindingCopy.howItWorks.title}
steps={dataBindingCopy.howItWorks.steps}
/>
</div>
</div>
</div>
<ComponentBindingDialog
open={bindingDialogOpen}
component={selectedComponent}
dataSources={dataSources}
onOpenChange={setBindingDialogOpen}
onSave={handleSaveBinding}
/>
</div>
)
}