Skip to content

Commit abbcc85

Browse files
committed
fix(common): pass originalOptions when using a transformer
1 parent 061fa02 commit abbcc85

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

packages/common/src/select/reducer.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ export const init = ({ propsOptions, optionsTransformer }) => ({
33
options: optionsTransformer ? optionsTransformer(propsOptions) : propsOptions,
44
promises: {},
55
isInitialLoaded: false,
6+
...(optionsTransformer && { originalOptions: propsOptions }),
67
});
78

89
const reducer = (state, { type, payload, options = [], optionsTransformer }) => {
@@ -13,6 +14,7 @@ const reducer = (state, { type, payload, options = [], optionsTransformer }) =>
1314
options: optionsTransformer ? optionsTransformer(payload) : payload,
1415
isLoading: false,
1516
promises: {},
17+
...(optionsTransformer && { originalOptions: payload }),
1618
};
1719
case 'startLoading':
1820
return {
@@ -23,6 +25,7 @@ const reducer = (state, { type, payload, options = [], optionsTransformer }) =>
2325
return {
2426
...state,
2527
options: optionsTransformer ? optionsTransformer(payload) : payload,
28+
...(optionsTransformer && { originalOptions: payload }),
2629
};
2730
case 'initialLoaded':
2831
return {
@@ -39,6 +42,9 @@ const reducer = (state, { type, payload, options = [], optionsTransformer }) =>
3942
options: optionsTransformer
4043
? optionsTransformer([...state.options, ...options.filter(({ value }) => !state.options.find((option) => option.value === value))])
4144
: [...state.options, ...options.filter(({ value }) => !state.options.find((option) => option.value === value))],
45+
...(optionsTransformer && {
46+
originalOptions: [...state.options, ...options.filter(({ value }) => !state.options.find((option) => option.value === value))],
47+
}),
4248
};
4349
default:
4450
return state;

packages/common/src/select/select.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ const getSelectValue = (stateValue, simpleValue, isMulti, allOptions) => {
1616

1717
if (hasSelectAll || hasSelectNone) {
1818
enhancedValue = enhancedValue || [];
19-
const optionsLength = allOptions.filter(({ selectAll, selectNone }) => !selectAll && !selectNone).length;
19+
const optionsLength = allOptions.filter(
20+
({ selectAll, selectNone, divider, options }) => !selectAll && !selectNone && !divider && !options
21+
).length;
2022

2123
const selectedAll = optionsLength === enhancedValue.length;
2224
const selectedNone = enhancedValue.length === 0;
@@ -43,7 +45,7 @@ const handleSelectChange = (option, simpleValue, isMulti, onChange, allOptions,
4345
const sanitizedOption = !enhanceOption && isMulti ? [] : enhanceOption;
4446

4547
if (isMulti && sanitizedOption.find(({ selectAll }) => selectAll)) {
46-
return onChange(allOptions.filter(({ selectAll, selectNone }) => !selectAll && !selectNone).map(({ value }) => value));
48+
return onChange(allOptions.filter(({ selectAll, selectNone, value }) => !selectAll && !selectNone && value).map(({ value }) => value));
4749
}
4850

4951
if (isMulti && sanitizedOption.find(({ selectNone }) => selectNone)) {
@@ -142,6 +144,7 @@ const Select = ({
142144
onChange={() => {}}
143145
{...loadingProps}
144146
noOptionsMessage={renderNoOptionsMessage()}
147+
{...(state.originalOptions && { originalOptions: state.originalOptions })}
145148
/>
146149
);
147150
}
@@ -191,6 +194,7 @@ const Select = ({
191194
noOptionsMessage={renderNoOptionsMessage()}
192195
hideSelectedOptions={false}
193196
closeMenuOnSelect={!isMulti}
197+
{...(state.originalOptions && { originalOptions: state.originalOptions })}
194198
/>
195199
);
196200
};

0 commit comments

Comments
 (0)