mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 14:12:15 +08:00

* ref: ds picker events added * ref: track opendropdown only on click * ref: update/update all payload added to the event * ref: configure more ds button event path to from path * ref: result count fix, enable/disable track * ref: debounce search tracks * ref: track connections_plugin_card_clicked * ref: call tracking from the child comp with result count * ref: change event names, add creator_team and schema version
59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
import { debounce } from 'lodash';
|
||
import { useCallback, useMemo } from 'react';
|
||
|
||
import { SelectableValue } from '@grafana/data';
|
||
import PageActionBar from 'app/core/components/PageActionBar/PageActionBar';
|
||
import { StoreState, useSelector, useDispatch } from 'app/types';
|
||
|
||
import { getDataSourcesSearchQuery, getDataSourcesSort, setDataSourcesSearchQuery, setIsSortAscending } from '../state';
|
||
import { trackDsSearched } from '../tracking';
|
||
|
||
const ascendingSortValue = 'alpha-asc';
|
||
const descendingSortValue = 'alpha-desc';
|
||
|
||
const sortOptions = [
|
||
// We use this unicode 'en dash' character (U+2013), because it looks nicer
|
||
// than simple dash in this context. This is also used in the response of
|
||
// the `sorting` endpoint, which is used in the search dashboard page.
|
||
{ label: 'Sort by A–Z', value: ascendingSortValue },
|
||
{ label: 'Sort by Z–A', value: descendingSortValue },
|
||
];
|
||
|
||
export function DataSourcesListHeader() {
|
||
const dispatch = useDispatch();
|
||
const debouncedTrackSearch = useMemo(
|
||
() =>
|
||
debounce((q) => {
|
||
trackDsSearched({ query: q });
|
||
}, 300),
|
||
[]
|
||
);
|
||
|
||
const setSearchQuery = useCallback(
|
||
(q: string) => {
|
||
dispatch(setDataSourcesSearchQuery(q));
|
||
if (q) {
|
||
debouncedTrackSearch(q);
|
||
}
|
||
},
|
||
[dispatch, debouncedTrackSearch]
|
||
);
|
||
const searchQuery = useSelector(({ dataSources }: StoreState) => getDataSourcesSearchQuery(dataSources));
|
||
|
||
const setSort = useCallback(
|
||
(sort: SelectableValue) => dispatch(setIsSortAscending(sort.value === ascendingSortValue)),
|
||
[dispatch]
|
||
);
|
||
const isSortAscending = useSelector(({ dataSources }: StoreState) => getDataSourcesSort(dataSources));
|
||
|
||
const sortPicker = {
|
||
onChange: setSort,
|
||
value: isSortAscending ? ascendingSortValue : descendingSortValue,
|
||
getSortOptions: () => Promise.resolve(sortOptions),
|
||
};
|
||
|
||
return (
|
||
<PageActionBar searchQuery={searchQuery} setSearchQuery={setSearchQuery} key="action-bar" sortPicker={sortPicker} />
|
||
);
|
||
}
|