import { computed } from 'vue' export default function useNotionBlock (props) { const block = computed(() => { const id = props.contentId || Object.keys(props.blockMap)[0] return props.blockMap[id] }) const value = computed(() => { return block.value?.value }) const format = computed(() => { return value.value?.format }) const icon = computed(() => { return format.value?.page_icon || '' }) const width = computed(() => { return format.value?.block_width }) const properties = computed(() => { return value.value?.properties }) const caption = computed(() => { return properties.value?.caption }) const description = computed(() => { return properties.value?.description }) const src = computed(() => { return mapImageUrl(properties.value?.source[0][0], block.value) }) const title = computed(() => { return properties.value?.title }) const alt = computed(() => { return caption.value?.[0][0] }) const type = computed(() => { return value.value?.type }) const visible = computed(() => { return !props.hideList.includes(type.value) }) const hasPageLinkOptions = computed(() => { return props.pageLinkOptions?.component && props.pageLinkOptions?.href }) const parent = computed(() => { return props.blockMap[value.value?.parent_id] }) const innerJson = computed(() => { if (type.value !== 'code') return if (properties.value.language.flat('Infinity').join('') !== 'JSON') { return } try { return JSON.parse( title.value.flat(Infinity).join('').replace(/\n/g, '').replace(/\t/g, '').trim() ) } catch (error) { console.error('Failed to parse JSON', error, title.value.flat(Infinity).join('').replace(/\n/g, '').replace(/\t/g, '').trim() ) return } }) function mapImageUrl (source) { // Implement your mapImageUrl logic here return source } return { icon, width, properties, caption, description, src, title, alt, block, value, format, type, visible, hasPageLinkOptions, parent, innerJson } }