import { type ChangeEvent, useEffect } from "react"; import { FormOutlined as FormOutlinedIcon } from "@ant-design/icons"; import { nanoid } from "@ant-design/pro-components"; import { useControllableValue } from "ahooks"; import { Button, Form, Input, type InputProps, Space } from "antd"; import { useAntdForm } from "@/hooks"; import ModalForm from "./ModalForm"; import MultipleInput from "./MultipleInput"; type SplitOptions = { removeEmpty?: boolean; trim?: boolean; }; export type MultipleSplitValueInputProps = Omit & { defaultValue?: string; delimiter?: string; maxCount?: number; minCount?: number; modalTitle?: string; modalWidth?: number; placeholderInModal?: string; showSortButton?: boolean; splitOptions?: SplitOptions; value?: string[]; onChange?: (value: string) => void; }; const DEFAULT_DELIMITER = ";"; const MultipleSplitValueInput = ({ className, style, delimiter = DEFAULT_DELIMITER, disabled, maxCount, minCount, modalTitle, modalWidth = 480, placeholder, placeholderInModal, showSortButton = true, splitOptions = {}, onClear, ...props }: MultipleSplitValueInputProps) => { const [value, setValue] = useControllableValue(props, { valuePropName: "value", defaultValuePropName: "defaultValue", trigger: "onChange", }); const { form: formInst, formProps } = useAntdForm({ name: "componentMultipleSplitValueInput_" + nanoid(), initialValues: { value: value?.split(delimiter) }, onSubmit: (values) => { const temp = values.value ?? []; if (splitOptions.trim) { temp.map((e) => e.trim()); } if (splitOptions.removeEmpty) { temp.filter((e) => !!e); } setValue(temp.join(delimiter)); }, }); useEffect(() => { formInst.setFieldValue("value", value?.split(delimiter)); }, [delimiter, value]); const handleChange = (e: ChangeEvent) => { setValue(e.target.value); }; const handleClear = () => { setValue(""); onClear?.(); }; return ( } validateTrigger="onSubmit" width={modalWidth} > ); }; export default MultipleSplitValueInput;