Skip to content
Snippets Groups Projects
CommentsService.js 1.89 KiB
Newer Older
chris's avatar
chris committed
import { Service } from 'wax-prosemirror-core';
chris's avatar
chris committed
import CommentBubbleComponent from './components/ui/comments/CommentBubbleComponent';
import RightArea from './components/RightArea';
chris's avatar
chris committed
import commentMark from './schema/commentMark';
chris's avatar
chris committed
import CommentPlugin from './plugins/CommentPlugin';
import CopyPasteCommentPlugin from './plugins/CopyPasteCommentPlugin';
chris's avatar
chris committed
import { AnnotationPlugin } from './plugins/AnnotationPlugin';
import './comments.css';
chris's avatar
chris committed
const PLUGIN_KEY = 'commentPlugin';
chris's avatar
chris committed

export default class CommentsService extends Service {
  boot() {
    this.app.PmPlugins.add(PLUGIN_KEY, CommentPlugin(PLUGIN_KEY));
chris's avatar
chris committed
    this.app.PmPlugins.add(
      'copyPasteCommentPlugin',
      CopyPasteCommentPlugin('copyPasteCommentPlugin', this.app.context),
    );
chris's avatar
chris committed
    console.log(this.app.context);
chris's avatar
chris committed
    const options = {
      styles: {
        rightFragment: '',
        leftFragment: '',
        normal: '',
        middleFragment: '',
      },
chris's avatar
chris committed
      onSelectionChange: items => console.log(items),
      onAnnotationListChange: items => console.log(items),
      document: this.app.context.pmViews?.main?.state.doc,
chris's avatar
chris committed
      field: 'annotations',
chris's avatar
chris committed
      instance: this.app.context.pmViews.main,
chris's avatar
chris committed
    };

    this.app.PmPlugins.add(
      'AnnotationPlugin',
      AnnotationPlugin('AnnotationPlugin', options),
    );
chris's avatar
chris committed
    const createOverlay = this.container.get('CreateOverlay');
    const layout = this.container.get('Layout');
    createOverlay(
      CommentBubbleComponent,
chris's avatar
chris committed
      {},
chris's avatar
chris committed
        nodeType: '',
chris's avatar
chris committed
        markType: '',
        followCursor: false,
chris's avatar
chris committed
        selection: true,
      },
chris's avatar
chris committed
    layout.addComponent('rightArea', RightArea);
chris's avatar
chris committed
  }

  register() {
    const commentConfig = this.config.get('config.CommentsService');
chris's avatar
chris committed
    const createMark = this.container.get('CreateMark');
        comment: commentMark(commentConfig?.showTitle || false),
chris's avatar
chris committed
      { toWaxSchema: true },
chris's avatar
chris committed
  }
}