{"version":3,"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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,IAAM,gBAAgB,CAAC,4BAA4B,kCAAkC;AAErF,SAAS,aAAa,WAA2C;AAC/D,MAAI,cAAc,SAAS,SAAS,GAAG;AACrC,WAAO;AAAA,EACT;AAEA,UAAQ,MAAM,oEAAoE,SAAS,EAAE;AAC7F,SAAO;AACT;AAEO,IAAM,eAAN,MAAM,cAAa;AAAA,EACxB;AAAA,EASA,OAAe;AAAA,EAEf,cAAc;AACZ,SAAK,gBAAgB;AAAA,MACnB,0BAA0B,oBAAI,IAAI;AAAA,MAClC,kCAAkC,oBAAI,IAAI;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,GACE,WACA,UAGA;AACA,QAAI,aAAa,SAAS,GAAG;AAC3B,WAAK,cAAc,SAAS,GAAG,IAAI,QAAQ;AAE3C,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,IACE,WACA,UAGA;AACA,QAAI,aAAa,SAAS,GAAG;AAC3B,WAAK,cAAc,SAAS,GAAG,OAAO,QAAQ;AAE9C,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,SACE,WACA,SACA;AACA,QAAI,aAAa,SAAS,GAAG;AAC3B,WAAK,cAAc,SAAS,GAAG,QAAQ,CAAC,YAAY,QAAQ,OAAO,CAAC;AAAA,IACtE;AAAA,EACF;AAAA,EAEA,WAAkB,UAAwB;AAExC,QAAI,CAAC,cAAa,UAAU;AAC1B,oBAAa,WAAW,IAAI,cAAa;AAAA,IAC3C;AAEA,WAAO,cAAa;AAAA,EACtB;AAAA,EAEA,IAAW,UAAwB;AACjC,WAAO,cAAa;AAAA,EACtB;AACF;","names":[]}