import React from 'react';
import { useTranslation } from 'next-i18next';
import PropTypes from 'prop-types';
import { Waypoint } from 'react-waypoint';
import { apiv3Get } from '~/client/util/apiv3-client';
import { RendererOptions } from '~/services/renderer/renderer';
import loggerFactory from '~/utils/logger';
import RevisionRenderer from './RevisionRenderer';
/**
* Load data from server and render RevisionBody component
*/
class RevisionLoader extends React.Component {
constructor(props) {
super(props);
this.logger = loggerFactory('growi:Page:RevisionLoader');
this.state = {
markdown: null,
isLoading: false,
isLoaded: false,
errors: null,
};
this.loadData = this.loadData.bind(this);
this.onWaypointChange = this.onWaypointChange.bind(this);
}
UNSAFE_componentWillMount() {
if (!this.props.lazy) {
this.loadData();
}
}
async loadData() {
if (!this.state.isLoaded && !this.state.isLoading) {
this.setState({ isLoading: true });
}
const { pageId, revisionId } = this.props;
// load data with REST API
try {
const res = await apiv3Get(`/revisions/${revisionId}`, { pageId });
this.setState({
markdown: res.data?.revision?.body,
errors: null,
});
if (this.props.onRevisionLoaded != null) {
this.props.onRevisionLoaded(res.data.revision);
}
}
catch (errors) {
this.setState({ errors });
}
finally {
this.setState({ isLoaded: true, isLoading: false });
}
}
onWaypointChange(event) {
if (event.currentPosition === Waypoint.above || event.currentPosition === Waypoint.inside) {
this.loadData();
}
}
render() {
// ----- before load -----
if (this.props.lazy && !this.state.isLoaded) {
return (