{
  "version": 3,
  "sources": ["../../../src/managers/NotificationsFeedManager/NotificationsFeedManager.ts"],
  "sourcesContent": ["import isEqual from 'lodash.isequal';\nimport { UITagsEnum } from 'constants/UITags.enum';\nimport { TransactionsHistoryController } from 'controllers/TransactionsHistoryController';\nimport { ITransactionListItem, MvxNotificationsFeed } from 'lib/sdkDappUi';\nimport { clearCompletedTransactions } from 'store/actions/transactions/transactionsActions';\nimport { TransactionsSliceType } from 'store/slices/transactions/transactionsSlice.types';\nimport { getStore } from 'store/store';\nimport { TransactionServerStatusesEnum } from 'types/enums.types';\nimport { TransactionBatchStatusesEnum } from 'types/enums.types';\nimport { NotificationsFeedEventsEnum } from './types';\nimport { SidePanelBaseManager } from '../internal/SidePanelBaseManager/SidePanelBaseManager';\nimport { ToastManager } from '../ToastManager';\nimport { createToastsFromTransactions } from '../ToastManager/helpers/createToastsFromTransactions';\nimport { ITransactionToast } from '../ToastManager/types';\n\ninterface INotificationsFeedManagerData {\n  pendingTransactions: ITransactionToast[];\n  historicTransactions: ITransactionListItem[];\n}\n\nconst NOTIFICATIONS_FEED_STORE_SUBSCRIBE = 'NOTIFICATIONS_FEED_STORE_SUBSCRIBE';\n\nexport class NotificationsFeedManager extends SidePanelBaseManager<\n  MvxNotificationsFeed,\n  INotificationsFeedManagerData,\n  NotificationsFeedEventsEnum | typeof NOTIFICATIONS_FEED_STORE_SUBSCRIBE\n> {\n  private static instance: NotificationsFeedManager;\n  private readonly store: ReturnType<typeof getStore>;\n\n  protected initialData: INotificationsFeedManagerData = {\n    pendingTransactions: [],\n    historicTransactions: []\n  };\n\n  public static getInstance(): NotificationsFeedManager {\n    if (!NotificationsFeedManager.instance) {\n      NotificationsFeedManager.instance = new NotificationsFeedManager();\n    }\n    return NotificationsFeedManager.instance;\n  }\n\n  constructor(store?: ReturnType<typeof getStore>) {\n    super({\n      uiDataUpdateEvent: NotificationsFeedEventsEnum.OPEN,\n      uiTag: UITagsEnum.NOTIFICATIONS_FEED\n    });\n    this.store = store || getStore();\n    this.data = { ...this.initialData };\n  }\n\n  public isNotificationsFeedOpen(): boolean {\n    return this.isOpen;\n  }\n\n  /**\n   * Open the notifications feed and toggle off the toast manager.\n   */\n  public async openNotificationsFeed(): Promise<void> {\n    const toastManager = ToastManager.getInstance();\n    toastManager.hideToasts();\n    await this.openUI();\n    await this.updateDataAndNotifications();\n\n    const storeToastsUnsubscribe = this.store.subscribe(\n      async (\n        { toasts, transactions },\n        { toasts: prevToasts, transactions: prevTransactions }\n      ) => {\n        if (\n          !isEqual(prevToasts.transactionToasts, toasts.transactionToasts) ||\n          !isEqual(prevTransactions, transactions)\n        ) {\n          await this.updateDataAndNotifications();\n        }\n      }\n    );\n    this.unsubscribeFunctions.set(NOTIFICATIONS_FEED_STORE_SUBSCRIBE, [\n      storeToastsUnsubscribe\n    ]);\n\n    this.eventBus?.publish(NotificationsFeedEventsEnum.OPEN);\n    await this.updateDataAndNotifications();\n  }\n\n  /**\n   * Close the notifications feed and toggle on the toast manager.\n   */\n  protected async handleCloseUI() {\n    const toastManager = ToastManager.getInstance();\n    this.closeUI();\n    await toastManager.showToasts();\n  }\n\n  protected async setupEventListeners() {\n    if (!this.eventBus) {\n      return;\n    }\n\n    this.subscribeToEventBus(\n      NotificationsFeedEventsEnum.CLOSE,\n      this.handleCloseUI.bind(this)\n    );\n\n    this.subscribeToEventBus(\n      NotificationsFeedEventsEnum.CLEAR,\n      this.handleClearNotificationsFeedHistory.bind(this)\n    );\n  }\n\n  protected async updateDataAndNotifications() {\n    const { transactions } = this.store.getState();\n\n    const { pendingTransactionToasts } = await createToastsFromTransactions();\n\n    this.data.pendingTransactions = pendingTransactionToasts;\n\n    const transactionsSessions = Object.keys(transactions).reduce(\n      (acc, key) => {\n        const isPendingStatus = [\n          TransactionBatchStatusesEnum.sent,\n          `${TransactionServerStatusesEnum.pending}`\n        ].includes(String(transactions[key].status));\n\n        if (!isPendingStatus) {\n          acc[key] = transactions[key];\n        }\n        return acc;\n      },\n      {} as TransactionsSliceType\n    );\n\n    this.data.historicTransactions =\n      await TransactionsHistoryController.getTransactionsHistory({\n        transactionsSessions\n      });\n\n    await this.updateNotificationsFeed();\n  }\n\n  private handleClearNotificationsFeedHistory() {\n    clearCompletedTransactions();\n    this.resetData();\n    this.updateNotificationsFeed();\n  }\n\n  private async updateNotificationsFeed() {\n    if (!this.eventBus) {\n      return;\n    }\n\n    this.eventBus.publish(\n      NotificationsFeedEventsEnum.PENDING_TRANSACTIONS_UPDATE,\n      this.data.pendingTransactions\n    );\n\n    this.eventBus.publish(\n      NotificationsFeedEventsEnum.TRANSACTIONS_HISTORY_UPDATE,\n      this.data.historicTransactions\n    );\n  }\n}\n"],
  "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,8BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAoB,6BACpBC,EAA2B,iCAC3BC,EAA8C,qDAE9CC,EAA2C,0DAE3CC,EAAyB,uBACzBC,EAA8C,6BAC9CA,EAA6C,6BAC7CC,EAA4C,mBAC5CC,EAAqC,iEACrCC,EAA6B,2BAC7BC,EAA6C,gEAQ7C,MAAMC,EAAqC,qCAEpC,MAAMZ,UAAiC,sBAI5C,CAgBA,YAAYa,EAAqC,CAC/C,MAAM,CACJ,kBAAmB,8BAA4B,KAC/C,MAAO,aAAW,kBACpB,CAAC,EAhBH,KAAU,YAA6C,CACrD,oBAAqB,CAAC,EACtB,qBAAsB,CAAC,CACzB,EAcE,KAAK,MAAQA,MAAS,YAAS,EAC/B,KAAK,KAAO,CAAE,GAAG,KAAK,WAAY,CACpC,CAdA,OAAc,aAAwC,CACpD,OAAKb,EAAyB,WAC5BA,EAAyB,SAAW,IAAIA,GAEnCA,EAAyB,QAClC,CAWO,yBAAmC,CACxC,OAAO,KAAK,MACd,CAKA,MAAa,uBAAuC,CAC7B,eAAa,YAAY,EACjC,WAAW,EACxB,MAAM,KAAK,OAAO,EAClB,MAAM,KAAK,2BAA2B,EAEtC,MAAMc,EAAyB,KAAK,MAAM,UACxC,MACE,CAAE,OAAAC,EAAQ,aAAAC,CAAa,EACvB,CAAE,OAAQC,EAAY,aAAcC,CAAiB,IAClD,EAED,IAAC,EAAAC,SAAQF,EAAW,kBAAmBF,EAAO,iBAAiB,GAC/D,IAAC,EAAAI,SAAQD,EAAkBF,CAAY,IAEvC,MAAM,KAAK,2BAA2B,CAE1C,CACF,EACA,KAAK,qBAAqB,IAAIJ,EAAoC,CAChEE,CACF,CAAC,EAED,KAAK,UAAU,QAAQ,8BAA4B,IAAI,EACvD,MAAM,KAAK,2BAA2B,CACxC,CAKA,MAAgB,eAAgB,CAC9B,MAAMM,EAAe,eAAa,YAAY,EAC9C,KAAK,QAAQ,EACb,MAAMA,EAAa,WAAW,CAChC,CAEA,MAAgB,qBAAsB,CAC/B,KAAK,WAIV,KAAK,oBACH,8BAA4B,MAC5B,KAAK,cAAc,KAAK,IAAI,CAC9B,EAEA,KAAK,oBACH,8BAA4B,MAC5B,KAAK,oCAAoC,KAAK,IAAI,CACpD,EACF,CAEA,MAAgB,4BAA6B,CAC3C,KAAM,CAAE,aAAAJ,CAAa,EAAI,KAAK,MAAM,SAAS,EAEvC,CAAE,yBAAAK,CAAyB,EAAI,QAAM,gCAA6B,EAExE,KAAK,KAAK,oBAAsBA,EAEhC,MAAMC,EAAuB,OAAO,KAAKN,CAAY,EAAE,OACrD,CAACO,EAAKC,KACoB,CACtB,+BAA6B,KAC7B,GAAG,gCAA8B,OAAO,EAC1C,EAAE,SAAS,OAAOR,EAAaQ,CAAG,EAAE,MAAM,CAAC,IAGzCD,EAAIC,CAAG,EAAIR,EAAaQ,CAAG,GAEtBD,GAET,CAAC,CACH,EAEA,KAAK,KAAK,qBACR,MAAM,gCAA8B,uBAAuB,CACzD,qBAAAD,CACF,CAAC,EAEH,MAAM,KAAK,wBAAwB,CACrC,CAEQ,qCAAsC,IAC5C,8BAA2B,EAC3B,KAAK,UAAU,EACf,KAAK,wBAAwB,CAC/B,CAEA,MAAc,yBAA0B,CACjC,KAAK,WAIV,KAAK,SAAS,QACZ,8BAA4B,4BAC5B,KAAK,KAAK,mBACZ,EAEA,KAAK,SAAS,QACZ,8BAA4B,4BAC5B,KAAK,KAAK,oBACZ,EACF,CACF",
  "names": ["NotificationsFeedManager_exports", "__export", "NotificationsFeedManager", "__toCommonJS", "import_lodash", "import_UITags", "import_TransactionsHistoryController", "import_transactionsActions", "import_store", "import_enums", "import_types", "import_SidePanelBaseManager", "import_ToastManager", "import_createToastsFromTransactions", "NOTIFICATIONS_FEED_STORE_SUBSCRIBE", "store", "storeToastsUnsubscribe", "toasts", "transactions", "prevToasts", "prevTransactions", "isEqual", "toastManager", "pendingTransactionToasts", "transactionsSessions", "acc", "key"]
}
