grafana/public/app/features/datasources/DashboardsTable.tsx
Josh Hunt 3c6e0e8ef8
Chore: ESlint import order (#44959)
* Add and configure eslint-plugin-import

* Fix the lint:ts npm command

* Autofix + prettier all the files

* Manually fix remaining files

* Move jquery code in jest-setup to external file to safely reorder imports

* Resolve issue caused by circular dependencies within Prometheus

* Update .betterer.results

* Fix missing // @ts-ignore

* ignore iconBundle.ts

* Fix missing // @ts-ignore
2022-04-22 14:33:13 +01:00

57 lines
1.8 KiB
TypeScript

import React, { FC } from 'react';
import { Button, Icon } from '@grafana/ui';
import { PluginDashboard } from '../../types';
export interface Props {
dashboards: PluginDashboard[];
onImport: (dashboard: PluginDashboard, overwrite: boolean) => void;
onRemove: (dashboard: PluginDashboard) => void;
}
const DashboardsTable: FC<Props> = ({ dashboards, onImport, onRemove }) => {
function buttonText(dashboard: PluginDashboard) {
return dashboard.revision !== dashboard.importedRevision ? 'Update' : 'Re-import';
}
return (
<table className="filter-table">
<tbody>
{dashboards.map((dashboard, index) => {
return (
<tr key={`${dashboard.dashboardId}-${index}`}>
<td className="width-1">
<Icon name="apps" />
</td>
<td>
{dashboard.imported ? (
<a href={dashboard.importedUrl}>{dashboard.title}</a>
) : (
<span>{dashboard.title}</span>
)}
</td>
<td style={{ textAlign: 'right' }}>
{!dashboard.imported ? (
<Button variant="secondary" size="sm" onClick={() => onImport(dashboard, false)}>
Import
</Button>
) : (
<Button variant="secondary" size="sm" onClick={() => onImport(dashboard, true)}>
{buttonText(dashboard)}
</Button>
)}
{dashboard.imported && (
<Button icon="trash-alt" variant="destructive" size="sm" onClick={() => onRemove(dashboard)} />
)}
</td>
</tr>
);
})}
</tbody>
</table>
);
};
export default DashboardsTable;