GridEditModal.jsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import {
  4. Modal, ModalHeader, ModalBody, ModalFooter,
  5. } from 'reactstrap';
  6. import BootstrapGrid from '../../models/BootstrapGrid';
  7. export default class GridEditModal extends React.PureComponent {
  8. constructor(props) {
  9. super(props);
  10. this.state = {
  11. show: false,
  12. gridHtml: '',
  13. };
  14. this.init = this.init.bind(this);
  15. this.show = this.show.bind(this);
  16. this.hide = this.hide.bind(this);
  17. this.cancel = this.cancel.bind(this);
  18. this.pasteCodedGrid = this.pasteCodedGrid.bind(this);
  19. }
  20. init(gridHtml) {
  21. const initGridHtml = gridHtml;
  22. this.setState({ gridHtml: initGridHtml }, function() {
  23. // display gridHtml for re-editing
  24. console.log(this.state.gridHtml);
  25. });
  26. }
  27. show(gridHtml) {
  28. this.init(gridHtml);
  29. this.setState({ show: true });
  30. const test = new BootstrapGrid([1, 11], 'md');
  31. const test1 = new BootstrapGrid([2, 10], 'dd');
  32. console.log(test.responsiveSize);
  33. console.log(test1.responsiveSize);
  34. }
  35. hide() {
  36. this.setState({ show: false });
  37. }
  38. cancel() {
  39. this.hide();
  40. }
  41. pasteCodedGrid() {
  42. // dummy data
  43. const pastedGridData = `::: editable-row\n<div class="container">\n <div class="row">
  44. <div class="col-sm-6 col-md-5 col-lg-12">dummy</div>\n </div>\n</div>\n:::`;
  45. if (this.props.onSave != null) {
  46. this.props.onSave(pastedGridData);
  47. }
  48. this.cancel();
  49. }
  50. showBgCols() {
  51. const cols = [];
  52. for (let i = 0; i < 12; i++) {
  53. // [bg-light:TODO support dark mode by GW-3037]
  54. cols.push(<div className="bg-light grid-bg-col col-1"></div>);
  55. }
  56. return cols;
  57. }
  58. showEditableCols() {
  59. const cols = [];
  60. for (let i = 0; i < 12; i++) {
  61. // [bg-light:TODO support dark mode by GW-3037]
  62. cols.push(<div className="bg-dark grid-bg-col col-1"></div>);
  63. }
  64. return cols;
  65. }
  66. render() {
  67. return (
  68. <Modal isOpen={this.state.show} toggle={this.cancel} size="xl">
  69. <ModalHeader tag="h4" toggle={this.cancel} className="bg-primary text-light">
  70. Edit Grid
  71. </ModalHeader>
  72. <ModalBody>
  73. <div className="container">
  74. <div className="row">
  75. <div className="col-3">
  76. <h5>Phone</h5>
  77. <div className="device-container"></div>
  78. <h5>Tablet</h5>
  79. <div className="device-container"></div>
  80. <h5>Desktop</h5>
  81. <div className="device-container"></div>
  82. <h5>Large Desktop</h5>
  83. <div className="device-container"></div>
  84. </div>
  85. <div className="col-9">
  86. <div className="row h-100">
  87. {this.showBgCols()}
  88. </div>
  89. <div className="row w-100 h-100 position-absolute grid-editable-row">
  90. {/* [Just an example to check if bg-cols and editable-cols fit] */}
  91. <div className="bg-dark grid-editable-col col-3"></div>
  92. <div className="bg-dark grid-editable-col col-5"></div>
  93. <div className="bg-dark grid-editable-col col-4"></div>
  94. </div>
  95. </div>
  96. </div>
  97. </div>
  98. </ModalBody>
  99. <ModalFooter className="grw-modal-footer">
  100. <div className="ml-auto">
  101. <button type="button" className="mr-2 btn btn-secondary" onClick={this.cancel}>Cancel</button>
  102. <button type="button" className="btn btn-primary" onClick={this.pasteCodedGrid}>Done</button>
  103. </div>
  104. </ModalFooter>
  105. </Modal>
  106. );
  107. }
  108. }
  109. GridEditModal.propTypes = {
  110. onSave: PropTypes.func,
  111. };