From 6af60c6703f0fc119d0b44b6328a2ad1e8278ba6 Mon Sep 17 00:00:00 2001 From: Sam Tolmay Date: Wed, 11 Nov 2020 16:46:57 +0200 Subject: [PATCH 1/5] fix(renderer): fix useContext, split onEnter and get context --- packages/engine/src/Actions.js | 1 + packages/renderer/src/page/block/Context.js | 38 +++++++++++++++++-- .../page/block/{useContext.js => OnEnter.js} | 37 ++++++++++-------- 3 files changed, 56 insertions(+), 20 deletions(-) rename packages/renderer/src/page/block/{useContext.js => OnEnter.js} (60%) diff --git a/packages/engine/src/Actions.js b/packages/engine/src/Actions.js index eb643b94b..883d668ca 100644 --- a/packages/engine/src/Actions.js +++ b/packages/engine/src/Actions.js @@ -79,6 +79,7 @@ class Actions { serializer.deserializeFromString(this.context.State.frozenState) ); this.context.update(); + // Consider firing onReset and onResetAsync actions } catch (error) { // log e return Promise.reject({ errorMessage: errorMessage || 'Failed to reset page.', error }); diff --git a/packages/renderer/src/page/block/Context.js b/packages/renderer/src/page/block/Context.js index 6abc00393..b51a11573 100644 --- a/packages/renderer/src/page/block/Context.js +++ b/packages/renderer/src/page/block/Context.js @@ -14,14 +14,43 @@ limitations under the License. */ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import { Loading } from '@lowdefy/block-tools'; import { get } from '@lowdefy/helpers'; +import getContext from '@lowdefy/engine'; -import useContext from './useContext'; +import OnEnter from './OnEnter'; + +const contexts = {}; const Context = ({ block, contextId, pageId, render, rootContext }) => { - const { context, loading, error } = useContext({ block, pageId, rootContext, contextId }); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + let mounted = true; + const mount = async () => { + try { + const ctx = await getContext({ + block, + contextId, + pageId, + rootContext, + }); + if (mounted) { + contexts[contextId] = ctx; + setLoading(false); + } + } catch (err) { + setError(err); + } + }; + mount(); + return () => { + mounted = false; + }; + }, [block, pageId, rootContext, contextId]); + if (loading) return ( { ); if (error) throw error; - return render(context); + + return ; }; export default Context; diff --git a/packages/renderer/src/page/block/useContext.js b/packages/renderer/src/page/block/OnEnter.js similarity index 60% rename from packages/renderer/src/page/block/useContext.js rename to packages/renderer/src/page/block/OnEnter.js index 4a04e1d56..692233f24 100644 --- a/packages/renderer/src/page/block/useContext.js +++ b/packages/renderer/src/page/block/OnEnter.js @@ -14,8 +14,9 @@ limitations under the License. */ -import { useEffect, useState } from 'react'; -import getContext from '@lowdefy/engine'; +import React, { useEffect, useState } from 'react'; +import { Loading } from '@lowdefy/block-tools'; +import { get } from '@lowdefy/helpers'; const callAction = ({ action, context }) => { return context.RootBlocks.areas.root.blocks[0].callAction({ @@ -23,23 +24,17 @@ const callAction = ({ action, context }) => { }); }; -const useContext = ({ block, pageId, rootContext, contextId }) => { +const OnEnter = ({ block, context, render }) => { + const [loading, setLoading] = useState(true); const [error, setError] = useState(null); - const [context, setContext] = useState(null); useEffect(() => { let mounted = true; const mount = async () => { try { - const ctx = await getContext({ - block, - contextId, - pageId, - rootContext, - }); - if (mounted) await callAction({ action: 'onEnter', context: ctx }); + await callAction({ action: 'onEnter', context }); if (mounted) { - callAction({ action: 'onEnterAsync', context: ctx }); - setContext(ctx); + callAction({ action: 'onEnterAsync', context }); + setLoading(false); } } catch (err) { setError(err); @@ -49,9 +44,19 @@ const useContext = ({ block, pageId, rootContext, contextId }) => { return () => { mounted = false; }; - }, [block, pageId, rootContext, contextId]); + }, [context]); - return { error, context, loading: !context && !error }; + if (loading) + return ( + + ); + + if (error) throw error; + + return render(context); }; -export default useContext; +export default OnEnter; From bcbfc434634cb423c3eca42b6be4905bfdb9928f Mon Sep 17 00:00:00 2001 From: Sam Tolmay Date: Wed, 11 Nov 2020 17:05:22 +0200 Subject: [PATCH 2/5] fix(renderer): do not add block default props on lazy component --- packages/renderer/src/page/block/Block.js | 23 ++++++++----------- packages/renderer/src/page/block/Defaults.js | 24 -------------------- 2 files changed, 9 insertions(+), 38 deletions(-) delete mode 100644 packages/renderer/src/page/block/Defaults.js diff --git a/packages/renderer/src/page/block/Block.js b/packages/renderer/src/page/block/Block.js index c06b192eb..714e4dc8c 100644 --- a/packages/renderer/src/page/block/Block.js +++ b/packages/renderer/src/page/block/Block.js @@ -38,22 +38,17 @@ const Block = ({ block, Blocks, context, pageId, rootContext }) => { ( - ( - ( + ( - - )} /> )} /> diff --git a/packages/renderer/src/page/block/Defaults.js b/packages/renderer/src/page/block/Defaults.js deleted file mode 100644 index f25781ad7..000000000 --- a/packages/renderer/src/page/block/Defaults.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright 2020 Lowdefy, Inc - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -import { blockDefaultProps } from '@lowdefy/block-tools'; - -const Defaults = ({ Component, render }) => { - Component.defaultProps = blockDefaultProps; - return render(Component); -}; - -export default Defaults; From 88c811d8a940a822901c398415144ac44b2692a3 Mon Sep 17 00:00:00 2001 From: Sam Tolmay Date: Wed, 11 Nov 2020 17:05:48 +0200 Subject: [PATCH 3/5] fix(renderer): do not pass Components prop to blocks --- packages/renderer/src/page/block/CategorySwitch.js | 2 -- packages/renderer/src/page/block/Container.js | 1 - packages/renderer/src/page/block/List.js | 1 - 3 files changed, 4 deletions(-) diff --git a/packages/renderer/src/page/block/CategorySwitch.js b/packages/renderer/src/page/block/CategorySwitch.js index 9760bc199..67676d667 100644 --- a/packages/renderer/src/page/block/CategorySwitch.js +++ b/packages/renderer/src/page/block/CategorySwitch.js @@ -95,7 +95,6 @@ const CategorySwitch = ({ block, Blocks, Component, context, pageId, rootContext }} actions={block.eval.actions} blockId={block.blockId} - Components={rootContext.Components} homePageId={rootContext.homePageId} key={block.blockId} loading={block.loading} @@ -127,7 +126,6 @@ const CategorySwitch = ({ block, Blocks, Component, context, pageId, rootContext }} actions={block.eval.actions} blockId={block.blockId} - Components={rootContext.Components} homePageId={rootContext.homePageId} key={block.blockId} loading={block.loading} diff --git a/packages/renderer/src/page/block/Container.js b/packages/renderer/src/page/block/Container.js index 19913ae91..8944fd544 100644 --- a/packages/renderer/src/page/block/Container.js +++ b/packages/renderer/src/page/block/Container.js @@ -68,7 +68,6 @@ const Container = ({ block, Blocks, Component, context, pageId, rootContext }) = }} actions={block.eval.actions} blockId={block.blockId} - Components={rootContext.Components} content={content} homePageId={rootContext.homePageId} key={block.blockId} diff --git a/packages/renderer/src/page/block/List.js b/packages/renderer/src/page/block/List.js index 35cd1382f..bf0225288 100644 --- a/packages/renderer/src/page/block/List.js +++ b/packages/renderer/src/page/block/List.js @@ -75,7 +75,6 @@ const List = ({ block, Blocks, Component, context, pageId, rootContext }) => { }} actions={block.eval.actions} blockId={block.blockId} - Components={rootContext.Components} list={contentList} homePageId={rootContext.homePageId} key={block.blockId} From 79ee6c638b215dbbba37673ee90959109d918e69 Mon Sep 17 00:00:00 2001 From: Sam Tolmay Date: Wed, 11 Nov 2020 17:06:40 +0200 Subject: [PATCH 4/5] fix(blocks-antd): omit props when spreading props --- packages/blocksAntd/src/blocks/Icon/Icon.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/blocksAntd/src/blocks/Icon/Icon.js b/packages/blocksAntd/src/blocks/Icon/Icon.js index 4a37172eb..91eda656e 100644 --- a/packages/blocksAntd/src/blocks/Icon/Icon.js +++ b/packages/blocksAntd/src/blocks/Icon/Icon.js @@ -32,7 +32,14 @@ const IconBlock = ({ actions, blockId, methods, properties, ...props }) => { className: methods.makeCssClass(properties.style), rotate: propertiesCopy.rotate, spin: propertiesCopy.spin, - ...omit(props, ['registerAction', 'registerMethod', 'loading', 'schemaErrors']), + ...omit(props, [ + 'homePageId', + 'loading', + 'pageId', + 'registerAction', + 'registerMethod', + 'schemaErrors', + ]), }; const IconComp = memo(lazy(() => import(`./icons/${propertiesCopy.name}`))); return ( From 67aff08f725659807a5af26098efcc441116e6ce Mon Sep 17 00:00:00 2001 From: Sam Tolmay Date: Wed, 11 Nov 2020 17:21:38 +0200 Subject: [PATCH 5/5] fix(render): remove Defaults component import --- packages/renderer/src/page/block/Block.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/renderer/src/page/block/Block.js b/packages/renderer/src/page/block/Block.js index 714e4dc8c..a933b4e39 100644 --- a/packages/renderer/src/page/block/Block.js +++ b/packages/renderer/src/page/block/Block.js @@ -20,7 +20,6 @@ import { ErrorBoundary, Loading } from '@lowdefy/block-tools'; import { get } from '@lowdefy/helpers'; import LoadBlock from './LoadBlock'; -import Defaults from './Defaults'; import CategorySwitch from './CategorySwitch'; import WatchCache from './WatchCache';