InstalledPluginTable.jsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import { withUnstatedContainers } from '../../UnstatedUtils';
  5. import AppContainer from '~/client/services/AppContainer';
  6. import AdminHomeContainer from '~/client/services/AdminHomeContainer';
  7. class InstalledPluginTable extends React.Component {
  8. render() {
  9. const { t, adminHomeContainer } = this.props;
  10. const { installedPlugins } = adminHomeContainer.state;
  11. if (installedPlugins == null) {
  12. return <></>;
  13. }
  14. return (
  15. <table data-testid="admin-installed-plugin-table" className="table table-bordered">
  16. <thead>
  17. <tr>
  18. <th className="text-center">{t('admin:admin_top.package_name')}</th>
  19. <th className="text-center">{t('admin:admin_top.specified_version')}</th>
  20. <th className="text-center">{t('admin:admin_top.installed_version')}</th>
  21. </tr>
  22. </thead>
  23. <tbody>
  24. {adminHomeContainer.state.installedPlugins.map((plugin) => {
  25. return (
  26. <tr key={plugin.name}>
  27. <td>{plugin.name}</td>
  28. <td data-hide-in-vrt className="text-center">{plugin.requiredVersion}</td>
  29. <td data-hide-in-vrt className="text-center">{plugin.installedVersion}</td>
  30. </tr>
  31. );
  32. })}
  33. </tbody>
  34. </table>
  35. );
  36. }
  37. }
  38. InstalledPluginTable.propTypes = {
  39. t: PropTypes.func.isRequired, // i18next
  40. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  41. adminHomeContainer: PropTypes.instanceOf(AdminHomeContainer).isRequired,
  42. };
  43. /**
  44. * Wrapper component for using unstated
  45. */
  46. const InstalledPluginTableWrapper = withUnstatedContainers(InstalledPluginTable, [AppContainer, AdminHomeContainer]);
  47. export default withTranslation()(InstalledPluginTableWrapper);