diff --git a/packages/server/lib/components/Context.js b/packages/server/lib/components/Context.js index 029246136..4c76ca94f 100644 --- a/packages/server/lib/components/Context.js +++ b/packages/server/lib/components/Context.js @@ -24,7 +24,7 @@ const Context = ({ children, config, lowdefy, progress }) => { return ( { progress.dispatch({ type: 'increment', @@ -38,7 +38,6 @@ const Context = ({ children, config, lowdefy, progress }) => { }); }, }); - // context._internal.update(); // TODO: do we need this? context._internal.State.freezeState(); } }} @@ -56,40 +55,8 @@ const Context = ({ children, config, lowdefy, progress }) => { }} > {(loadingOnInit) => { - return ( - - await context._internal.RootBlocks.areas.root.blocks[0].triggerEvent({ - name: 'onEnter', - progress: () => { - progress.dispatch({ - type: 'increment', - }); - }, - }) - } - triggerEventAsync={() => { - const onEnterAsync = async () => { - await context._internal.RootBlocks.areas.root.blocks[0].triggerEvent({ - name: 'onEnterAsync', // TODO: Do we want this to happen in the background, as in not effecting progress bar? - progress: () => { - progress.dispatch({ - type: 'increment', - }); - }, - }); - progress.dispatch({ - type: 'done', - }); - }; - onEnterAsync(); - }} - > - {(loadingOnEnter) => children(context, loadingOnEnter)} - - ); + if (loadingOnInit) return ''; + return children(context); }} ); diff --git a/packages/server/lib/components/MountEvents.js b/packages/server/lib/components/MountEvents.js index ca7867c4d..02670a2e0 100644 --- a/packages/server/lib/components/MountEvents.js +++ b/packages/server/lib/components/MountEvents.js @@ -16,7 +16,7 @@ import React, { useEffect, useState } from 'react'; -const MountEvents = ({ children, context, parentLoading, triggerEvent, triggerEventAsync }) => { +const MountEvents = ({ ename, children, context, triggerEvent, triggerEventAsync }) => { const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { @@ -32,17 +32,16 @@ const MountEvents = ({ children, context, parentLoading, triggerEvent, triggerEv setError(err); } }; - if (!parentLoading) { - mount(); // TODO: check only run once. - } + console.log(ename); + mount(); // TODO: check only run once. return () => { mounted = false; }; - }, [context, parentLoading]); + }, [context]); if (error) throw error; - return <>{children(loading || parentLoading)}; + return <>{children(loading)}; }; export default MountEvents; diff --git a/packages/server/lib/components/Page.js b/packages/server/lib/components/Page.js index 89652d3db..5579d9172 100644 --- a/packages/server/lib/components/Page.js +++ b/packages/server/lib/components/Page.js @@ -49,7 +49,7 @@ const Page = ({ lowdefy, pageConfig, rootConfig }) => { content={{ content: (progress) => ( - {(context, loading) => { + {(context) => { return ( <> { Blocks={context._internal.RootBlocks} context={context} lowdefy={lowdefy} - parentLoading={loading} + progress={progress} + parentLoading={false} /> ); diff --git a/packages/server/lib/components/block/Block.js b/packages/server/lib/components/block/Block.js index 36b2f8817..39d602624 100644 --- a/packages/server/lib/components/block/Block.js +++ b/packages/server/lib/components/block/Block.js @@ -21,19 +21,44 @@ import { ErrorBoundary } from '@lowdefy/block-utils'; import CategorySwitch from './CategorySwitch.js'; import MountEvents from '../MountEvents.js'; -const Block = ({ block, Blocks, context, loading, lowdefy, parentLoading }) => { +const Block = ({ + block, + Blocks, + context, + lowdefy, + parentLoading, + progress = { dispatch: () => {} }, +}) => { const [updates, setUpdate] = useState(0); lowdefy._internal.updaters[block.id] = () => setUpdate(updates + 1); + return ( { - await block.triggerEvent({ name: 'onMount' }); + await block.triggerEvent({ + name: 'onMount', + progress: () => { + progress.dispatch({ + type: 'increment', + }); + }, + }); }} triggerEventAsync={() => { - block.triggerEvent({ name: 'onMountAsync' }); + block.triggerEvent({ + name: 'onMountAsync', + progress: () => { + progress.dispatch({ + type: 'increment', + }); + }, + }); + progress.dispatch({ + type: 'done', + }); }} > {(eventLoading) => ( @@ -41,7 +66,7 @@ const Block = ({ block, Blocks, context, loading, lowdefy, parentLoading }) => { block={block} Blocks={Blocks} context={context} - loading={eventLoading || loading || block.eval.loading} + loading={eventLoading || parentLoading || block.eval.loading} lowdefy={lowdefy} updates={updates} /> diff --git a/packages/server/lib/components/block/Container.js b/packages/server/lib/components/block/Container.js index 58d1f7e65..b672ac3b9 100644 --- a/packages/server/lib/components/block/Container.js +++ b/packages/server/lib/components/block/Container.js @@ -44,7 +44,7 @@ const Container = ({ block, Blocks, Component, context, loading, lowdefy }) => { Blocks={Blocks.subBlocks[block.id][0]} block={bl} context={context} - loading={loading} + parentLoading={loading} lowdefy={lowdefy} /> ))} diff --git a/packages/server/lib/components/block/List.js b/packages/server/lib/components/block/List.js index 956920739..b0d3c0c49 100644 --- a/packages/server/lib/components/block/List.js +++ b/packages/server/lib/components/block/List.js @@ -44,7 +44,7 @@ const List = ({ block, Blocks, Component, context, loading, lowdefy }) => { Blocks={SBlock} block={bl} context={context} - loading={loading} + parentLoading={loading} lowdefy={lowdefy} /> ))} diff --git a/packages/server/lib/components/block/LoadingBlock.js b/packages/server/lib/components/block/LoadingBlock.js index 7fc836b2f..abe53d066 100644 --- a/packages/server/lib/components/block/LoadingBlock.js +++ b/packages/server/lib/components/block/LoadingBlock.js @@ -22,15 +22,15 @@ import LoadingList from './LoadingList.js'; const blockMethods = { makeCssClass, - moveItemDown: () => null, - moveItemUp: () => null, - pushItem: () => null, - registerEvent: () => null, - registerMethod: () => null, - removeItem: () => null, - setValue: () => null, - triggerEvent: () => null, - unshiftItem: () => null, + moveItemDown: () => {}, + moveItemUp: () => {}, + pushItem: () => {}, + registerEvent: () => {}, + registerMethod: () => {}, + removeItem: () => {}, + setValue: () => {}, + triggerEvent: () => {}, + unshiftItem: () => {}, }; const LoadingBlock = ({ blockLayout, blockId, context, lowdefy, skeleton }) => {