Skip to content

Commit ced0699

Browse files
authored
fix: select placeholder position (#677)
* use import export type syntax * fix: select placeholder should take place when searching ant-design/ant-design#27688 * fix test case
1 parent e35c87c commit ced0699

File tree

4 files changed

+33
-8
lines changed

4 files changed

+33
-8
lines changed

src/Selector/SingleSelector.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,18 @@ const SingleSelector: React.FC<SelectorProps> = (props) => {
6363
? item.label.toString()
6464
: undefined;
6565

66+
const renderPlaceholder = () => {
67+
if (item) {
68+
return null;
69+
}
70+
const hiddenStyle = hasTextInput ? { visibility: 'hidden' as const } : undefined;
71+
return (
72+
<span className={`${prefixCls}-selection-placeholder`} style={hiddenStyle}>
73+
{placeholder}
74+
</span>
75+
);
76+
};
77+
6678
return (
6779
<>
6880
<span className={`${prefixCls}-selection-search`}>
@@ -101,9 +113,7 @@ const SingleSelector: React.FC<SelectorProps> = (props) => {
101113
)}
102114

103115
{/* Display placeholder */}
104-
{!item && !hasTextInput && (
105-
<span className={`${prefixCls}-selection-placeholder`}>{placeholder}</span>
106-
)}
116+
{renderPlaceholder()}
107117
</>
108118
);
109119
};

src/index.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import Select, { ExportedSelectProps as SelectProps } from './Select';
2-
import { RefSelectProps } from './generate';
1+
import Select from './Select';
32
import Option from './Option';
43
import OptGroup from './OptGroup';
4+
import type { ExportedSelectProps as SelectProps } from './Select';
5+
import type { RefSelectProps } from './generate';
56

6-
export { Option, OptGroup, SelectProps, RefSelectProps };
7+
export { Option, OptGroup };
8+
export type { SelectProps, RefSelectProps };
79

810
export default Select;

tests/Select.test.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1615,9 +1615,14 @@ describe('Select.Basic', () => {
16151615
describe('show placeholder', () => {
16161616
it('when searchValue is controlled', () => {
16171617
const wrapper = mount(<Select searchValue="light" placeholder="bamboo" />);
1618-
expect(wrapper.find('.rc-select-selection-placeholder').length).toBeTruthy();
1618+
expect(
1619+
wrapper.find('.rc-select-selection-placeholder').getDOMNode().hasAttribute('style'),
1620+
).toBe(false);
16191621
toggleOpen(wrapper);
1620-
expect(wrapper.find('.rc-select-selection-placeholder').length).toBeFalsy();
1622+
expect(
1623+
(wrapper.find('.rc-select-selection-placeholder').getDOMNode() as HTMLSpanElement).style
1624+
.visibility,
1625+
).toBe('hidden');
16211626
});
16221627

16231628
it('when value is null', () => {

tests/__snapshots__/Select.test.tsx.snap

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ exports[`Select.Basic does not filter when filterOption value is false 1`] = `
2727
value=""
2828
/>
2929
</span>
30+
<span
31+
class="rc-select-selection-placeholder"
32+
style="visibility:hidden"
33+
/>
3034
</div>
3135
<div>
3236
<div
@@ -156,6 +160,10 @@ exports[`Select.Basic filterOption could be true as described in default value 1
156160
value="3"
157161
/>
158162
</span>
163+
<span
164+
class="rc-select-selection-placeholder"
165+
style="visibility: hidden;"
166+
/>
159167
</div>
160168
<div>
161169
<div

0 commit comments

Comments
 (0)