ConflictDiffModal.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import React, {
  2. useState, useEffect, useRef, FC, createElement,
  3. } from 'react';
  4. import ReactDOM from 'react-dom';
  5. import {
  6. Modal, ModalHeader, ModalBody,
  7. } from 'reactstrap';
  8. import CodeMirror from 'codemirror/lib/codemirror';
  9. import { JSHINT } from 'jshint';
  10. require('codemirror/addon/merge/merge');
  11. require('codemirror/lib/codemirror.css');
  12. require('codemirror/theme/eclipse.css');
  13. require('codemirror/theme/neat.css');
  14. require('codemirror/addon/lint/lint.css');
  15. require('codemirror/addon/merge/merge.css');
  16. require('codemirror/mode/javascript/javascript');
  17. require('codemirror/addon/lint/lint');
  18. require('codemirror/addon/lint/javascript-lint');
  19. require('codemirror/addon/merge/merge');
  20. Object.keys(JSHINT).forEach((key) => { window[key] = JSHINT[key] });
  21. const DMP = require('diff_match_patch');
  22. Object.keys(DMP).forEach((key) => { window[key] = DMP[key] });
  23. export const ConflictDiffModal: FC = () => {
  24. const codeMirrorRef = useRef<HTMLDivElement | null>(null);
  25. const [val, setVal] = useState('Test Value');
  26. const [orig, setOrig] = useState('Original Value');
  27. useEffect(() => {
  28. const containerElem = document.getElementById('cm-mv');
  29. const DivElem = document.createElement('div');
  30. console.log(containerElem);
  31. CodeMirror.MergeView(DivElem, {
  32. theme: 'eclipse',
  33. value: val,
  34. origLeft: null,
  35. origRight: orig,
  36. allowEditingOriginals: true,
  37. lineNumbers: true,
  38. mode: 'javascript',
  39. highlightDifferences: true,
  40. gutters: ['CodeMirror-lint-markers'],
  41. lint: true,
  42. connect: 'align',
  43. });
  44. ReactDOM.render(DivElem, containerElem);
  45. }, []);
  46. return (
  47. <Modal isOpen className="modal-gfm-cheatsheet">
  48. <ModalHeader tag="h4" className="bg-primary text-light">
  49. <i className="icon-fw icon-question" />Resolve Conflict
  50. </ModalHeader>
  51. <ModalBody>
  52. <div id="cm-mv"></div>
  53. </ModalBody>
  54. </Modal>
  55. );
  56. };