Screen and page latest

This commit is contained in:
Conor_Mack 2020-06-03 16:19:04 +01:00
parent 0743a52587
commit 53dc3780fa
6 changed files with 72 additions and 16 deletions

View File

@ -69,6 +69,7 @@ export const getStore = () => {
store.getPathToComponent = getPathToComponent(store) store.getPathToComponent = getPathToComponent(store)
store.addTemplatedComponent = addTemplatedComponent(store) store.addTemplatedComponent = addTemplatedComponent(store)
store.setMetadataProp = setMetadataProp(store) store.setMetadataProp = setMetadataProp(store)
store.editPageOrScreen = editPageOrScreen(store)
return 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 => { const setCurrentScreen = store => screenName => {
store.update(s => { store.update(s => {
const screen = getExactComponent(s.screens, screenName) const screen = getExactComponent(s.screens, screenName)

View File

@ -1,5 +1,6 @@
<script> <script>
import { setContext, onMount } from "svelte" import { setContext, onMount } from "svelte"
import {screen, page} from "./propertyCategories.js"
import PropsView from "./PropsView.svelte" import PropsView from "./PropsView.svelte"
import { store } from "builderStore" import { store } from "builderStore"
import IconButton from "components/common/IconButton.svelte" import IconButton from "components/common/IconButton.svelte"
@ -41,15 +42,48 @@
$: panelDefinition = componentPropDefinition.properties $: panelDefinition = componentPropDefinition.properties
? componentPropDefinition.properties[selectedCategory.value] ? componentPropDefinition.properties[selectedCategory.value]
: {} : {}
let panelDefNew = {}
// SCREEN PROPS ============================================= $: {
$: screen_props = if(componentPropDefinition.properties) {
$store.currentFrontEndType === "page" if(selectedCategory.value === "design") {
? getProps($store.currentPreviewItem, ["name", "favicon"]) panelDefNew = componentPropDefinition.properties["design"]
: getProps($store.currentPreviewItem, ["name", "description", "route"]) }else{
let panelDef = componentPropDefinition.properties["settings"]
if($store.currentFrontEndType === "page") {
panelDefNew = [...page,...panelDef]
}else if($store.currentFrontEndType === "screen" && $store.currentView !== "component") {
panelDefNew = [...screen, ...panelDef]
}else {
panelDefNew = panelDef
}
}
}
}
let componentInstanceNew = {}
$: {
if(($store.currentFrontEndType === "screen" || $store.currentFrontEndType === "page") && $store.currentView !== "component") {
componentInstanceNew = {...$store.currentPreviewItem, ...$store.currentComponentInfo}
}else {
componentInstanceNew = $store.currentComponentInfo
}
}
$: console.log("COMP INSTA NEW", componentInstanceNew)
const onStyleChanged = store.setComponentStyle const onStyleChanged = store.setComponentStyle
const onPropChanged = store.setComponentProp
function onPropChanged(key, value) {
if($store.currentFrontEndType === "page") {
store.editPageOrScreen(key, value)
}else if($store.currentFrontEndType === "screen" && $store.currentView !== "component") {
store.editPageOrScreen(key, value)
}else {
store.setComponentProp(key, value)
}
}
function walkProps(component, action) { function walkProps(component, action) {
action(component) action(component)
@ -86,12 +120,12 @@
<div class="component-props-container"> <div class="component-props-container">
{#if selectedCategory.value === 'design'} {#if selectedCategory.value === 'design'}
<DesignView {panelDefinition} {componentInstance} {onStyleChanged} /> <DesignView panelDefinition={panelDefNew} {componentInstance} {onStyleChanged} />
{:else if selectedCategory.value === 'settings'} {:else if selectedCategory.value === 'settings'}
<SettingsView <SettingsView
panelDefinition={panelDefNew}
{componentInstance} {componentInstance}
{componentDefinition} {componentDefinition}
{panelDefinition}
onChange={onPropChanged} /> onChange={onPropChanged} />
{:else if selectedCategory.value === 'events'} {:else if selectedCategory.value === 'events'}
<EventsEditor component={componentInstance} /> <EventsEditor component={componentInstance} />
@ -106,12 +140,10 @@
height: 100%; height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
/* Merge Check */
overflow-x: hidden; overflow-x: hidden;
overflow-y: hidden; overflow-y: hidden;
padding: 20px; padding: 20px;
box-sizing: border-box; box-sizing: border-box;
/* Merge Check */
} }
.title > div:nth-child(1) { .title > div:nth-child(1) {

View File

@ -9,6 +9,7 @@
newScreenPicker.show() newScreenPicker.show()
} }
$: console.log("STORE SCREENS", $store.screens)
let newScreenPicker let newScreenPicker
</script> </script>

View File

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

View File

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

View File

@ -334,7 +334,10 @@ export default {
"A component for handling the navigation within your app.", "A component for handling the navigation within your app.",
icon: "ri-navigation-fill", icon: "ri-navigation-fill",
children: [], children: [],
properties: { design: { ...all } }, properties: {
design: { ...all },
settings: [{ label: "Logo URL", key: "logoUrl", control: Input }, ],
},
}, },
], ],
}, },