fix types

This commit is contained in:
Philipp Kühn
2021-02-12 10:18:37 +01:00
parent e3a34f78b8
commit 92d5b073ae
3 changed files with 27 additions and 16 deletions

View File

@@ -1,9 +1,9 @@
export class AnnotationItem { export class AnnotationItem {
public id!: number public id!: string
public text!: string public text!: string
constructor(id: number, text: string) { constructor(id: string, text: string) {
this.id = id this.id = id
this.text = text this.text = text
} }

View File

@@ -1,4 +1,3 @@
// @ts-nocheck
import * as Y from 'yjs' import * as Y from 'yjs'
import { EditorState, Transaction } from 'prosemirror-state' import { EditorState, Transaction } from 'prosemirror-state'
import { Decoration, DecorationSet } from 'prosemirror-view' import { Decoration, DecorationSet } from 'prosemirror-view'
@@ -27,7 +26,7 @@ export class AnnotationState {
// }) // })
} }
findAnnotation(id: number) { findAnnotation(id: string) {
// TODO: Get from Y.js? // TODO: Get from Y.js?
// this.decorations.get(id) // this.decorations.get(id)
@@ -59,11 +58,16 @@ export class AnnotationState {
this.decorations = this.decorations.add(state.doc, [decoration]) this.decorations = this.decorations.add(state.doc, [decoration])
} }
deleteAnnotation(id: number) { deleteAnnotation(id: string) {
const { map } = this.options const { map } = this.options
const decoration = this.findAnnotation(id) const decoration = this.findAnnotation(id)
map.delete(id) map.delete(id)
if (!decoration) {
return
}
this.decorations = this.decorations.remove([decoration]) this.decorations = this.decorations.remove([decoration])
} }
@@ -75,14 +79,22 @@ export class AnnotationState {
const { map, HTMLAttributes } = this.options const { map, HTMLAttributes } = this.options
const ystate = ySyncPluginKey.getState(state) const ystate = ySyncPluginKey.getState(state)
const { doc, type, binding } = ystate const { doc, type, binding } = ystate
const decorations: Decoration[] = []
const decorations = Array.from(map.keys()).map(id => { Array
.from(map.keys())
.forEach(id => {
const dec = map.get(id) const dec = map.get(id)
const from = relativePositionToAbsolutePosition(doc, type, dec.from, binding.mapping) const from = relativePositionToAbsolutePosition(doc, type, dec.from, binding.mapping)
const to = relativePositionToAbsolutePosition(doc, type, dec.to, binding.mapping) const to = relativePositionToAbsolutePosition(doc, type, dec.to, binding.mapping)
if (!from || !to) {
return
}
const decoration = Decoration.inline(from, to, HTMLAttributes, { data: dec.data }) const decoration = Decoration.inline(from, to, HTMLAttributes, { data: dec.data })
return decoration return decorations.push(decoration)
}) })
this.decorations = DecorationSet.create(state.doc, decorations) this.decorations = DecorationSet.create(state.doc, decorations)
@@ -115,5 +127,4 @@ export class AnnotationState {
return this return this
} }
} }

View File

@@ -4,7 +4,7 @@ import { AnnotationItem } from './AnnotationItem'
import { AnnotationPlugin, AnnotationPluginKey } from './AnnotationPlugin' import { AnnotationPlugin, AnnotationPluginKey } from './AnnotationPlugin'
function randomId() { function randomId() {
return Math.floor(Math.random() * 0xffffffff) return Math.floor(Math.random() * 0xffffffff).toString()
} }
export interface AddAnnotationAction { export interface AddAnnotationAction {
@@ -15,7 +15,7 @@ export interface AddAnnotationAction {
} }
export interface DeleteAnnotationAction { export interface DeleteAnnotationAction {
id: number, id: string,
type: 'deleteAnnotation', type: 'deleteAnnotation',
} }
@@ -74,7 +74,7 @@ export const Annotation = Extension.create({
return true return true
}, },
deleteAnnotation: (id: number): Command => ({ dispatch, state }) => { deleteAnnotation: (id: string): Command => ({ dispatch, state }) => {
if (dispatch) { if (dispatch) {
state.tr.setMeta(AnnotationPluginKey, <DeleteAnnotationAction>{ state.tr.setMeta(AnnotationPluginKey, <DeleteAnnotationAction>{
type: 'deleteAnnotation', type: 'deleteAnnotation',