ImportDataPageContents.jsx 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { useTranslation } from 'next-i18next';
  4. import AdminImportContainer from '~/client/services/AdminImportContainer';
  5. import { withUnstatedContainers } from '../../UnstatedUtils';
  6. import GrowiArchiveSection from './GrowiArchiveSection';
  7. class ImportDataPageContents extends React.Component {
  8. render() {
  9. const { t, adminImportContainer } = this.props;
  10. return (
  11. <div data-testid="admin-import-data">
  12. <GrowiArchiveSection />
  13. <form
  14. className="mt-5"
  15. id="importerSettingFormEsa"
  16. role="form"
  17. >
  18. <fieldset>
  19. <h2 className="admin-setting-header">{t('admin:importer_management.import_from', { from: 'esa.io' })}</h2>
  20. <table className="table table-bordered table-mapping">
  21. <thead>
  22. <tr>
  23. <th width="45%">esa.io</th>
  24. <th width="10%"></th>
  25. <th>GROWI</th>
  26. </tr>
  27. </thead>
  28. <tbody>
  29. <tr>
  30. <th>{t('Article')}</th>
  31. <th><i className="icon-arrow-right-circle text-success"></i></th>
  32. <th>{t('Page')}</th>
  33. </tr>
  34. <tr>
  35. <th>{t('Category')}</th>
  36. <th><i className="icon-arrow-right-circle text-success"></i></th>
  37. <th>{t('Page Path')}</th>
  38. </tr>
  39. <tr>
  40. <th>{t('User')}</th>
  41. <th></th>
  42. <th>(TBD)</th>
  43. </tr>
  44. </tbody>
  45. </table>
  46. <div className="card well mb-0 small">
  47. <ul>
  48. <li>{t('admin:importer_management.page_skip')}</li>
  49. </ul>
  50. </div>
  51. <div className="form-group row">
  52. <input type="password" name="dummypass" style={{ display: 'none', top: '-100px', left: '-100px' }} />
  53. </div>
  54. <div className="form-group row">
  55. <label htmlFor="settingForm[importer:esa:team_name]" className="text-left text-md-right col-md-3 col-form-label">
  56. {t('admin:importer_management.esa_settings.team_name')}
  57. </label>
  58. <div className="col-md-6">
  59. <input
  60. className="form-control"
  61. type="text"
  62. name="esaTeamName"
  63. value={adminImportContainer.state.esaTeamName || ''}
  64. onChange={adminImportContainer.handleInputValue}
  65. />
  66. </div>
  67. </div>
  68. <div className="form-group row">
  69. <label htmlFor="settingForm[importer:esa:access_token]" className="text-left text-md-right col-md-3 col-form-label">
  70. {t('admin:importer_management.esa_settings.access_token')}
  71. </label>
  72. <div className="col-md-6">
  73. <input
  74. className="form-control"
  75. type="password"
  76. name="esaAccessToken"
  77. value={adminImportContainer.state.esaAccessToken || ''}
  78. onChange={adminImportContainer.handleInputValue}
  79. />
  80. </div>
  81. </div>
  82. <div className="form-group row">
  83. <div className="offset-md-3 col-md-6">
  84. <input
  85. id="testConnectionToEsa"
  86. type="button"
  87. className="btn btn-primary btn-esa"
  88. name="Esa"
  89. onClick={adminImportContainer.esaHandleSubmit}
  90. value={t('admin:importer_management.import')}
  91. />
  92. <input type="button" className="btn btn-secondary" onClick={adminImportContainer.esaHandleSubmitUpdate} value={t('Update')} />
  93. <span className="offset-0 offset-sm-1">
  94. <input
  95. id="importFromEsa"
  96. type="button"
  97. name="Esa"
  98. className="btn btn-secondary btn-esa"
  99. onClick={adminImportContainer.esaHandleSubmitTest}
  100. value={t('admin:importer_management.esa_settings.test_connection')}
  101. />
  102. </span>
  103. </div>
  104. </div>
  105. </fieldset>
  106. </form>
  107. <form
  108. className="mt-5"
  109. id="importerSettingFormQiita"
  110. role="form"
  111. >
  112. <fieldset>
  113. <h2 className="admin-setting-header">{t('admin:importer_management.import_from', { from: 'Qiita:Team' })}</h2>
  114. <table className="table table-bordered table-mapping">
  115. <thead>
  116. <tr>
  117. <th width="45%">Qiita:Team</th>
  118. <th width="10%"></th>
  119. <th>GROWI</th>
  120. </tr>
  121. </thead>
  122. <tbody>
  123. <tr>
  124. <th>{t('Article')}</th>
  125. <th><i className="icon-arrow-right-circle text-success"></i></th>
  126. <th>{t('Page')}</th>
  127. </tr>
  128. <tr>
  129. <th>{t('Tag')}</th>
  130. <th></th>
  131. <th>-</th>
  132. </tr>
  133. <tr>
  134. <th>{t('admin:importer_management.Directory_hierarchy_tag')}</th>
  135. <th></th>
  136. <th>(TBD)</th>
  137. </tr>
  138. <tr>
  139. <th>{t('User')}</th>
  140. <th></th>
  141. <th>(TBD)</th>
  142. </tr>
  143. </tbody>
  144. </table>
  145. <div className="card well mb-0 small">
  146. <ul>
  147. <li>{t('admin:importer_management.page_skip')}</li>
  148. </ul>
  149. </div>
  150. <div className="form-group row">
  151. <input type="password" name="dummypass" style={{ display: 'none', top: '-100px', left: '-100px' }} />
  152. </div>
  153. <div className="form-group row">
  154. <label htmlFor="settingForm[importer:qiita:team_name]" className="text-left text-md-right col-md-3 col-form-label">
  155. {t('admin:importer_management.qiita_settings.team_name')}
  156. </label>
  157. <div className="col-md-6">
  158. <input
  159. className="form-control"
  160. type="text"
  161. name="qiitaTeamName"
  162. value={adminImportContainer.state.qiitaTeamName || ''}
  163. onChange={adminImportContainer.handleInputValue}
  164. />
  165. </div>
  166. </div>
  167. <div className="form-group row">
  168. <label htmlFor="settingForm[importer:qiita:access_token]" className="text-left text-md-right col-md-3 col-form-label">
  169. {t('admin:importer_management.qiita_settings.access_token')}
  170. </label>
  171. <div className="col-md-6">
  172. <input
  173. className="form-control"
  174. type="password"
  175. name="qiitaAccessToken"
  176. value={adminImportContainer.state.qiitaAccessToken || ''}
  177. onChange={adminImportContainer.handleInputValue}
  178. />
  179. </div>
  180. </div>
  181. <div className="form-group row">
  182. <div className="offset-md-3 col-md-6">
  183. <input
  184. id="testConnectionToQiita"
  185. type="button"
  186. className="btn btn-primary btn-qiita"
  187. name="Qiita"
  188. onClick={adminImportContainer.qiitaHandleSubmit}
  189. value={t('admin:importer_management.import')}
  190. />
  191. <input type="button" className="btn btn-secondary" onClick={adminImportContainer.qiitaHandleSubmitUpdate} value={t('Update')} />
  192. <span className="offset-0 offset-sm-1">
  193. <input
  194. name="Qiita"
  195. type="button"
  196. id="importFromQiita"
  197. className="btn btn-secondary btn-qiita"
  198. onClick={adminImportContainer.qiitaHandleSubmitTest}
  199. value={t('admin:importer_management.qiita_settings.test_connection')}
  200. />
  201. </span>
  202. </div>
  203. </div>
  204. </fieldset>
  205. </form>
  206. </div>
  207. );
  208. }
  209. }
  210. ImportDataPageContents.propTypes = {
  211. t: PropTypes.func.isRequired, // i18next
  212. adminImportContainer: PropTypes.instanceOf(AdminImportContainer).isRequired,
  213. };
  214. const ImportDataPageContentsWrapperFc = (props) => {
  215. const { t } = useTranslation();
  216. return <ImportDataPageContents t={t} {...props} />;
  217. };
  218. /**
  219. * Wrapper component for using unstated
  220. */
  221. const ImportDataPageContentsWrapper = withUnstatedContainers(ImportDataPageContentsWrapperFc, [AdminImportContainer]);
  222. export default ImportDataPageContentsWrapper;