Skip to content

Commit

Permalink
[8.14] [Alert search bar] Fix alert search bar refresh functionality (e…
Browse files Browse the repository at this point in the history
…lastic#180899) (elastic#181127)

# Backport

This will backport the following commits from `main` to `8.14`:
- [[Alert search bar] Fix alert search bar refresh functionality
(elastic#180899)](elastic#180899)

<!--- Backport version: 9.4.3 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT [{"author":{"name":"Maryam
Saeidi","email":"[email protected]"},"sourceCommit":{"committedDate":"2024-04-18T09:25:57Z","message":"[Alert
search bar] Fix alert search bar refresh functionality
(elastic#180899)\n\nFixes elastic#180722\r\n\r\n## Summary\r\n\r\nThis PR fixes the
refresh issue by using `isUpdate` prop to decide if\r\nany of the search
bar params have changed and if not, it just resubmits\r\nthe request
without changing calling the parent functions for updating\r\nthe
params.\r\n\r\n### Testing refresh
functionality\r\n\r\n\r\nhttps://github.com/elastic/kibana/assets/12370520/0e406613-e662-4f62-a229-c1f5cc2bb478\r\n\r\n###
Testing other alerts search bar
functionalities\r\n\r\n\r\nhttps://github.com/elastic/kibana/assets/12370520/13021c28-0c68-4f92-94ac-f6a3f6234441\r\n\r\n---------\r\n\r\nCo-authored-by:
Dominique Clarke
<[email protected]>","sha":"87c0451f91aa81c867345318ff994c594668f069","branchLabelMapping":{"^v8.15.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["bug","Feature:Alerting","release_note:skip","Team:obs-ux-management","v8.14.0","v8.15.0"],"title":"[Alert
search bar] Fix alert search bar refresh
functionality","number":180899,"url":"https://github.com/elastic/kibana/pull/180899","mergeCommit":{"message":"[Alert
search bar] Fix alert search bar refresh functionality
(elastic#180899)\n\nFixes elastic#180722\r\n\r\n## Summary\r\n\r\nThis PR fixes the
refresh issue by using `isUpdate` prop to decide if\r\nany of the search
bar params have changed and if not, it just resubmits\r\nthe request
without changing calling the parent functions for updating\r\nthe
params.\r\n\r\n### Testing refresh
functionality\r\n\r\n\r\nhttps://github.com/elastic/kibana/assets/12370520/0e406613-e662-4f62-a229-c1f5cc2bb478\r\n\r\n###
Testing other alerts search bar
functionalities\r\n\r\n\r\nhttps://github.com/elastic/kibana/assets/12370520/13021c28-0c68-4f92-94ac-f6a3f6234441\r\n\r\n---------\r\n\r\nCo-authored-by:
Dominique Clarke
<[email protected]>","sha":"87c0451f91aa81c867345318ff994c594668f069"}},"sourceBranch":"main","suggestedTargetBranches":["8.14"],"targetPullRequestStates":[{"branch":"8.14","label":"v8.14.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v8.15.0","branchLabelMappingKey":"^v8.15.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/180899","number":180899,"mergeCommit":{"message":"[Alert
search bar] Fix alert search bar refresh functionality
(elastic#180899)\n\nFixes elastic#180722\r\n\r\n## Summary\r\n\r\nThis PR fixes the
refresh issue by using `isUpdate` prop to decide if\r\nany of the search
bar params have changed and if not, it just resubmits\r\nthe request
without changing calling the parent functions for updating\r\nthe
params.\r\n\r\n### Testing refresh
functionality\r\n\r\n\r\nhttps://github.com/elastic/kibana/assets/12370520/0e406613-e662-4f62-a229-c1f5cc2bb478\r\n\r\n###
Testing other alerts search bar
functionalities\r\n\r\n\r\nhttps://github.com/elastic/kibana/assets/12370520/13021c28-0c68-4f92-94ac-f6a3f6234441\r\n\r\n---------\r\n\r\nCo-authored-by:
Dominique Clarke
<[email protected]>","sha":"87c0451f91aa81c867345318ff994c594668f069"}}]}]
BACKPORT-->

Co-authored-by: Maryam Saeidi <[email protected]>
  • Loading branch information
kibanamachine and maryam-saeidi authored Apr 18, 2024
1 parent d0d0109 commit dda3856
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 31 deletions.
57 changes: 57 additions & 0 deletions src/plugins/unified_search/public/search_bar/search_bar.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ describe('SearchBar', () => {
const QUERY_BAR = '.kbnQueryBar';
const QUERY_INPUT = '[data-test-subj="unifiedQueryInput"]';
const QUERY_MENU_BUTTON = '[data-test-subj="showQueryBarMenu"]';
const QUERY_SUBMIT_BUTTON = 'button[data-test-subj="querySubmitButton"]';
const EDITOR = '[data-test-subj="unifiedTextLangEditor"]';

beforeEach(() => {
Expand Down Expand Up @@ -308,4 +309,60 @@ describe('SearchBar', () => {
expect(button).toBeDisabled();
});
});

it('Should call onQuerySubmit with isUpdate prop as false when dateRange is provided', () => {
const mockedOnQuerySubmit = jest.fn();
const component = mount(
wrapSearchBarInContext({
indexPatterns: [mockIndexPattern],
screenTitle: 'test screen',
onQuerySubmit: mockedOnQuerySubmit,
query: kqlQuery,
showQueryMenu: false,
dateRangeTo: 'now',
dateRangeFrom: 'now-15m',
})
);

const submitButton = component.find(QUERY_SUBMIT_BUTTON);
submitButton.simulate('click');

expect(mockedOnQuerySubmit).toBeCalledTimes(1);
expect(mockedOnQuerySubmit).toHaveBeenNthCalledWith(
1,
{
dateRange: { from: 'now-15m', to: 'now' },
query: { language: 'kuery', query: 'response:200' },
},
false
);
});

it('Should call onQuerySubmit with isUpdate prop as true when dateRange is not provided', () => {
const mockedOnQuerySubmit = jest.fn();
const component = mount(
wrapSearchBarInContext({
indexPatterns: [mockIndexPattern],
screenTitle: 'test screen',
onQuerySubmit: mockedOnQuerySubmit,
query: kqlQuery,
showQueryMenu: false,
})
);

const submitButton = component.find(QUERY_SUBMIT_BUTTON);
submitButton.simulate('click');

expect(mockedOnQuerySubmit).toBeCalledTimes(1);
expect(mockedOnQuerySubmit).toHaveBeenNthCalledWith(
1,
{
dateRange: { from: 'now-15m', to: 'now' },
query: { language: 'kuery', query: 'response:200' },
},
// isUpdate is true because the default value in state ({ from: 'now-15m', to: 'now' })
// is not equal with props for dateRange which is undefined
true
);
});
});
30 changes: 18 additions & 12 deletions src/plugins/unified_search/public/search_bar/search_bar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -413,13 +413,16 @@ class SearchBarUI<QT extends (Query | AggregateQuery) | Query = Query> extends C
},
() => {
if (this.props.onQuerySubmit) {
this.props.onQuerySubmit({
query: query as QT,
dateRange: {
from: this.state.dateRangeFrom,
to: this.state.dateRangeTo,
this.props.onQuerySubmit(
{
query: query as QT,
dateRange: {
from: this.state.dateRangeFrom,
to: this.state.dateRangeTo,
},
},
});
this.isDirty()
);
}
}
);
Expand All @@ -437,13 +440,16 @@ class SearchBarUI<QT extends (Query | AggregateQuery) | Query = Query> extends C
},
() => {
if (this.props.onQuerySubmit) {
this.props.onQuerySubmit({
query: this.state.query,
dateRange: {
from: this.state.dateRangeFrom,
to: this.state.dateRangeTo,
this.props.onQuerySubmit(
{
query: this.state.query,
dateRange: {
from: this.state.dateRangeFrom,
to: this.state.dateRangeTo,
},
},
});
this.isDirty()
);
}
this.services.usageCollection?.reportUiCounter(
this.services.appName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ export function ObservabilityAlertSearchBar({
onAlertStatusChange(status);
}, [onAlertStatusChange, status]);

useEffect(() => {
const submitQuery = useCallback(() => {
try {
onEsQueryChange(
buildEsQuery({
Expand Down Expand Up @@ -123,21 +123,30 @@ export function ObservabilityAlertSearchBar({
toasts,
]);

const onSearchBarParamsChange = useCallback<
(query: {
useEffect(() => {
submitQuery();
}, [submitQuery]);

const onQuerySubmit = (
{
dateRange,
query,
}: {
dateRange: { from: string; to: string; mode?: 'absolute' | 'relative' };
query?: string;
}) => void
>(
({ dateRange, query }) => {
},
isUpdate?: boolean
) => {
if (isUpdate) {
clearSavedQuery();
onKueryChange(query ?? '');
timeFilterService.setTime(dateRange);
onRangeFromChange(dateRange.from);
onRangeToChange(dateRange.to);
},
[onKueryChange, timeFilterService, clearSavedQuery, onRangeFromChange, onRangeToChange]
);
} else {
submitQuery();
}
};

const onFilterUpdated = useCallback<(filters: Filter[]) => void>(
(updatedFilters) => {
Expand All @@ -162,7 +171,7 @@ export function ObservabilityAlertSearchBar({
onSavedQueryUpdated={setSavedQuery}
onClearSavedQuery={clearSavedQuery}
query={kuery}
onQuerySubmit={onSearchBarParamsChange}
onQuerySubmit={onQuerySubmit}
/>
</EuiFlexItem>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,17 @@ export function AlertsSearchBar({
ruleType.ruleTypesState.data.get(ruleTypeId)?.producer === AlertConsumers.SIEM);

const onSearchQuerySubmit = useCallback(
({ dateRange, query: nextQuery }: { dateRange: TimeRange; query?: Query }) => {
onQuerySubmit({
dateRange,
query: typeof nextQuery?.query === 'string' ? nextQuery.query : undefined,
});
(
{ dateRange, query: nextQuery }: { dateRange: TimeRange; query?: Query },
isUpdate?: boolean
) => {
onQuerySubmit(
{
dateRange,
query: typeof nextQuery?.query === 'string' ? nextQuery.query : undefined,
},
isUpdate
);
setQueryLanguage((nextQuery?.language ?? 'kuery') as QueryLanguageType);
},
[onQuerySubmit, setQueryLanguage]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,13 @@ export interface AlertsSearchBarProps
dateRange: { from: string; to: string; mode?: 'absolute' | 'relative' };
query?: string;
}) => void;
onQuerySubmit: (query: {
dateRange: { from: string; to: string; mode?: 'absolute' | 'relative' };
query?: string;
}) => void;
onQuerySubmit: (
query: {
dateRange: { from: string; to: string; mode?: 'absolute' | 'relative' };
query?: string;
},
isUpdate?: boolean
) => void;
onFiltersUpdated?: (filters: Filter[]) => void;
filtersForSuggestions?: Filter[];
}

0 comments on commit dda3856

Please sign in to comment.