PageView - editing html

This commit is contained in:
michael shanks 2019-09-03 12:12:24 +01:00
parent b715b2a842
commit 53287779f2
11 changed files with 807 additions and 411 deletions

View File

@ -483,9 +483,9 @@ const savePage = store => async page => {
return; return;
} }
s.pages[currentPageName] = page; s.pages[s.currentPageName] = page;
savePackage(); savePackage(store, s);
return s;
}); });
} }

View File

@ -5,40 +5,58 @@ import Dropdown from "../common/Dropdown.svelte";
import Button from "../common/Button.svelte"; import Button from "../common/Button.svelte";
import { store } from "../builderStore"; import { store } from "../builderStore";
import { isRootComponent } from "./pagesParsing/searchComponents"; import { isRootComponent } from "./pagesParsing/searchComponents";
import {
filter,
find
} from "lodash/fp";
let entryComponent; let entryComponent;
let title = ""; let title = "";
let components = []; let components = [];
store.subscribe(s => { store.subscribe(s => {
title = s.currentFrontEndItem.title; title = s.currentFrontEndItem.index.title;
entryComponent = s.currentFrontEndItem.entryComponent;
components = filter(s => !isRootComponent(s))(s.allComponents); components = filter(s => !isRootComponent(s))(s.allComponents);
entryComponent = find(c => c.name === s.currentFrontEndItem.appBody)(components);
}); });
const save = () => { const save = () => {
const page = { const page = {
title, index: {
entryComponent, title
},
appBody: entryComponent.name,
} }
store.savePage(page); store.savePage(page);
} }
</script> </script>
<p>{$store.currentPageName}</p> <div class="root">
<form class="uk-form-horizontal"> <h3>{$store.currentPageName}</h3>
<Textbox bind:value={title} label="Title" />
<Dropdown bind:value={title}
label="App Entry Component"
options={components}
selected={entryComponent}
textMember="name" />
<Button on:click={save}>Save</Button> <form class="uk-form-horizontal">
</form> <Textbox bind:text={title} label="Title" />
<div class="help-text">The title of your page, displayed in the bowser tab</div>
<Dropdown label="App Entry Component"
options={components}
bind:selected={entryComponent}
textMember={(v) => v.name} />
<div class="help-text">The component that will be loaded into the body of the page</div>
<div style="margin-top: 20px"></div>
<Button on:click={save}>Save</Button>
</form>
</div>
<style> <style>
.root {
padding: 15px;
}
.help-text {
color: var(--slate);
font-size: 10pt;
}
</style> </style>

View File

