useOnMessage.ts 1.13 KB
import type { RenderComponentExposeType } from '../types'
import type { CommandSource } from '@/core/websocket/processor'
import type { SubscriptionUpdateMsg } from '@/core/websocket/type/message'
import { DataSourceTypeEnum } from '@/enums/datasource'

interface UseOnMessageParamsType {
  onReceiveActMessage?: (commandSource: CommandSource, message: SubscriptionUpdateMsg) => any
  onReceiveEventMessage?: (commandSource: CommandSource, message: SubscriptionUpdateMsg) => any
  onReceiveDataSourceMessage?: (commandSource: CommandSource, message: SubscriptionUpdateMsg) => any
}

export const useOnMessage = (params?: UseOnMessageParamsType) => {
  const onMessage: RenderComponentExposeType['onMessage'] = (commandSource, message) => {
    const { dataType } = commandSource

    if (dataType === DataSourceTypeEnum.DATASOURCE)
      params?.onReceiveDataSourceMessage?.(commandSource, message)
    else if (dataType === DataSourceTypeEnum.ACT)
      params?.onReceiveActMessage?.(commandSource, message)
    else if (dataType === DataSourceTypeEnum.EVENT)
      params?.onReceiveEventMessage?.(commandSource, message)
  }

  return { onMessage }
}