1
0
Fork 0
mirror of synced 2024-09-20 11:27:56 +12:00
budibase/packages/builder/src/components/userInterface/PropertyControl.svelte

75 lines
1.6 KiB
Svelte
Raw Normal View History

2020-05-08 01:30:04 +12:00
<script>
2020-05-19 03:32:00 +12:00
import { onMount, getContext } from "svelte"
2020-05-08 01:30:04 +12:00
export let label = ""
export let control = null
export let key = ""
2020-05-22 01:28:32 +12:00
export let value
2020-05-08 01:30:04 +12:00
export let props = {}
export let onChange = () => {}
function handleChange(key, v) {
2020-07-26 22:54:55 +12:00
let innerVal = v
if (typeof v === "object") {
if ("detail" in v) {
innerVal = v.detail
} else if ("target" in v) {
innerVal = props.valueKey ? v.target[props.valueKey] : v.target.value
}
2020-05-20 22:55:25 +12:00
}
2020-07-26 22:54:55 +12:00
onChange(key, innerVal)
}
2020-05-26 02:23:56 +12:00
const safeValue = () => {
return value === undefined && props.defaultValue !== undefined
? props.defaultValue
: value
}
2020-05-22 01:28:32 +12:00
//Incase the component has a different value key name
const handlevalueKey = value =>
2020-05-26 02:23:56 +12:00
props.valueKey ? { [props.valueKey]: safeValue() } : { value: safeValue() }
2020-05-08 01:30:04 +12:00
</script>
<div class="property-control">
<div class="label">{label}</div>
<div data-cy={`${key}-prop-control`} class="control">
2020-05-08 01:30:04 +12:00
<svelte:component
this={control}
2020-05-22 01:28:32 +12:00
{...handlevalueKey(value)}
on:change={val => handleChange(key, val)}
onChange={val => handleChange(key, val)}
{...props}
name={key} />
2020-05-08 01:30:04 +12:00
</div>
</div>
<style>
.property-control {
display: flex;
flex-flow: row;
2020-08-06 01:19:56 +12:00
width: 260px;
2020-05-08 01:30:04 +12:00
margin: 8px 0px;
align-items: center;
2020-05-08 01:30:04 +12:00
}
.label {
2020-05-29 03:24:53 +12:00
display: flex;
align-items: center;
2020-05-08 01:30:04 +12:00
font-size: 12px;
font-weight: 400;
2020-08-06 01:19:56 +12:00
width: 100px;
2020-05-08 01:30:04 +12:00
text-align: left;
color: var(--ink);
margin-right: auto;
text-transform: capitalize;
2020-05-08 01:30:04 +12:00
}
.control {
flex: 1;
display: flex;
padding-left: 2px;
max-width: 164px;
2020-05-08 01:30:04 +12:00
}
</style>