Skip to content

Commit 650653f

Browse files
authored
Merge pull request #165 from alitajs/feat-filterItems
feat: filterItems支持value控制下拉回显
2 parents e6e666e + 5d99150 commit 650653f

File tree

3 files changed

+57
-25
lines changed

3 files changed

+57
-25
lines changed

packages/antd-mobile-plus/src/FilterItems/PropsType.ts

+22-7
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,21 @@ export interface FilterItemsProps {
5555
*/
5656
aliasObj: AliasProps;
5757
/**
58-
* @description 初始的文字,一般在该值不在数据当中使用
59-
* @default 数组中的第一个
60-
*/
61-
defaultText?: string;
58+
* @description 初始的文字,一般在该值不在数据当中使用
59+
* @default 数组中的第一个
60+
*/
61+
defaultText?: string;
62+
63+
/**
64+
* 值
65+
*/
66+
value?: string;
67+
68+
/**
69+
* @description 筛选的数据
70+
* @default []
71+
*/
72+
data: any[];
6273
}
6374

6475
export interface FilterProps {
@@ -81,9 +92,13 @@ export interface FilterProps {
8192
*/
8293
onItemChange: (data: any) => void;
8394
/**
84-
* @description 页面区域滚动节点,一般用于`type`为relative时使用
85-
* @default document.documentElement
86-
*/
95+
* @description 页面区域滚动节点,一般用于`type`为relative时使用
96+
* @default document.documentElement
97+
*/
8798
scrollElement?: HTMLElement;
8899

100+
/**
101+
* 每一项的值
102+
*/
103+
value?: Record<string, string>;
89104
}
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
1-
import * as React from "react";
2-
import classnames from "classnames";
3-
import { FilterItemsProps } from "../../PropsType";
4-
import "./index.less";
1+
import * as React from 'react';
2+
import classnames from 'classnames';
3+
import { FilterItemsProps } from '../../PropsType';
4+
import './index.less';
55

6-
const prefixCls = "alita-filter-item";
6+
const prefixCls = 'alita-filter-item';
77

88
export const FilterItem: React.FC<FilterItemsProps> = (props) => {
99
const {
10-
openFlag = "up",
10+
openFlag = 'up',
1111
onClick,
1212
selectObj = {},
13-
aliasObj = { label: "label", id: "id" },
13+
aliasObj = { label: 'label', id: 'id' },
1414
activeFilterId,
1515
filterId,
1616
initObj = {},
1717
defaultText,
18+
value,
19+
data = [],
1820
} = props;
1921
const [status, updateStatus] = React.useState(openFlag);
2022
const [currentObj, updateCurrentObj] = React.useState(initObj);
@@ -23,24 +25,36 @@ export const FilterItem: React.FC<FilterItemsProps> = (props) => {
2325
React.useEffect(() => {
2426
updateStatus(openFlag);
2527
if (activeFilterId === filterId) {
26-
if (JSON.stringify(selectObj) !== "{}") {
27-
updateText("");
28+
if (JSON.stringify(selectObj) !== '{}') {
29+
updateText('');
2830
updateCurrentObj(selectObj);
2931
}
3032
}
3133
}, [openFlag]);
3234

35+
React.useEffect(() => {
36+
const chooseItem = data.find((row: any) => {
37+
if (aliasObj.id) {
38+
return row[aliasObj.id] === value;
39+
}
40+
return false;
41+
});
42+
if (chooseItem) {
43+
updateCurrentObj(chooseItem);
44+
}
45+
}, [value]);
46+
3347
return (
3448
<div className={`${prefixCls}`}>
3549
<div
3650
className={`${prefixCls}-content`}
3751
onClick={() => {
38-
if (status === "up") {
39-
updateStatus("down");
40-
onClick("down", currentObj);
52+
if (status === 'up') {
53+
updateStatus('down');
54+
onClick('down', currentObj);
4155
} else {
42-
updateStatus("up");
43-
onClick("up", currentObj);
56+
updateStatus('up');
57+
onClick('up', currentObj);
4458
}
4559
}}
4660
>
@@ -49,8 +63,8 @@ export const FilterItem: React.FC<FilterItemsProps> = (props) => {
4963
</div>
5064
<i
5165
className={classnames({
52-
[`${prefixCls}-icon-down`]: status === "down",
53-
[`${prefixCls}-icon-up`]: status === "up",
66+
[`${prefixCls}-icon-down`]: status === 'down',
67+
[`${prefixCls}-icon-up`]: status === 'up',
5468
[`${prefixCls}-noraml-icon`]: true,
5569
})}
5670
></i>
@@ -59,5 +73,5 @@ export const FilterItem: React.FC<FilterItemsProps> = (props) => {
5973
);
6074
};
6175

62-
FilterItem.displayName = "FilterItem";
76+
FilterItem.displayName = 'FilterItem';
6377
export default FilterItem;

packages/antd-mobile-plus/src/FilterItems/index.tsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export const FilterItems: FC<FilterProps> = (props) => {
1515
alias = { label: "label", id: "id" },
1616
onItemChange,
1717
scrollElement,
18+
value = {},
1819
} = props;
1920
const [activeIndex, updateActiveIndex] = useState(-1);
2021
const [drawOpen, updateDrawOpen] = useState("up");
@@ -46,7 +47,9 @@ export const FilterItems: FC<FilterProps> = (props) => {
4647
filterId={filterId}
4748
aliasObj={aliasObj}
4849
selectObj={activeObj}
49-
initObj={item.data[defaultSelect]}
50+
value={value[filterId]}
51+
data={item.data}
52+
initObj={item.data?.[defaultSelect]}
5053
openFlag={index === activeIndex ? "down" : "up"}
5154
onClick={(options: string, selectObj) => {
5255
log(options);

0 commit comments

Comments
 (0)