import RowTextarea from '@/components/seal-form/row-textarea'; import { DeleteOutlined } from '@ant-design/icons'; import { useIntl } from '@umijs/max'; import { Button, Tooltip } from 'antd'; import React, { forwardRef, useImperativeHandle, useRef } from 'react'; import '../style/input-list.less'; interface InputListProps { ref?: any; height?: number; extra?: (data: any) => React.ReactNode; showLabel?: boolean; textList: { text: string; uid: number | string; name: string; }[]; onChange?: ( textList: { text: string; uid: number | string; name: string }[] ) => void; onPaste?: (e: any, index: number) => void; onSelect?: (data: { start: number; end: number; beforeText: string; afterText: string; index: number; }) => void; } const InputList: React.FC = forwardRef( ( { textList, showLabel = true, height, onChange, extra, onPaste, onSelect }, ref ) => { const intl = useIntl(); const messageId = useRef(0); const containerRef = useRef(null); const setMessageId = () => { messageId.current = messageId.current + 1; return messageId.current; }; const handleAdd = () => { setMessageId(); const dataList = [...textList]; dataList.push({ text: '', uid: messageId.current, name: `Text ${dataList.length + 1}` }); onChange?.(dataList); }; const handleDelete = (text: { text: string; uid: number | string }) => { const dataList = [...textList]; const index = dataList.findIndex((item) => item.uid === text.uid); dataList.splice(index, 1); onChange?.(dataList); }; const handleTextChange = ( value: string, text: { text: string; uid: number | string } ) => { const dataList = [...textList]; const index = dataList.findIndex((item) => item.uid === text.uid); dataList[index].text = value; onChange?.(dataList); }; useImperativeHandle(ref, () => ({ handleAdd, handleDelete, handleTextChange, setMessageId })); return (
{textList.map((text, index) => { return (
handleTextChange(e.target.value, text)} onPaste={(e) => onPaste?.(e, index)} onSelect={(data) => onSelect?.({ ...data, index })} >
{extra?.(text)}
); })}
); } ); export default InputList;