{"version":3,"file":"CentraEvents.cjs","names":[],"sources":["../../src/internal/CentraEvents.ts"],"sourcesContent":["import type * as CentraCheckoutApi from '@noaignite/centra-types'\n\nconst CENTRA_EVENTS = ['centra_checkout_callback', 'centra_checkout_payment_callback'] as const\n\nfunction isValidEvent(eventName: (typeof CENTRA_EVENTS)[number]) {\n  if (CENTRA_EVENTS.includes(eventName)) {\n    return true\n  }\n\n  console.error(`@noaignite/react-centra-checkout: There's no event with the name ${eventName}`)\n  return false\n}\n\nexport class CentraEvents {\n  eventHandlers: {\n    centra_checkout_callback?: Set<\n      (payload: CentraCheckoutApi.Response<CentraCheckoutApi.SelectionResponse>) => unknown\n    >\n    centra_checkout_payment_callback?: Set<\n      (payload: CentraCheckoutApi.SelectionResponse) => unknown\n    >\n  }\n\n  private static _default?: CentraEvents\n\n  constructor() {\n    this.eventHandlers = {\n      centra_checkout_callback: new Set(),\n      centra_checkout_payment_callback: new Set(),\n    }\n  }\n\n  on(\n    eventName: (typeof CENTRA_EVENTS)[number],\n    callback: (\n      response: CentraCheckoutApi.Response<CentraCheckoutApi.SelectionResponse>,\n    ) => unknown,\n  ) {\n    if (isValidEvent(eventName)) {\n      this.eventHandlers[eventName]?.add(callback)\n\n      return true\n    }\n\n    return false\n  }\n\n  off(\n    eventName: (typeof CENTRA_EVENTS)[number],\n    callback: (\n      response: CentraCheckoutApi.Response<CentraCheckoutApi.SelectionResponse>,\n    ) => unknown,\n  ) {\n    if (isValidEvent(eventName)) {\n      this.eventHandlers[eventName]?.delete(callback)\n\n      return true\n    }\n\n    return false\n  }\n\n  dispatch(\n    eventName: (typeof CENTRA_EVENTS)[number],\n    payload: CentraCheckoutApi.Response<CentraCheckoutApi.SelectionResponse>,\n  ) {\n    if (isValidEvent(eventName)) {\n      this.eventHandlers[eventName]?.forEach((handler) => handler(payload))\n    }\n  }\n\n  public static get default(): CentraEvents {\n    // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- TODO: Remove rule disable when appropriate\n    if (!CentraEvents._default) {\n      CentraEvents._default = new CentraEvents()\n    }\n\n    return CentraEvents._default\n  }\n\n  public get default(): CentraEvents {\n    return CentraEvents.default\n  }\n}\n"],"mappings":";;AAEA,MAAM,gBAAgB,CAAC,4BAA4B,kCAAkC;AAErF,SAAS,aAAa,WAA2C;CAC/D,IAAI,cAAc,SAAS,SAAS,GAClC,OAAO;CAGT,QAAQ,MAAM,oEAAoE,WAAW;CAC7F,OAAO;AACT;AAEA,IAAa,eAAb,MAAa,aAAa;CACxB;CASA,OAAe;CAEf,cAAc;EACZ,KAAK,gBAAgB;GACnB,0CAA0B,IAAI,IAAI;GAClC,kDAAkC,IAAI,IAAI;EAC5C;CACF;CAEA,GACE,WACA,UAGA;EACA,IAAI,aAAa,SAAS,GAAG;GAC3B,KAAK,cAAc,UAAU,EAAE,IAAI,QAAQ;GAE3C,OAAO;EACT;EAEA,OAAO;CACT;CAEA,IACE,WACA,UAGA;EACA,IAAI,aAAa,SAAS,GAAG;GAC3B,KAAK,cAAc,UAAU,EAAE,OAAO,QAAQ;GAE9C,OAAO;EACT;EAEA,OAAO;CACT;CAEA,SACE,WACA,SACA;EACA,IAAI,aAAa,SAAS,GACxB,KAAK,cAAc,UAAU,EAAE,SAAS,YAAY,QAAQ,OAAO,CAAC;CAExE;CAEA,WAAkB,UAAwB;EAExC,IAAI,CAAC,aAAa,UAChB,aAAa,WAAW,IAAI,aAAa;EAG3C,OAAO,aAAa;CACtB;CAEA,IAAW,UAAwB;EACjC,OAAO,aAAa;CACtB;AACF"}