(data: any)
| 200 | |
| 201 | useEffect(() => { |
| 202 | const handleWorkflowOperation = (data: any) => { |
| 203 | const { operation, target, payload, userId, metadata } = data |
| 204 | |
| 205 | if (isApplyingRemoteChange.current) return |
| 206 | |
| 207 | // Filter broadcasts by workflowId to prevent cross-workflow updates |
| 208 | if (metadata?.workflowId && metadata.workflowId !== activeWorkflowId) { |
| 209 | logger.debug('Ignoring workflow operation for different workflow', { |
| 210 | broadcastWorkflowId: metadata.workflowId, |
| 211 | activeWorkflowId, |
| 212 | }) |
| 213 | return |
| 214 | } |
| 215 | |
| 216 | logger.info(`Received ${operation} on ${target} from user ${userId}`) |
| 217 | |
| 218 | // Apply the operation to local state |
| 219 | isApplyingRemoteChange.current = true |
| 220 | |
| 221 | try { |
| 222 | if (target === OPERATION_TARGETS.BLOCK) { |
| 223 | switch (operation) { |
| 224 | case BLOCK_OPERATIONS.UPDATE_NAME: |
| 225 | useWorkflowStore.getState().updateBlockName(payload.id, payload.name) |
| 226 | break |
| 227 | case BLOCK_OPERATIONS.UPDATE_ADVANCED_MODE: |
| 228 | useWorkflowStore.getState().setBlockAdvancedMode(payload.id, payload.advancedMode) |
| 229 | break |
| 230 | case BLOCK_OPERATIONS.UPDATE_CANONICAL_MODE: |
| 231 | useWorkflowStore |
| 232 | .getState() |
| 233 | .setBlockCanonicalMode(payload.id, payload.canonicalId, payload.canonicalMode) |
| 234 | break |
| 235 | } |
| 236 | } else if (target === OPERATION_TARGETS.BLOCKS) { |
| 237 | switch (operation) { |
| 238 | case BLOCKS_OPERATIONS.BATCH_UPDATE_POSITIONS: { |
| 239 | const { updates } = payload |
| 240 | if (Array.isArray(updates)) { |
| 241 | useWorkflowStore.getState().batchUpdatePositions(updates) |
| 242 | } |
| 243 | break |
| 244 | } |
| 245 | } |
| 246 | } else if (target === OPERATION_TARGETS.SUBBLOCK) { |
| 247 | switch (operation) { |
| 248 | case SUBBLOCK_OPERATIONS.BATCH_UPDATE: { |
| 249 | const { updates } = payload |
| 250 | if (Array.isArray(updates)) { |
| 251 | updates.forEach( |
| 252 | (update: { blockId: string; subblockId: string; value: unknown }) => { |
| 253 | useSubBlockStore |
| 254 | .getState() |
| 255 | .setValue(update.blockId, update.subblockId, update.value) |
| 256 | useWorkflowStore |
| 257 | .getState() |
| 258 | .syncDynamicHandleSubblockValue( |
| 259 | update.blockId, |
nothing calls this directly
no test coverage detected