From 5eeed90dba22be6cbc3ee17a433933223bf14429 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Mon, 3 Feb 2020 16:31:13 +0200 Subject: [PATCH] ToolGroupComponent --- wax-prosemirror-components/index.js | 3 ++ .../src/components/ToolGroupComponent.js | 42 +++++++++++++++++ wax-prosemirror-services/src/lib/ToolGroup.js | 46 ++++--------------- 3 files changed, 54 insertions(+), 37 deletions(-) create mode 100644 wax-prosemirror-components/src/components/ToolGroupComponent.js diff --git a/wax-prosemirror-components/index.js b/wax-prosemirror-components/index.js index 38e547ec9..31b5aed9f 100644 --- a/wax-prosemirror-components/index.js +++ b/wax-prosemirror-components/index.js @@ -5,3 +5,6 @@ export { default as icons } from "./src/icons/icons"; export { default as TableDropDown } from "./src/components/TableDropDown"; export { default as ImageUpload } from "./src/components/ImageUpload"; export { default as LeftMenuTitle } from "./src/components/LeftMenuTitle"; +export { + default as ToolGroupComponent +} from "./src/components/ToolGroupComponent"; diff --git a/wax-prosemirror-components/src/components/ToolGroupComponent.js b/wax-prosemirror-components/src/components/ToolGroupComponent.js new file mode 100644 index 000000000..d1a90b093 --- /dev/null +++ b/wax-prosemirror-components/src/components/ToolGroupComponent.js @@ -0,0 +1,42 @@ +import React, { useState } from "react"; +import { isFunction } from "lodash"; +import styled from "styled-components"; + +const InnerStyled = styled.div` + display: flex; + width: 0; + top: 40px; + position: relative; + right: 100%; +`; + +const ToolGroupComponent = ({ view, tools, name, title }) => { + const [more, showHide] = useState(false), + toolsShown = [], + rest = [], + DisplayTitle = isFunction(title) ? title : () => title; + + tools.forEach(tool => { + tool.hideOnToolbar + ? rest.push(tool.renderTool(view)) + : toolsShown.push(tool.renderTool(view)); + }); + + return ( + <div> + <DisplayTitle /> + {toolsShown} + {rest.length && !more ? ( + <button onClick={() => showHide(!more)}>...</button> + ) : null} + {more && ( + <div> + <button onClick={() => showHide(!more)}>...</button> + <InnerStyled>{rest}</InnerStyled> + </div> + )} + </div> + ); +}; + +export default ToolGroupComponent; diff --git a/wax-prosemirror-services/src/lib/ToolGroup.js b/wax-prosemirror-services/src/lib/ToolGroup.js index 93ae0ef7d..0191bfc95 100644 --- a/wax-prosemirror-services/src/lib/ToolGroup.js +++ b/wax-prosemirror-services/src/lib/ToolGroup.js @@ -1,6 +1,6 @@ import React, { useState } from "react"; import { injectable } from "inversify"; -import { isFunction } from "lodash"; +import { ToolGroupComponent } from "wax-prosemirror-components"; @injectable() export default class ToolGroup { @@ -42,43 +42,15 @@ export default class ToolGroup { } renderTools(view) { - const [more, showHide] = useState(false); - const tools = []; - const rest = []; - this._tools.forEach(tool => { - if (tool.hideOnToolbar) { - rest.push(tool.renderTool(view)); - } else { - tools.push(tool.renderTool(view)); - } - }); - - const Title = isFunction(this.title) ? this.title : () => this.title; - + const { name } = this.constructor; return ( - <div key={`groupName-${this.constructor.name}`}> - <Title /> - {tools} - {rest.length && !more ? ( - <button onClick={() => showHide(!more)}>...</button> - ) : null} - {more && ( - <div> - <button onClick={() => showHide(!more)}>...</button> - <div - style={{ - display: "flex", - width: "0", - top: "40px", - position: "relative", - right: "100%" - }} - > - {rest} - </div> - </div> - )} - </div> + <ToolGroupComponent + key={`groupName-${name}`} + view={view} + tools={this._tools} + title={this.title} + name={name} + /> ); } } -- GitLab