27 lines
614 B
TypeScript
27 lines
614 B
TypeScript
|
|
import type {NodeViewProps} from '@tiptap/core'
|
||
|
|
import {deriveProfileDisplay} from "@welshman/app"
|
||
|
|
|
||
|
|
export const MentionNodeView = ({node}: NodeViewProps) => {
|
||
|
|
const dom = document.createElement('span')
|
||
|
|
const display = deriveProfileDisplay(node.attrs.pubkey)
|
||
|
|
|
||
|
|
dom.classList.add('tiptap-object')
|
||
|
|
|
||
|
|
const unsubDisplay = display.subscribe($display => {
|
||
|
|
dom.textContent = '@' + $display
|
||
|
|
})
|
||
|
|
|
||
|
|
return {
|
||
|
|
dom,
|
||
|
|
destroy: () => {
|
||
|
|
unsubDisplay()
|
||
|
|
},
|
||
|
|
selectNode() {
|
||
|
|
dom.classList.add('tiptap-active')
|
||
|
|
},
|
||
|
|
deselectNode() {
|
||
|
|
dom.classList.remove('tiptap-active')
|
||
|
|
},
|
||
|
|
}
|
||
|
|
}
|