Skip to content

Commit 27981dd

Browse files
authored
fix(FilterBar): search-input field reacts to value prop changes (#609)
1 parent d2ca179 commit 27981dd

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

packages/main/src/components/FilterBar/__snapshots__/FilterBar.test.tsx.snap

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,6 @@ exports[`FilterBar Render without crashing - w/ filter dialog 1`] = `
206206
<ui5-input
207207
placeholder="Search"
208208
type="Text"
209-
value=""
210209
value-state="None"
211210
/>
212211
</div>
@@ -900,7 +899,6 @@ Array [
900899
<ui5-input
901900
placeholder="Search"
902901
type="Text"
903-
value=""
904902
value-state="None"
905903
/>
906904
</div>
@@ -1222,7 +1220,6 @@ exports[`FilterBar Toggle Filters Dialog 2`] = `
12221220
<ui5-input
12231221
placeholder="Search"
12241222
type="Text"
1225-
value=""
12261223
value-state="None"
12271224
/>
12281225
</div>

packages/main/src/components/FilterBar/index.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,13 @@ const FilterBar: FC<FilterBarPropTypes> = forwardRef((props: FilterBarPropTypes,
114114
const [showFilters, setShowFilters] = useState(useToolbar ? filterBarExpanded : true);
115115
const [mountFilters, setMountFilters] = useState(true);
116116
const [dialogOpen, setDialogOpen] = useState(false);
117-
const [searchValue, setSearchValue] = useState('');
117+
const [searchValue, setSearchValue] = useState(undefined);
118118
const searchRef = useRef(null);
119119
const filterRefs = useRef({});
120120
const [dialogRefs, setDialogRefs] = useState({});
121121
const [toggledFilters, setToggledFilters] = useState({});
122122
const prevVisibleInFilterBarProps = useRef({});
123+
const prevSearchInputPropsValueRef = useRef();
123124

124125
const [clearText, restoreText, showFilterBarText, hideFilterBarText, goText, filtersText] = useI18nText(
125126
'@ui5/webcomponents-react',
@@ -308,6 +309,18 @@ const FilterBar: FC<FilterBarPropTypes> = forwardRef((props: FilterBarPropTypes,
308309
cssClasses.put(className);
309310
}
310311

312+
useEffect(() => {
313+
prevSearchInputPropsValueRef.current = search?.props?.value;
314+
}, [search?.props?.value]);
315+
316+
const prevSearchInputPropsValue = prevSearchInputPropsValueRef.current;
317+
318+
useEffect(() => {
319+
if (prevSearchInputPropsValue !== search?.props?.value) {
320+
setSearchValue(search?.props?.value);
321+
}
322+
}, [prevSearchInputPropsValue, search?.props?.value]);
323+
311324
return (
312325
<>
313326
{dialogOpen && showFilterConfiguration && (

packages/main/src/components/FilterBar/utils.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,5 @@ export const filterValue = (ref, child) => {
3434
};
3535

3636
export const renderSearchWithValue = (renderSearchElement, searchValue) => {
37-
return cloneElement(renderSearchElement, { value: searchValue });
37+
return cloneElement(renderSearchElement, { value: searchValue ?? renderSearchElement?.props?.value });
3838
};

0 commit comments

Comments
 (0)