import React from 'react'; import { cn } from '@/lib/utils'; import { LayoutContainer as LayoutContainerType, WidgetInstance } from '@/modules/layout/LayoutManager'; import { widgetRegistry } from '@/lib/widgetRegistry'; import CollapsibleSection from '@/components/CollapsibleSection'; import { LayoutContainer } from './LayoutContainer'; import type { LayoutContainerEditProps } from './LayoutContainerEdit'; export type LayoutContainerViewProps = Omit< LayoutContainerEditProps, | 'onAddWidget' | 'onRemoveWidget' | 'onMoveWidget' | 'onUpdateColumns' | 'onUpdateSettings' | 'onAddContainer' | 'onRemoveContainer' | 'onMoveContainer' | 'onEditWidget' | 'onFilesDrop' | 'canMoveContainerUp' | 'canMoveContainerDown' >; const LayoutContainerView: React.FC = ({ container, isEditMode = false, pageId, selectedContainerId, onSelect, selectedWidgetId, selectedWidgetIds, onSelectWidget, depth = 0, isCompactMode = false, contextVariables, pageContext, }) => { const maxDepth = 3; const getGridClasses = (columns: number) => { const baseClass = "grid"; switch (columns) { case 1: return `${baseClass} grid-cols-1`; case 2: return `${baseClass} grid-cols-1 md:grid-cols-2`; case 3: return `${baseClass} grid-cols-1 md:grid-cols-2 lg:grid-cols-3`; case 4: return `${baseClass} grid-cols-1 md:grid-cols-2 lg:grid-cols-4`; case 5: return `${baseClass} grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5`; case 6: return `${baseClass} grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6`; default: return `${baseClass} grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-${Math.min(columns, 12)}`; } }; const gridClasses = getGridClasses(container.columns); const renderContainerContent = () => ( <> {container.widgets .sort((a, b) => (a.order || 0) - (b.order || 0)) .map((widget, index) => ( ))} {container.children .sort((a, b) => (a.order || 0) - (b.order || 0)) .map((childContainer) => (
))} {container.widgets.length === 0 && container.children.length === 0 && (

)} ); const isContainerEnabled = container.settings?.enabled !== false; if (!isContainerEnabled) { return null; } return (
{container.settings?.collapsible ? (
{renderContainerContent()}
) : (
{container.settings?.showTitle && (

{container.settings?.title || `Container (${container.columns} col${container.columns !== 1 ? 's' : ''})`}

)}
{renderContainerContent()}
)}
); }; interface WidgetItemViewProps { widget: WidgetInstance; index: number; containerId: string; pageId: string; selectedWidgetId?: string | null; selectedWidgetIds?: Set; onSelectWidget?: (widgetId: string, pageId?: string) => void; contextVariables?: Record; pageContext?: Record; selectedContainerId?: string | null; onSelectContainer?: (containerId: string, pageId?: string) => void; } const WidgetItemView: React.FC = ({ widget, index, containerId, pageId, selectedWidgetId, selectedWidgetIds, onSelectWidget, contextVariables, pageContext, selectedContainerId, onSelectContainer, }) => { const widgetDefinition = widgetRegistry.get(widget.widgetId); if (!widgetDefinition) { return (

Widget "{widget.widgetId}" not found in registry

); } const WidgetComponent = widgetDefinition.component; const isEnabled = widget.props?.enabled !== false; if (!isEnabled) { return null; } return (
{ }} selectedWidgetId={selectedWidgetId} onSelectWidget={onSelectWidget} editingWidgetId={null} onEditWidget={() => { }} contextVariables={contextVariables} pageContext={pageContext} selectedContainerId={selectedContainerId} onSelectContainer={onSelectContainer} />
); }; export default LayoutContainerView;