forked from coracle/flotilla
30 lines
808 B
TypeScript
30 lines
808 B
TypeScript
import type {NodeViewRendererProps} from "@tiptap/core"
|
|
import {displayRelayUrl} from "@welshman/util"
|
|
import {deriveRoom} from "@app/core/state"
|
|
|
|
export const RoomReferenceNodeView = ({node}: NodeViewRendererProps) => {
|
|
const dom = document.createElement("span")
|
|
const url = typeof node.attrs.url === "string" ? node.attrs.url : ""
|
|
const h = typeof node.attrs.h === "string" ? node.attrs.h : ""
|
|
const room = deriveRoom(url, h)
|
|
|
|
dom.classList.add("tiptap-object")
|
|
|
|
const unsubRoom = room.subscribe($room => {
|
|
dom.textContent = `~${displayRelayUrl(url)} / ${$room.name || h}`
|
|
})
|
|
|
|
return {
|
|
dom,
|
|
destroy: () => {
|
|
unsubRoom()
|
|
},
|
|
selectNode() {
|
|
dom.classList.add("tiptap-active")
|
|
},
|
|
deselectNode() {
|
|
dom.classList.remove("tiptap-active")
|
|
},
|
|
}
|
|
}
|