|
|
@@ -3,14 +3,12 @@ import React from 'react';
|
|
|
import { useTranslation } from 'next-i18next';
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
|
-import AdminSocketIoContainer from '~/client/services/AdminSocketIoContainer';
|
|
|
import { toastSuccess, toastError } from '~/client/util/apiNotification';
|
|
|
import { apiv3Post } from '~/client/util/apiv3-client';
|
|
|
import GrowiArchiveImportOption from '~/models/admin/growi-archive-import-option';
|
|
|
import ImportOptionForPages from '~/models/admin/import-option-for-pages';
|
|
|
import ImportOptionForRevisions from '~/models/admin/import-option-for-revisions';
|
|
|
-
|
|
|
-import { withUnstatedContainers } from '../../../UnstatedUtils';
|
|
|
+import { useAdminSocket } from '~/stores/socket-io';
|
|
|
|
|
|
|
|
|
import ErrorViewer from './ErrorViewer';
|
|
|
@@ -103,50 +101,56 @@ class ImportForm extends React.Component {
|
|
|
}
|
|
|
|
|
|
setupWebsocketEventHandler() {
|
|
|
- const socket = this.props.adminSocketIoContainer.getSocket();
|
|
|
-
|
|
|
- // websocket event
|
|
|
- // eslint-disable-next-line object-curly-newline
|
|
|
- socket.on('admin:onProgressForImport', ({ collectionName, collectionProgress, appendedErrors }) => {
|
|
|
- const { progressMap, errorsMap } = this.state;
|
|
|
- progressMap[collectionName] = collectionProgress;
|
|
|
+ const { socket } = this.props;
|
|
|
+
|
|
|
+ if (socket != null) {
|
|
|
+ // websocket event
|
|
|
+ // eslint-disable-next-line object-curly-newline
|
|
|
+ socket.on('admin:onProgressForImport', ({ collectionName, collectionProgress, appendedErrors }) => {
|
|
|
+ const { progressMap, errorsMap } = this.state;
|
|
|
+ progressMap[collectionName] = collectionProgress;
|
|
|
+
|
|
|
+ const errors = errorsMap[collectionName] || [];
|
|
|
+ errorsMap[collectionName] = errors.concat(appendedErrors);
|
|
|
+
|
|
|
+ this.setState({
|
|
|
+ isImporting: true,
|
|
|
+ progressMap,
|
|
|
+ errorsMap,
|
|
|
+ });
|
|
|
+ });
|
|
|
|
|
|
- const errors = errorsMap[collectionName] || [];
|
|
|
- errorsMap[collectionName] = errors.concat(appendedErrors);
|
|
|
+ // websocket event
|
|
|
+ socket.on('admin:onTerminateForImport', () => {
|
|
|
+ this.setState({
|
|
|
+ isImporting: false,
|
|
|
+ isImported: true,
|
|
|
+ });
|
|
|
|
|
|
- this.setState({
|
|
|
- isImporting: true,
|
|
|
- progressMap,
|
|
|
- errorsMap,
|
|
|
+ toastSuccess(undefined, 'Import process has completed.');
|
|
|
});
|
|
|
- });
|
|
|
|
|
|
- // websocket event
|
|
|
- socket.on('admin:onTerminateForImport', () => {
|
|
|
- this.setState({
|
|
|
- isImporting: false,
|
|
|
- isImported: true,
|
|
|
- });
|
|
|
+ // websocket event
|
|
|
+ socket.on('admin:onErrorForImport', (err) => {
|
|
|
+ this.setState({
|
|
|
+ isImporting: false,
|
|
|
+ isImported: false,
|
|
|
+ });
|
|
|
|
|
|
- toastSuccess(undefined, 'Import process has completed.');
|
|
|
- });
|
|
|
-
|
|
|
- // websocket event
|
|
|
- socket.on('admin:onErrorForImport', (err) => {
|
|
|
- this.setState({
|
|
|
- isImporting: false,
|
|
|
- isImported: false,
|
|
|
+ toastError(err, 'Import process has failed.');
|
|
|
});
|
|
|
|
|
|
- toastError(err, 'Import process has failed.');
|
|
|
- });
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
teardownWebsocketEventHandler() {
|
|
|
- const socket = this.props.adminSocketIoContainer.getSocket();
|
|
|
+ const { socket } = this.props;
|
|
|
|
|
|
- socket.removeAllListeners('admin:onProgressForImport');
|
|
|
- socket.removeAllListeners('admin:onTerminateForImport');
|
|
|
+ if (socket != null) {
|
|
|
+ socket.removeAllListeners('admin:onProgressForImport');
|
|
|
+ socket.removeAllListeners('admin:onTerminateForImport');
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
async toggleCheckbox(collectionName, bool) {
|
|
|
@@ -496,7 +500,7 @@ class ImportForm extends React.Component {
|
|
|
|
|
|
ImportForm.propTypes = {
|
|
|
t: PropTypes.func.isRequired, // i18next
|
|
|
- adminSocketIoContainer: PropTypes.instanceOf(AdminSocketIoContainer).isRequired,
|
|
|
+ socket: PropTypes.object,
|
|
|
|
|
|
fileName: PropTypes.string,
|
|
|
innerFileStats: PropTypes.arrayOf(PropTypes.object).isRequired,
|
|
|
@@ -506,13 +510,10 @@ ImportForm.propTypes = {
|
|
|
|
|
|
const ImportFormWrapperFc = (props) => {
|
|
|
const { t } = useTranslation('admin');
|
|
|
+ const { data: socket } = useAdminSocket();
|
|
|
|
|
|
- return <ImportForm t={t} {...props} />;
|
|
|
+ return <ImportForm t={t} socket={socket} {...props} />;
|
|
|
};
|
|
|
|
|
|
-/**
|
|
|
- * Wrapper component for using unstated
|
|
|
- */
|
|
|
-const ImportFormWrapper = withUnstatedContainers(ImportFormWrapperFc, [AdminSocketIoContainer]);
|
|
|
|
|
|
-export default ImportFormWrapper;
|
|
|
+export default ImportFormWrapperFc;
|