diff --git a/app/components/DocumentBreadcrumb.tsx b/app/components/DocumentBreadcrumb.tsx index 974c7cb42..e087c38f8 100644 --- a/app/components/DocumentBreadcrumb.tsx +++ b/app/components/DocumentBreadcrumb.tsx @@ -86,11 +86,7 @@ const DocumentBreadcrumb: React.FC = ({ }; } - const path = React.useMemo( - () => collection?.pathToDocument(document.id).slice(0, -1) || [], - // eslint-disable-next-line react-hooks/exhaustive-deps - [collection, document, document.collectionId, document.parentDocumentId] - ); + const path = document.pathTo; const items = React.useMemo(() => { const output = []; @@ -103,7 +99,7 @@ const DocumentBreadcrumb: React.FC = ({ output.push(collectionNode); } - path.forEach((node: NavigationNode) => { + path.slice(0, -1).forEach((node: NavigationNode) => { output.push({ type: "route", title: node.emoji ? ( diff --git a/app/models/Document.ts b/app/models/Document.ts index e13bf02eb..adaf0071e 100644 --- a/app/models/Document.ts +++ b/app/models/Document.ts @@ -11,9 +11,11 @@ import DocumentsStore from "~/stores/DocumentsStore"; import User from "~/models/User"; import { client } from "~/utils/ApiClient"; import { settingsPath } from "~/utils/routeHelpers"; +import Collection from "./Collection"; import View from "./View"; import ParanoidModel from "./base/ParanoidModel"; import Field from "./decorators/Field"; +import Relation from "./decorators/Relation"; type SaveOptions = { publish?: boolean; @@ -59,6 +61,12 @@ export default class Document extends ParanoidModel { @observable collectionId?: string | null; + /** + * The comment that this comment is a reply to. + */ + @Relation(() => Collection, { onDelete: "cascade" }) + collection?: Collection; + /** * The text content of the document as Markdown. */ @@ -276,6 +284,11 @@ export default class Document extends ParanoidModel { return floor((this.tasks.completed / this.tasks.total) * 100); } + @computed + get pathTo() { + return this.collection?.pathToDocument(this.id) ?? []; + } + get titleWithDefault(): string { return this.title || i18n.t("Untitled"); }