AdminHomeContainer.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import { Container } from 'unstated';
  2. import loggerFactory from '~/utils/logger';
  3. import { toastError } from '../util/apiNotification';
  4. import { apiv3Get } from '../util/apiv3-client';
  5. // eslint-disable-next-line no-unused-vars
  6. const logger = loggerFactory('growi:services:AdminHomeContainer');
  7. /**
  8. * Service container for admin home page (AdminHome.jsx)
  9. * @extends {Container} unstated Container
  10. */
  11. export default class AdminHomeContainer extends Container {
  12. constructor() {
  13. super();
  14. this.copyStateValues = {
  15. DEFAULT: 'default',
  16. DONE: 'done',
  17. };
  18. this.timer = null;
  19. this.state = {
  20. growiVersion: null,
  21. nodeVersion: null,
  22. npmVersion: null,
  23. yarnVersion: null,
  24. copyState: this.copyStateValues.DEFAULT,
  25. installedPlugins: null,
  26. isV5Compatible: null,
  27. isMaintenanceMode: null,
  28. };
  29. }
  30. /**
  31. * Workaround for the mangling in production build to break constructor.name
  32. */
  33. static getClassName() {
  34. return 'AdminHomeContainer';
  35. }
  36. componentWillUnmount() {
  37. clearTimeout(this.timer);
  38. }
  39. /**
  40. * retrieve admin home data
  41. */
  42. async retrieveAdminHomeData() {
  43. try {
  44. const response = await apiv3Get('/admin-home/');
  45. const { adminHomeParams } = response.data;
  46. this.setState(prevState => ({
  47. ...prevState,
  48. growiVersion: adminHomeParams.growiVersion,
  49. nodeVersion: adminHomeParams.nodeVersion,
  50. npmVersion: adminHomeParams.npmVersion,
  51. yarnVersion: adminHomeParams.yarnVersion,
  52. installedPlugins: adminHomeParams.installedPlugins,
  53. envVars: adminHomeParams.envVars,
  54. isV5Compatible: adminHomeParams.isV5Compatible,
  55. isMaintenanceMode: adminHomeParams.isMaintenanceMode,
  56. }));
  57. }
  58. catch (err) {
  59. logger.error(err);
  60. throw new Error('Failed to retrive AdminHome data');
  61. }
  62. }
  63. /**
  64. * sets button text when copying system information
  65. */
  66. onCopyPrefilledHostInformation() {
  67. this.setState(prevState => ({
  68. ...prevState,
  69. copyState: this.copyStateValues.DONE,
  70. }));
  71. this.timer = setTimeout(() => {
  72. this.setState(prevState => ({
  73. ...prevState,
  74. copyState: this.copyStateValues.DEFAULT,
  75. }));
  76. }, 500);
  77. }
  78. /**
  79. * generates prefilled host information as markdown
  80. */
  81. generatePrefilledHostInformationMarkdown() {
  82. return `| item | version |
  83. | --- | --- |
  84. |OS ||
  85. |GROWI |${this.state.growiVersion}|
  86. |node.js |${this.state.nodeVersion}|
  87. |npm |${this.state.npmVersion}|
  88. |yarn |${this.state.yarnVersion}|
  89. |Using Docker|yes/no|
  90. |Using [growi-docker-compose][growi-docker-compose]|yes/no|
  91. [growi-docker-compose]: https://github.com/weseek/growi-docker-compose
  92. *(Accessing https://{GROWI_HOST}/admin helps you to fill in above versions)*`;
  93. }
  94. }