grafana/public/app/features/datasources/components/DataSourcesListHeader.tsx
kay delaney 64bbb7a7ce
Chore: Update and enforce usage of typed react-redux hooks (#55349)
* Chore: Update and enforce usage of typed react-redux hooks
2022-09-19 10:49:35 +01:00

43 lines
1.5 KiB
TypeScript

import React, { useCallback } from 'react';
import { AnyAction } from 'redux';
import PageActionBar from 'app/core/components/PageActionBar/PageActionBar';
import { contextSrv } from 'app/core/core';
import { AccessControlAction, StoreState, useSelector, useDispatch } from 'app/types';
import { getDataSourcesSearchQuery, setDataSourcesSearchQuery, useDataSourcesRoutes } from '../state';
export function DataSourcesListHeader() {
const dispatch = useDispatch();
const setSearchQuery = useCallback((q: string) => dispatch(setDataSourcesSearchQuery(q)), [dispatch]);
const searchQuery = useSelector(({ dataSources }: StoreState) => getDataSourcesSearchQuery(dataSources));
const canCreateDataSource = contextSrv.hasPermission(AccessControlAction.DataSourcesCreate);
return (
<DataSourcesListHeaderView
searchQuery={searchQuery}
setSearchQuery={setSearchQuery}
canCreateDataSource={canCreateDataSource}
/>
);
}
export type ViewProps = {
searchQuery: string;
setSearchQuery: (q: string) => AnyAction;
canCreateDataSource: boolean;
};
export function DataSourcesListHeaderView({ searchQuery, setSearchQuery, canCreateDataSource }: ViewProps) {
const dataSourcesRoutes = useDataSourcesRoutes();
const linkButton = {
href: dataSourcesRoutes.New,
title: 'Add data source',
disabled: !canCreateDataSource,
};
return (
<PageActionBar searchQuery={searchQuery} setSearchQuery={setSearchQuery} linkButton={linkButton} key="action-bar" />
);
}