#QueryFilter / LightFilter
QueryFilter and LightFilter solve the problem of using the form with other components, such as Table, List, etc., and avoid complicated style settings. QueryFilter and LightFilter are supported by default in ProTable as their own filter forms.
#Query Filter
Basic Usage
import {
ProFormDateTimePicker,
ProFormText,
QueryFilter,
} from '@ant-design/pro-components';
const Demo = () => {
return (
<QueryFilter>
<ProFormDateTimePicker
label="下单时间"
colProps={{ xl: 12 }}
name="orderTime"
required
/>
<ProFormText disabled colProps={{ xl: 12 }} name="pay" label="支付方式" />
</QueryFilter>
);
};
export default () => (
<div style={{ padding: 24 }}>
<Demo />
</div>
);
{
"defaultColsNumber": 6
}Basic Usage (debug)
import {
ProForm,
ProFormDatePicker,
ProFormText,
QueryFilter,
} from '@ant-design/pro-components';
import { Input } from 'antd';
const Demo = () => {
const formProps = {
defaultColsNumber: 6,
};
return (
<>
<>
<QueryFilter {...formProps}>
<ProFormDatePicker
// key={i}
colSize={4}
name="test"
label="test"
/>
{[...Array(10).keys()].map((i) => (
<ProFormDatePicker
key={i}
name={`startdate${i + 1}`}
label={`Date${i + 1}`}
/>
))}
</QueryFilter>
<pre>{JSON.stringify(formProps, null, 2)}</pre>
</>
<QueryFilter<{
name: string;
company: string;
}>
onFinish={async () => {
}}
span={6}
defaultCollapsed={false}
>
<ProForm.Item name="name" label="test">
<Input />
</ProForm.Item>
<ProFormText
name="name"
label="应用名称"
rules={[{ required: true }]}
/>
<ProFormText name="sex" label="性别" />
</QueryFilter>
<QueryFilter<{
name: string;
company: string;
}>
onFinish={async () => {
}}
span={6}
defaultCollapsed={false}
>
<ProFormText
name="name"
label="应用名称"
rules={[{ required: true }]}
/>
<ProFormText name="creater" label="创建人" />
<ProFormText name="sex" label="性别" />
</QueryFilter>
<QueryFilter<{
name: string;
company: string;
}>
onFinish={async () => {
}}
defaultCollapsed={false}
>
<ProFormText
name="name"
label="应用名称"
rules={[{ required: true }]}
/>
<ProFormText name="creater" label="创建人" />
<ProFormText name="sex" label="性别" />
<ProFormText name="status" label="应用状态" />
<ProFormText name="startdate" label="响应日期" />
<ProFormText name="create" label="创建时间" />
</QueryFilter>
<QueryFilter<{
name: string;
company: string;
}>
onFinish={async () => {
}}
span={12}
defaultCollapsed={false}
>
<ProFormText
name="name"
label="应用名称"
rules={[{ required: true }]}
/>
<ProFormText name="creater" label="创建人" />
<ProFormText name="sex" label="性别" />
<ProFormText name="status" label="应用状态" />
<ProFormText name="startdate" label="响应日期" />
<ProFormText name="create" label="创建时间" colSize={3} />
</QueryFilter>
<QueryFilter<{
name: string;
company: string;
}>
onFinish={async () => {
}}
span={8}
defaultCollapsed={false}
>
<ProFormText
name="name"
label="应用名称"
rules={[{ required: true }]}
/>
<ProFormText name="creater" label="创建人" />
<ProFormText name="sex" label="性别" />
<ProFormText name="status" label="应用状态" />
<ProFormText name="startdate" label="响应日期" />
<ProFormText name="create" label="创建时间" colSize={3} />
</QueryFilter>
<QueryFilter<{
name: string;
company: string;
}>
onFinish={async () => {
}}
span={4}
submitterColSpanProps={{ span: 12 }}
defaultColsNumber={1}
defaultCollapsed={false}
>
<ProFormText
name="name"
label="应用名称"
rules={[{ required: true }]}
/>
<ProFormText name="creater" label="创建人" />
<ProFormText name="sex" label="性别" />
<ProFormText name="status" label="应用状态" />
<ProFormText name="startdate" label="响应日期" />
<ProFormText name="create" label="创建时间" colSize={3} />
</QueryFilter>
</>
);
};
export default () => (
<div style={{ padding: 24 }}>
<Demo />
</div>
);
#Collapsed by default
QueryFilter — collapsed by default
import {
ProFormDatePicker,
ProFormText,
QueryFilter,
} from '@ant-design/pro-components';
const Demo = () => {
return (
<QueryFilter defaultCollapsed split>
<ProFormText name="name" label="应用名称" />
<ProFormDatePicker name="createDate" label="创建时间" />
<ProFormText name="status" label="应用状态" />
<ProFormDatePicker name="replyDate" label="响应日期" />
<ProFormDatePicker name="startDate" label="创建时间" />
<ProFormDatePicker name="endDate" label="结束时间" />
</QueryFilter>
);
};
export default () => (
<div style={{ padding: 24 }}>
<Demo />
</div>
);
#Vertical layout
QueryFilter — vertical layout
import {
ProFormCheckbox,
ProFormDatePicker,
ProFormRadio,
ProFormText,
QueryFilter,
} from '@ant-design/pro-components';
const Demo = () => {
return (
<QueryFilter layout="vertical">
<ProFormText name="name" label="这是一个超级超级长的名称" />
<ProFormDatePicker name="birth" label="创建时间" />
<ProFormText name="sex" label="应用状态" />
<ProFormRadio.Group
name="freq"
label="查询频度"
options={[
{
value: 'weekly',
label: '每周',
},
{
value: 'quarterly',
label: '每季度',
},
{
value: 'monthly',
label: '每月',
},
{
value: 'yearly',
label: '每年',
},
]}
/>
<ProFormCheckbox.Group
name="checkbox"
label="行业分布"
options={['农业', '制造业', '互联网']}
/>
</QueryFilter>
);
};
export default () => (
<div style={{ padding: 24 }}>
<Demo />
</div>
);
#Search field
QueryFilter — search input
import { DownOutlined, UpOutlined } from '@ant-design/icons';
import {
ProForm,
ProFormDatePicker,
ProFormText,
QueryFilter,
} from '@ant-design/pro-components';
import { Input, Tabs } from 'antd';
import React, { useState } from 'react';
type AdvancedSearchProps = {
onFilterChange?: (allValues: any) => void;
onSearch?: (text: string) => void;
onTypeChange?: (type: string) => void;
defaultType?: string;
};
const AdvancedSearch: React.FC<AdvancedSearchProps> = (props) => {
const {
onSearch,
onTypeChange,
defaultType = 'articles',
onFilterChange,
} = props;
const [searchText, setSearchText] = useState<string>();
const [showFilter, setShowFilter] = useState<boolean>(true);
const quickSearch = ['小程序开发', '入驻', 'ISV 权限'];
return (
<div
style={{
padding: 24,
}}
>
<div
style={{
display: 'flex',
flexDirection: 'column',
gap: 8,
}}
>
<Input.Search
placeholder="请输入"
enterButton="搜索"
value={searchText}
onChange={(e) => {
setSearchText(e.target.value);
}}
onSearch={onSearch}
style={{ maxWidth: 522, width: '100%' }}
/>
<div
style={{
display: 'flex',
gap: 12,
}}
>
{quickSearch.map((text) => (
<a
key={text}
onClick={() => {
setSearchText(text);
if (onSearch) {
onSearch(text);
}
}}
>
{text}
</a>
))}
</div>
</div>
<Tabs
defaultActiveKey={defaultType}
onChange={onTypeChange}
tabBarExtraContent={
<a
style={{
display: 'flex',
gap: 4,
}}
onClick={() => {
setShowFilter(!showFilter);
}}
>
高级筛选 {showFilter ? <UpOutlined /> : <DownOutlined />}
</a>
}
items={[
{
key: 'articles',
label: '文章',
},
{
key: 'projects',
label: '项目',
},
{
key: 'applications',
label: '应用',
},
]}
/>
{showFilter ? (
<QueryFilter
submitter={false}
span={24}
labelWidth="auto"
split
onChange={onFilterChange}
>
<ProForm.Group title="姓名">
<ProFormText name="name" />
</ProForm.Group>
<ProForm.Group title="详情">
<ProFormText name="age" label="年龄" />
<ProFormDatePicker name="birth" label="生日" />
</ProForm.Group>
</QueryFilter>
) : null}
</div>
);
};
export default AdvancedSearch;