diff --git a/querybook/webapp/components/DataDocStatementExecution/StatementResult.tsx b/querybook/webapp/components/DataDocStatementExecution/StatementResult.tsx index 96fe1a913..7ce97cca7 100644 --- a/querybook/webapp/components/DataDocStatementExecution/StatementResult.tsx +++ b/querybook/webapp/components/DataDocStatementExecution/StatementResult.tsx @@ -12,6 +12,7 @@ import { useImmer } from 'hooks/useImmer'; import { useToggleState } from 'hooks/useToggleState'; import { getSelectStatementLimit } from 'lib/sql-helper/sql-limiter'; import { formatNumber } from 'lib/utils/number'; +import { stopPropagation } from 'lib/utils/noop'; import { IStoreState } from 'redux/store/types'; import { TextButton } from 'ui/Button/Button'; import { InfoButton } from 'ui/Button/InfoButton'; @@ -21,6 +22,7 @@ import { Loading } from 'ui/Loading/Loading'; import { Message } from 'ui/Message/Message'; import { Popover } from 'ui/Popover/Popover'; import { PrettyNumber } from 'ui/PrettyNumber/PrettyNumber'; +import { SearchBar } from 'ui/SearchBar/SearchBar'; import { IOptions, makeSelectOptions, Select } from 'ui/Select/Select'; import { ShowMoreText } from 'ui/ShowMoreText/ShowMoreText'; import { AccentText } from 'ui/StyledText/StyledText'; @@ -397,6 +399,14 @@ const ColumnToggleMenuButton: React.FC<{ }> = ({ columnNames, columnVisibility, toggleVisibility }) => { const buttonRef = React.useRef(); const [showPopover, _, toggleShowPopover] = useToggleState(false); + const [keyword, setKeyword] = useState(''); + const filteredColumnNames = useMemo( + () => + columnNames.filter((names) => + names.toLowerCase().includes(keyword.toLowerCase()) + ), + [columnNames, keyword] + ); const isAllSelected = useMemo( () => columnNames.every((columnName) => columnVisibility[columnName]), [columnNames, columnVisibility] @@ -404,22 +414,37 @@ const ColumnToggleMenuButton: React.FC<{ const getPopoverContent = () => (
+
+ +
{ if (isAllSelected) { - columnNames.map((col) => toggleVisibility(col)); + filteredColumnNames.map((col) => + toggleVisibility(col) + ); } else { - columnNames + filteredColumnNames .filter((col) => !columnVisibility[col]) .map((column) => toggleVisibility(column)); } }} />
- {columnNames.map((columnName) => ( + {filteredColumnNames.map((columnName) => (
= ({ SearchBar: true, [className]: Boolean(className), transparent, + 'clear-search': hasClearSearch, }); const clearSearchButton =