JSON to client (#5553)
This commit is contained in:
@@ -3,12 +3,19 @@ import i18n, { t } from "i18next";
|
||||
import capitalize from "lodash/capitalize";
|
||||
import floor from "lodash/floor";
|
||||
import { action, autorun, computed, observable, set } from "mobx";
|
||||
import { Node, Schema } from "prosemirror-model";
|
||||
import ExtensionManager from "@shared/editor/lib/ExtensionManager";
|
||||
import { richExtensions } from "@shared/editor/nodes";
|
||||
import type {
|
||||
JSONObject,
|
||||
NavigationNode,
|
||||
ProsemirrorData,
|
||||
} from "@shared/types";
|
||||
import {
|
||||
ExportContentType,
|
||||
FileOperationFormat,
|
||||
NotificationEventType,
|
||||
} from "@shared/types";
|
||||
import type { JSONObject, NavigationNode } from "@shared/types";
|
||||
import Storage from "@shared/utils/Storage";
|
||||
import { isRTL } from "@shared/utils/rtl";
|
||||
import slugify from "@shared/utils/slugify";
|
||||
@@ -61,6 +68,9 @@ export default class Document extends ParanoidModel {
|
||||
@observable
|
||||
id: string;
|
||||
|
||||
@observable.shallow
|
||||
data: ProsemirrorData;
|
||||
|
||||
/**
|
||||
* The original data source of the document, if imported.
|
||||
*/
|
||||
@@ -111,12 +121,6 @@ export default class Document extends ParanoidModel {
|
||||
@Relation(() => Collection, { onDelete: "cascade" })
|
||||
collection?: Collection;
|
||||
|
||||
/**
|
||||
* The text content of the document as Markdown.
|
||||
*/
|
||||
@observable
|
||||
text: string;
|
||||
|
||||
/**
|
||||
* The title of the document.
|
||||
*/
|
||||
@@ -515,6 +519,17 @@ export default class Document extends ParanoidModel {
|
||||
recursive?: boolean;
|
||||
}) => this.store.duplicate(this, options);
|
||||
|
||||
/**
|
||||
* Returns the first blocks of the document, useful for displaying a preview.
|
||||
*
|
||||
* @param blocks The number of blocks to return, defaults to 4.
|
||||
* @returns A new ProseMirror document.
|
||||
*/
|
||||
getSummary = (blocks = 4) => ({
|
||||
...this.data,
|
||||
content: this.data.content.slice(0, blocks),
|
||||
});
|
||||
|
||||
@computed
|
||||
get pinned(): boolean {
|
||||
return !!this.store.rootStore.pins.orderedData.find(
|
||||
@@ -535,19 +550,40 @@ export default class Document extends ParanoidModel {
|
||||
return !this.isDeleted && !this.isTemplate && !this.isArchived;
|
||||
}
|
||||
|
||||
@computed
|
||||
get childDocuments() {
|
||||
return this.store.orderedData.filter(
|
||||
(doc) => doc.parentDocumentId === this.id
|
||||
);
|
||||
}
|
||||
|
||||
@computed
|
||||
get asNavigationNode(): NavigationNode {
|
||||
return {
|
||||
id: this.id,
|
||||
title: this.title,
|
||||
children: this.store.orderedData
|
||||
.filter((doc) => doc.parentDocumentId === this.id)
|
||||
.map((doc) => doc.asNavigationNode),
|
||||
children: this.childDocuments.map((doc) => doc.asNavigationNode),
|
||||
url: this.url,
|
||||
isDraft: this.isDraft,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the markdown representation of the document derived from the ProseMirror data.
|
||||
*
|
||||
* @returns The markdown representation of the document as a string.
|
||||
*/
|
||||
toMarkdown = () => {
|
||||
const extensionManager = new ExtensionManager(richExtensions);
|
||||
const serializer = extensionManager.serializer();
|
||||
const schema = new Schema({
|
||||
nodes: extensionManager.nodes,
|
||||
marks: extensionManager.marks,
|
||||
});
|
||||
const markdown = serializer.serialize(Node.fromJSON(schema, this.data));
|
||||
return markdown;
|
||||
};
|
||||
|
||||
download = (contentType: ExportContentType) =>
|
||||
client.post(
|
||||
`/documents.export`,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { computed } from "mobx";
|
||||
import { ProsemirrorData } from "@shared/types";
|
||||
import { isRTL } from "@shared/utils/rtl";
|
||||
import Document from "./Document";
|
||||
import User from "./User";
|
||||
@@ -18,8 +19,8 @@ class Revision extends Model {
|
||||
/** The document title when the revision was created */
|
||||
title: string;
|
||||
|
||||
/** Markdown string of the content when revision was created */
|
||||
text: string;
|
||||
/** Prosemirror data of the content when revision was created */
|
||||
data: ProsemirrorData;
|
||||
|
||||
/** The emoji of the document when the revision was created */
|
||||
emoji: string | null;
|
||||
|
||||
Reference in New Issue
Block a user