fix adding decoration classes to node views in vue
This commit is contained in:
@@ -8,11 +8,13 @@ export const NodeViewWrapper = defineComponent({
|
||||
},
|
||||
},
|
||||
|
||||
inject: ['onDragStart'],
|
||||
inject: ['onDragStart', 'decorationClasses'],
|
||||
|
||||
render() {
|
||||
return h(
|
||||
this.as, {
|
||||
// @ts-ignore
|
||||
class: this.decorationClasses.value,
|
||||
style: {
|
||||
whiteSpace: 'normal',
|
||||
},
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
} from '@tiptap/core'
|
||||
import {
|
||||
ref,
|
||||
Ref,
|
||||
provide,
|
||||
PropType,
|
||||
Component,
|
||||
@@ -56,6 +57,8 @@ class VueNodeView extends NodeView<Component, Editor> {
|
||||
|
||||
renderer!: VueRenderer
|
||||
|
||||
decorationClasses!: Ref<string>
|
||||
|
||||
mount() {
|
||||
const props: NodeViewProps = {
|
||||
editor: this.editor,
|
||||
@@ -74,12 +77,15 @@ class VueNodeView extends NodeView<Component, Editor> {
|
||||
isEditable.value = this.editor.isEditable
|
||||
})
|
||||
|
||||
this.decorationClasses = ref(this.getDecorationClasses())
|
||||
|
||||
const extendedComponent = defineComponent({
|
||||
extends: { ...this.component },
|
||||
props: Object.keys(props),
|
||||
setup: () => {
|
||||
provide('onDragStart', onDragStart)
|
||||
provide('isEditable', isEditable)
|
||||
provide('decorationClasses', this.decorationClasses)
|
||||
|
||||
return (this.component as any).setup?.(props)
|
||||
},
|
||||
@@ -124,6 +130,7 @@ class VueNodeView extends NodeView<Component, Editor> {
|
||||
|
||||
this.node = node
|
||||
this.decorations = decorations
|
||||
this.decorationClasses.value = this.getDecorationClasses()
|
||||
this.renderer.updateProps({ node, decorations })
|
||||
|
||||
return true
|
||||
@@ -141,6 +148,14 @@ class VueNodeView extends NodeView<Component, Editor> {
|
||||
})
|
||||
}
|
||||
|
||||
getDecorationClasses() {
|
||||
return this.decorations
|
||||
// @ts-ignore
|
||||
.map(item => item.type.attrs.class)
|
||||
.flat()
|
||||
.join(' ')
|
||||
}
|
||||
|
||||
destroy() {
|
||||
this.renderer.destroy()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user