import React from 'react';  
 | 
import { Input, Button, Space, Select, DatePicker } from 'antd';  
 | 
import { FormattedMessage, useIntl } from '@umijs/max';  
 | 
import Http from '@/utils/http';  
 | 
import moment from 'moment';  
 | 
  
 | 
const NONE_OPTION = -9999;  
 | 
const DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss';  
 | 
  
 | 
const TextFilter = (props) => {  
 | 
    const intl = useIntl();  
 | 
    const [condition, setCondition] = React.useState('');  
 | 
  
 | 
    return (  
 | 
        <div style={{ padding: 8 }}>  
 | 
            <Input  
 | 
                style={{ width: 188, marginBottom: 8, display: 'block' }}  
 | 
                placeholder={intl.formatMessage({ id: 'commont.enter', defaultMessage: '请输入' })}  
 | 
                value={condition}  
 | 
                onChange={e => {  
 | 
                    props.setSelectedKeys(e.target.value ? [e.target.value] : []);  
 | 
                    setCondition(e.target.value)  
 | 
                }}  
 | 
            />  
 | 
            <Space>  
 | 
                <Button  
 | 
                    type="primary"  
 | 
                    onClick={() => {  
 | 
                        props.confirm();  
 | 
                        if (condition === '' || condition === null || condition === undefined) {  
 | 
                            props.setSearchParam(prevState => {  
 | 
                                const state = { ...prevState };  
 | 
                                delete state[props.name];  
 | 
                                return state;  
 | 
                            })  
 | 
                        } else {  
 | 
                            props.setSearchParam(prevState => ({  
 | 
                                ...prevState,  
 | 
                                [props.name]: condition  
 | 
                            }));  
 | 
                        }  
 | 
                        props.actionRef.current?.reload();  
 | 
                    }}  
 | 
                    size="small"  
 | 
                    style={{ width: 90 }}  
 | 
                >  
 | 
                    <FormattedMessage id='common.submit' defaultMessage='确定' />  
 | 
                </Button>  
 | 
                <Button  
 | 
                    onClick={() => {  
 | 
                        setCondition('')  
 | 
                        props.setSelectedKeys([]);  
 | 
                        props.clearFilters()  
 | 
  
 | 
                        props.confirm();  
 | 
                        props.setSearchParam(prevState => {  
 | 
                            const state = { ...prevState };  
 | 
                            delete state[props.name];  
 | 
                            return state;  
 | 
                        })  
 | 
                        props.actionRef.current?.reload();  
 | 
                    }}  
 | 
                    size="small"  
 | 
                    style={{ width: 90 }}  
 | 
                >  
 | 
                    <FormattedMessage id='common.reset' defaultMessage='重置' />  
 | 
                </Button>  
 | 
            </Space>  
 | 
        </div>  
 | 
    );  
 | 
}  
 | 
  
 | 
