diff --git a/frontend/src/metabase/components/ListField/ListField.tsx b/frontend/src/metabase/components/ListField/ListField.tsx index f7c6889af9518d85fc7150736fa14e2ca9313ead..e691c3d3741f1986a6b144c2a5010cba9402a726 100644 --- a/frontend/src/metabase/components/ListField/ListField.tsx +++ b/frontend/src/metabase/components/ListField/ListField.tsx @@ -151,15 +151,17 @@ export const ListField = ({ )} <OptionsList isDashboardFilter={isDashboardFilter}> - <OptionContainer> - <Checkbox - variant="stacked" - label={getToggleAllLabel(debouncedFilter, isAll)} - checked={isAll} - indeterminate={!isAll && !isNone} - onChange={handleToggleAll} - /> - </OptionContainer> + {filteredOptions.length > 0 && ( + <OptionContainer> + <Checkbox + variant="stacked" + label={getToggleAllLabel(debouncedFilter, isAll)} + checked={isAll} + indeterminate={!isAll && !isNone} + onChange={handleToggleAll} + /> + </OptionContainer> + )} {filteredOptions.map((option, index) => ( <OptionContainer key={index}> <Checkbox diff --git a/frontend/src/metabase/components/ListField/ListField.unit.spec.tsx b/frontend/src/metabase/components/ListField/ListField.unit.spec.tsx index cf27719dc4a1e61ac1176870696cb73cd9ec3a1c..a756a8dc4234d7b24950129d16aa9e235eaff386 100644 --- a/frontend/src/metabase/components/ListField/ListField.unit.spec.tsx +++ b/frontend/src/metabase/components/ListField/ListField.unit.spec.tsx @@ -128,4 +128,17 @@ describe("ListField", () => { expect(onChange).toHaveBeenCalledWith(["Doohickey", "Widget"]); expect(screen.getByLabelText("Gadget")).not.toBeChecked(); }); + + it("should not show the toggle all checkbox when search results are empty", async () => { + setup({ + value: [], + options: allOptions, + }); + await userEvent.type( + screen.getByPlaceholderText("Search the list"), + "Invalid", + ); + expect(screen.queryByLabelText("Select all")).not.toBeInTheDocument(); + expect(screen.queryByLabelText("Select none")).not.toBeInTheDocument(); + }); });