Skip to content
Snippets Groups Projects
helpers.js 1.49 KiB
Newer Older
chris's avatar
chris committed
/* eslint-disable no-param-reassign */
import { each } from 'lodash';

chris's avatar
chris committed
const alterNotesSchema = schema => {
chris's avatar
chris committed
  const notes = [];
  each(schema.nodes, node => {
    if (node.groups.includes('notes')) notes.push(node);
  });
chris's avatar
chris committed
  if (notes.length > 0) {
    notes.forEach(note => {
      schema.nodes[note.name].spec.toDOM = node => {
        if (node) return [note.name, node.attrs, 0];
        return true;
      };
    });
  }
};
chris's avatar
chris committed

chris's avatar
chris committed
const revertNotesSchema = schema => {
  const notes = [];
  each(schema.nodes, node => {
    if (node.groups.includes('notes')) notes.push(node);
  });
chris's avatar
chris committed
  if (notes.length > 0) {
    notes.forEach(note => {
chris's avatar
chris committed
      schema.nodes[note.name].spec.toDOM = node => {
        if (node) return [note.name, node.attrs];
        return true;
chris's avatar
chris committed
      };
    });
  }
chris's avatar
chris committed
};
chris's avatar
chris committed

chris's avatar
chris committed
const getDocContent = (schema, serializer, targetFormat, context) => {
  let content = '';
  alterNotesSchema(schema);
chris's avatar
chris committed
  if (targetFormat === 'JSON') {
chris's avatar
chris committed
    content = context.app.context.pmViews.main.state.doc.content;
chris's avatar
chris committed
  } else {
    const serialize = serializer(schema);
chris's avatar
chris committed
    content = serialize(context.app.context.pmViews.main.state.doc.content);
chris's avatar
chris committed
  }
chris's avatar
chris committed
  revertNotesSchema(schema);
chris's avatar
chris committed

  return content;
};

chris's avatar
chris committed
const saveContent = (content, onChange, schema, serializer, targetFormat) => {
  alterNotesSchema(schema);
  if (targetFormat === 'JSON') {
    onChange(content);
  } else {
    const serialize = serializer(schema);
    onChange(serialize(content));
  }
  revertNotesSchema(schema);
};

chris's avatar
chris committed
export default {
  getDocContent,
chris's avatar
chris committed
  saveContent,
chris's avatar
chris committed
};