From 3dcef29ddd1bd818eb278a492469872406ba6d2b Mon Sep 17 00:00:00 2001 From: Conor_Mack Date: Thu, 4 Jun 2020 18:08:50 +0100 Subject: [PATCH] Instance name for components and screens --- .../builder/src/builderStore/store/index.js | 5 +++- .../ComponentPropertiesPanel.svelte | 16 +++++++++- .../userInterface/ComponentsHierarchy.svelte | 29 +++++-------------- .../ComponentsHierarchyChildren.svelte | 2 +- .../userInterface/SettingsView.svelte | 6 ++++ .../pagesParsing/searchComponents.js | 5 ++-- packages/builder/src/helpers.js | 9 ++++++ 7 files changed, 46 insertions(+), 26 deletions(-) diff --git a/packages/builder/src/builderStore/store/index.js b/packages/builder/src/builderStore/store/index.js index 9f91550bca..80fc9eb8f3 100644 --- a/packages/builder/src/builderStore/store/index.js +++ b/packages/builder/src/builderStore/store/index.js @@ -1,4 +1,5 @@ import { values } from "lodash/fp" +import { get_capitalised_name } from "../../helpers" import { backendUiStore } from "builderStore" import * as backendStoreActions from "./backend" import { writable, get } from "svelte/store" @@ -153,7 +154,6 @@ const createScreen = store => (screenName, route, layoutComponentName) => { const rootComponent = state.components[layoutComponentName] const newScreen = { - name: screenName || "", description: "", url: "", _css: "", @@ -161,6 +161,7 @@ const createScreen = store => (screenName, route, layoutComponentName) => { } newScreen.route = route + newScreen.props._instanceName = screenName || "" state.currentPreviewItem = newScreen state.currentComponentInfo = newScreen.props state.currentFrontEndType = "screen" @@ -336,12 +337,14 @@ const addChildComponent = store => (componentToAdd, presetName) => { const presetProps = presetName ? component.presets[presetName] : {} const instanceId = get(backendUiStore).selectedDatabase._id + const instanceName = get_capitalised_name(componentToAdd) const newComponent = createProps( component, { ...presetProps, _instanceId: instanceId, + _instanceName: instanceName, }, state ) diff --git a/packages/builder/src/components/userInterface/ComponentPropertiesPanel.svelte b/packages/builder/src/components/userInterface/ComponentPropertiesPanel.svelte index 7d33b9c963..2716cb751b 100644 --- a/packages/builder/src/components/userInterface/ComponentPropertiesPanel.svelte +++ b/packages/builder/src/components/userInterface/ComponentPropertiesPanel.svelte @@ -66,6 +66,8 @@ const onStyleChanged = store.setComponentStyle const onPropChanged = store.setComponentProp + $: displayName = $store.currentFrontEndType === "screen" && componentInstance._instanceName + function walkProps(component, action) { action(component) if (component.children) { @@ -99,6 +101,12 @@ {categories} {selectedCategory} /> + {#if displayName} +
+ {componentInstance._instanceName} +
+ {/if} +
{#if selectedCategory.value === 'design'} @@ -107,6 +115,7 @@ {componentInstance} {componentDefinition} {panelDefinition} + displayNameField={displayName} onChange={onPropChanged} /> {:else if selectedCategory.value === 'events'} @@ -137,9 +146,14 @@ } .component-props-container { - margin-top: 20px; + margin-top: 10px; flex: 1 1 auto; min-height: 0; overflow-y: auto; } + + .instance-name { + margin-top: 10px; + font-size: 12px; + } diff --git a/packages/builder/src/components/userInterface/ComponentsHierarchy.svelte b/packages/builder/src/components/userInterface/ComponentsHierarchy.svelte index 041377aedc..69edfe53da 100644 --- a/packages/builder/src/components/userInterface/ComponentsHierarchy.svelte +++ b/packages/builder/src/components/userInterface/ComponentsHierarchy.svelte @@ -22,48 +22,35 @@ trimChars(" "), ]) - const lastPartOfName = c => { - if (!c) return "" - const name = c.name ? c.name : c._component ? c._component : c - return last(name.split("/")) - } - - const isComponentSelected = (current, comp) => current === comp - - $: _screens = pipe(screens, [ - map(c => ({ component: c, title: lastPartOfName(c) })), - sortBy("title"), - ]) - const changeScreen = screen => { - store.setCurrentScreen(screen.title) + store.setCurrentScreen(screen.props._instanceName) $goto(`./:page/${screen.title}`) }
- {#each _screens as screen} + {#each screens as screen}
changeScreen(screen)}> - {#if screen.component.props._children.length} + class:rotate={$store.currentPreviewItem.name !== screen.props._instanceName}> + {#if screen.props._children.length} {/if} - {screen.title} + {screen.props._instanceName}
- {#if $store.currentPreviewItem.name === screen.title && screen.component.props._children} + {#if $store.currentPreviewItem.props._instanceName && $store.currentPreviewItem.props._instanceName === screen.props._instanceName && screen.props._children} {/if} {/each} diff --git a/packages/builder/src/components/userInterface/ComponentsHierarchyChildren.svelte b/packages/builder/src/components/userInterface/ComponentsHierarchyChildren.svelte index 43473a85a3..67d8cc096a 100644 --- a/packages/builder/src/components/userInterface/ComponentsHierarchyChildren.svelte +++ b/packages/builder/src/components/userInterface/ComponentsHierarchyChildren.svelte @@ -42,7 +42,7 @@ style="padding-left: {level * 20 + 53}px">
diff --git a/packages/builder/src/components/userInterface/SettingsView.svelte b/packages/builder/src/components/userInterface/SettingsView.svelte index 99e704d1d9..bde6ce2455 100644 --- a/packages/builder/src/components/userInterface/SettingsView.svelte +++ b/packages/builder/src/components/userInterface/SettingsView.svelte @@ -1,6 +1,7 @@ +{#if displayNameField} + +{/if} + {#if panelDefinition && panelDefinition.length > 0} {#each panelDefinition as definition} {#if propExistsOnComponentDef(definition.key)} diff --git a/packages/builder/src/components/userInterface/pagesParsing/searchComponents.js b/packages/builder/src/components/userInterface/pagesParsing/searchComponents.js index 8269f3521b..b4c6c1fee2 100644 --- a/packages/builder/src/components/userInterface/pagesParsing/searchComponents.js +++ b/packages/builder/src/components/userInterface/pagesParsing/searchComponents.js @@ -30,8 +30,9 @@ export const searchAllComponents = (components, phrase) => { export const getExactComponent = (components, name) => { const stringEquals = (s1, s2) => normalString(s1) === normalString(s2) - - return pipe(components, [find(c => stringEquals(c.name, name))]) + return pipe(components, [ + find(c => stringEquals(c.props._instanceName, name)), + ]) } export const getAncestorProps = (components, name, found = []) => { diff --git a/packages/builder/src/helpers.js b/packages/builder/src/helpers.js index 5d9ff750af..3ea37e5a67 100644 --- a/packages/builder/src/helpers.js +++ b/packages/builder/src/helpers.js @@ -1,3 +1,6 @@ +import { last } from "lodash/fp" +import { pipe } from "components/common/core" + export const buildStyle = styles => { let str = "" for (let s in styles) { @@ -12,3 +15,9 @@ export const buildStyle = styles => { export const convertCamel = str => { return str.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`) } + +export const capitalise = s => s.substring(0, 1).toUpperCase() + s.substring(1) + +export const get_name = s => (!s ? "" : last(s.split("/"))) + +export const get_capitalised_name = name => pipe(name, [get_name, capitalise])