| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import React from 'react';
- import PropTypes from 'prop-types';
- import Modal from 'react-bootstrap/es/Modal';
- import Button from 'react-bootstrap/es/Button';
- import { HotTable } from '@handsontable/react';
- import MarkdownTable from '../../models/MarkdownTable';
- export default class HandsontableModal extends React.Component {
- constructor(props) {
- super(props);
- this.state = {
- show: false,
- markdownTableOnInit: HandsontableModal.getDefaultMarkdownTable(),
- markdownTable: HandsontableModal.getDefaultMarkdownTable()
- };
- this.settings = {
- height: 300,
- rowHeaders: true,
- colHeaders: true,
- fixedRowsTop: [0, 1],
- contextMenu: ['row_above', 'row_below', 'col_left', 'col_right', '---------', 'remove_row', 'remove_col', '---------', 'alignment'],
- stretchH: 'all',
- selectionMode: 'multiple',
- };
- this.init = this.init.bind(this);
- this.reset = this.reset.bind(this);
- this.cancel = this.cancel.bind(this);
- this.save = this.save.bind(this);
- }
- init(markdownTable) {
- const initMarkdownTable = markdownTable || HandsontableModal.getDefaultMarkdownTable();
- this.setState({ markdownTableOnInit: initMarkdownTable });
- this.setState({ markdownTable: initMarkdownTable.clone() });
- }
- show(markdownTable) {
- this.init(markdownTable);
- this.setState({ show: true });
- }
- reset() {
- this.setState({ markdownTable: this.state.markdownTableOnInit.clone() });
- }
- cancel() {
- this.setState({ show: false });
- }
- save() {
- if (this.props.onSave != null) {
- this.props.onSave(this.state.markdownTable);
- }
- this.setState({ show: false });
- }
- render() {
- return (
- <Modal show={this.state.show} onHide={this.cancel} bsSize="large">
- <Modal.Header closeButton>
- <Modal.Title>Edit Table</Modal.Title>
- </Modal.Header>
- <Modal.Body className="p-0">
- <div className="p-4">
- <HotTable data={this.state.markdownTable.table} settings={this.settings} />
- </div>
- </Modal.Body>
- <Modal.Footer>
- <div className="d-flex justify-content-between">
- <Button bsStyle="danger" onClick={this.reset}>Reset</Button>
- <div className="d-flex">
- <Button bsStyle="default" onClick={this.cancel}>Cancel</Button>
- <Button bsStyle="primary" onClick={this.save}>Done</Button>
- </div>
- </div>
- </Modal.Footer>
- </Modal>
- );
- }
- static getDefaultMarkdownTable() {
- return new MarkdownTable([
- ['col1', 'col2', 'col3'],
- ['', '', ''],
- ['', '', ''],
- ]);
- }
- }
- HandsontableModal.propTypes = {
- onSave: PropTypes.func
- };
|