diff --git a/apps/web/src/stores/monograph-store.js b/apps/web/src/stores/monograph-store.ts
similarity index 60%
rename from apps/web/src/stores/monograph-store.js
rename to apps/web/src/stores/monograph-store.ts
index 2852fb343..3e90ced7a 100644
--- a/apps/web/src/stores/monograph-store.js
+++ b/apps/web/src/stores/monograph-store.ts
@@ -20,29 +20,31 @@ along with this program. If not, see .
import createStore from "../common/store";
import { db } from "../common/db";
import BaseStore from "./index";
-import { store as notestore } from "./note-store";
+import { store as noteStore } from "./note-store";
+import { Note, VirtualizedGrouping } from "@notesnook/core";
+import { PublishOptions } from "@notesnook/core/dist/api/monographs";
-/**
- * @extends {BaseStore}
- */
-class MonographStore extends BaseStore {
- monographs = [];
+class MonographStore extends BaseStore {
+ monographs: VirtualizedGrouping | undefined = undefined;
- refresh = () => {
- this.set((state) => (state.monographs = db.monographs.all));
+ refresh = async () => {
+ const grouping = await db.monographs.all.grouped(
+ db.settings.getGroupOptions("notes")
+ );
+ this.set({ monographs: grouping });
};
- publish = async (noteId, opts) => {
+ publish = async (noteId: string, opts: PublishOptions) => {
const publishId = await db.monographs.publish(noteId, opts);
- this.get().refresh();
- notestore.refreshContext();
+ await this.get().refresh();
+ await noteStore.refreshContext();
return publishId;
};
- unpublish = async (noteId) => {
+ unpublish = async (noteId: string) => {
await db.monographs.unpublish(noteId);
- this.get().refresh();
- notestore.refreshContext();
+ await this.get().refresh();
+ noteStore.refreshContext();
};
}
diff --git a/packages/core/src/api/monographs.ts b/packages/core/src/api/monographs.ts
index 883a807da..13b18636f 100644
--- a/packages/core/src/api/monographs.ts
+++ b/packages/core/src/api/monographs.ts
@@ -39,6 +39,7 @@ type EncryptedMonograph = BaseMonograph & {
};
type Monograph = UnencryptedMonograph | EncryptedMonograph;
+export type PublishOptions = { password?: string; selfDestruct?: boolean };
export class Monographs {
monographs: string[] = [];
constructor(private readonly db: Database) {}
@@ -82,10 +83,7 @@ export class Monographs {
/**
* Publish a note as a monograph
*/
- async publish(
- noteId: string,
- opts: { password?: string; selfDestruct?: boolean } = {}
- ) {
+ async publish(noteId: string, opts: PublishOptions = {}) {
if (!this.monographs.length) await this.refresh();
const update = !!this.isPublished(noteId);