import DragHandleIcon from '@mui/icons-material/DragHandle'; import ExpandLessIcon from '@mui/icons-material/ExpandLess'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import { Box, IconButton } from '@mui/material'; import { ArrayFieldItemTemplateProps, FormContextType, getTemplate, getUiOptions, RJSFSchema } from '@rjsf/utils'; import React, { useCallback, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { ArrayItemProvider } from '../context/ArrayItemContext'; /** * Custom Array Field Item Template with collapse and drag-and-drop support * In RJSF 6.x, this template is called by ArrayField to render each item */ export function ArrayFieldItemTemplate( props: ArrayFieldItemTemplateProps, ): React.ReactElement { const { children, index, hasToolbar, buttonsProps, registry, uiSchema } = props; const { t } = useTranslation('agent'); const [expanded, setExpanded] = useState(false); const handleToggleExpanded = useCallback(() => { setExpanded((previous) => !previous); }, []); // Get the ArrayFieldItemButtonsTemplate to render buttons const uiOptions = getUiOptions(uiSchema); const ArrayFieldItemButtonsTemplate = getTemplate<'ArrayFieldItemButtonsTemplate', T, S, F>( 'ArrayFieldItemButtonsTemplate', registry, uiOptions, ); return ( {/* Header with controls */} {/* Drag handle */} {/* Item title */} {t('PromptConfig.ItemIndex', { index: index + 1 })} {/* Expand/collapse button */} {expanded ? : } {/* Action buttons (remove, move up/down, etc.) */} {hasToolbar && } {/* Content */} {expanded && ( {children} )} ); }