Skip to content

Commit 097baf1

Browse files
committed
refactor: revert selectedItem changes and prevent filter triggers on init
1 parent c36a68b commit 097baf1

4 files changed

Lines changed: 32 additions & 15 deletions

File tree

packages/pluggableWidgets/combobox-web/src/components/SingleSelection/SingleSelection.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,14 @@ export function SingleSelection({
4444
});
4545

4646
const selectedItemCaption = useMemo(
47-
() => selector.caption.render(selector.currentId, "label"),
47+
() => selector.caption.render(selectedItem, "label"),
4848
// eslint-disable-next-line react-hooks/exhaustive-deps
4949
[
50-
selector.currentId,
50+
selectedItem,
5151
selector.status,
5252
selector.caption,
5353
selector.caption.emptyCaption,
54+
selector.currentId,
5455
selector.caption.formatter
5556
]
5657
);

packages/pluggableWidgets/combobox-web/src/helpers/Association/AssociationSingleSelector.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ export class AssociationSingleSelector
1414
}
1515
setValue(value: string | null): void {
1616
this._attr?.setValue(this.options._optionToValue(value));
17-
this.currentId = value;
1817
super.setValue(value);
1918
}
2019
}

packages/pluggableWidgets/combobox-web/src/hooks/useDownshiftMultiSelectProps.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
useCombobox,
88
useMultipleSelection
99
} from "downshift";
10-
import { useCallback, useMemo } from "react";
10+
import { useCallback, useMemo, useRef, useEffect } from "react";
1111
import { A11yStatusMessage, MultiSelector } from "../helpers/types";
1212

1313
export type UseDownshiftMultiSelectPropsReturnValue = UseMultipleSelectionReturnValue<string> &
@@ -37,6 +37,12 @@ export function useDownshiftMultiSelectProps(
3737
options: Options,
3838
a11yStatusMessage: A11yStatusMessage
3939
): UseDownshiftMultiSelectPropsReturnValue {
40+
const isInitializing = useRef(true);
41+
42+
useEffect(() => {
43+
isInitializing.current = false;
44+
}, []);
45+
4046
const {
4147
getSelectedItemProps,
4248
getDropdownProps,
@@ -91,6 +97,7 @@ export function useDownshiftMultiSelectProps(
9197
removeSelectedItem,
9298
setSelectedItems,
9399
a11yStatusMessage,
100+
isInitializing,
94101
options
95102
)
96103
);
@@ -140,6 +147,7 @@ function useComboboxProps(
140147
removeSelectedItem: (item: string) => void,
141148
setSelectedItems: (item: string[]) => void,
142149
a11yStatusMessage: A11yStatusMessage,
150+
isInitializing: React.MutableRefObject<boolean>,
143151
options?: Options
144152
): UseComboboxProps<string> {
145153
return useMemo(() => {
@@ -149,11 +157,13 @@ function useComboboxProps(
149157
inputId: options?.inputId,
150158
labelId: options?.labelId,
151159
onInputValueChange({ inputValue, type }) {
152-
if (type === useCombobox.stateChangeTypes.InputChange) {
153-
selector.options.setSearchTerm(inputValue!);
154-
if (selector.onFilterInputChange) {
155-
selector.onFilterInputChange(inputValue);
156-
}
160+
selector.options.setSearchTerm(inputValue!);
161+
if (
162+
!isInitializing.current &&
163+
type === useCombobox.stateChangeTypes.InputChange &&
164+
selector.onFilterInputChange
165+
) {
166+
selector.onFilterInputChange(inputValue);
157167
}
158168
},
159169
getA11yStatusMessage(options) {

packages/pluggableWidgets/combobox-web/src/hooks/useDownshiftSingleSelectProps.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
useCombobox
88
} from "downshift";
99

10-
import { useCallback, useMemo } from "react";
10+
import { useCallback, useMemo, useRef, useEffect } from "react";
1111
import { A11yStatusMessage, SingleSelector } from "../helpers/types";
1212

1313
interface Options {
@@ -21,6 +21,11 @@ export function useDownshiftSingleSelectProps(
2121
a11yStatusMessage: A11yStatusMessage
2222
): UseComboboxReturnValue<string> {
2323
const { inputId, labelId } = options;
24+
const isInitializing = useRef(true);
25+
26+
useEffect(() => {
27+
isInitializing.current = false;
28+
}, []);
2429

2530
const downshiftProps: UseComboboxProps<string> = useMemo(() => {
2631
return {
@@ -30,11 +35,13 @@ export function useDownshiftSingleSelectProps(
3035
selector.setValue(selectedItem ?? null);
3136
},
3237
onInputValueChange({ inputValue, type }) {
33-
if (type === useCombobox.stateChangeTypes.InputChange) {
34-
selector.options.setSearchTerm(inputValue!);
35-
if (selector.onFilterInputChange) {
36-
selector.onFilterInputChange(inputValue!);
37-
}
38+
selector.options.setSearchTerm(inputValue!);
39+
if (
40+
!isInitializing.current &&
41+
type === useCombobox.stateChangeTypes.InputChange &&
42+
selector.onFilterInputChange
43+
) {
44+
selector.onFilterInputChange(inputValue!);
3845
}
3946
},
4047
getA11yStatusMessage(options) {

0 commit comments

Comments
 (0)