| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- import React, { Fragment } from 'react';
- import PropTypes from 'prop-types';
- import { withTranslation } from 'react-i18next';
- import * as toastr from 'toastr';
- import { withUnstatedContainers } from '../../UnstatedUtils';
- import AppContainer from '../../../services/AppContainer';
- // import { toastSuccess, toastError } from '../../../util/apiNotification';
- import UploadForm from './GrowiArchive/UploadForm';
- import ImportForm from './GrowiArchive/ImportForm';
- class GrowiArchiveSection extends React.Component {
- constructor(props) {
- super(props);
- this.initialState = {
- fileName: null,
- innerFileStats: null,
- isTheSameVersion: null,
- };
- this.state = this.initialState;
- this.handleUpload = this.handleUpload.bind(this);
- this.discardData = this.discardData.bind(this);
- this.resetState = this.resetState.bind(this);
- this.handleVersion = this.handleVersion.bind(this);
- this.renderDefferentVersionAlert = this.renderDefferentVersionAlert.bind(this);
- }
- async componentWillMount() {
- // get uploaded file status
- const res = await this.props.appContainer.apiv3Get('/import/status');
- if (res.data.zipFileStat != null) {
- const { fileName, innerFileStats } = res.data.zipFileStat;
- this.setState({ fileName, innerFileStats });
- }
- }
- handleUpload({
- meta, fileName, innerFileStats,
- }) {
- this.setState({
- fileName,
- });
- }
- async discardData() {
- try {
- const { fileName } = this.state;
- await this.props.appContainer.apiv3Delete('/import/all');
- this.resetState();
- // TODO: toastSuccess, toastError
- toastr.success(undefined, `Deleted ${fileName}`, {
- closeButton: true,
- progressBar: true,
- newestOnTop: false,
- showDuration: '100',
- hideDuration: '100',
- timeOut: '1200',
- extendedTimeOut: '150',
- });
- }
- catch (err) {
- // TODO: toastSuccess, toastError
- toastr.error(err, 'Error', {
- closeButton: true,
- progressBar: true,
- newestOnTop: false,
- showDuration: '100',
- hideDuration: '100',
- timeOut: '3000',
- });
- }
- }
- handleVersion(err) {
- console.log(`isTheSameVersionA = ${this.state.isTheSameVersion}`);
- if (err === 'versions-are-not-met') {
- this.setState({
- isTheSameVersion: false,
- });
- console.log(`isTheSameVersionB = ${this.state.isTheSameVersion}`);
- }
- }
- renderDefferentVersionAlert() {
- const { t } = this.props;
- const { isTheSameVersion } = this.state;
- console.log(`isTheSameVersionD =${isTheSameVersion}`);
- return (
- <div className="alert alert-warning mt-3">
- {t('admin:importer_management.growi_settings.errors.different_versions')}
- </div>
- );
- }
- resetState() {
- this.setState(this.initialState);
- }
- render() {
- const { t } = this.props;
- const { isTheSameVersion } = this.state;
- console.log(`isTheSameVersion XXX =${isTheSameVersion}`);
- return (
- <Fragment>
- <h2>{t('admin:importer_management.import_growi_archive')}</h2>
- <div className="card well mb-4 small">
- <ul>
- <li>{t('admin:importer_management.skip_username_and_email_when_overlapped')}</li>
- <li>{t('admin:importer_management.prepare_new_account_for_migration')}</li>
- <li>
- <a
- href={`${t('admin:importer_management.admin_archive_data_import_guide_url')}`}
- target="_blank"
- rel="noopener noreferrer"
- >{t('admin:importer_management.archive_data_import_detail')}
- </a>
- </li>
- </ul>
- </div>
- {isTheSameVersion === false && this.renderDefferentVersionAlert()}
- {this.state.fileName != null ? (
- <div className="px-4">
- <ImportForm
- fileName={this.state.fileName}
- innerFileStats={this.state.innerFileStats}
- onDiscard={this.discardData}
- />
- </div>
- )
- : (
- <UploadForm
- onUpload={this.handleUpload}
- onVersion={this.handleVersion}
- />
- )}
- </Fragment>
- );
- }
- }
- GrowiArchiveSection.propTypes = {
- t: PropTypes.func.isRequired, // i18next
- appContainer: PropTypes.instanceOf(AppContainer).isRequired,
- };
- /**
- * Wrapper component for using unstated
- */
- const GrowiArchiveSectionWrapper = withUnstatedContainers(GrowiArchiveSection, [AppContainer]);
- export default withTranslation()(GrowiArchiveSectionWrapper);
|