Merge pull request #341 from Budibase/property-panel/screen-page-testing

Fixes for Screen and Page Props
This commit is contained in:
Conor_Mack 2020-06-09 13:02:13 +01:00 committed by GitHub
commit 9adf9ee7bf
4 changed files with 56 additions and 18 deletions

View File

@ -69,6 +69,7 @@ export const getStore = () => {
store.getPathToComponent = getPathToComponent(store)
store.addTemplatedComponent = addTemplatedComponent(store)
store.setMetadataProp = setMetadataProp(store)
store.editPageOrScreen = editPageOrScreen(store)
return store
}
@ -171,6 +172,15 @@ const createScreen = store => (screenName, route, layoutComponentName) => {
})
}
const editPageOrScreen = store => (key, value) => {
store.update(state => {
state.currentPreviewItem[key] = value
_saveCurrentPreviewItem(state)
return state
})
}
const setCurrentScreen = store => screenName => {
store.update(s => {
const screen = getExactComponent(s.screens, screenName)
@ -285,6 +295,7 @@ const setCurrentPage = store => pageName => {
state.currentFrontEndType = "page"
state.currentPageName = pageName
state.currentView = "detail"
state.screens = Array.isArray(current_screens)
? current_screens
: Object.values(current_screens)
@ -445,6 +456,7 @@ const setScreenType = store => type => {
state.currentComponentInfo = pageOrScreen ? pageOrScreen.props : null
state.currentPreviewItem = pageOrScreen
state.currentView = "detail"
return state
})
}

View File

@ -1,5 +1,6 @@
<script>
import { setContext, onMount } from "svelte"
import {screen, page} from "./propertyCategories.js"
import PropsView from "./PropsView.svelte"
import { store } from "builderStore"
import IconButton from "components/common/IconButton.svelte"
@ -30,7 +31,6 @@
let selectedCategory = categories[0]
$: components = $store.components
$: componentInstance = $store.currentComponentInfo
$: componentDefinition = $store.components[componentInstance._component]
$: componentPropDefinition =
flattenedPanel.find(
@ -38,18 +38,37 @@
c => c._component === componentInstance._component
) || {}
$: panelDefinition = componentPropDefinition.properties
? componentPropDefinition.properties[selectedCategory.value]
: {}
let panelDefinition = {}
// SCREEN PROPS =============================================
$: screen_props =
$store.currentFrontEndType === "page"
? getProps($store.currentPreviewItem, ["name", "favicon"])
: getProps($store.currentPreviewItem, ["name", "description", "route"])
$: {
if(componentPropDefinition.properties) {
if(selectedCategory.value === "design") {
panelDefinition = componentPropDefinition.properties["design"]
}else{
let panelDef = componentPropDefinition.properties["settings"]
if($store.currentFrontEndType === "page") {
panelDefinition = [...page,...panelDef]
}else if($store.currentFrontEndType === "screen" && $store.currentView !== "component") {
panelDefinition = [...screen, ...panelDef]
}else {
panelDefinition = panelDef
}
}
}
}
$: componentInstance = $store.currentView !== "component" ? {...$store.currentPreviewItem, ...$store.currentComponentInfo} : $store.currentComponentInfo
const onStyleChanged = store.setComponentStyle
const onPropChanged = store.setComponentProp
function onPropChanged(key, value) {
if($store.currentView !== "component") {
store.editPageOrScreen(key, value)
return
}
store.setComponentProp(key, value)
}
function walkProps(component, action) {
action(component)
@ -89,9 +108,9 @@
<DesignView {panelDefinition} {componentInstance} {onStyleChanged} />
{:else if selectedCategory.value === 'settings'}
<SettingsView
{panelDefinition}
{componentInstance}
{componentDefinition}
{panelDefinition}
onChange={onPropChanged} />
{:else if selectedCategory.value === 'events'}
<EventsEditor component={componentInstance} />
@ -106,12 +125,10 @@
height: 100%;
display: flex;
flex-direction: column;
/* Merge Check */
overflow-x: hidden;
overflow-y: hidden;
padding: 20px;
box-sizing: border-box;
/* Merge Check */
}
.title > div:nth-child(1) {

View File

@ -9,7 +9,10 @@
export let componentInstance = {}
export let onChange = () => {}
const propExistsOnComponentDef = prop => prop in componentDefinition.props
let pageScreenProps = ["title","favicon", "description", "route"]
const propExistsOnComponentDef = prop => pageScreenProps.includes(prop) || prop in componentDefinition.props
function handleChange(key, data) {
data.target ? onChange(key, data.target.value) : onChange(key, data)

View File

@ -2,10 +2,16 @@ import Input from "../common/Input.svelte"
import OptionSelect from "./OptionSelect.svelte"
import InputGroup from "../common/Inputs/InputGroup.svelte"
import FlatButtonGroup from "./FlatButtonGroup.svelte"
// import Colorpicker from "../common/Colorpicker.svelte"
/*
TODO: Allow for default values for all properties
*/
export const screen = [
{ label: "Description", key: "description", control: Input },
{ label: "Route", key: "route", control: Input },
]
export const page = [
{ label: "Title", key: "title", control: Input },
{ label: "Favicon", key: "favicon", control: Input },
]
export const layout = [
{