CustomBotWithoutProxyIntegrationCard.jsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import React from 'react';
  2. import { useTranslation } from 'react-i18next';
  3. import PropTypes from 'prop-types';
  4. import { UncontrolledTooltip } from 'reactstrap';
  5. const IntegrationSuccess = () => {
  6. const { t } = useTranslation();
  7. return (
  8. <>
  9. <div className="d-none d-lg-block">
  10. <p className="text-success small mt-5">
  11. <i className="fa fa-check mr-1" />
  12. {t('admin:slack_integration.integration_sentence.integration_successful')}
  13. </p>
  14. <hr className="align-self-center admin-border-success border-success"></hr>
  15. </div>
  16. <div id="integration-line-for-tooltip" className="d-block d-lg-none mt-5">
  17. <i className="fa fa-check mr-1 text-success" />
  18. <hr className="align-self-center admin-border-success border-success"></hr>
  19. </div>
  20. <UncontrolledTooltip placement="top" fade={false} target="integration-line-for-tooltip">
  21. <small>
  22. {t('admin:slack_integration.integration_sentence.integration_successful')}
  23. </small>
  24. </UncontrolledTooltip>
  25. </>
  26. );
  27. };
  28. const IntegrationFailed = () => {
  29. const { t } = useTranslation();
  30. return (
  31. <>
  32. <div className="d-none d-lg-block">
  33. <p className="mt-4">
  34. <small
  35. className="text-danger m-0"
  36. // eslint-disable-next-line react/no-danger
  37. dangerouslySetInnerHTML={{ __html: t('admin:slack_integration.integration_sentence.integration_is_not_complete') }}
  38. />
  39. </p>
  40. <hr className="align-self-center admin-border-danger border-danger"></hr>
  41. </div>
  42. <div id="integration-line-for-tooltip" className="d-block d-lg-none mt-5">
  43. <i className="icon-info text-danger" />
  44. <hr className="align-self-center admin-border-danger border-danger"></hr>
  45. </div>
  46. <UncontrolledTooltip placement="top" fade={false} target="integration-line-for-tooltip">
  47. <small
  48. className="m-0"
  49. // eslint-disable-next-line react/no-danger
  50. dangerouslySetInnerHTML={{ __html: t('admin:slack_integration.integration_sentence.integration_is_not_complete') }}
  51. />
  52. </UncontrolledTooltip>
  53. </>
  54. );
  55. };
  56. const CustomBotWithoutProxyIntegrationCard = (props) => {
  57. return (
  58. <div className="d-flex justify-content-center my-5 bot-integration">
  59. <div className="card rounded shadow border-0 w-50 admin-bot-card mb-0">
  60. <h5 className="card-title font-weight-bold mt-3 ml-4">Slack</h5>
  61. <div className="card-body p-2 w-50 mx-auto">
  62. {props.isIntegrationSuccess && props.slackWSNameInWithoutProxy != null && (
  63. <div className="card slack-work-space-name-card">
  64. <div className="m-2 text-center">
  65. <h5 className="font-weight-bold">{props.slackWSNameInWithoutProxy}</h5>
  66. <img width={20} height={20} src="/images/slack-integration/growi-bot-kun-icon.png" />
  67. </div>
  68. </div>
  69. )}
  70. </div>
  71. </div>
  72. <div className="text-center w-25">
  73. {props.isIntegrationSuccess ? <IntegrationSuccess /> : <IntegrationFailed />}
  74. </div>
  75. <div className="card rounded-lg shadow border-0 w-50 admin-bot-card mb-0">
  76. <h5 className="card-title font-weight-bold mt-3 ml-4">GROWI App</h5>
  77. <div className="card-body p-4 mb-5 text-center">
  78. <div className="btn btn-primary">{ props.siteName }</div>
  79. </div>
  80. </div>
  81. </div>
  82. );
  83. };
  84. CustomBotWithoutProxyIntegrationCard.propTypes = {
  85. siteName: PropTypes.string.isRequired,
  86. slackWSNameInWithoutProxy: PropTypes.string,
  87. isIntegrationSuccess: PropTypes.bool,
  88. };
  89. export default CustomBotWithoutProxyIntegrationCard;