Skip to content

Commit a0ec2f3

Browse files
authored
feat(query-builder): Return focus to input and call onSearch after clicking clear button (#72076)
1 parent 85d2b15 commit a0ec2f3

File tree

4 files changed

+14
-2
lines changed

4 files changed

+14
-2
lines changed

static/app/components/searchQueryBuilder/index.spec.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,22 +133,27 @@ describe('SearchQueryBuilder', function () {
133133
describe('actions', function () {
134134
it('can clear the query', async function () {
135135
const mockOnChange = jest.fn();
136+
const mockOnSearch = jest.fn();
136137
render(
137138
<SearchQueryBuilder
138139
{...defaultProps}
139140
initialQuery="browser.name:firefox"
140141
onChange={mockOnChange}
142+
onSearch={mockOnSearch}
141143
/>
142144
);
143145
userEvent.click(screen.getByRole('button', {name: 'Clear search query'}));
144146

145147
await waitFor(() => {
146148
expect(mockOnChange).toHaveBeenCalledWith('');
149+
expect(mockOnSearch).toHaveBeenCalledWith('');
147150
});
148151

149152
expect(
150153
screen.queryByRole('row', {name: 'browser.name:firefox'})
151154
).not.toBeInTheDocument();
155+
156+
expect(screen.getByRole('combobox')).toHaveFocus();
152157
});
153158
});
154159

static/app/components/searchQueryBuilder/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ interface SearchQueryBuilderProps {
3939
}
4040

4141
function ActionButtons() {
42-
const {dispatch} = useSearchQueryBuilder();
42+
const {dispatch, onSearch} = useSearchQueryBuilder();
4343

4444
return (
4545
<ButtonsWrapper>
@@ -48,7 +48,10 @@ function ActionButtons() {
4848
size="zero"
4949
icon={<IconClose />}
5050
borderless
51-
onClick={() => dispatch({type: 'CLEAR'})}
51+
onClick={() => {
52+
dispatch({type: 'CLEAR'});
53+
onSearch?.('');
54+
}}
5255
/>
5356
</ButtonsWrapper>
5457
);

static/app/components/searchQueryBuilder/tokenizedQueryGrid.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ function useApplyFocusOverride(state: ListState<ParseResultToken>) {
3030

3131
useLayoutEffect(() => {
3232
if (focusOverride && !focusOverride.part) {
33+
state.selectionManager.setFocused(true);
3334
state.selectionManager.setFocusedKey(focusOverride.itemKey);
3435
dispatch({type: 'RESET_FOCUS_OVERRIDE'});
3536
}

static/app/components/searchQueryBuilder/useQueryBuilderState.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,9 @@ export function useQueryBuilderState({initialQuery}: {initialQuery: string}) {
199199
return {
200200
...state,
201201
query: '',
202+
focusOverride: {
203+
itemKey: `${Token.FREE_TEXT}:0`,
204+
},
202205
};
203206
case 'UPDATE_QUERY':
204207
return {

0 commit comments

Comments
 (0)