Skip to content
Snippets Groups Projects
Commit a469afd1 authored by chris's avatar chris
Browse files

connect insert table tool

parent 3a397699
No related branches found
No related tags found
1 merge request!161Connect ui
...@@ -15,3 +15,7 @@ export { default as CommentBubbleComponent } from './src/components/comments/Com ...@@ -15,3 +15,7 @@ export { default as CommentBubbleComponent } from './src/components/comments/Com
export { default as RightArea } from './src/components/rightArea/RightArea'; export { default as RightArea } from './src/components/rightArea/RightArea';
export { default as TrackChangeEnable } from './src/components/trackChanges/TrackChangeEnable'; export { default as TrackChangeEnable } from './src/components/trackChanges/TrackChangeEnable';
export { default as InsertTableTool } from './src/ui/tables/InsertTableTool';
export { default as CreateTable } from './src/components/tables/CreateTable';
/* eslint react/prop-types: 0 */
import React, { useState, useContext } from 'react';
import styled from 'styled-components';
import { ButtonStyles } from 'wax-prosemirror-themes';
import { WaxContext } from 'wax-prosemirror-core';
import { Commands } from 'wax-prosemirror-utilities';
import InsertTableTool from '../../ui/tables/InsertTableTool';
const ButtonStyled = styled.button`
${ButtonStyles};
opacity: ${props => (props.select ? 1 : 0.4)};
pointer-events: ${props => (props.select ? 'default' : 'none')};
color: ${props => (props.isActive ? 'white' : props.theme.colorButton)};
background-color: ${props =>
props.isActive ? props.theme.colorPrimary : 'transparent'};
&:hover {
background-color: ${props =>
props.isActive ? props.theme.colorPrimary : 'transparent'};
}
`;
const InsertTableToolContainer = styled.div`
top: 50px;
position: absolute;
height: auto;
width: 167px;
display: block !important;
`;
const CreateTable = ({ view = {}, item }) => {
const {
view: { main },
activeViewId,
} = useContext(WaxContext);
if (item.onlyOnMain) {
view = main;
}
const { state, dispatch } = view;
const [isTableToolDisplayed, setTableToolDisplay] = useState(false);
const showHideTable = () => {
setTableToolDisplay(!isTableToolDisplayed);
};
const CreateButton = (
<ButtonStyled
type="button"
isActive={item.active && item.active(view.state)}
title={item.title}
disabled={item.enable && !item.enable(view.state)}
onMouseDown={e => {
e.preventDefault();
showHideTable();
}}
select={item.select && item.select(view.state, activeViewId)}
>
{item.content}
</ButtonStyled>
);
return isTableToolDisplayed ? (
<>
{CreateButton}
<InsertTableToolContainer>
<InsertTableTool
onGridSelect={colRows => {
return Commands.createTable(colRows, state, dispatch);
}}
/>
</InsertTableToolContainer>
</>
) : (
<>{CreateButton}</>
);
};
export default CreateTable;
...@@ -226,8 +226,10 @@ class TableGridSizeEditor extends React.PureComponent { ...@@ -226,8 +226,10 @@ class TableGridSizeEditor extends React.PureComponent {
} }
const wrapperStyle = { const wrapperStyle = {
background: '#fff',
border: '1px solid gray', border: '1px solid gray',
boxSizing: 'border-box', boxSizing: 'border-box',
display: 'block',
position: 'absolute', position: 'absolute',
zIndex: 2, zIndex: 2,
}; };
......
import Service from "../../Service"; import Service from '../../Service';
import { tableNodes, goToNextCell } from "prosemirror-tables"; import { tableNodes, goToNextCell } from 'prosemirror-tables';
import Table from "./Table"; import Table from './Table';
class InsertTableService extends Service { class InsertTableService extends Service {
boot() { boot() {
const shortCuts = this.container.get("ShortCuts"); const shortCuts = this.container.get('ShortCuts');
shortCuts.addShortCut({ shortCuts.addShortCut({
Tab: goToNextCell(1), Tab: goToNextCell(1),
"Shift-Tab": goToNextCell(-1) 'Shift-Tab': goToNextCell(-1),
}); });
} }
register() { register() {
this.container.bind("Table").to(Table); this.container.bind('Table').to(Table);
const { table, table_row, table_cell, table_header } = tableNodes({ const { table, table_row, table_cell, table_header } = tableNodes({
tableGroup: "block", tableGroup: 'block',
cellContent: "block+" cellContent: 'block+',
}); });
const createNode = this.container.get("CreateNode"); const createNode = this.container.get('CreateNode');
createNode({ createNode({
table table,
}); });
createNode({ createNode({
table_row table_row,
}); });
createNode({ createNode({
table_cell table_cell,
}); });
createNode({ createNode({
table_header table_header,
}); });
} }
} }
......
import React from 'react';
import { isEmpty } from 'lodash';
import { v4 as uuidv4 } from 'uuid';
import { Commands } from 'wax-prosemirror-utilities'; import { Commands } from 'wax-prosemirror-utilities';
import { injectable } from 'inversify'; import { injectable } from 'inversify';
import { icons } from 'wax-prosemirror-components'; import { icons, CreateTable } from 'wax-prosemirror-components';
import Tools from '../../lib/Tools'; import Tools from '../../lib/Tools';
export default export default
...@@ -11,9 +15,7 @@ class Table extends Tools { ...@@ -11,9 +15,7 @@ class Table extends Tools {
name = 'Table'; name = 'Table';
get run() { get run() {
return (state, dispatch) => { return (state, dispatch) => {};
return Commands.createTable(state, dispatch);
};
} }
select = (state, activeViewId) => { select = (state, activeViewId) => {
...@@ -26,4 +28,12 @@ class Table extends Tools { ...@@ -26,4 +28,12 @@ class Table extends Tools {
return Commands.canInsert(state.config.schema.nodes.table)(state); return Commands.canInsert(state.config.schema.nodes.table)(state);
}; };
} }
renderTool(view) {
if (isEmpty(view)) return null;
return this._isDisplayed ? (
<CreateTable key={uuidv4()} item={this.toJSON()} view={view} />
) : null;
}
} }
...@@ -62,17 +62,14 @@ const canInsert = type => state => { ...@@ -62,17 +62,14 @@ const canInsert = type => state => {
return false; return false;
}; };
const createTable = (state, dispatch) => { const createTable = (colsRows, state, dispatch) => {
let rowCount = window && window.prompt('How many rows?', 2);
let colCount = window && window.prompt('How many columns?', 2);
const cells = []; const cells = [];
while (colCount--) { while (colsRows.cols--) {
cells.push(state.config.schema.nodes.table_cell.createAndFill()); cells.push(state.config.schema.nodes.table_cell.createAndFill());
} }
const rows = []; const rows = [];
while (rowCount--) { while (colsRows.rows--) {
rows.push(state.config.schema.nodes.table_row.createAndFill(null, cells)); rows.push(state.config.schema.nodes.table_row.createAndFill(null, cells));
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment