RevisionLoader.jsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import RevisionRenderer from './RevisionRenderer';
  4. export default class RevisionLoader extends React.Component {
  5. constructor(props) {
  6. super(props);
  7. this.logger = require('@alias/logger')('growi:Page:RevisionLoader');
  8. this.state = {
  9. markdown: '',
  10. error: null,
  11. };
  12. this.loadData = this.loadData.bind(this);
  13. }
  14. componentWillMount() {
  15. this.loadData();
  16. }
  17. loadData() {
  18. const requestData = {
  19. page_id: this.props.pageId,
  20. revision_id: this.props.revisionId,
  21. };
  22. // load data with REST API
  23. this.props.crowi.apiGet('/revisions.get', requestData)
  24. .then(res => {
  25. if (!res.ok) {
  26. throw new Error(res.error);
  27. }
  28. this.setState({
  29. markdown: res.revision.body,
  30. error: null,
  31. });
  32. })
  33. .catch(err => {
  34. this.setState({ error: err });
  35. });
  36. }
  37. render() {
  38. let markdown = this.state.markdown;
  39. if (this.state.error != null) {
  40. markdown = `<span class="text-muted"><em>${this.state.error}</em></span>`;
  41. }
  42. return (
  43. <RevisionRenderer
  44. crowi={this.props.crowi} crowiRenderer={this.props.crowiRenderer}
  45. pagePath={this.props.pagePath}
  46. markdown={markdown}
  47. highlightKeywords={this.props.highlightKeywords}
  48. />
  49. );
  50. }
  51. }
  52. RevisionLoader.propTypes = {
  53. crowi: PropTypes.object.isRequired,
  54. crowiRenderer: PropTypes.object.isRequired,
  55. pageId: PropTypes.string.isRequired,
  56. pagePath: PropTypes.string.isRequired,
  57. revisionId: PropTypes.string.isRequired,
  58. lazy: PropTypes.bool.isRequired,
  59. highlightKeywords: PropTypes.string,
  60. };