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

73 lines
1.5 KiB
Svelte
Raw Normal View History

<script>
2020-02-03 10:50:30 +01:00
import { some, includes, filter } from "lodash/fp"
import Textbox from "../common/Textbox.svelte"
import Dropdown from "../common/Dropdown.svelte"
import PropControl from "./PropControl.svelte"
import IconButton from "../common/IconButton.svelte"
export let componentInfo
export let onPropChanged = () => {}
export let components
let errors = []
let props = {}
const props_to_ignore = ["_component", "_children", "_styles", "_code", "_id"]
$: propDefs =
componentInfo &&
Object.entries(componentInfo).filter(
([name]) => !props_to_ignore.includes(name)
)
function find_type(prop_name) {
if (!componentInfo._component) return
return components.find(({ name }) => name === componentInfo._component)
.props[prop_name]
}
let setProp = (name, value) => {
onPropChanged(name, value)
}
const fieldHasError = propName => some(e => e.propName === propName)(errors)
</script>
2019-08-04 23:21:16 +02:00
<div class="root">
2020-02-03 10:50:30 +01:00
<form class="uk-form-stacked form-root">
{#each propDefs as [prop_name, prop_value], index}
<div class="prop-container">
2019-08-16 16:48:45 +02:00
2020-02-03 10:50:30 +01:00
<PropControl
{setProp}
{prop_name}
{prop_value}
prop_type={find_type(prop_name)}
{index}
disabled={false} />
2019-08-16 16:48:45 +02:00
2020-02-03 10:50:30 +01:00
</div>
{/each}
2020-02-03 10:50:30 +01:00
</form>
2019-08-16 16:48:45 +02:00
2019-08-04 23:21:16 +02:00
</div>
<style>
2020-02-03 10:50:30 +01:00
.root {
font-size: 10pt;
width: 100%;
}
.form-root {
display: flex;
flex-wrap: wrap;
}
.prop-container {
flex: 1 1 auto;
min-width: 250px;
}
</style>