const SelectFilter = (props) => {  
 | 
    const intl = useIntl();  
 | 
    const [currentOption, setCurrentOption] = React.useState();  
 | 
  
 | 
    return (  
 | 
        <div style={{ padding: 8 }}>  
 | 
            <div>  
 | 
                <Select  
 | 
                    style={{ width: 188, marginBottom: 8, display: 'block' }}  
 | 
                    placeholder={intl.formatMessage({ id: 'commont.select', defaultMessage: '请选择' })}  
 | 
                    value={currentOption === NONE_OPTION ? undefined : currentOption}  
 | 
                    onChange={value => {  
 | 
                        setCurrentOption(value)  
 | 
                        props.setSelectedKeys(value !== undefined && value !== null ? [value] : []);  
 | 
                    }}  
 | 
                >  
 | 
                    {props.data.map(item => (  
 | 
                        <Select.Option key={item.value} value={item.value}>  
 | 
                            {item.label}  
 | 
                        </Select.Option>  
 | 
                    ))}  
 | 
                </Select>  
 | 
            </div>  
 | 
            <Space>  
 | 
                <Button  
 | 
                    type="primary"  
 | 
                    onClick={() => {  
 | 
                        props.confirm();  
 | 
                        if (currentOption === NONE_OPTION) {  
 | 
                            props.setSearchParam(prevState => {  
 | 
                                const state = { ...prevState };  
 | 
                                delete state[props.name];  
 | 
                                return state;  
 | 
                            })  
 | 
                        } else {  
 | 
                            props.setSearchParam(prevState => ({  
 | 
                                ...prevState,  
 | 
                                [props.name]: currentOption  
 | 
                            }));  
 | 
                        }  
 | 
                        props.actionRef.current?.reload();  
 | 
                    }}  
 | 
                    size="small"  
 | 
                    style={{ width: 90 }}  
 | 
                >  
 | 
                    <FormattedMessage id='common.submit' defaultMessage='确定' />  
 | 
                </Button>  
 | 
                <Button  
 | 
                    onClick={() => {  
 | 
                        setCurrentOption(NONE_OPTION)  
 | 
                        props.setSelectedKeys([]);  
 | 
                        props.clearFilters();  
 | 
  
 | 
                        props.confirm();  
 | 
                        props.setSearchParam(prevState => {  
 | 
                            const state = { ...prevState };  
 | 
                            delete state[props.name];  
 | 
                            return state;  
 | 
                        })  
 | 
                        props.actionRef.current?.reload();  
 | 
                    }}  
 | 
                    size="small"  
 | 
                    style={{ width: 90 }}  
 | 
                >  
 | 
                    <FormattedMessage id='common.reset' defaultMessage='重置' />  
 | 
                </Button>  
 | 
            </Space>  
 | 
        </div>  
 | 
    );  
 | 
}  
 | 
  
 | 
const DatetimeRangeFilter = (props) => {  
 | 
    const intl = useIntl();  
 | 
    const [dates, setDates] = React.useState([null, null]);  
 | 
    const [startDate, setStartDate] = React.useState(null);  
 | 
    const [endDate, setEndDate] = React.useState(null);  
 | 
  
 | 
    return (  
 | 
        <div style={{ padding: 8 }}>  
 | 
            <div>  
 | 
                <Space direction="vertical" size={12}>  
 | 
                    <DatePicker.RangePicker  
 | 
                        showTime  
 | 
                        value={dates}  
 | 
                        onChange={changeDates => {  
 | 
                            setDates(changeDates);  
 | 
                            if (changeDates && changeDates[0] && changeDates[1]) {  
 | 
                                const changeStartStr = moment(changeDates[0]).format(DATE_FORMAT);  
 | 
                                setStartDate(changeStartStr);  
 | 
                                const changeEndStr = moment(changeDates[1]).format(DATE_FORMAT);  
 | 
                                setEndDate(changeEndStr);  
 | 
                                props.setSelectedKeys([changeStartStr + '-' + changeEndStr]);  
 | 
                            }  
 | 
                        }}  
 | 
                    />  
 | 
                    <Space>  
 | 
                        <Button  
 | 
                            type="primary"  
 | 
                            onClick={() => {  
 | 
                                props.confirm();  
 | 
                                if (!dates[0] && !dates[1]) {  
 | 
                                    props.setSearchParam(prevState => {  
 | 
                                        const nextState = { ...prevState };  
 | 
                                        delete nextState[props.name + 'Range'];  
 | 
                                        return nextState;  
 | 
                                    });  
 | 
                                } else {  
 | 
                                    props.setSearchParam(prevState => ({  
 | 
                                        ...prevState,  
 | 
                                        [props.name + 'Range']: [startDate, endDate]  
 | 
                                    }));  
 | 
                                }  
 | 
                                props.actionRef.current?.reload();  
 | 
                            }}  
 | 
                            size="small"  
 | 
                        >  
 | 
                            <FormattedMessage id='common.submit' defaultMessage='确定' />  
 | 
                        </Button>  
 | 
                        <Button  
 | 
                            onClick={() => {  
 | 
                                setDates([null, null]);  
 | 
                                setStartDate(null);  
 | 
                                setEndDate(null);  
 | 
                                props.setSelectedKeys([]);  
 | 
                                props.clearFilters();  
 | 
  
 | 
                                props.confirm();  
 | 
                                props.setSearchParam(prevState => {  
 | 
                                    const nextState = { ...prevState };  
 | 
                                    delete nextState[props.name + 'Range'];  
 | 
                                    return nextState;  
 | 
                                });  
 | 
                                props.actionRef.current?.reload();  
 | 
                            }}  
 | 
                            size="small"  
 | 
                        >  
 | 
                            <FormattedMessage id='common.reset' defaultMessage='重置' />  
 | 
                        </Button>  
 | 
                    </Space>  
 | 
                </Space>  
 | 
            </div>  
 | 
        </div>  
 | 
    );  
 | 
}  
 | 
  
 | 
