import React from 'react';
import PropTypes from 'prop-types';
import { withTranslation } from 'react-i18next';
import { createSubscribedElement } from '../../UnstatedUtils';
import AppContainer from '../../../services/AppContainer';
import WebsocketContainer from '../../../services/WebsocketContainer';
import { toastSuccess, toastError } from '../../../util/apiNotification';
import ProgressBar from '../Common/ProgressBar';
class RebuildIndex extends React.Component {
constructor(props) {
super(props);
this.state = {
isProcessing: false,
isCompleted: false,
total: 0,
current: 0,
skip: 0,
};
this.buildIndex = this.buildIndex.bind(this);
}
componentDidMount() {
const socket = this.props.websocketContainer.getWebSocket();
socket.on('admin:addPageProgress', (data) => {
this.setState({
isProcessing: true,
...data,
});
});
socket.on('admin:finishAddPage', (data) => {
this.setState({
isProcessing: false,
isCompleted: true,
...data,
});
});
}
async buildIndex() {
const { appContainer } = this.props;
const pageId = this.pageId;
try {
const res = await appContainer.apiPost('/admin/search/build', { page_id: pageId });
if (!res.ok) {
throw new Error(res.message);
}
this.setState({ isProcessing: true });
toastSuccess('Rebuilding is requested');
}
catch (e) {
toastError(e);
}
}
renderProgressBar() {
const {
total, current, skip, isProcessing, isCompleted,
} = this.state;
const showProgressBar = isProcessing || isCompleted;
if (!showProgressBar) {
return null;
}
const header = isCompleted ? 'Completed' : `Processing.. (${skip} skips)`;
return (
{ t('full_text_search_management.rebuild_description_1') }
{ t('full_text_search_management.rebuild_description_2') }
{ t('full_text_search_management.rebuild_description_3') }