import React from 'react';
import PropTypes from 'prop-types';
import { withTranslation } from 'react-i18next';
import * as entities from 'entities';
import AppContainer from '../services/AppContainer';
import { createSubscribedElement } from './UnstatedUtils';
import RevisionLoader from './Page/RevisionLoader';
class PageTimeline extends React.Component {
constructor(props) {
super(props);
const { appContainer } = this.props;
this.state = {
isEnabled: appContainer.getConfig().isEnabledTimeline,
isInitialized: false,
// TODO: remove after when timeline is implemented with React and inject data with props
pages: this.props.pages,
};
}
componentWillMount() {
if (!this.state.isEnabled) {
return;
}
const { appContainer } = this.props;
// initialize GrowiRenderer
this.growiRenderer = appContainer.getRenderer('timeline');
this.initBsTab();
}
/**
* initialize Bootstrap Tab event for 'shown.bs.tab'
* TODO: remove this method after implement with React
*/
initBsTab() {
$('a[data-toggle="tab"][href="#view-timeline"]').on('shown.bs.tab', () => {
if (this.state.isInitialized) {
return;
}
const pageIdsElm = document.getElementById('page-timeline-data');
if (pageIdsElm == null || pageIdsElm.text.length === 0) {
return;
}
const pages = this.extractDataFromDom();
this.setState({
isInitialized: true,
pages,
});
});
}
/**
* extract page data from DOM
* TODO: remove this method after implement with React
*/
extractDataFromDom() {
const pageIdsElm = document.getElementById('page-timeline-data');
if (pageIdsElm == null || pageIdsElm.text.length === 0) {
return null;
}
let pages = JSON.parse(pageIdsElm.text);
// decode path
pages = pages.map((page) => {
page.path = decodeURIComponent(entities.decodeHTML(page.path));
return page;
});
return pages;
}
render() {
if (!this.state.isEnabled) {
return