const LinkFilter = (props) => {  
 | 
    const intl = useIntl();  
 | 
    const [currentOption, setCurrentOption] = React.useState();  
 | 
    const [options, setOptions] = React.useState([]);  
 | 
  
 | 
    const fetchData = async (value) => {  
 | 
        return await Http.doPostForm(`api/${props.major}/query`, { condition: value });  
 | 
    }  
 | 
  
 | 
    async function initOptions(value) {  
 | 
        const { data } = await fetchData(value);  
 | 
        setOptions(data);  
 | 
    }  
 | 
  
 | 
    React.useEffect(() => {  
 | 
        initOptions()  
 | 
    }, []);  
 | 
  
 | 
    const handleSearch = (value) => {  
 | 
        initOptions(value)  
 | 
    }  
 | 
  
 | 
    return (  
 | 
        <div style={{ padding: 8 }}>  
 | 
            <div>  
 | 
                <Select  
 | 
                    style={{ width: 188, marginBottom: 8, display: 'block' }}  
 | 
                    placeholder={intl.formatMessage({ id: 'commont.select', defaultMessage: '请选择' })}  
 | 
                    value={currentOption === NONE_OPTION ? undefined : currentOption}  
 | 
                    onChange={value => {  
 | 
                        setCurrentOption(value)  
 | 
                        props.setSelectedKeys(value !== undefined && value !== null ? [value] : []);  
 | 
                    }}  
 | 
                    onSearch={handleSearch}  
 | 
                    options={options.map(item => ({ value: item.value, label: item.label }))}  
 | 
                    filterOption={false}  
 | 
                    showSearch={true}  
 | 
                >  
 | 
                </Select>  
 | 
            </div>  
 | 
            <Space>  
 | 
                <Button  
 | 
                    type="primary"  
 | 
                    onClick={() => {  
 | 
                        props.confirm();  
 | 
                        if (currentOption === NONE_OPTION) {  
 | 
                            props.setSearchParam(prevState => {  
 | 
                                const state = { ...prevState };  
 | 
                                delete state[props.name];  
 | 
                                return state;  
 | 
                            })  
 | 
                        } else {  
 | 
                            props.setSearchParam(prevState => ({  
 | 
                                ...prevState,  
 | 
                                [props.name]: currentOption  
 | 
                            }));  
 | 
                        }  
 | 
                        props.actionRef.current?.reload();  
 | 
                    }}  
 | 
                    size="small"  
 | 
                    style={{ width: 90 }}  
 | 
                >  
 | 
                    <FormattedMessage id='common.submit' defaultMessage='确定' />  
 | 
                </Button>  
 | 
                <Button  
 | 
                    onClick={() => {  
 | 
                        setCurrentOption(NONE_OPTION)  
 | 
                        props.setSelectedKeys([]);  
 | 
                        props.clearFilters();  
 | 
                        initOptions()  
 | 
  
 | 
                        props.confirm();  
 | 
                        props.setSearchParam(prevState => {  
 | 
                            const state = { ...prevState };  
 | 
                            delete state[props.name];  
 | 
                            return state;  
 | 
                        })  
 | 
                        props.actionRef.current?.reload();  
 | 
                    }}  
 | 
                    size="small"  
 | 
                    style={{ width: 90 }}  
 | 
                >  
 | 
                    <FormattedMessage id='common.reset' defaultMessage='重置' />  
 | 
                </Button>  
 | 
            </Space>  
 | 
        </div>  
 | 
    );  
 | 
}  
 | 
  
 | 
  
 | 
export { TextFilter, SelectFilter, DatetimeRangeFilter, LinkFilter }; 
 |