import React from 'react'; import { COMMON_EVENT_PREFIX, type Id, type IteratorContainer as TMagicIteratorContainer, type MIteratorContainer, type MNode, } from '@tmagic/core'; import { useApp } from '@tmagic/react-runtime-help'; 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, node } = 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, }, }; }); const clickHandler = () => { if (node && app) { app.emit(`${COMMON_EVENT_PREFIX}click`, node); } }; return (
{configs.map((config: any, index: number) => ( ))}
); }; IteratorContainer.displayName = 'magic-ui-iterator-container'; export default IteratorContainer;