diff --git a/app/components/SocketProvider.tsx b/app/components/WebsocketProvider.tsx similarity index 95% rename from app/components/SocketProvider.tsx rename to app/components/WebsocketProvider.tsx index 0db57a77b..627c80284 100644 --- a/app/components/SocketProvider.tsx +++ b/app/components/WebsocketProvider.tsx @@ -17,7 +17,6 @@ import { PartialWithId, WebsocketCollectionUpdateIndexEvent, WebsocketCollectionUserEvent, - WebsocketDocumentDeletedEvent, WebsocketEntitiesEvent, WebsocketEntityDeletedEvent, } from "~/types"; @@ -28,14 +27,14 @@ type SocketWithAuthentication = Socket & { authenticated?: boolean; }; -export const SocketContext = React.createContext( +export const WebsocketContext = React.createContext( null ); type Props = RootStore; @observer -class SocketProvider extends React.Component { +class WebsocketProvider extends React.Component { @observable socket: SocketWithAuthentication | null; @@ -242,19 +241,14 @@ class SocketProvider extends React.Component { this.socket.on( "documents.delete", - action((event: WebsocketDocumentDeletedEvent) => { - const document = documents.get(event.modelId); + action((event: PartialWithId) => { + documents.add(event); + policies.remove(event.id); if (event.collectionId) { const collection = collections.get(event.collectionId); - collection?.removeDocument(event.modelId); + collection?.removeDocument(event.id); } - - if (document) { - document.deletedAt = new Date().toISOString(); - } - - policies.remove(event.modelId); }) ); @@ -428,11 +422,11 @@ class SocketProvider extends React.Component { render() { return ( - + {this.props.children} - + ); } } -export default withStores(SocketProvider); +export default withStores(WebsocketProvider); diff --git a/app/routes/authenticated.tsx b/app/routes/authenticated.tsx index 53e68e81a..043eea54e 100644 --- a/app/routes/authenticated.tsx +++ b/app/routes/authenticated.tsx @@ -11,7 +11,7 @@ import Layout from "~/components/AuthenticatedLayout"; import CenteredContent from "~/components/CenteredContent"; import PlaceholderDocument from "~/components/PlaceholderDocument"; import Route from "~/components/ProfiledRoute"; -import SocketProvider from "~/components/SocketProvider"; +import WebsocketProvider from "~/components/WebsocketProvider"; import useCurrentTeam from "~/hooks/useCurrentTeam"; import usePolicy from "~/hooks/usePolicy"; import { matchDocumentSlug as slug } from "~/utils/routeHelpers"; @@ -67,7 +67,7 @@ function AuthenticatedRoutes() { const can = usePolicy(team); return ( - + - + ); } diff --git a/app/scenes/Document/components/SocketPresence.ts b/app/scenes/Document/components/SocketPresence.ts index 9491c9376..b67fdab3b 100644 --- a/app/scenes/Document/components/SocketPresence.ts +++ b/app/scenes/Document/components/SocketPresence.ts @@ -1,6 +1,6 @@ import * as React from "react"; import { USER_PRESENCE_INTERVAL } from "@shared/constants"; -import { SocketContext } from "~/components/SocketProvider"; +import { WebsocketContext } from "~/components/WebsocketProvider"; type Props = { documentId: string; @@ -8,9 +8,9 @@ type Props = { }; export default class SocketPresence extends React.Component { - static contextType = SocketContext; + static contextType = WebsocketContext; - previousContext: typeof SocketContext; + previousContext: typeof WebsocketContext; editingInterval: ReturnType; diff --git a/app/types.ts b/app/types.ts index fbf766772..76c5a7c35 100644 --- a/app/types.ts +++ b/app/types.ts @@ -188,11 +188,6 @@ export type WebsocketEntityDeletedEvent = { modelId: string; }; -export type WebsocketDocumentDeletedEvent = WebsocketEntityDeletedEvent & { - modelId: string; - collectionId: string; -}; - export type WebsocketEntitiesEvent = { documentIds: { id: string; updatedAt?: string }[]; collectionIds: { id: string; updatedAt?: string }[]; diff --git a/server/queues/processors/WebsocketsProcessor.ts b/server/queues/processors/WebsocketsProcessor.ts index 84c71b6fd..4aeb13717 100644 --- a/server/queues/processors/WebsocketsProcessor.ts +++ b/server/queues/processors/WebsocketsProcessor.ts @@ -55,26 +55,6 @@ export default class WebsocketsProcessor { }); } - case "documents.delete": { - const document = await Document.findByPk(event.documentId, { - paranoid: false, - }); - if (!document) { - return; - } - - return socketio - .to( - document.publishedAt - ? `collection-${document.collectionId}` - : `user-${document.createdById}` - ) - .emit(event.name, { - modelId: event.documentId, - collectionId: event.collectionId, - }); - } - case "documents.permanent_delete": { return socketio .to(`collection-${event.collectionId}`) @@ -84,6 +64,7 @@ export default class WebsocketsProcessor { } case "documents.archive": + case "documents.delete": case "documents.update": { const document = await Document.findByPk(event.documentId, { paranoid: false,