Skip to content

Commit

Permalink
feat: query engine search scroll (pinterest#1136)
Browse files Browse the repository at this point in the history
* feat: query engine search scroll

* chore: refactor updateKeyword and SearchBar

---------

Co-authored-by: Lily Li <[email protected]>
  • Loading branch information
2 people authored and aidenprice committed Jan 3, 2024
1 parent b6c0d4e commit 97d6be8
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@
}
}
}
.engine-selector-wrapper {
max-height: 50vh;
overflow-y: auto;
}
}

&.readonly {
Expand Down
38 changes: 31 additions & 7 deletions querybook/webapp/components/QueryRunButton/QueryRunButton.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import clsx from 'clsx';
import * as React from 'react';
import { useState, useMemo } from 'react';
import { useSelector } from 'react-redux';

import { IQueryEngine, QueryEngineStatus } from 'const/queryEngine';
Expand All @@ -12,13 +13,15 @@ import {
} from 'lib/sql-helper/sql-limiter';
import { getShortcutSymbols, KeyMap } from 'lib/utils/keyboard';
import { formatNumber } from 'lib/utils/number';
import { stopPropagation } from 'lib/utils/noop';
import { queryEngineStatusByIdEnvSelector } from 'redux/queryEngine/selector';
import { AsyncButton, IAsyncButtonHandles } from 'ui/AsyncButton/AsyncButton';
import { Dropdown } from 'ui/Dropdown/Dropdown';
import { Icon } from 'ui/Icon/Icon';
import { ListMenu } from 'ui/Menu/ListMenu';
import { StatusIcon } from 'ui/StatusIcon/StatusIcon';
import { Tag } from 'ui/Tag/Tag';
import { SearchBar } from 'ui/SearchBar/SearchBar';

import './QueryRunButton.scss';

Expand Down Expand Up @@ -155,19 +158,40 @@ export const QueryEngineSelector: React.FC<IQueryEngineSelectorProps> = ({
);
};

const engineItems = queryEngines.map((engineInfo) => ({
name: <span className="query-engine-name">{engineInfo.name}</span>,
onClick: onEngineIdSelect.bind(null, engineInfo.id),
checked: engineInfo.id === engineId,
tooltip: engineInfo.description,
}));
const [keyword, setKeyword] = useState('');

const engineItems = queryEngines
.filter((engineInfo) =>
`${engineInfo.name.toLowerCase()}`.includes(keyword.toLowerCase())
)
.map((engineInfo) => ({
name: <span className="query-engine-name">{engineInfo.name}</span>,
onClick: onEngineIdSelect.bind(null, engineInfo.id),
checked: engineInfo.id === engineId,
tooltip: engineInfo.description,
}));

const engineButtonDOM = (
<Dropdown
customButtonRenderer={getEngineSelectorButtonDOM}
layout={['bottom', 'right']}
className="engine-selector-dropdown"
>
<ListMenu items={engineItems} type="select" />
<div className="engine-selector-wrapper">
{queryEngines.length > 3 && (
<div onClick={stopPropagation}>
<SearchBar
value={keyword}
onSearch={setKeyword}
placeholder="Search"
transparent
delayMethod="throttle"
hasClearSearch={true}
/>
</div>
)}
<ListMenu items={engineItems} type="select" />
</div>
</Dropdown>
);

Expand Down
12 changes: 12 additions & 0 deletions querybook/webapp/ui/SearchBar/SearchBar.scss
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,16 @@
border-left: var(--border);
height: 20px;
}

&.clear-search {
.DebouncedInput {
flex: 9;
}
.SearchIcon {
flex: 1;
}
.Button{
flex: 1;
}
}
}
1 change: 1 addition & 0 deletions querybook/webapp/ui/SearchBar/SearchBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ export const SearchBar: React.FunctionComponent<ISearchBarProps> = ({
SearchBar: true,
[className]: Boolean(className),
transparent,
'clear-search': hasClearSearch,
});

const clearSearchButton =
Expand Down

0 comments on commit 97d6be8

Please sign in to comment.