AdminHomeContainer.js 2.9 KB

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