schlechtenburg/packages/core/lib/components/Block.tsx

44 lines
893 B
TypeScript
Raw Normal View History

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);
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 () => {
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}
{...context.attrs}
2020-12-30 20:17:34 +00:00
/>
</div>;
};
2020-05-20 14:21:08 +00:00
},
});