diff --git a/app/components/SocketProvider.tsx b/app/components/SocketProvider.tsx index 8db606bfe..428b45123 100644 --- a/app/components/SocketProvider.tsx +++ b/app/components/SocketProvider.tsx @@ -5,6 +5,7 @@ import { observer } from "mobx-react"; import * as React from "react"; import { io, Socket } from "socket.io-client"; import RootStore from "~/stores/RootStore"; +import Document from "~/models/Document"; import FileOperation from "~/models/FileOperation"; import Pin from "~/models/Pin"; import Star from "~/models/Star"; @@ -232,6 +233,19 @@ class SocketProvider extends React.Component { } }); + this.socket.on( + "documents.update", + (event: PartialWithId & { title: string; url: string }) => { + const document = documents.get(event.id); + document?.updateFromJson(event); + + if (event.collectionId) { + const collection = collections.get(event.collectionId); + collection?.updateDocument(event); + } + } + ); + this.socket.on("documents.delete", (event: WebsocketEntityDeletedEvent) => { const document = documents.get(event.modelId); diff --git a/app/models/Collection.ts b/app/models/Collection.ts index 09b50c65d..0f4acc19e 100644 --- a/app/models/Collection.ts +++ b/app/models/Collection.ts @@ -102,7 +102,7 @@ export default class Collection extends ParanoidModel { } @action - updateDocument(document: Document) { + updateDocument(document: Pick) { const travelNodes = (nodes: NavigationNode[]) => nodes.forEach((node) => { if (node.id === document.id) { diff --git a/server/queues/processors/WebsocketsProcessor.ts b/server/queues/processors/WebsocketsProcessor.ts index 71fbfb536..7af1c5ae4 100644 --- a/server/queues/processors/WebsocketsProcessor.ts +++ b/server/queues/processors/WebsocketsProcessor.ts @@ -13,6 +13,7 @@ import { Team, } from "@server/models"; import { + presentDocument, presentFileOperation, presentPin, presentStar, @@ -101,15 +102,9 @@ export default class WebsocketsProcessor { const channel = document.publishedAt ? `collection-${document.collectionId}` : `user-${event.actorId}`; - return socketio.to(channel).emit("entities", { - event: event.name, - documentIds: [ - { - id: document.id, - updatedAt: document.updatedAt, - }, - ], - }); + + const data = await presentDocument(document); + return socketio.to(channel).emit(event.name, data); } case "documents.create": {