import React, { useState, useEffect, FC } from 'react'; import PropTypes from 'prop-types'; import { Modal, ModalHeader, ModalBody, ModalFooter, } from 'reactstrap'; import CodeMirror from 'codemirror/lib/codemirror'; import { useTranslation } from 'react-i18next'; require('codemirror/lib/codemirror.css'); require('codemirror/addon/merge/merge'); require('codemirror/addon/merge/merge.css'); const DMP = require('diff_match_patch'); Object.keys(DMP).forEach((key) => { window[key] = DMP[key] }); type ConflictDiffModalProps = { isOpen: boolean | null; onCancel: (() => void) | null; onResolveConflict: (() => void) | null; }; export const ConflictDiffModal: FC = (props) => { const [val, setVal] = useState('value 1'); const [orig, setOrig] = useState('value 2'); const [codeMirrorRef, setCodeMirrorRef] = useState(null); const { t } = useTranslation(''); useEffect(() => { if (codeMirrorRef) { CodeMirror.MergeView(codeMirrorRef, { value: val, origLeft: orig, origRight: null, connect: 'align', lineNumbers: true, collapseIdentical: true, highlightDifferences: true, allowEditingOriginals: false, }); } }, [codeMirrorRef, orig, val]); const onCancel = () => { if (props.onCancel != null) { props.onCancel(); } }; const onResolveConflict = () => { if (props.onResolveConflict != null) { props.onResolveConflict(); } }; return ( {t('modal_resolve_conflict.title')}
{ setCodeMirrorRef(el) }}>
); }; ConflictDiffModal.propTypes = { isOpen: PropTypes.bool, onCancel: PropTypes.func, onResolveConflict: PropTypes.func, }; ConflictDiffModal.defaultProps = { isOpen: false, };