import React from 'react'; import type { IteratorContainer as TMagicIteratorContainer } from '@tmagic/core'; import { useApp } from '@tmagic/react-runtime-help'; import type { Id, MIteratorContainer, MNode } from '@tmagic/schema'; interface IteratorContainerSchema extends Omit { id?: Id; type?: 'iterator-container'; } interface IteratorContainerProps { config: IteratorContainerSchema; className: string; style: Record; id: string; containerIndex: number; iteratorIndex: number[]; iteratorContainerId: Id[]; } interface IteratorItemSchema { items: MNode[]; condResult: boolean; style: { [key: string]: any; }; } const IteratorContainer: React.FC = ({ config, id, style, className, containerIndex, iteratorIndex, iteratorContainerId, }) => { const { app } = useApp({ config, iteratorIndex, iteratorContainerId }); let { iteratorData = [] } = config; const { itemConfig, dsField, items } = config; if (!Array.isArray(iteratorData)) { iteratorData = []; } if (app?.platform === 'editor' && !iteratorData.length) { iteratorData.push({}); } const MagicUiComp = app?.resolveComponent('container'); const iteratorContainerNode = app?.getNode( id || config.id || '', iteratorContainerId, iteratorIndex, ); iteratorContainerNode?.resetNodes(); const configs: IteratorItemSchema[] = iteratorData.map((itemData: any, index: number) => { const condResult = app?.platform !== 'editor' ? app?.dataSourceManager?.compliedIteratorItemConds(itemData, itemConfig, dsField) ?? true : true; const newItems = app?.dataSourceManager?.compliedIteratorItems(itemData, items, dsField) ?? items; iteratorContainerNode?.setNodes(config.items, index); return { items: newItems, condResult, style: { position: 'relative', left: 0, top: 0, ...itemConfig.style, }, }; }); return (
{configs.map((config: any, index: number) => ( ))}
); }; IteratorContainer.displayName = 'magic-ui-iterator-container'; export default IteratorContainer;