RevisionIdForm.jsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withUnstatedContainers } from '../UnstatedUtils';
  4. import RevisionCompareContainer from '../../services/RevisionCompareContainer';
  5. class RevisionIdForm extends React.Component {
  6. constructor(props) {
  7. super(props);
  8. this.state = {
  9. };
  10. }
  11. /**
  12. * render a row (Revision component and RevisionDiff component)
  13. * @param {label} label text of inputbox
  14. */
  15. renderRevisionSelector(label) {
  16. if (["FromRev", "ToRev"].indexOf(label) === -1) {
  17. return <div></div>
  18. }
  19. const { revisionCompareContainer } = this.props;
  20. const selectedRev = (label === "FromRev" ? revisionCompareContainer.state.fromRevision : revisionCompareContainer.state.toRevision);
  21. const changeHandler = (label === "FromRev" ? revisionCompareContainer.handleFromRevisionChange : revisionCompareContainer.handleToRevisionChange);
  22. return (
  23. <div class="input-group mb-3 col-sm">
  24. <div class="input-group-prepend">
  25. <label class="input-group-text" for="inputGroupSelect01">{ label }</label>
  26. </div>
  27. <select class="custom-select" id="inputGroupSelect01" value={selectedRev ? selectedRev._id : ""} onChange={e => changeHandler(e.target.value)}>
  28. {
  29. revisionCompareContainer.state.recentRevisions.map(rev => (
  30. <option key={rev._id} value={rev._id}>{ rev._id }</option>
  31. ))
  32. }
  33. </select>
  34. </div>
  35. );
  36. }
  37. render() {
  38. const fromRevSelector = this.renderRevisionSelector("FromRev");
  39. const toRevSelector = this.renderRevisionSelector("ToRev");
  40. return (
  41. <div class="container-fluid px-0">
  42. <div class="row">
  43. { fromRevSelector }
  44. { toRevSelector }
  45. </div>
  46. </div>
  47. );
  48. }
  49. }
  50. /**
  51. * Wrapper component for using unstated
  52. */
  53. const RevisionIdFormWrapper = withUnstatedContainers(RevisionIdForm, [RevisionCompareContainer]);
  54. /**
  55. * Properties
  56. */
  57. RevisionIdForm.propTypes = {
  58. revisionCompareContainer: PropTypes.instanceOf(RevisionCompareContainer).isRequired,
  59. };
  60. /**
  61. * Properties
  62. */
  63. RevisionIdForm.defaultProps = {
  64. };
  65. export default RevisionIdFormWrapper;