budibase/packages/client/src/components/BlockComponent.svelte

50 lines
1.2 KiB
Svelte
Raw Normal View History

<script>
import { getContext } from "svelte"
import { generate } from "shortid"
import { builderStore } from "../stores/builder.js"
import Component from "components/Component.svelte"
export let type
export let props
export let styles
2022-08-23 20:30:35 +02:00
export let css
export let context
export let order = 0
// ID is only exposed as a prop so that it can be bound to from parent
// block components
export let id
const component = getContext("component")
const block = getContext("block")
const rand = generate()
// Create a fake component instance so that we can use the core Component
// to render this part of the block, taking advantage of binding enrichment
$: id = `${block.id}-${context ?? rand}`
2021-11-02 13:58:38 +01:00
$: instance = {
_component: `@budibase/standard-components/${type}`,
_id: id,
_instanceName: type[0].toUpperCase() + type.slice(1),
2021-11-02 13:58:38 +01:00
_styles: {
normal: {
...styles,
},
2022-08-23 20:30:35 +02:00
custom: css,
2021-11-02 13:58:38 +01:00
},
...props,
}
// Register this block component if we're inside the builder so it can be
// ejected later
$: {
if ($builderStore.inBuilder) {
block.registerComponent(id, order, $component?.id, instance)
}
}
</script>
2021-11-12 16:19:25 +01:00
<Component {instance} isBlock>
<slot />
</Component>