budibase/packages/builder/src/userInterface/PropControl.svelte

73 lines
2.2 KiB
Svelte
Raw Normal View History

2019-08-16 16:48:45 +02:00
<script>
import Checkbox from "../common/Checkbox.svelte";
import Textbox from "../common/Textbox.svelte";
import Dropdown from "../common/Dropdown.svelte";
import ComponentPropSelector from "./ComponentPropSelector.svelte";
2019-09-03 11:42:19 +02:00
import PropArraySelector from "./PropArraySelector.svelte";
2019-08-16 16:48:45 +02:00
export let errors = [];
export let setProp = () => {};
export let fieldHasError =() => {};
export let propDef = {};
export let props = {};
export let disabled;
2019-08-19 09:51:01 +02:00
export let index;
export let onEditComponent = () => {};
$: isOdd = (index % 2 !== 0);
const setComponentProp = (props) => {
setProp(propDef.____name, props);
}
2019-08-16 16:48:45 +02:00
</script>
2019-08-19 09:51:01 +02:00
<div class="root" >
2019-08-16 16:48:45 +02:00
{#if propDef.type === "bool"}
<Checkbox label={propDef.____name}
checked={props[propDef.____name]}
on:change={ev => setProp(propDef.____name, ev.target.checked)}
hasError={fieldHasError(propDef.____name)} />
{:else if propDef.type === "options"}
<Dropdown label={propDef.____name}
selected={props[propDef.____name]}
options={propDef.options}
on:change={ev => setProp(propDef.____name, ev.target.value)}
hasError={fieldHasError(propDef.____name)}/>
{:else if propDef.type === "component"}
<ComponentPropSelector label={propDef.____name}
props={props[propDef.____name]}
{disabled}
2019-08-19 09:51:01 +02:00
onEdit={onEditComponent}
onComponentChosen={onEditComponent}
onValueChanged={setComponentProp}/>
2019-09-03 11:42:19 +02:00
{:else if propDef.type === "array"}
<PropArraySelector parentProps={props}
{propDef}
onValueChanged={setComponentProp}
onEditComponentProp={onEditComponent}/>
2019-08-16 16:48:45 +02:00
{:else}
<Textbox label={propDef.____name}
text={props[propDef.____name]}
on:change={ev => setProp(propDef.____name, ev.target.value)}
margin={false}
hasError={fieldHasError(propDef.____name)}
{disabled}/>
{/if}
</div>
<style>
.root {
2019-08-19 09:51:01 +02:00
padding: 3px 5px 7px 10px;
border-style: dotted;
border-width: 0 0 1px 0;
border-color: var(--primary25);
2019-08-16 16:48:45 +02:00
}
</style>