From 230c4e35f0fdf8df7dba38336cbcf3cbe1828a9f Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Fri, 24 Apr 2026 00:27:52 +0100 Subject: [PATCH] feat(base): emit formula-related WS events --- .../core/base/realtime/base-ws-consumers.ts | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/apps/server/src/core/base/realtime/base-ws-consumers.ts b/apps/server/src/core/base/realtime/base-ws-consumers.ts index 883719880..26c8adf79 100644 --- a/apps/server/src/core/base/realtime/base-ws-consumers.ts +++ b/apps/server/src/core/base/realtime/base-ws-consumers.ts @@ -3,6 +3,8 @@ import { OnEvent } from '@nestjs/event-emitter'; import { EventName } from '../../../common/events/event.contants'; import { BaseWsService } from './base-ws.service'; import { + BaseFormulaRecomputeCompletedEvent, + BaseFormulaRecomputeStartedEvent, BasePropertyCreatedEvent, BasePropertyDeletedEvent, BasePropertyReorderedEvent, @@ -10,6 +12,7 @@ import { BaseRowCreatedEvent, BaseRowDeletedEvent, BaseRowsDeletedEvent, + BaseRowsUpdatedEvent, BaseRowReorderedEvent, BaseRowUpdatedEvent, BaseSchemaBumpedEvent, @@ -174,4 +177,40 @@ export class BaseWsConsumers { schemaVersion: e.schemaVersion, }); } + + @OnEvent(EventName.BASE_ROWS_UPDATED) + onRowsUpdated(e: BaseRowsUpdatedEvent) { + this.ws.emitToBase(e.baseId, { + operation: 'base:rows:updated', + baseId: e.baseId, + rowIds: e.rowIds, + propertyIds: e.propertyIds, + actorId: e.actorId ?? null, + requestId: e.requestId ?? null, + }); + } + + @OnEvent(EventName.BASE_FORMULA_RECOMPUTE_STARTED) + onFormulaRecomputeStarted(e: BaseFormulaRecomputeStartedEvent) { + this.ws.emitToBase(e.baseId, { + operation: 'base:formula:recompute:started', + baseId: e.baseId, + propertyIds: e.propertyIds, + jobId: e.jobId, + actorId: e.actorId ?? null, + }); + } + + @OnEvent(EventName.BASE_FORMULA_RECOMPUTE_COMPLETED) + onFormulaRecomputeCompleted(e: BaseFormulaRecomputeCompletedEvent) { + this.ws.emitToBase(e.baseId, { + operation: 'base:formula:recompute:completed', + baseId: e.baseId, + propertyIds: e.propertyIds, + jobId: e.jobId, + processed: e.processed, + errored: e.errored, + actorId: e.actorId ?? null, + }); + } }