RevisionSelector.jsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withUnstatedContainers } from '../UnstatedUtils';
  4. import { withLoadingSppiner } from '../SuspenseUtils';
  5. import RevisionComparerContainer from '../../services/RevisionComparerContainer';
  6. const RevisionSelector = (props) => {
  7. const { revision, hasDiff, revisionComparerContainer } = props;
  8. const { sourceRevision, targetRevision } = revisionComparerContainer.state;
  9. if (!hasDiff) {
  10. return <></>;
  11. }
  12. return (
  13. <React.Fragment>
  14. <div className="container-fluid px-0">
  15. <div className="row no-gutters">
  16. <div className="col text-center">
  17. <div className="custom-control custom-radio custom-control-inline mr-0">
  18. <input
  19. type="radio"
  20. className="custom-control-input"
  21. id={`compareSource-${revision._id}`}
  22. name="compareSource"
  23. value={revision._id}
  24. checked={revision._id === sourceRevision?._id}
  25. onChange={() => revisionComparerContainer.setState({ sourceRevision: revision })}
  26. />
  27. <label className="custom-control-label" htmlFor={`compareSource-${revision._id}`} />
  28. </div>
  29. </div>
  30. <div className="col text-center">
  31. <div className="custom-control custom-radio custom-control-inline mr-0">
  32. <input
  33. type="radio"
  34. className="custom-control-input"
  35. id={`compareTarget-${revision._id}`}
  36. name="compareTarget"
  37. value={revision._id}
  38. checked={revision._id === targetRevision?._id}
  39. onChange={() => revisionComparerContainer.setState({ targetRevision: revision })}
  40. disabled={revisionComparerContainer.state.compareWithLatest}
  41. />
  42. <label className="custom-control-label" htmlFor={`compareTarget-${revision._id}`} />
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. </React.Fragment>
  48. );
  49. };
  50. const RevisionSelectorWrapper = withUnstatedContainers(withLoadingSppiner(RevisionSelector), [RevisionComparerContainer]);
  51. RevisionSelector.propTypes = {
  52. revisionComparerContainer: PropTypes.instanceOf(RevisionComparerContainer).isRequired,
  53. revision: PropTypes.object,
  54. hasDiff: PropTypes.bool.isRequired,
  55. };
  56. export default RevisionSelectorWrapper;