xylabs/sdk-react

View on GitHub
packages/pixel-debugger/src/hooks/usePixelAltSendHandler.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { XyPixel } from '@xylabs/pixel'
import { useEffect, useState } from 'react'

export const usePixelAltSendHandler = (altHandler: (event: string, fields?: Record<string, unknown>) => void) => {
  const [pixelSend, setPixelSend] = useState<typeof XyPixel.instance.send>()
  useEffect(() => {
    if (!pixelSend && XyPixel.instance.send) {
      const oldHandler = XyPixel.instance.send.bind(XyPixel.instance)
      setPixelSend(oldHandler)
    } else {
      XyPixel.instance.send = async (event: string, fields?: Record<string, unknown>, eventId?: string) => {
        altHandler(event, fields)
        return await pixelSend?.(event, fields, eventId)
      }
    }
    return () => {
      //restore send on unmount
      if (pixelSend) {
        XyPixel.instance.send = pixelSend
      }
    }
  }, [pixelSend, altHandler])
}