1
0
Fork 0
mirror of synced 2024-09-20 19:33:10 +12:00
budibase/packages/builder/src/userInterface/EditComponentProps.svelte

148 lines
2.8 KiB
Svelte
Raw Normal View History

2019-08-17 02:48:45 +12:00
<script>
import PropsView from "./PropsView.svelte";
import { store } from "../builderStore";
import { isRootComponent } from "./pagesParsing/searchComponents";
import IconButton from "../common/IconButton.svelte";
import Textbox from "../common/Textbox.svelte";
import UIkit from "uikit";
import { pipe } from "../common/core";
import {
getScreenInfo
2019-08-17 02:48:45 +12:00
} from "./pagesParsing/createProps";
import Button from "../common/Button.svelte";
import ButtonGroup from "../common/ButtonGroup.svelte";
2020-01-22 03:50:35 +13:00
import { LayoutIcon, PaintIcon, TerminalIcon } from '../common/Icons/';
2019-08-17 02:48:45 +12:00
import {
cloneDeep,
2019-08-17 02:48:45 +12:00
join,
split,
map,
keys,
isUndefined,
last
} from "lodash/fp";
import { assign } from "lodash";
let component;
let name = "";
let description = "";
let tagsString = "";
let nameInvalid = "";
let componentInfo;
let modalElement
let propsValidationErrors = [];
2019-10-03 18:12:13 +13:00
let originalName="";
let components;
2019-10-03 18:12:13 +13:00
let ignoreStore = false;
2019-08-19 19:51:01 +12:00
2019-08-17 02:48:45 +12:00
$: shortName = last(name.split("/"));
store.subscribe(s => {
2019-10-03 18:12:13 +13:00
if(ignoreStore) return;
2019-08-17 02:48:45 +12:00
component = s.currentFrontEndItem;
if(!component) return;
2019-10-03 18:12:13 +13:00
originalName = component.name;
2019-08-17 02:48:45 +12:00
name = component.name;
description = component.description;
tagsString = join(", ")(component.tags);
componentInfo = s.currentComponentInfo;
components = s.components;
2019-08-17 02:48:45 +12:00
});
2019-08-19 19:51:01 +12:00
const updateComponent = doChange => {
const newComponent = cloneDeep(component);
doChange(newComponent);
component = newComponent;
componentInfo = getScreenInfo(components, newComponent);
2019-08-19 19:51:01 +12:00
}
const onPropsChanged = newProps => {
updateComponent(newComponent =>
2019-08-19 19:51:01 +12:00
assign(newComponent.props, newProps));
2019-08-17 02:48:45 +12:00
}
</script>
<div class="root">
2020-01-22 03:50:35 +13:00
<ul>
<li><button><PaintIcon /></button></li>
<li><button><LayoutIcon /></button></li>
<li><button><TerminalIcon /></button></li>
</ul>
2019-08-17 02:48:45 +12:00
2019-10-03 18:12:13 +13:00
<div class="component-props-container">
2019-08-17 02:48:45 +12:00
<PropsView
2019-08-17 02:48:45 +12:00
{componentInfo}
{onPropsChanged} />
2019-08-17 02:48:45 +12:00
</div>
</div>
<style>
.root {
height: 100%;
display: flex;
2019-09-20 20:02:22 +12:00
flex-direction: column;
2019-08-17 02:48:45 +12:00
}
.title {
padding: 1rem;
2019-08-17 02:48:45 +12:00
display: grid;
grid-template-columns: [name] 1fr [actions] auto;
color: var(--secondary100);
font-size: .9rem;
font-weight: bold;
2019-08-17 02:48:45 +12:00
}
.title > div:nth-child(1) {
grid-column-start: name;
color: var(--secondary100);
}
.title > div:nth-child(2) {
grid-column-start: actions;
}
2019-09-20 20:02:22 +12:00
.component-props-container {
flex: 1 1 auto;
overflow-y: auto;
}
2020-01-22 03:50:35 +13:00
ul {
list-style: none;
display: flex;
padding: 0;
}
li {
margin-right: 20px;
background: none;
border-radius: 5px;
width: 45px;
height: 45px;
}
li button {
width: 100%;
height: 100%;
background: none;
border: none;
border-radius: 5px;
padding: 12px;
}
.selected {
background: lightblue;
}
</style>