{"version":3,"file":"chunk-m1sq44k4.js","sources":["packages/vanilla/lib/features/bonus-balance/src/bonus-balance.service.ts","packages/vanilla/lib/features/bonus-balance/src/bonus-balance-bootstrap.service.ts","packages/vanilla/lib/features/bonus-balance/src/bonus-balance-dsl-values-provider.ts","packages/vanilla/lib/features/bonus-balance/src/bonus-balance.feature.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { SharedFeaturesApiService } from '@frontend/vanilla/core';\nimport { BalancePropertiesService } from '@frontend/vanilla/features/balance-properties';\nimport { flatten, values } from 'lodash-es';\nimport { Observable, ReplaySubject, Subscription } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { Bonus, BonusBalance, BonusBalanceResponse } from './bonus-balance.models';\n\n/**\n * @whatItDoes Provides functionality to get bonus balance\n *\n * @stable\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class BonusBalanceService {\n private bonusBalanceEvents = new ReplaySubject(1);\n private bonusBalanceV4Events = new ReplaySubject(1);\n private bonusBalanceRefreshInProgress: boolean;\n private refreshSubscription: Subscription;\n\n constructor(\n private apiService: SharedFeaturesApiService,\n private balancePropertiesService: BalancePropertiesService,\n ) {}\n\n get bonusBalance(): Observable {\n return this.bonusBalanceEvents;\n }\n\n get bonusBalanceV4(): Observable {\n return this.bonusBalanceV4Events;\n }\n\n refresh() {\n this.refreshBonusBalance();\n }\n\n private refreshBonusBalance() {\n if (!this.bonusBalanceRefreshInProgress) {\n this.bonusBalanceRefreshInProgress = true;\n\n this.apiService\n .get('balance/bonus')\n .pipe(\n map((r: BonusBalanceResponse) => {\n this.bonusBalanceV4Events.next(r);\n return this.calculateProductAmounts(flatten(values(r).map((v) => v.bonuses)));\n }),\n )\n .subscribe((bonusBalance) => {\n this.bonusBalanceEvents.next(bonusBalance);\n this.bonusBalanceRefreshInProgress = false;\n this.startRefreshOnBalanceRefresh();\n });\n }\n }\n\n private startRefreshOnBalanceRefresh() {\n if (!this.refreshSubscription) {\n this.refreshSubscription = this.balancePropertiesService.balanceProperties\n .pipe(\n filter(Boolean),\n filter((b) => b.propagateRefresh),\n )\n .subscribe(() => this.refresh());\n }\n }\n\n private calculateProductAmounts(bonuses: Bonus[]): BonusBalance {\n return bonuses.reduce(\n (result, bonus) => {\n let postfix: string;\n\n if (bonus.isBonusActive) {\n postfix = '';\n } else {\n postfix = '_inactive';\n }\n\n bonus.applicableProducts.forEach((p) => (result[p + postfix] = (result[p + postfix] || 0) + bonus.bonusAmount));\n\n return result;\n },\n {},\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { OnFeatureInit } from '@frontend/vanilla/core';\n\nimport { BonusBalanceService } from './bonus-balance.service';\n\n@Injectable()\nexport class BonusBalanceBootstrapService implements OnFeatureInit {\n constructor(private bonusBalanceService: BonusBalanceService) {}\n\n onFeatureInit() {\n this.bonusBalanceService.refresh();\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { DSL_NOT_READY, DslCacheService, DslRecordable, DslRecorderService, DslValuesProvider, UserService } from '@frontend/vanilla/core';\n\nimport { BonusBalance, BonusBalanceResponse } from './bonus-balance.models';\nimport { BonusBalanceService } from './bonus-balance.service';\n\n@Injectable()\nexport class BonusBalanceDslValuesProvider implements DslValuesProvider {\n private bonusBalance: BonusBalance | null = null;\n private bonusBalanceV4: BonusBalanceResponse | null = null;\n private refreshed: boolean = false;\n\n constructor(\n private dslRecorderService: DslRecorderService,\n private bonusBalanceService: BonusBalanceService,\n private user: UserService,\n dslCacheService: DslCacheService,\n ) {\n this.bonusBalanceService.bonusBalance.subscribe((b) => {\n this.bonusBalance = b;\n this.refreshed = true;\n\n dslCacheService.invalidate(['bonusBalance.Get']);\n });\n\n this.bonusBalanceService.bonusBalanceV4.subscribe((b) => {\n this.bonusBalanceV4 = b;\n this.refreshed = true;\n\n dslCacheService.invalidate(['bonusBalance.GetBonusByType']);\n });\n }\n\n getProviders(): { [provider: string]: DslRecordable } {\n return {\n BonusBalance: this.dslRecorderService\n .createRecordable('bonusBalance')\n .createFunction({\n name: 'Get',\n get: (product: string) => this.getCurrentValue(() => (this.bonusBalance ? this.bonusBalance[product] || 0 : DSL_NOT_READY)),\n deps: ['bonusBalance.Get', 'user.isAuthenticated'],\n })\n .createFunction({\n name: 'GetBonusByType',\n get: (product: string) => this.getCurrentValue(() => (this.bonusBalanceV4 ? this.getIndividualBonus(product) : DSL_NOT_READY)),\n deps: ['bonusBalance.GetBonusByType', 'user.isAuthenticated'],\n })\n .createProperty({\n name: 'ThirdParty',\n get: () => (this.user.isAuthenticated ? 0 : -1),\n deps: ['bonusBalance.ThirdParty', 'user.isAuthenticated'],\n }),\n };\n }\n\n private getCurrentValue(get: () => number): number {\n if (!this.user.isAuthenticated) {\n return -1;\n }\n\n if (!this.refreshed) {\n this.refreshed = true;\n this.bonusBalanceService.refresh();\n }\n\n return get();\n }\n\n private getIndividualBonus(bonusType: string): number {\n let balance: number = 0;\n\n if (this.bonusBalanceV4) {\n this.bonusBalanceV4[bonusType.toLocaleLowerCase()]?.bonuses.forEach((bonus) => {\n if (bonus.isBonusActive) balance += bonus.bonusAmount;\n });\n }\n\n return balance;\n }\n}\n","import { registerLazyDslOnModuleInit, runOnFeatureInit } from '@frontend/vanilla/core';\n\nimport { BonusBalanceBootstrapService } from './bonus-balance-bootstrap.service';\nimport { BonusBalanceDslValuesProvider } from './bonus-balance-dsl-values-provider';\n\nexport function provide() {\n return [registerLazyDslOnModuleInit(BonusBalanceDslValuesProvider), runOnFeatureInit(BonusBalanceBootstrapService)];\n}\n"],"names":["BonusBalanceService","constructor","apiService","balancePropertiesService","bonusBalanceEvents","ReplaySubject","bonusBalanceV4Events","bonusBalance","bonusBalanceV4","refresh","refreshBonusBalance","bonusBalanceRefreshInProgress","get","pipe","map","r","next","calculateProductAmounts","flatten","values","v","bonuses","subscribe","startRefreshOnBalanceRefresh","refreshSubscription","balanceProperties","filter","Boolean","b","propagateRefresh","reduce","result","bonus","postfix","isBonusActive","applicableProducts","forEach","p","bonusAmount","ɵɵinject","SharedFeaturesApiService","BalancePropertiesService","factory","ɵfac","providedIn","_BonusBalanceService","BonusBalanceBootstrapService","bonusBalanceService","onFeatureInit","c","_BonusBalanceBootstrapService","BonusBalanceDslValuesProvider","dslRecorderService","user","dslCacheService","refreshed","invalidate","getProviders","BonusBalance","createRecordable","createFunction","name","product","getCurrentValue","DSL_NOT_READY","deps","getIndividualBonus","createProperty","isAuthenticated","bonusType","balance","toLocaleLowerCase","DslRecorderService","UserService","DslCacheService","_BonusBalanceDslValuesProvider","provide","registerLazyDslOnModuleInit","runOnFeatureInit"],"mappings":"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"}