import { css } from '@emotion/css';
import { GrafanaTheme2 } from '@grafana/data';
import { EmptyState, Stack, TextLink, useStyles2 } from '@grafana/ui';
import { t, Trans } from 'app/core/internationalization';
import { contextSrv } from 'app/core/services/context_srv';
import { ViewProps } from 'app/features/datasources/components/DataSourcesList';
import { DataSourcesListCard } from 'app/features/datasources/components/DataSourcesListCard';
import { getDataSources, useLoadDataSources } from 'app/features/datasources/state';
import { AccessControlAction, useSelector } from 'app/types';
import { CatalogPlugin } from '../types';
import { GetStartedWithDataSource } from './GetStartedWithPlugin/GetStartedWithDataSource';
interface Props {
plugin: CatalogPlugin;
}
export default function ConnectionsTab({ plugin }: Props) {
const { isLoading } = useLoadDataSources();
const allDataSources = useSelector((state) => getDataSources(state.dataSources));
const dataSources = allDataSources.filter((ds) => ds.type === plugin.id);
const hasWriteRights = contextSrv.hasPermission(AccessControlAction.DataSourcesWrite);
const hasExploreRights = contextSrv.hasAccessToExplore();
return (
);
}
type ListProps = Omit & {
plugin: CatalogPlugin;
};
export function ConnectionsList({
dataSources,
dataSourcesCount,
isLoading,
hasWriteRights,
hasExploreRights,
plugin,
}: ListProps) {
const styles = useStyles2(getStyles);
if (!isLoading && dataSourcesCount === 0) {
return (
}
message={t('data-source-list.empty-state.title', 'No data sources defined')}
/>
);
}
const getDataSourcesList = () => {
if (isLoading) {
return new Array(5)
.fill(null)
.map((_, index) => );
}
return dataSources.map((dataSource) => (
));
};
return (
You currently have the following data sources configured for {'{{pluginName}}'}, click a tile to view the
configuration details. You can find all of your data source connections in{' '}
Connections -{' '}
Data sources.
);
}
const getStyles = (theme: GrafanaTheme2) => {
return {
list: css({
listStyle: 'none',
display: 'grid',
// gap: '8px', Add back when legacy support for old Card interface is dropped
}),
};
};