PluginListItem.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import React, { FC } from 'react';
  2. import { PluginMeta } from '@grafana/ui';
  3. interface Props {
  4. plugin: PluginMeta;
  5. }
  6. const PluginListItem: FC<Props> = props => {
  7. const { plugin } = props;
  8. let icon;
  9. if (plugin.type === 'datasource') {
  10. icon = 'gicon gicon-datasources';
  11. } else if (plugin.type === 'panel') {
  12. icon = 'icon-gf icon-gf-panel';
  13. } else {
  14. icon = 'icon-gf icon-gf-apps';
  15. }
  16. return (
  17. <li className="card-item-wrapper">
  18. <a className="card-item" href={`plugins/${plugin.id}/edit`}>
  19. <div className="card-item-header">
  20. <div className="card-item-type">
  21. <i className={icon} />
  22. {plugin.type}
  23. </div>
  24. {plugin.hasUpdate && (
  25. <div className="card-item-notice">
  26. <span bs-tooltip="plugin.latestVersion">Update available!</span>
  27. </div>
  28. )}
  29. </div>
  30. <div className="card-item-body">
  31. <figure className="card-item-figure">
  32. <img src={plugin.info.logos.small} />
  33. </figure>
  34. <div className="card-item-details">
  35. <div className="card-item-name">{plugin.name}</div>
  36. <div className="card-item-sub-name">{`By ${plugin.info.author.name}`}</div>
  37. </div>
  38. </div>
  39. </a>
  40. </li>
  41. );
  42. };
  43. export default PluginListItem;