Skip to content

Commit c4fc86f

Browse files
authored
feat(Search): optimize result list preview (#4380)
* feat(Search): optimize result list preview * feat: update demo
1 parent 45dc75b commit c4fc86f

5 files changed

Lines changed: 39 additions & 31 deletions

File tree

packages/components/search/__test__/__snapshots__/demo.test.js.snap

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,16 @@ exports[`Search Search base demo works fine 1`] = `
3333
>
3434
<t-search
3535
placeholder="输入tdesign,有预览结果"
36-
resultList="{{Array []}}"
36+
resultList="{{
37+
Array [
38+
"tdesign-vue",
39+
"tdesign-react",
40+
"tdesign-miniprogram",
41+
"tdesign-angular",
42+
"tdesign-mobile-vue",
43+
"tdesign-mobile-react",
44+
]
45+
}}"
3746
bind:change="onChangeValue"
3847
/>
3948
</wx-view>

packages/components/search/_example/base/index.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1+
const allList = [
2+
'tdesign-vue',
3+
'tdesign-react',
4+
'tdesign-miniprogram',
5+
'tdesign-angular',
6+
'tdesign-mobile-vue',
7+
'tdesign-mobile-react',
8+
];
9+
110
Component({
211
data: {
3-
value: '',
4-
resultList: [],
12+
resultList: allList,
513
},
614
methods: {
715
onChangeValue(e) {
816
const { value } = e.detail;
9-
const list = [
10-
'tdesign-vue',
11-
'tdesign-react',
12-
'tdesign-miniprogram',
13-
'tdesign-angular',
14-
'tdesign-mobile-vue',
15-
'tdesign-mobile-react',
16-
];
1717
this.setData({
18-
resultList: value ? list.filter((v) => v.includes(value)) : [],
18+
resultList: value ? allList.filter((v) => v.includes(value)) : allList,
1919
});
2020
},
2121
},

packages/components/search/search.less

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,12 @@
101101
}
102102
}
103103

104+
&__result-list {
105+
max-height: 560rpx;
106+
overflow-y: auto;
107+
-webkit-overflow-scrolling: touch;
108+
}
109+
104110
&__result-list &__result-item {
105111
padding-left: 0;
106112

packages/components/search/search.ts

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,9 @@ export default class Search extends SuperComponent {
2626
observers = {
2727
resultList(val) {
2828
const { isSelected } = this.data;
29-
if (val.length) {
30-
if (isSelected) {
31-
// 已选择
32-
this.setData({
33-
isShowResultList: false,
34-
isSelected: false,
35-
});
36-
} else {
37-
this.setData({
38-
isShowResultList: true,
39-
});
40-
}
41-
} else {
42-
this.setData({
43-
isShowResultList: false,
44-
});
29+
// resultList 变化且已选过某项时,重置 isSelected 状态
30+
if (val.length && isSelected) {
31+
this.setData({ isSelected: false });
4532
}
4633
},
4734
'clearTrigger, clearable, disabled, readonly'() {
@@ -52,8 +39,8 @@ export default class Search extends SuperComponent {
5239
data = {
5340
classPrefix: name,
5441
prefix,
55-
isShowResultList: false,
5642
isSelected: false,
43+
isSearching: false, // 是否开启搜索模式
5744
showClearIcon: true,
5845
};
5946

@@ -84,6 +71,7 @@ export default class Search extends SuperComponent {
8471

8572
onFocus(e) {
8673
const { value } = e.detail;
74+
this.setData({ isSearching: true });
8775
this.updateClearIconVisible(true);
8876
this.triggerEvent('focus', { value });
8977
}
@@ -95,7 +83,7 @@ export default class Search extends SuperComponent {
9583
}
9684

9785
handleClear() {
98-
this.setData({ value: '' });
86+
this.setData({ value: '', isSearching: false });
9987
this.triggerEvent('clear', { value: '' });
10088
this.triggerEvent('change', { value: '', trigger: 'clear' });
10189
}
@@ -106,6 +94,7 @@ export default class Search extends SuperComponent {
10694
}
10795

10896
onActionClick() {
97+
this.setData({ isSearching: false });
10998
this.triggerEvent('action-click');
11099
}
111100

packages/components/search/search.wxml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,11 @@
6262
<slot wx:else name="action" />
6363
</view>
6464

65-
<view wx:if="{{isShowResultList && !isSelected}}" class="{{classPrefix}}__result-list" aria-role="listbox">
65+
<view
66+
wx:if="{{isSearching && resultList.length > 0 && !isSelected}}"
67+
class="{{classPrefix}}__result-list"
68+
aria-role="listbox"
69+
>
6670
<t-cell
6771
wx:for="{{resultList}}"
6872
wx:key="index"

0 commit comments

Comments
 (0)