|
1 | 1 | import type { SelectProps } from 'rc-select'; |
2 | 2 | import type { OptionProps } from 'rc-select/es/Option'; |
3 | 3 | import KEYCODE from 'rc-util/lib/KeyCode'; |
| 4 | +import classNames from 'classnames'; |
4 | 5 | import React from 'react'; |
5 | 6 | import type { PaginationLocale, PaginationProps } from './interface'; |
6 | 7 |
|
@@ -111,35 +112,48 @@ const Options: React.FC<OptionsProps> = (props) => { |
111 | 112 |
|
112 | 113 | // ============== render ============== |
113 | 114 |
|
114 | | - if (!changeSize && !quickGo) { |
| 115 | + if (!showSizeChanger && !quickGo) { |
115 | 116 | return null; |
116 | 117 | } |
117 | 118 |
|
118 | 119 | let changeSelect: React.ReactNode = null; |
119 | 120 | let goInput: React.ReactNode = null; |
120 | 121 | let gotoButton: React.ReactNode = null; |
121 | 122 |
|
122 | | - if (changeSize && Select) { |
123 | | - const options = getPageSizeOptions().map((opt, i) => ( |
124 | | - <Select.Option key={i} value={opt.toString()}> |
125 | | - {mergeBuildOptionText(opt)} |
126 | | - </Select.Option> |
127 | | - )); |
| 123 | + if (showSizeChanger && Select) { |
| 124 | + // use showSizeChanger.options if existed, otherwise use pageSizeOptions |
| 125 | + const showSizeChangerOptions = |
| 126 | + typeof showSizeChanger === 'object' ? showSizeChanger.options : undefined; |
| 127 | + const showSizeChangerClassName = |
| 128 | + typeof showSizeChanger === 'object' |
| 129 | + ? showSizeChanger.className |
| 130 | + : undefined; |
| 131 | + const options = showSizeChangerOptions |
| 132 | + ? undefined |
| 133 | + : getPageSizeOptions().map((opt, i) => ( |
| 134 | + <Select.Option key={i} value={opt.toString()}> |
| 135 | + {mergeBuildOptionText(opt)} |
| 136 | + </Select.Option> |
| 137 | + )); |
128 | 138 |
|
129 | 139 | changeSelect = ( |
130 | 140 | <Select |
131 | 141 | disabled={disabled} |
132 | 142 | prefixCls={selectPrefixCls} |
133 | 143 | showSearch={false} |
134 | | - className={`${prefixCls}-size-changer`} |
135 | | - optionLabelProp="children" |
| 144 | + optionLabelProp={showSizeChangerOptions ? 'label' : 'children'} |
136 | 145 | popupMatchSelectWidth={false} |
137 | 146 | value={(pageSize || pageSizeOptions[0]).toString()} |
138 | 147 | onChange={changeSizeHandle} |
139 | 148 | getPopupContainer={(triggerNode) => triggerNode.parentNode} |
140 | 149 | aria-label={locale.page_size} |
141 | 150 | defaultOpen={false} |
142 | | - {...showSizeChanger} |
| 151 | + {...(typeof showSizeChanger === 'object' ? showSizeChanger : null)} |
| 152 | + className={classNames( |
| 153 | + `${prefixCls}-size-changer`, |
| 154 | + showSizeChangerClassName, |
| 155 | + )} |
| 156 | + options={showSizeChangerOptions} |
143 | 157 | > |
144 | 158 | {options} |
145 | 159 | </Select> |
|
0 commit comments