AdminHomeContainer.js 2.7 KB

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