@ -10,13 +10,13 @@ const getPage = (s, name) => {
</script> </script>
<div class="root"> <div class="root">
<div class="hierarchy-item component" class:selected={$store.currentFrontEndItem && $store.currentFrontEndItem.name === "main"} <div class="hierarchy-item component" class:selected={$store.currentFrontEndItem && $store.currentPageName === "main"}
on:click|stopPropagation={() => store.setCurrentPage("main")}> on:click|stopPropagation={() => store.setCurrentPage("main")}>
<span>{@html getIcon("circle", "7")}</span> <span>{@html getIcon("circle", "7")}</span>
<span class="title">Main</span> <span class="title">Main</span>
</div> </div>
<div class="hierarchy-item component" class:selected={$store.currentFrontEndItem && $store.currentFrontEndItem.name === "unauthenticated"} <div class="hierarchy-item component" class:selected={$store.currentFrontEndItem && $store.currentPageName === "unauthenticated"}
on:click|stopPropagation={() => store.setCurrentPage("unauthenticated")}> on:click|stopPropagation={() => store.setCurrentPage("unauthenticated")}>
<span>{@html getIcon("circle", "7")}</span> <span>{@html getIcon("circle", "7")}</span>
<span class="title">Login</span> <span class="title">Login</span>

View File

@ -5,12 +5,13 @@ import PagesList from "./PagesList.svelte"
import EditComponent from "./EditComponent.svelte"; import EditComponent from "./EditComponent.svelte";
import { store } from "../builderStore"; import { store } from "../builderStore";
import getIcon from "../common/icon"; import getIcon from "../common/icon";
import { isRootComponent } from "./pagesParsing/searchComponents"; import { isComponent } from "./pagesParsing/searchComponents";
import IconButton from "../common/IconButton.svelte"; import IconButton from "../common/IconButton.svelte";
import Modal from "../common/Modal.svelte"; import Modal from "../common/Modal.svelte";
import NewComponent from "./NewComponent.svelte"; import NewComponent from "./NewComponent.svelte";
import CurrentItemPreview from "./CurrentItemPreview.svelte"; import CurrentItemPreview from "./CurrentItemPreview.svelte";
import SettingsView from "./SettingsView.svelte"; import SettingsView from "./SettingsView.svelte";
import PageView from "./PageView.svelte";
let newComponentPicker; let newComponentPicker;
const newComponent = () => { const newComponent = () => {
@ -59,15 +60,19 @@ const settings = () => {
<div> <div>
{#if $store.currentFrontEndItem} {#if $store.currentFrontEndItem}
<CurrentItemPreview /> {#if isComponent($store.currentFrontEndItem)}
<CurrentItemPreview />
{:else}
<PageView />
{/if}
{/if} {/if}
</div> </div>
{#if $store.currentFrontEndItem && isComponent($store.currentFrontEndItem)}
<div class="properties-pane"> <div class="properties-pane">
{#if $store.currentFrontEndItem && !isRootComponent($store.currentFrontEndItem)}
<EditComponent /> <EditComponent />
{/if}
</div> </div>
{/if}
</div> </div>

View File

@ -5,12 +5,18 @@ import {
isUndefined, isUndefined,
filter, filter,
some, some,
includes includes,
has
} from "lodash/fp"; } from "lodash/fp";
const normalString = s => (s||"").trim().toLowerCase(); const normalString = s => (s||"").trim().toLowerCase();
export const isRootComponent = c => isUndefined(c.inherits); export const isRootComponent = c => isComponent(c) && isUndefined(c.inherits);
export const isComponent = c => {
const hasProp = (n) => !isUndefined(c[n]);
return hasProp("name") && hasProp("props");
}
export const searchAllComponents = (allComponents, phrase) => { export const searchAllComponents = (allComponents, phrase) => {

View File

@ -127,12 +127,20 @@
[ [
[ [
[ [
{ [
"name": "output_to_file", [
"behaviourSource": "main", [
"behaviourName": "outputToFile", [
"initialOptions": {} {
} "name": "output_to_file",
"behaviourSource": "main",
"behaviourName": "outputToFile",
"initialOptions": {}
}
]
]
]
]
] ]
] ]
] ]

View File

@ -1,17 +1,15 @@
{ {
"main": { "main": {
"index": {}, "index": {
"appBody": "./main.app.json" "title": "yyyaaa"
},
"appBody": "Random Button"
}, },
"unauthenticated": { "unauthenticated": {
"index": { "index": {
"_component": "budibase-components/indexHtml", "title": "Test App 1 - Login"
"title": "Test App 1 - Login",
"customScripts": [
"MyCustomComponents.js"
]
}, },
"appBody": "./unauthenticated.app.json" "appBody": "login_screen"
}, },
"componentLibraries": [ "componentLibraries": [
"./standard-components" "./standard-components"

View File

@ -38,5 +38,6 @@ input.svelte-66516k{margin-right:7px}
.root.svelte-bv289q{padding:10px}.option-container.svelte-bv289q{border-style:dotted;border-width:1px;border-color:var(--primary75);padding:3px;margin-right:5px} .root.svelte-bv289q{padding:10px}.option-container.svelte-bv289q{border-style:dotted;border-width:1px;border-color:var(--primary75);padding:3px;margin-right:5px}
.addelement-container.svelte-jliz3p{cursor:pointer;padding:3px 0px;text-align:center}.addelement-container.svelte-jliz3p:hover{background-color:var(--primary25)}.item-container.svelte-jliz3p{padding-left:3px;background:var(--secondary10)} .addelement-container.svelte-jliz3p{cursor:pointer;padding:3px 0px;text-align:center}.addelement-container.svelte-jliz3p:hover{background-color:var(--primary25)}.item-container.svelte-jliz3p{padding-left:3px;background:var(--secondary10)}
textarea.svelte-1wfv4cc{width:300px;height:200px} textarea.svelte-1wfv4cc{width:300px;height:200px}
.root.svelte-1ersoxu{padding:15px}.help-text.svelte-1ersoxu{color:var(--slate);font-size:10pt}
/*# sourceMappingURL=bundle.css.map */ /*# sourceMappingURL=bundle.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long