{"version":3,"file":"chunk-e33wm1e0.js","sources":["packages/vanilla/lib/shared/cashier/cashier.client-config.ts","packages/vanilla/lib/shared/cashier/cashier-iframe.models.ts","packages/vanilla/lib/shared/cashier/cashier-iframe.component.ts","packages/vanilla/lib/shared/cashier/cashier-iframe.html"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { ClientConfigProductName, LazyClientConfig, LazyClientConfigBase, LazyClientConfigService } from '@frontend/vanilla/core';\n\n/**\n * @stable\n */\n@LazyClientConfig({ key: 'vnCashier', product: ClientConfigProductName.SF })\n@Injectable({\n providedIn: 'root',\n deps: [LazyClientConfigService],\n useFactory: cashierConfigFactory,\n})\nexport class CashierConfig extends LazyClientConfigBase {\n depositUrlTemplate: string;\n withdrawUrlTemplate: string;\n transactionHistoryUrlTemplate: string;\n urlTemplate: string;\n manageMyCardsUrlTemplate: string;\n paymentPreferencesUrlTemplate: string;\n host: string;\n singleSignOnIntegrationType: string = 'query' || 'cookie';\n trackerIds: { [origin: string]: string };\n quickDepositAllowedOrigins: { [origin: string]: boolean };\n quickDepositUrlTemplate: string;\n isQuickDepositEnabled: boolean;\n}\n\nexport function cashierConfigFactory(service: LazyClientConfigService) {\n return service.get(CashierConfig);\n}\n","/**\n * @stable\n */\nexport enum CashierIframeAction {\n Chat = 'CHAT',\n Close = 'CLOSE',\n DepositSuccess = 'DEPOSITSUCCESSQD',\n FetchLocation = 'FETCHLOCATION',\n Open = 'OPEN',\n Resize = 'RESIZE',\n UpdateBalance = 'UPDATEBALANCE',\n}\n\n/**\n * @stable\n */\nexport enum CashierIframeType {\n PaymentPreferences = 'paymentpreferences',\n QuickDeposit = 'quickdeposit',\n}\n\n/**\n * @stable\n * @param {target}: quickDeposit by default\n */\nexport interface CashierIframeEvent {\n action?: string;\n target?: string;\n\n [key: string]: any;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n OnChanges,\n OnInit,\n Output,\n ViewChild,\n input,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport {\n CashierService,\n DeviceService,\n ElementRepositoryService,\n EventsService,\n MediaQueryService,\n NativeAppService,\n NativeEventType,\n NavigationService,\n VanillaElements,\n VanillaEventNames,\n WindowRef,\n} from '@frontend/vanilla/core';\nimport { BalancePropertiesService } from '@frontend/vanilla/features/balance-properties';\nimport { IFrameComponent } from '@frontend/vanilla/shared/browser';\nimport { firstValueFrom } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { CashierIframeAction, CashierIframeEvent } from './cashier-iframe.models';\nimport { CashierConfig } from './cashier.client-config';\n\n@Component({\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, IFrameComponent],\n selector: 'vn-cashier-iframe',\n templateUrl: 'cashier-iframe.html',\n})\nexport class CashierIframeComponent implements OnInit, AfterViewInit, OnChanges {\n @ViewChild(IFrameComponent) iframe: IFrameComponent;\n @ViewChild('wrapper') wrapper: ElementRef;\n\n url = input('');\n /** Indicates cashier page. Possible values: deposit */\n readonly page = input('');\n readonly iframeClass = input('');\n readonly cssClass = input('');\n\n @Output() onLoaded = new EventEmitter();\n @Output() onClosed = new EventEmitter();\n @Output() onResized = new EventEmitter();\n\n readonly host = signal('');\n\n constructor(\n public deviceService: DeviceService,\n private config: CashierConfig,\n private navigation: NavigationService,\n private balancePropertiesService: BalancePropertiesService,\n private cashierService: CashierService,\n private mediaQueryService: MediaQueryService,\n private navigationService: NavigationService,\n private eventsService: EventsService,\n private nativeAppService: NativeAppService,\n private windowRef: WindowRef,\n private elementRepositoryService: ElementRepositoryService,\n private changeDetectorRef: ChangeDetectorRef,\n private destroyRef: DestroyRef,\n ) {}\n\n // Note: ngOnChanges runs before ngOnInit\n ngOnChanges() {\n if (!this.url() && this.host()) {\n this.setUrl();\n }\n }\n\n async ngOnInit() {\n await Promise.all([firstValueFrom(this.config.whenReady), firstValueFrom(this.cashierService.whenReady)]);\n this.host.set(this.config.host);\n this.changeDetectorRef.detectChanges();\n\n if (!this.url()) {\n this.setUrl();\n }\n }\n\n ngAfterViewInit() {\n this.iframe.events\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n map((uri: any) => decodeURIComponent(uri)),\n )\n .subscribe((data: string) => {\n const message: CashierIframeEvent = data.split('&').reduce((seed: Record, cur: string) => {\n const param = cur.trim().split('=');\n\n if (param[0] && param[1]) {\n seed[param[0]] = param[1];\n }\n\n return seed;\n }, {});\n\n switch (message.action?.toUpperCase()) {\n case CashierIframeAction.Close:\n if (this.onClosed.observers.length) {\n this.onClosed.next(message);\n break;\n }\n // for now, until known where to redirect\n this.navigation.goToLastKnownProduct();\n break;\n case CashierIframeAction.Open:\n this.onLoaded.next();\n if (this.onResized.observers.length) {\n this.onResized.next(message);\n } else {\n this.resize(message);\n this.windowRef.nativeWindow.scrollTo(0, 0);\n }\n break;\n case CashierIframeAction.Resize:\n if (this.onResized.observers.length) {\n this.onResized.next(message);\n } else {\n this.resize(message);\n this.windowRef.nativeWindow.scrollTo(0, 0);\n }\n break;\n case CashierIframeAction.UpdateBalance:\n this.balancePropertiesService.refresh();\n break;\n case CashierIframeAction.Chat:\n this.onClosed.next(message);\n const url = this.navigationService.location.clone();\n url.search.set('cashierId', message['Web_site_URL']);\n url.search.set('chat', 'open');\n this.navigationService.goTo(url);\n break;\n case CashierIframeAction.DepositSuccess:\n this.eventsService.raise({\n eventName: VanillaEventNames.DepositSuccessQD,\n data: { currency: message['currency'], value: message['amount'] },\n });\n this.onClosed.next(message);\n break;\n case CashierIframeAction.FetchLocation:\n this.nativeAppService.sendToNative({\n eventName: NativeEventType.TRIGGER_GEO_LOCATION,\n parameters: message,\n });\n break;\n }\n });\n }\n\n private setUrl() {\n const pathTemplate = (this.config as any)[`${this.page()}UrlTemplate`];\n this.url = this.cashierService.generateCashierUrl({ pathTemplate });\n }\n\n private resize(message: CashierIframeEvent) {\n // Resize targeted by URL iframe\n const isValidTarget = this.wrapper.nativeElement.dataset['url']?.toLowerCase().indexOf(message.target?.toLowerCase() || '') !== -1;\n\n if (!isValidTarget) {\n return;\n }\n\n const isNotMobile = this.mediaQueryService.isActive('gt-xs');\n const parsedWidth = isNotMobile && message['width'].length ? `${parseInt(message['width'], 10)}px` : null;\n const parsedHeight = message['height'].length ? `${parseInt(message['height'], 10)}px` : null;\n\n if (parsedWidth != null) {\n this.wrapper.nativeElement.style.width = parsedWidth;\n }\n\n if (parsedHeight != null) {\n this.wrapper.nativeElement.style.height = parsedHeight;\n }\n\n const mainSlot = this.elementRepositoryService.get(VanillaElements.MAIN_SLOT);\n\n if (mainSlot) {\n this.wrapper.nativeElement.getBoundingClientRect().height > mainSlot.getBoundingClientRect().height\n ? mainSlot.classList.add('overflow-visible')\n : mainSlot.classList.remove('overflow-visible');\n }\n }\n}\n","
\n \n
\n"],"names":["CashierConfig","_a","LazyClientConfigBase","constructor","singleSignOnIntegrationType","t","factory","r","cashierConfigFactory","ɵɵinject","LazyClientConfigService","__decorate","LazyClientConfig","key","product","ClientConfigProductName","SF","service","get","CashierIframeAction","CashierIframeType","CashierIframeComponent","deviceService","config","navigation","balancePropertiesService","cashierService","mediaQueryService","navigationService","eventsService","nativeAppService","windowRef","elementRepositoryService","changeDetectorRef","destroyRef","url","input","page","iframeClass","cssClass","onLoaded","EventEmitter","onClosed","onResized","host","signal","ngOnChanges","setUrl","ngOnInit","__async","Promise","all","firstValueFrom","whenReady","set","detectChanges","ngAfterViewInit","iframe","events","pipe","takeUntilDestroyed","map","uri","decodeURIComponent","subscribe","data","message","split","reduce","seed","cur","param","trim","action","toUpperCase","Close","observers","length","next","goToLastKnownProduct","Open","resize","nativeWindow","scrollTo","Resize","UpdateBalance","refresh","Chat","location","clone","search","goTo","DepositSuccess","raise","eventName","VanillaEventNames","DepositSuccessQD","currency","value","FetchLocation","sendToNative","NativeEventType","TRIGGER_GEO_LOCATION","parameters","pathTemplate","generateCashierUrl","wrapper","nativeElement","dataset","toLowerCase","indexOf","target","parsedWidth","isActive","parseInt","parsedHeight","style","width","height","mainSlot","VanillaElements","MAIN_SLOT","getBoundingClientRect","classList","add","remove","ɵɵdirectiveInject","DeviceService","NavigationService","BalancePropertiesService","CashierService","MediaQueryService","EventsService","NativeAppService","WindowRef","ElementRepositoryService","ChangeDetectorRef","DestroyRef","selectors","viewQuery","rf","ctx","IFrameComponent","S","y","w","v","F","M","ɵɵelementStart","ɵɵtext","ɵɵelement","ɵɵelementEnd","ɵɵproperty","ɵɵattribute","ɵɵadvance","ɵɵclassMap","CommonModule","NgClass","encapsulation","changeDetection","_CashierIframeComponent"],"mappings":"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"}