import React, { useEffect, useState, useRef } from "react" import { Input, Button, Space, Radio } from "antd" import { MinusCircleOutlined, PlusOutlined } from "@ant-design/icons" import { SearchOutlined, CloseCircleFilled } from '@ant-design/icons' export const SearchComponent = ({ onSearch, searchValue, onClear, ...props }) => { const inputRef = useRef(null) const handleOuterDivClick = () => { inputRef.current.focus() } return (
{ searchValue.length > 0 &&
{ e.preventDefault() e.stopPropagation() if (onClear) onClear() }}>
}
) } export const DynamicInputList = () => { const [inputs, setInputs] = useState([""]) // Initialize with one input const addInput = () => { setInputs([...inputs, ""]) } const removeInput = (index) => { setInputs(inputs.filter((_, i) => i !== index)) } const handleInputChange = (value, index) => { const newInputs = [...inputs] newInputs[index] = value setInputs(newInputs) } return (
{inputs.map((input, index) => ( handleInputChange(e.target.value, index)} placeholder={`Input ${index + 1}`} /> {index !== 0 && ( // Do not show delete button for the first input removeInput(index)} /> )} ))}
) } export const DynamicRadioInputList = React.memo(({defaultInputs=[""], defaultSelected=null, onChange}) => { const [inputs, setInputs] = useState([""]) // Initialize with one input const [selectedRadio, setSelectedRadio] = useState(null) // Tracks selected radio button useEffect(() => { setInputs(defaultInputs) }, [defaultInputs]) useEffect(() => { setSelectedRadio(defaultSelected) }, [defaultSelected]) useEffect(() => { if(onChange){ onChange({inputs, selectedRadio}) } }, [selectedRadio, inputs]) // Add a new input const addInput = () => { setInputs([...inputs, ""]) } // Remove an input by index, but keep the first one const removeInput = (index) => { const newInputs = inputs.filter((_, i) => i !== index) setInputs(newInputs) // Adjust selected radio if necessary if (selectedRadio >= newInputs.length) { setSelectedRadio(newInputs.length - 1) } } // Update input value const handleInputChange = (value, index) => { const newInputs = [...inputs] newInputs[index] = value setInputs(newInputs) } // Handle radio button selection const handleRadioChange = (e) => { setSelectedRadio(e.target.value) } return (
{inputs.map((input, index) => ( handleInputChange(e.target.value, index)} placeholder={`Input ${index + 1}`} /> {index !== 0 && ( // Do not show delete button for the first input
removeInput(index)} />
)}
))}
) })