From b920155696dcf46dce9006dba1c4854137e0a70e Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Mon, 5 Oct 2020 18:54:03 +0300 Subject: [PATCH] rerender on screen width change --- editors/editoria/src/Editoria.js | 41 +++---- editors/editoria/src/config/config.js | 3 + editors/editoria/src/config/configMobile.js | 103 ------------------ editors/editoria/src/config/index.js | 1 - .../src/components/TableDropDown.js | 23 ++-- .../BlockDropDown.js | 2 + 6 files changed, 36 insertions(+), 137 deletions(-) delete mode 100644 editors/editoria/src/config/configMobile.js diff --git a/editors/editoria/src/Editoria.js b/editors/editoria/src/Editoria.js index f77fd9490..29d84fab8 100644 --- a/editors/editoria/src/Editoria.js +++ b/editors/editoria/src/Editoria.js @@ -1,10 +1,10 @@ -import React, { useLayoutEffect, useState } from 'react'; +import React, { useLayoutEffect, useState, useEffect, useMemo } from 'react'; import { createGlobalStyle } from 'styled-components'; import { EditoriaLayout, EditoriaMobileLayout } from 'wax-prosemirror-layouts'; import { Wax } from 'wax-prosemirror-core'; -import { config, configMobile } from './config'; +import { config } from './config'; import { demo } from './demo'; const GlobalStyle = createGlobalStyle` @@ -34,26 +34,18 @@ const user = { userId: '1234', username: 'demo', }; -console.log(config); + const Editoria = () => { const [width, height] = useWindowSize(); + + let layout = EditoriaLayout; + if (width < 600) { - return ( - <> - <GlobalStyle /> - <Wax - config={configMobile} - autoFocus - placeholder="Type Something..." - fileUpload={file => renderImage(file)} - value={demo} - layout={EditoriaMobileLayout} - user={user} - /> - </> - ); - } else { - return ( + layout = EditoriaMobileLayout; + } + + const MemorizedComponent = useMemo( + () => ( <> <GlobalStyle /> <Wax @@ -62,22 +54,25 @@ const Editoria = () => { placeholder="Type Something..." fileUpload={file => renderImage(file)} value={demo} - layout={EditoriaLayout} + layout={layout} user={user} /> </> - ); - } + ), + [layout], + ); + return <>{MemorizedComponent}</>; }; function useWindowSize() { - const [size, setSize] = useState([0, 0]); + const [size, setSize] = useState([window.innerWidth, window.innerHeight]); useLayoutEffect(() => { function updateSize() { setSize([window.innerWidth, window.innerHeight]); } window.addEventListener('resize', updateSize); updateSize(); + return () => window.removeEventListener('resize', updateSize); }, []); return size; diff --git a/editors/editoria/src/config/config.js b/editors/editoria/src/config/config.js index 7072aeab1..24935bce9 100644 --- a/editors/editoria/src/config/config.js +++ b/editors/editoria/src/config/config.js @@ -25,6 +25,7 @@ import { CodeBlockToolGroupService, TrackChangeToolGroupService, DisplayTextToolGroupService, + BlockDropDownToolGroupService, } from 'wax-prosemirror-services'; import { WaxSelectionPlugin } from 'wax-prosemirror-plugins'; @@ -45,6 +46,7 @@ export default { name: 'Annotations', more: ['Superscript', 'Subscript', 'SmallCaps'], }, + 'BlockDropDown', 'Notes', 'Lists', 'Images', @@ -97,5 +99,6 @@ export default { new CodeBlockToolGroupService(), new TrackChangeToolGroupService(), new DisplayTextToolGroupService(), + new BlockDropDownToolGroupService(), ], }; diff --git a/editors/editoria/src/config/configMobile.js b/editors/editoria/src/config/configMobile.js deleted file mode 100644 index d659a8ded..000000000 --- a/editors/editoria/src/config/configMobile.js +++ /dev/null @@ -1,103 +0,0 @@ -import { emDash, ellipsis } from 'prosemirror-inputrules'; -import { columnResizing, tableEditing } from 'prosemirror-tables'; -import { - AnnotationToolGroupService, - ImageService, - PlaceholderService, - InlineAnnotationsService, - LinkService, - ListsService, - ListToolGroupService, - TablesService, - TableToolGroupService, - BaseService, - BaseToolGroupService, - DisplayBlockLevelService, - DisplayToolGroupService, - ImageToolGroupService, - TextBlockLevelService, - TextToolGroupService, - NoteService, - NoteToolGroupService, - TrackChangeService, - CommentsService, - CodeBlockService, - CodeBlockToolGroupService, - TrackChangeToolGroupService, - DisplayTextToolGroupService, - BlockDropDownToolGroupService, -} from 'wax-prosemirror-services'; - -import { WaxSelectionPlugin } from 'wax-prosemirror-plugins'; - -import invisibles, { - space, - hardBreak, - paragraph, -} from '@guardian/prosemirror-invisibles'; - -export default { - MenuService: [ - { - templateArea: 'topBar', - toolGroups: [ - 'Base', - { - name: 'Annotations', - more: ['Superscript', 'Subscript', 'SmallCaps'], - }, - 'BlockDropDown', - 'Notes', - 'Lists', - 'Images', - 'CodeBlock', - 'TrackChange', - ], - }, - { - templateArea: 'leftSideBar', - toolGroups: ['DisplayText'], - }, - ], - - RulesService: [emDash, ellipsis], - ShortCutsService: {}, - EnableTrackChangeService: { enabled: false }, - - PmPlugins: [ - columnResizing(), - tableEditing(), - invisibles([hardBreak()]), - WaxSelectionPlugin, - ], - - // Always load first CommentsService and LinkService, - //as it matters on how PM treats nodes and marks - services: [ - new DisplayBlockLevelService(), - new DisplayToolGroupService(), - new TextBlockLevelService(), - new TextToolGroupService(), - new ListsService(), - new LinkService(), - new InlineAnnotationsService(), - new TrackChangeService(), - new CommentsService(), - new PlaceholderService(), - new ImageService(), - new TablesService(), - new BaseService(), - new BaseToolGroupService(), - new NoteService(), - new TableToolGroupService(), - new ImageToolGroupService(), - new AnnotationToolGroupService(), - new NoteToolGroupService(), - new ListToolGroupService(), - new CodeBlockService(), - new CodeBlockToolGroupService(), - new TrackChangeToolGroupService(), - new DisplayTextToolGroupService(), - new BlockDropDownToolGroupService(), - ], -}; diff --git a/editors/editoria/src/config/index.js b/editors/editoria/src/config/index.js index 3744d8f41..28307f548 100644 --- a/editors/editoria/src/config/index.js +++ b/editors/editoria/src/config/index.js @@ -1,2 +1 @@ export { default as config } from './config'; -export { default as configMobile } from './configMobile'; diff --git a/wax-prosemirror-components/src/components/TableDropDown.js b/wax-prosemirror-components/src/components/TableDropDown.js index da88bb7d4..aaa153433 100644 --- a/wax-prosemirror-components/src/components/TableDropDown.js +++ b/wax-prosemirror-components/src/components/TableDropDown.js @@ -43,15 +43,18 @@ const dropDownOptions = [ { label: 'Toggle header cells', value: 'toggleHeaderCell' }, ]; -const TableDropDown = ({ view: { dispatch, state }, item }) => ( - <DropdownStyled - options={dropDownOptions} - onChange={option => { - item.run(state, dispatch, tablesFn[option.value]); - }} - placeholder="Table Options" - select={item.select && item.select(state)} - /> -); +const TableDropDown = ({ view: { dispatch, state }, item }) => { + if (window.innerWidth < 600) return null; + return ( + <DropdownStyled + options={dropDownOptions} + onChange={option => { + item.run(state, dispatch, tablesFn[option.value]); + }} + placeholder="Table Options" + select={item.select && item.select(state)} + /> + ); +}; export default TableDropDown; diff --git a/wax-prosemirror-services/src/WaxToolGroups/BlockDropDownToolGroupService/BlockDropDown.js b/wax-prosemirror-services/src/WaxToolGroups/BlockDropDownToolGroupService/BlockDropDown.js index 9a0059835..faf478e9b 100644 --- a/wax-prosemirror-services/src/WaxToolGroups/BlockDropDownToolGroupService/BlockDropDown.js +++ b/wax-prosemirror-services/src/WaxToolGroups/BlockDropDownToolGroupService/BlockDropDown.js @@ -106,6 +106,8 @@ class BlockDropDown extends ToolGroup { } }); + if (window.innerWidth > 600) return null; + return ( <DropdownStyled value={found} -- GitLab