From 8546fd6da98f42a89061844b0a0ccbfc9e40ccf3 Mon Sep 17 00:00:00 2001 From: Michael Shanks Date: Wed, 4 Mar 2020 12:13:50 +0000 Subject: [PATCH] bugfix: create screen > components not displayed --- packages/builder/src/builderStore/store.js | 57 +++++++++++++++++++--- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/packages/builder/src/builderStore/store.js b/packages/builder/src/builderStore/store.js index 1eb2a2b698..26173f915d 100644 --- a/packages/builder/src/builderStore/store.js +++ b/packages/builder/src/builderStore/store.js @@ -466,8 +466,33 @@ const _saveScreen = async (store, s, screen) => { `/_builder/api/${s.appname}/pages/${s.currentPageName}/screen`, screen ) - .then(async savedScreen => { - const updatedScreen = await savedScreen.json() + .then(() => { + + if(currentPageScreens.includes(screen)) return + + const screens = [ + ...currentPageScreens, + screen, + ] + + store.update(innerState => { + innerState.pages[s.currentPageName]._screens = screens + innerState.screens = screens + innerState.currentPreviewItem = screen + const safeProps = makePropsSafe( + getComponentDefinition(innerState.components, screen.props._component), + screen.props + ) + innerState.currentComponentInfo = safeProps + screen.props = safeProps + + _savePage(innerState) + return innerState + }) + + + + /*const updatedScreen = await savedScreen.json() const screens = [ ...currentPageScreens.filter( storeScreen => storeScreen.name !== updatedScreen.name @@ -477,9 +502,20 @@ const _saveScreen = async (store, s, screen) => { store.update(innerState => { innerState.pages[s.currentPageName]._screens = screens innerState.screens = screens + + let curentComponentId + walkProps(screen.props, p => { + if(p === innerState.currentComponentInfo) + currentComponentId = p._id + }) + + innerState.currentPreviewItem = updatedScreen + innerState.currentComponentInfo = makePropsSafe(componentDef, component) + _savePage(innerState) return innerState }) + */ }) return s @@ -520,10 +556,12 @@ const setCurrentScreen = store => screenName => { s.currentFrontEndType = "screen" s.currentView = "detail" - s.currentComponentInfo = makePropsSafe( - getContainerComponent(s.components), + const safeProps = makePropsSafe( + getComponentDefinition(s.components, screen.props._component), screen.props ) + screen.props = safeProps + s.currentComponentInfo = safeProps setCurrentPageFunctions(s) return s }) @@ -707,10 +745,12 @@ const setCurrentPage = store => pageName => { s.screens = Array.isArray(current_screens) ? current_screens : Object.values(current_screens) - s.currentComponentInfo = makePropsSafe( - getContainerComponent(s.components), + const safeProps = makePropsSafe( + getComponentDefinition(s.components, s.pages[pageName].props._component), s.pages[pageName].props ) + s.currentComponentInfo = safeProps + s.pages[pageName].props = safeProps s.currentPreviewItem = s.pages[pageName] s.currentPreviewItem._css = generate_screen_css([ s.currentPreviewItem.props, @@ -726,7 +766,10 @@ const setCurrentPage = store => pageName => { } const getContainerComponent = components => - components.find(c => c.name === "@budibase/standard-components/container") + getComponentDefinition(components, "@budibase/standard-components/container") + +const getComponentDefinition = (components, name) => + components.find(c => c.name === name) /** * @param {string} componentToAdd - name of the component to add to the application