2020-05-24 15:33:25 +00:00
|
|
|
import {
|
|
|
|
defineComponent,
|
2020-12-27 21:32:43 +00:00
|
|
|
computed,
|
2020-05-24 15:33:25 +00:00
|
|
|
PropType,
|
2020-05-28 20:16:35 +00:00
|
|
|
ref,
|
|
|
|
Ref,
|
2020-12-27 21:32:43 +00:00
|
|
|
} from 'vue';
|
2021-03-08 15:29:35 +00:00
|
|
|
import { BlockData } from '../types';
|
2020-12-30 13:34:23 +00:00
|
|
|
import { useDynamicBlocks } from '../use-dynamic-blocks';
|
2020-05-20 14:21:08 +00:00
|
|
|
|
|
|
|
import './Block.scss';
|
|
|
|
|
2020-12-30 13:34:23 +00:00
|
|
|
export const SbBlock = defineComponent({
|
2020-05-20 14:21:08 +00:00
|
|
|
name: 'sb-block',
|
|
|
|
|
|
|
|
props: {
|
2020-05-27 15:06:14 +00:00
|
|
|
block: {
|
2021-03-08 15:29:35 +00:00
|
|
|
type: (null as unknown) as PropType<BlockData<any>>,
|
2020-05-27 15:06:14 +00:00
|
|
|
required: true,
|
2020-05-27 13:57:57 +00:00
|
|
|
},
|
2020-05-20 14:21:08 +00:00
|
|
|
},
|
|
|
|
|
2021-03-08 15:29:35 +00:00
|
|
|
setup(props, context) {
|
2020-05-28 20:16:35 +00:00
|
|
|
const el: Ref<null|HTMLElement> = ref(null);
|
2021-03-08 17:03:18 +00:00
|
|
|
const { getBlock } = useDynamicBlocks();
|
|
|
|
const classes = computed(() => ({ 'sb-block': true }));
|
2020-05-28 20:16:35 +00:00
|
|
|
|
2020-12-30 20:17:34 +00:00
|
|
|
return () => {
|
2021-03-08 17:03:18 +00:00
|
|
|
const BlockComponent = getBlock(props.block.name)?.component as any;
|
2020-12-30 20:17:34 +00:00
|
|
|
|
|
|
|
return <div
|
|
|
|
ref={el}
|
|
|
|
class={classes.value}
|
|
|
|
>
|
|
|
|
<BlockComponent
|
|
|
|
data={props.block.data}
|
2021-03-07 17:47:28 +00:00
|
|
|
blockId={props.block.id}
|
2021-03-08 17:03:18 +00:00
|
|
|
{...context.attrs}
|
2020-12-30 20:17:34 +00:00
|
|
|
/>
|
|
|
|
</div>;
|
|
|
|
};
|
2020-05-20 14:21:08 +00:00
|
|
|
},
|
|
|
|
});
|