From 13604b3903852825fadd0e7a1b14fc7b478273a2 Mon Sep 17 00:00:00 2001 From: Yannis Barlas <yannisbarlas@gmail.com> Date: Wed, 16 Sep 2020 14:26:33 +0300 Subject: [PATCH] add on grid select function to insert table tool --- stories/tables/InsertTableTool.stories.js | 32 +++++++++++++++---- .../src/ui/tables/InsertTableTool.js | 20 ++++++++---- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/stories/tables/InsertTableTool.stories.js b/stories/tables/InsertTableTool.stories.js index 568581b9d..0c062c776 100644 --- a/stories/tables/InsertTableTool.stories.js +++ b/stories/tables/InsertTableTool.stories.js @@ -1,18 +1,36 @@ -import React from 'react'; +import React, { useState } from 'react'; import styled from 'styled-components'; -// import { lorem } from 'faker' import InsertTableTool from '../../wax-prosemirror-components/src/ui/tables/InsertTableTool'; +import { Demo } from '../_helpers'; const Wrapper = styled.div` height: 450px; `; -export const Base = () => ( - <Wrapper> - <InsertTableTool /> - </Wrapper> -); +const Selected = styled.div` + margin: 12px 0; +`; + +export const Base = () => { + const [selected, setSelected] = useState(null); + + const handleGridSelect = dimensions => setSelected(dimensions); + + return ( + <Demo onClickButton={() => setSelected(null)}> + <Wrapper> + <Selected> + Selected:{' '} + {selected && `${selected.rows} rows & ${selected.cols} columns`} + {!selected && 'nothing'} + </Selected> + + <InsertTableTool onGridSelect={handleGridSelect} /> + </Wrapper> + </Demo> + ); +}; export default { component: InsertTableTool, diff --git a/wax-prosemirror-components/src/ui/tables/InsertTableTool.js b/wax-prosemirror-components/src/ui/tables/InsertTableTool.js index 9dccfcb3c..149387583 100644 --- a/wax-prosemirror-components/src/ui/tables/InsertTableTool.js +++ b/wax-prosemirror-components/src/ui/tables/InsertTableTool.js @@ -1,8 +1,9 @@ /** * Adapted from https://github.com/chanzuckerberg/czi-prosemirror/blob/master/src/ui/TableGridSizeEditor.js + * + * TO DO -- Implement a gdocs-style CSS only solution to dramatically cut back on renders */ -/* eslint-disable react/prop-types */ /* eslint-disable react/jsx-handler-names */ /* eslint-disable react/destructuring-assignment */ /* eslint-disable react/no-find-dom-node */ @@ -14,6 +15,7 @@ /* eslint-disable jsx-a11y/no-static-element-interactions */ import React from 'react'; +import PropTypes from 'prop-types'; import ReactDOM from 'react-dom'; const clamp = (min, val, max) => { @@ -93,6 +95,12 @@ class GridCell extends React.PureComponent { } } +GridCell.propTypes = { + x: PropTypes.number.isRequired, + y: PropTypes.number.isRequired, + selected: PropTypes.bool.isRequired, +}; + class TableGridSizeEditor extends React.PureComponent { _ex = 0; _ey = 0; @@ -110,10 +118,6 @@ class TableGridSizeEditor extends React.PureComponent { }; } - // props: { - // close: (val: TableGridSizeEditorValue) => void, - // }; - componentWillUnmount() { if (this._entered) { document.removeEventListener('mousemove', this._onMouseMove, true); @@ -179,7 +183,7 @@ class TableGridSizeEditor extends React.PureComponent { _onMouseDown = e => { e.preventDefault(); - this.props.close(this.state); + this.props.onGridSelect(this.state); }; render() { @@ -251,4 +255,8 @@ class TableGridSizeEditor extends React.PureComponent { } } +TableGridSizeEditor.propTypes = { + onGridSelect: PropTypes.func.isRequired, +}; + export default TableGridSizeEditor; -- GitLab