AdminHomeContainer.js 2.8 KB

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