import React, { ReactNode, useEffect, useMemo, useState } from 'react'; import Icon from '../Icon/index'; import { Input } from 'antd'; const LargeScreenComponentSearch: React.FC = ( props ) => { const { switchIcon, list = [], change, placeholder = '搜索', value = '', tabsUpdate, styles, selectUpdate, searchUpdate } = props; const [inputValue, setInputValue] = useState(value); //Input的value const [closeShow, setCloseShow] = useState(false); //如果tabs切换的值,变了 input的value 变空 useEffect(() => { setInputValue(''); }, [tabsUpdate, selectUpdate, searchUpdate]); //input的事件 const changeSearch = (value: string, type: string) => { if (value) { setCloseShow(true); } else { setCloseShow(false); } setInputValue(value); change?.(value, type); }; const iconClickInput = () => { change?.('', 'clear'); setInputValue(''); setCloseShow(false); }; //icon的点击事件 const iconClick = () => { change?.(switchIcon, 'iconClick'); }; const Dom = useMemo(() => { return (
{list?.length > 0 && list?.map((item, index) => { if (item === 'search') { return (
} onChange={(e) => changeSearch(e.target.value, 'change')} onBlur={(e) => changeSearch(e.target.value, 'blur')} />
); } else if (item === 'switch') { return typeof switchIcon === 'string' ? ( iconClick()} /> ) : ( switchIcon ); } })}
); }, [switchIcon, list, placeholder, value, inputValue, styles]); return Dom; }; export default LargeScreenComponentSearch; export interface ILargeScreenComponentSearch { switchIcon?: string | ReactNode; list?: string[] | number[]; placeholder?: string; change?: Function; value?: string; tabsUpdate?: string | number | boolean; styles?: React.CSSProperties; selectUpdate?: string; searchUpdate?: string; }