RevisionDiff.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { createPatch } from 'diff';
  4. import { Diff2Html } from 'diff2html';
  5. export default class RevisionDiff extends React.Component {
  6. render() {
  7. const currentRevision = this.props.currentRevision,
  8. previousRevision = this.props.previousRevision,
  9. revisionDiffOpened = this.props.revisionDiffOpened;
  10. let diffViewHTML = '';
  11. if (currentRevision.body
  12. && previousRevision.body
  13. && revisionDiffOpened) {
  14. let previousText = previousRevision.body;
  15. if (currentRevision._id == previousRevision._id) {
  16. previousText = '';
  17. }
  18. const patch = createPatch(
  19. currentRevision.path,
  20. previousText,
  21. currentRevision.body
  22. );
  23. diffViewHTML = Diff2Html.getPrettyHtml(patch);
  24. }
  25. const diffView = {__html: diffViewHTML};
  26. return <div className="revision-history-diff" dangerouslySetInnerHTML={diffView} />;
  27. }
  28. }
  29. RevisionDiff.propTypes = {
  30. currentRevision: PropTypes.object.isRequired,
  31. previousRevision: PropTypes.object.isRequired,
  32. revisionDiffOpened: PropTypes.bool.isRequired,
  33. }