@almatar/smart-booking-dashboard 0.0.2-alpha.2 → 0.0.2-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/esm2022/lib/components/almatar-aside/aside.component.mjs +6 -7
  2. package/esm2022/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.mjs +17 -12
  3. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.mjs +9 -3
  4. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-result-overlay/almatar-hotel-auto-cancellation-result-overlay.component.mjs +210 -0
  5. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.mjs +3 -3
  6. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.mjs +4 -4
  7. package/esm2022/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.mjs +11 -4
  8. package/esm2022/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.mjs +23 -21
  9. package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.mjs +42 -34
  10. package/esm2022/lib/components/reissue-dialog/reissue-dialog.component.mjs +135 -0
  11. package/esm2022/lib/components/reissue-dialog/reissue-upgrade.store.mjs +305 -0
  12. package/esm2022/lib/components/reissue-dialog/reissue.store.mjs +349 -0
  13. package/esm2022/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.mjs +45 -0
  14. package/esm2022/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.mjs +140 -0
  15. package/esm2022/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.mjs +16 -0
  16. package/esm2022/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.mjs +104 -0
  17. package/esm2022/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.mjs +44 -0
  18. package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.mjs +193 -0
  19. package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.mjs +88 -0
  20. package/esm2022/lib/components/workflow-actions/workflow-actions.component.mjs +5 -3
  21. package/esm2022/lib/config/dashboard.config.mjs +3 -1
  22. package/esm2022/lib/models/reissue.types.mjs +2 -0
  23. package/esm2022/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.mjs +9 -3
  24. package/esm2022/lib/services/reissue.service.mjs +142 -0
  25. package/esm2022/lib/services/toast.service.mjs +15 -7
  26. package/esm2022/lib/utils/reissue-format.mjs +64 -0
  27. package/esm2022/lib/utils/reissue-url.builder.mjs +314 -0
  28. package/esm2022/public-api.mjs +3 -1
  29. package/fesm2022/almatar-smart-booking-dashboard.mjs +2211 -102
  30. package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -1
  31. package/lib/components/action-dialog/action-dialog.component.d.ts +1 -1
  32. package/lib/components/almatar-aside/aside.component.d.ts +1 -2
  33. package/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.d.ts +3 -0
  34. package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.d.ts +1 -0
  35. package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-result-overlay/almatar-hotel-auto-cancellation-result-overlay.component.d.ts +46 -0
  36. package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +2 -1
  37. package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.d.ts +6 -0
  38. package/lib/components/reissue-dialog/reissue-dialog.component.d.ts +34 -0
  39. package/lib/components/reissue-dialog/reissue-upgrade.store.d.ts +96 -0
  40. package/lib/components/reissue-dialog/reissue.store.d.ts +124 -0
  41. package/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.d.ts +11 -0
  42. package/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.d.ts +16 -0
  43. package/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.d.ts +8 -0
  44. package/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.d.ts +21 -0
  45. package/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.d.ts +17 -0
  46. package/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.d.ts +28 -0
  47. package/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.d.ts +13 -0
  48. package/lib/components/result-panel/result-panel.component.d.ts +1 -1
  49. package/lib/components/workflow-actions/workflow-actions.component.d.ts +3 -1
  50. package/lib/config/dashboard.config.d.ts +29 -0
  51. package/lib/models/reissue.types.d.ts +147 -0
  52. package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +4 -1
  53. package/lib/services/reissue.service.d.ts +45 -0
  54. package/lib/services/toast.service.d.ts +14 -1
  55. package/lib/utils/reissue-format.d.ts +28 -0
  56. package/lib/utils/reissue-url.builder.d.ts +24 -0
  57. package/package.json +9 -7
  58. package/public-api.d.ts +5 -1
@@ -1 +1 @@
1
- {"version":3,"file":"almatar-smart-booking-dashboard.mjs","sources":["../../../projects/smart-booking-dashboard/src/lib/config/dashboard.config.ts","../../../projects/smart-booking-dashboard/src/lib/services/booking.service.ts","../../../projects/smart-booking-dashboard/src/lib/services/toast.service.ts","../../../projects/smart-booking-dashboard/src/lib/config/flight-actions.config.ts","../../../projects/smart-booking-dashboard/src/lib/config/hotel-actions.config.ts","../../../projects/smart-booking-dashboard/src/lib/models/booking.types.ts","../../../projects/smart-booking-dashboard/src/lib/components/booking-input/booking-input.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/booking-input/booking-input.component.html","../../../projects/smart-booking-dashboard/src/lib/components/workflow-actions/workflow-actions.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/workflow-actions/workflow-actions.component.html","../../../projects/smart-booking-dashboard/src/lib/components/action-card/action-card.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/action-card/action-card.component.html","../../../projects/smart-booking-dashboard/src/lib/components/action-grid/action-grid.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/action-grid/action-grid.component.html","../../../projects/smart-booking-dashboard/src/lib/components/cancel-dialog/cancel-dialog.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/cancel-dialog/cancel-dialog.component.html","../../../projects/smart-booking-dashboard/src/lib/shared/environments/environment.ts","../../../projects/smart-booking-dashboard/src/lib/shared/enums/brand-enums.enum.ts","../../../projects/smart-booking-dashboard/src/lib/shared/services/shared.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/almatar-aside/aside-back-button.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/almatar-aside/aside.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/almatar-aside/aside.component.html","../../../projects/smart-booking-dashboard/src/lib/components/shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component.ts","../../../projects/smart-booking-dashboard/src/lib/shared/modules/loader/loader.module.ts","../../../projects/smart-booking-dashboard/src/lib/components/shared/services/hotel-manage-booking/hotel-manage-booking.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-step.enum.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.ts","../../../projects/smart-booking-dashboard/src/lib/shared/services/api.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-endpoints.enum.ts","../../../projects/smart-booking-dashboard/src/lib/shared/services/webengage-tracking.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.html","../../../projects/smart-booking-dashboard/src/lib/shared/services/translation.service.ts","../../../projects/smart-booking-dashboard/src/lib/shared/modules/almatar-icon/almatar-icon.module.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.html","../../../projects/smart-booking-dashboard/src/lib/shared/store/selectors/currency.selectors.ts","../../../projects/smart-booking-dashboard/src/lib/shared/pipes/exchange.pipe.ts","../../../projects/smart-booking-dashboard/src/lib/shared/components/currency-code-icon/currency-code-icon.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/shared/models/cancel-hotel-booking.model.ts","../../../projects/smart-booking-dashboard/src/lib/components/shared/enums/hotel-manage-booking-aside-tab.enum.ts","../../../projects/smart-booking-dashboard/src/lib/components/shared/components/confirm-modal/confirm-modal.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.html","../../../projects/smart-booking-dashboard/src/lib/components/shared/interfaces/i-flight-refund-details.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.html","../../../projects/smart-booking-dashboard/src/lib/components/flight-itinerary-card/flight-itinerary-card.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/flight-itinerary-card/flight-itinerary-card.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.html","../../../projects/smart-booking-dashboard/src/lib/components/data-search/data-search.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/data-search/data-search.component.html","../../../projects/smart-booking-dashboard/src/lib/config/labels.ar.ts","../../../projects/smart-booking-dashboard/src/lib/components/result-panel/result-panel.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/result-panel/result-panel.component.html","../../../projects/smart-booking-dashboard/src/lib/components/action-dialog/action-dialog.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/action-dialog/action-dialog.component.html","../../../projects/smart-booking-dashboard/src/lib/components/add-note-dialog/add-note-dialog.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/add-note-dialog/add-note-dialog.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.html","../../../projects/smart-booking-dashboard/src/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.ts","../../../projects/smart-booking-dashboard/src/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.html","../../../projects/smart-booking-dashboard/src/lib/smart-booking-dashboard.routes.ts","../../../projects/smart-booking-dashboard/src/lib/smart-booking-dashboard.module.ts","../../../projects/smart-booking-dashboard/src/public-api.ts","../../../projects/smart-booking-dashboard/src/almatar-smart-booking-dashboard.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\n\n/**\n * Host-app configuration for the Smart Booking Dashboard.\n * Every field is optional; the defaults match the Almatar backoffice.\n */\nexport interface SbdConfig {\n /** Base URL of the backend API. Default: '/api' */\n apiBase: string;\n /** Value of the `platform` header sent with FCR requests. Default: 'BO' */\n platform: string;\n}\n\nexport const SBD_DEFAULT_CONFIG: SbdConfig = {\n apiBase: '/api',\n platform: 'BO',\n};\n\nexport const SBD_CONFIG = new InjectionToken<SbdConfig>('SBD_CONFIG', {\n providedIn: 'root',\n factory: () => SBD_DEFAULT_CONFIG,\n});\n\n/** Optional: call in the host app's providers to override the defaults. */\nexport function provideSmartBookingDashboard(config: Partial<SbdConfig> = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: SBD_CONFIG, useValue: { ...SBD_DEFAULT_CONFIG, ...config } },\n ]);\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { SBD_CONFIG } from '../config/dashboard.config';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ApiResponse = any;\n\n@Injectable({ providedIn: 'root' })\nexport class SbdBookingService {\n private http = inject(HttpClient);\n private config = inject(SBD_CONFIG);\n private base = this.config.apiBase;\n\n getBooking(\n id: string,\n product: 'flight' | 'hotel',\n fields: string | string[] = 'all',\n language: 'en' | 'ar' = 'en',\n ): Observable<{ data: ApiResponse; elapsedMs: number }> {\n const start = performance.now();\n const fieldsParam = Array.isArray(fields) ? fields.join(',') : fields;\n const productParam = product === 'flight' ? 'flights' : 'hotels';\n const headers: Record<string, string> = { platform: this.config.platform, 'Accept-Language': language };\n\n const params: Record<string, string> = { product: productParam, fields: fieldsParam };\n if (product === 'flight') {\n params['addAirlineStamp'] = 'true';\n }\n\n return this.http\n .get(`${this.base}/v1/fcr/booking/information/${id}`, {\n params,\n headers,\n })\n .pipe(map(data => ({ data, elapsedMs: performance.now() - start })));\n }\n\n resendTicket(id: string): Observable<ApiResponse> {\n return this.http.post(`${this.base}/v1/fcr/booking/${id}/resend`, {});\n }\n\n getRefundDetails(id: string, product: 'flight' | 'hotel' = 'flight', language: 'en' | 'ar' = 'en'): Observable<ApiResponse> {\n const productParam = product === 'flight' ? 'flights' : 'hotels';\n const headers: Record<string, string> = { platform: this.config.platform };\n if (language === 'ar') headers['Accept-Language'] = 'ar';\n return this.http.post(`${this.base}/v1/fcr/refund/details`, {\n bookingId: id,\n product: productParam,\n }, { headers });\n }\n\n addNote(\n id: string,\n product: 'flight' | 'hotel' = 'flight',\n message: string,\n action: 'GENERAL' | 'FEEDBACK' | 'REMARK' = 'GENERAL',\n ): Observable<ApiResponse> {\n const productParam = product === 'flight' ? 'flight' : 'hotel';\n return this.http.put(\n `${this.base}/v1/back-office/booking/${productParam}/addNote/${id}`,\n { notes: [{ message, action }] },\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n confirmCancel(\n id: string,\n product: 'flight' | 'hotel' = 'flight',\n legInfo?: string[],\n selectedSource?: string,\n preferredRefundMethod?: 'wallet' | 'originalPaymentMethod' | 'split',\n splitAmounts?: { walletRefundAmount: number; totalCardRefundAmount: number },\n ): Observable<ApiResponse> {\n const productParam = product === 'flight' ? 'flights' : 'hotels';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const body: any = { bookingId: String(id), product: productParam };\n if (legInfo && legInfo.length > 0) body.legInfo = legInfo;\n if (selectedSource) body.selectedSource = selectedSource;\n if (preferredRefundMethod) body.preferredRefundMethod = preferredRefundMethod;\n if (preferredRefundMethod === 'split' && splitAmounts) {\n body.walletRefundAmount = splitAmounts.walletRefundAmount;\n body.totalCardRefundAmount = splitAmounts.totalCardRefundAmount;\n }\n return this.http.post(`${this.base}/v1/fcr/refund`, body, { headers: { platform: this.config.platform } });\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ToastrService } from 'ngx-toastr';\n\n@Injectable({ providedIn: 'root' })\nexport class SbdToastService {\n private toastr = inject(ToastrService);\n\n success(msg: string): void { this.toastr.success(msg); }\n error(msg: string): void { this.toastr.error(msg); }\n info(msg: string): void { this.toastr.info(msg); }\n warning(msg: string): void { this.toastr.warning(msg); }\n}\n","import { ActionConfig } from '../models/action.types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst na = (v: any): string =>\n v != null && v !== '' ? String(v) : 'Not available';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst bi = (data: any) => data?.data?.booking_info;\n\nconst fmtMins = (mins: number): string =>\n mins != null ? `${Math.floor(mins / 60)}h ${mins % 60}m` : 'Not available';\n\nconst fmtDate = (dt: string): string => {\n if (!dt) return 'Not available';\n try {\n return new Date(dt).toLocaleString('en-GB', {\n day: '2-digit', month: 'short', year: 'numeric',\n hour: '2-digit', minute: '2-digit',\n });\n } catch { return dt; }\n};\n\nconst dirIcon = (dir: string) => (dir === 'Return' || dir === 'return') ? '←' : '→';\n\n/**\n * Format a baggage allowance object (CabinBaggage / CheckedBaggage / UnderSeatBaggage).\n * Negative values (-1) indicate the allowance is not applicable.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst fmtBag = (bag: any): string => {\n if (!bag) return 'Not included';\n const { Pieces, Weight, Unit, Dimension, Remark } = bag;\n // Negative Pieces = not applicable (e.g. Pieces: -1, Weight: -1)\n if (Pieces != null && Pieces < 0 && (Weight == null || Weight < 0)) return 'Not included';\n // Zero across the board = not included\n if (Pieces === 0 && (Weight === 0 || Weight == null)) return 'Not included';\n const parts: string[] = [];\n if (Pieces != null && Pieces > 0) parts.push(`${Pieces} pc${Pieces > 1 ? 's' : ''}`);\n if (Weight != null && Weight > 0) parts.push(`${Weight} ${Unit ?? 'KG'}`);\n if (Dimension) parts.push(Dimension);\n if (Remark) parts.push(Remark);\n return parts.length > 0 ? parts.join(' · ') : 'Not available';\n};\n\n/**\n * Resolve pnr_info to a flat array regardless of shape.\n * New BE format: [{pnr, LegDirectionality}, ...]\n * Legacy format: {pnr: '...'} or null\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst resolvePnrList = (pnrRaw: any): any[] => {\n if (Array.isArray(pnrRaw)) return pnrRaw;\n if (pnrRaw?.pnr) return [{ pnr: pnrRaw.pnr, LegDirectionality: 'Departure' }];\n return [];\n};\n\nexport const FLIGHT_ACTIONS: ActionConfig[] = [\n // ── Booking Overview ──────────────────────────────────────────────────────\n {\n key: 'booking_info',\n type: 'flight',\n label: 'Booking Overview',\n subtitle: 'Route · Class · Fare',\n icon: 'pi pi-file',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legs: any[] = d?.leg_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const airlines: any[] = d?.airline_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const passengers: any[] = d?.passenger_info?.passengers ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const baggage: any = d?.baggage;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dur: any = d?.duration;\n const ps = d?.payment_status;\n const cp = d?.cancellation_policy;\n const pnrList = resolvePnrList(d?.pnr_info);\n const pnrDep = pnrList.find((p: any) => p.LegDirectionality === 'Departure')?.pnr ?? pnrList[0]?.pnr;\n const pnrRet = pnrList.find((p: any) => p.LegDirectionality === 'Return')?.pnr;\n const origin = legs[0]?.LegDepartureAirportCode;\n const dest = legs[legs.length - 1]?.LegArrivalAirportCode;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sections: any[] = [];\n\n // ── Booking Reference ────────────────────────────────────────────────\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const refRows: any[] = [];\n if (pnrList.length > 1) {\n pnrList.forEach((p: any) => refRows.push({ label: `PNR (${p.LegDirectionality})`, value: na(p.pnr) }));\n } else {\n refRows.push({ label: 'PNR', value: na(pnrDep) });\n }\n refRows.push(\n { label: 'Booking ID', value: na(cp?.bookingId) },\n { label: 'Supplier ref', value: na(cp?.supplierBookingId) },\n { label: 'Supplier', value: na(cp?.supplierName ?? legs[0]?.supplierName) },\n );\n sections.push({ title: 'Booking Reference', rows: refRows });\n\n // ── Per-leg sections ─────────────────────────────────────────────────\n legs.forEach((l, i) => {\n const dir = l.LegDirectionality ?? '';\n const from = l.LegDepartureAirportCode;\n const to = l.LegArrivalAirportCode;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const segs: any[] = airlines[i]?.Segments ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durSegs: any[] = dur?.legs?.[i]?.Segments ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const stops: any[] = l.Stops ?? [];\n const legDurMins = durSegs.reduce((sum: number, s: any) => sum + (s.SegmentElapsedTimeMinutes ?? 0), 0);\n const flightNos = segs.map((s: any) => `${s.AirlineCode}${s.FlightNumber}`).filter(Boolean).join(', ');\n\n sections.push({\n title: `${dirIcon(dir)} ${dir || `Leg ${i + 1}`} · ${from} → ${to}`,\n rows: [\n { label: 'Departure', value: fmtDate(l.LegDepartureDateTime) },\n { label: 'Arrival', value: fmtDate(l.LegArrivalDateTime) },\n { label: 'Duration', value: legDurMins > 0 ? fmtMins(legDurMins) : na(null) },\n { label: 'Airline(s)', value: na(l.LegAirlinesNames?.join(', ')) },\n { label: 'Flight no.', value: na(flightNos) },\n { label: 'Cabin', value: na(l.LegCabins?.[0]?.Name) },\n { label: 'Fare brand', value: na(l.fareBrand?.name) },\n {\n label: 'Stops',\n value: stops.length === 0\n ? 'Non-stop'\n : stops.map((s: any) => `${s.StopAirportCity ?? s.StopAirport} (${fmtMins(s.LayoverDuration)})`).join(', '),\n },\n ],\n });\n });\n\n // ── Passengers ───────────────────────────────────────────────────────\n const paxTypeLabel: Record<string, string> = { ADT: 'Adult', CNN: 'Child', INF: 'Infant' };\n passengers.forEach((p, i) => {\n const fullName = [p?.name?.prefix, p?.name?.givenName, p?.name?.surName].filter(Boolean).join(' ');\n const phone = p?.phone ?? (p?.contactNumber?.phoneNumber\n ? `${p.contactNumber.countryCode ?? ''}${p.contactNumber.phoneNumber}` : null);\n sections.push({\n title: `Passenger ${i + 1} · ${fullName || na(null)}`,\n rows: [\n { label: 'Type', value: na(paxTypeLabel[p?.type] ?? p?.type) },\n { label: 'Gender', value: na(p?.gender) },\n { label: 'Date of birth', value: na(p?.dateOfBirth) },\n { label: 'Passport', value: na(p?.identity?.number) },\n { label: 'Nationality', value: na(p?.identity?.nationality) },\n { label: 'Passport exp.', value: na(p?.identity?.expirationDate) },\n { label: 'Issue country', value: na(p?.identity?.issueCountry) },\n { label: 'Doc type', value: na(p?.identity?.type) },\n { label: 'Email', value: na(p?.email) },\n { label: 'Phone', value: na(phone) },\n ],\n });\n });\n\n // ── Payment ──────────────────────────────────────────────────────────\n if (ps) {\n const statusName = ps?.status?.name ?? ps?.status?.key;\n const paid = ps?.amountInPaidCurrency != null && ps?.paidCurrency\n ? `${ps.amountInPaidCurrency} ${ps.paidCurrency}` : null;\n sections.push({\n title: 'Payment',\n rows: [\n { label: 'Status', value: na(statusName) },\n { label: 'Amount', value: ps?.amount != null ? `${ps.amount} ${na(ps.currency)}` : 'Not available' },\n { label: 'Paid amount', value: na(paid) },\n { label: 'Payment method', value: na(ps?.method) },\n { label: 'Date', value: fmtDate(ps?.date) },\n ],\n });\n }\n\n // ── Baggage per route (full detail) ──────────────────────────────────\n const baggageInfo: any[] = baggage?.baggage_info ?? [];\n baggageInfo.forEach((entry: any) => {\n const route = Object.keys(entry)[0];\n if (!route) return;\n const paxTypes = entry[route] ?? {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rows: any[] = [];\n Object.entries(paxTypes).forEach(([paxType, pd]: [string, any]) => {\n const label = paxType === 'ADT' ? 'Adult' : paxType === 'CNN' ? 'Child' : paxType === 'INF' ? 'Infant' : paxType;\n const cabin = pd.CabinBaggage;\n const checked = pd.CheckedBaggage;\n const underSeat = pd.UnderSeatBaggage;\n rows.push(\n { label: `${label} · Cabin`, value: fmtBag(cabin) },\n { label: `${label} · Checked`, value: fmtBag(checked) },\n );\n if (underSeat) rows.push({ label: `${label} · Under Seat`, value: fmtBag(underSeat) });\n });\n sections.push({ title: `Baggage · ${route}`, rows });\n });\n\n // ── Terminal Info summary ────────────────────────────────────────────\n const terminalData: any[] = d?.terminal ?? [];\n terminalData.forEach((tl: any, li: number) => {\n const legMeta = legs[li];\n const legLabel = legMeta\n ? `Terminal · ${legMeta.LegDepartureAirportCode} → ${legMeta.LegArrivalAirportCode}`\n : `Terminal · Leg ${li + 1}`;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const termRows: any[] = [];\n (tl.Segments ?? []).forEach((s: any, si: number) => {\n const airlineSeg = airlines[li]?.Segments?.[si];\n const flightNo = airlineSeg ? `${airlineSeg.AirlineCode}${airlineSeg.FlightNumber}` : `Seg ${si + 1}`;\n const depTerm = s.DepartureAirportTerminalID ? `T${s.DepartureAirportTerminalID}` : '—';\n const arrTerm = s.ArrivalAirportTerminalID ? `T${s.ArrivalAirportTerminalID}` : '—';\n termRows.push({\n label: flightNo,\n value: `${na(s.DepartureAirportCode)} ${depTerm} → ${na(s.ArrivalAirportCode)} ${arrTerm}`,\n });\n });\n if (termRows.length > 0) sections.push({ title: legLabel, rows: termRows });\n });\n\n // ── Cancellation Policy summary ──────────────────────────────────────\n const cpLegs: any[] = cp?.legs ?? [];\n cpLegs.forEach((leg: any) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cpRows: any[] = [];\n (leg.passengerPenalties ?? []).forEach((pp: any) => {\n const typeLabel = pp.type === 'ADT' ? 'Adult' : pp.type === 'CNN' ? 'Child' : 'Infant';\n const bDep = pp.penalties?.beforeDeparture;\n const refund = bDep?.refund;\n const exchange = bDep?.exchange;\n const refundStr = refund?.isActionable ? `Refund: ${refund.fee} ${refund.currency}` : 'No refund';\n const exchangeStr = exchange?.isActionable ? `Exchange: ${exchange.fee} ${exchange.currency}` : 'No exchange';\n cpRows.push({ label: typeLabel, value: `${refundStr} · ${exchangeStr}` });\n });\n if (cpRows.length > 0) {\n sections.push({\n title: `Cancellation and Change Policy · ${leg.direction} (${leg.from} → ${leg.to})`,\n rows: cpRows,\n });\n }\n });\n\n return {\n title: origin ? `${origin} → ${dest}` : 'Flight Booking',\n subtitle: pnrDep\n ? `PNR: ${pnrDep}${pnrRet ? ' / ' + pnrRet : ''} · ${legs.length} leg${legs.length !== 1 ? 's' : ''} · ${passengers.length} pax`\n : `${legs.length} leg${legs.length !== 1 ? 's' : ''} · ${passengers.length} pax`,\n sections,\n };\n },\n },\n\n // ── Terminal Info ─────────────────────────────────────────────────────────\n {\n key: 'terminal',\n type: 'flight',\n label: 'Terminal Info',\n subtitle: 'Gate · Check-in',\n icon: 'pi pi-send',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const terminalLegs: any[] = d?.terminal ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legInfos: any[] = d?.leg_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const airlines: any[] = d?.airline_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sections: any[] = [];\n\n terminalLegs.forEach((tl, li) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const segs: any[] = tl.Segments ?? [];\n const legMeta = legInfos[li];\n const legLabel = legMeta\n ? `${dirIcon(legMeta.LegDirectionality)} ${legMeta.LegDepartureAirportCode} → ${legMeta.LegArrivalAirportCode}`\n : `Leg ${li + 1}`;\n // Leg-level times as fallback when segment-level times are absent\n const legDepTime = legMeta?.LegDepartureDateTime;\n const legArrTime = legMeta?.LegArrivalDateTime;\n\n segs.forEach((s, si) => {\n const airlineSeg = airlines[li]?.Segments?.[si];\n // Resolve flight number: terminal seg → airline_info seg\n const flightNo = s.FlightNumber\n ? `${s.AirlineCode ?? ''}${s.FlightNumber}`\n : airlineSeg ? `${airlineSeg.AirlineCode}${airlineSeg.FlightNumber}` : null;\n // Resolve times: terminal seg → airline_info seg → leg-level fallback\n const depTime = s.DepartureDateTime\n ?? airlineSeg?.DepartureDateTime\n ?? (si === 0 ? legDepTime : null);\n const arrTime = s.ArrivalDateTime\n ?? airlineSeg?.ArrivalDateTime\n ?? (si === segs.length - 1 ? legArrTime : null);\n\n sections.push({\n title: `${legLabel} · ${flightNo ?? `Seg ${si + 1}`}`,\n rows: [\n { label: 'Departure airport', value: s.DepartureAirportName ? `${s.DepartureAirportName} (${s.DepartureAirportCode})` : na(s.DepartureAirportCode) },\n { label: 'Dep. terminal', value: na(s.DepartureAirportTerminalID) },\n { label: 'Arrival airport', value: s.ArrivalAirportName ? `${s.ArrivalAirportName} (${s.ArrivalAirportCode})` : na(s.ArrivalAirportCode) },\n { label: 'Arr. terminal', value: na(s.ArrivalAirportTerminalID) },\n { label: 'Flight', value: na(flightNo) },\n { label: 'Departure time', value: fmtDate(depTime) },\n { label: 'Arrival time', value: fmtDate(arrTime) },\n ],\n });\n });\n });\n\n const totalSegs = sections.length;\n return {\n title: 'Terminal Details',\n subtitle: `${totalSegs} segment${totalSegs !== 1 ? 's' : ''}`,\n sections: sections.length\n ? sections\n : [{ title: 'Info', rows: [{ label: 'Status', value: 'No terminal data available' }] }],\n };\n },\n },\n\n // ── Payment Status ────────────────────────────────────────────────────────\n {\n key: 'payment_status',\n type: 'flight',\n hidden: true,\n label: 'Payment Status',\n subtitle: 'Charges · Receipt',\n icon: 'pi pi-credit-card',\n apiField: 'booking_info',\n formatter: (data) => {\n const ps = bi(data)?.payment_status;\n const statusName = ps?.status?.name ?? ps?.status?.key;\n const paid = ps?.amountInPaidCurrency != null && ps?.paidCurrency\n ? `${ps.amountInPaidCurrency} ${ps.paidCurrency}` : null;\n const isSuccess = ps?.status?.key === 'SUCCESS';\n return {\n title: 'Payment Details',\n subtitle: na(statusName),\n sections: [\n {\n title: 'Transaction',\n rows: [\n { label: 'Status', value: na(statusName), valueClass: isSuccess ? 'positive' : 'neutral' },\n { label: 'Amount', value: ps?.amount != null ? `${ps.amount} ${na(ps.currency)}` : 'Not available' },\n { label: 'Paid amount', value: na(paid) },\n { label: 'Payment method', value: na(ps?.method) },\n { label: 'Transaction ref', value: na(ps?.transactionRef ?? ps?.reference) },\n { label: 'Date', value: fmtDate(ps?.date) },\n { label: 'Currency', value: na(ps?.currency) },\n ],\n },\n ],\n };\n },\n },\n\n // ── Passenger Info ────────────────────────────────────────────────────────\n {\n key: 'passenger_info',\n type: 'flight',\n hidden: true,\n label: 'Passenger Info',\n subtitle: 'Names · Docs',\n icon: 'pi pi-users',\n apiField: 'booking_info',\n formatter: (data) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const passengers: any[] = bi(data)?.passenger_info?.passengers ?? [];\n const typeLabel: Record<string, string> = { ADT: 'Adult', CNN: 'Child', INF: 'Infant' };\n return {\n title: 'Passenger Details',\n subtitle: `${passengers.length} traveller${passengers.length !== 1 ? 's' : ''}`,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sections: passengers.map((p: any, i: number) => {\n const fullName = [p?.name?.prefix, p?.name?.givenName, p?.name?.surName].filter(Boolean).join(' ');\n const phone = p?.phone ?? (p?.contactNumber?.phoneNumber\n ? `${p.contactNumber.countryCode ?? ''}${p.contactNumber.phoneNumber}` : null);\n return {\n title: `Passenger ${i + 1} · ${fullName || na(null)}`,\n rows: [\n { label: 'Type', value: na(typeLabel[p?.type] ?? p?.type) },\n { label: 'Gender', value: na(p?.gender) },\n { label: 'Date of birth', value: na(p?.dateOfBirth) },\n { label: 'Passport', value: na(p?.identity?.number) },\n { label: 'Nationality', value: na(p?.identity?.nationality) },\n { label: 'Passport exp.', value: na(p?.identity?.expirationDate) },\n { label: 'Issue country', value: na(p?.identity?.issueCountry) },\n { label: 'Doc type', value: na(p?.identity?.type) },\n { label: 'Email', value: na(p?.email) },\n { label: 'Phone', value: na(phone) },\n ],\n };\n }),\n };\n },\n },\n\n // ── Passenger Count ───────────────────────────────────────────────────────\n {\n key: 'passenger_count',\n type: 'flight',\n hidden: true,\n label: 'Passenger Count',\n subtitle: 'Adults · Children · Infants',\n icon: 'pi pi-users',\n apiField: 'booking_info',\n formatter: (data) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const passengers: any[] = bi(data)?.passenger_info?.passengers ?? [];\n const adults = passengers.filter(p => p?.type === 'ADT');\n const children = passengers.filter(p => p?.type === 'CNN');\n const infants = passengers.filter(p => p?.type === 'INF');\n return {\n title: 'Traveller Breakdown',\n subtitle: `${passengers.length} total`,\n sections: [\n {\n title: 'Summary',\n rows: [\n { label: 'Total', value: String(passengers.length) },\n { label: 'Adults (ADT)', value: String(adults.length) },\n { label: 'Children (CNN)', value: String(children.length) },\n { label: 'Infants (INF)', value: String(infants.length) },\n ],\n },\n ...adults.map((p, i) => ({\n title: `Adult ${i + 1} · ${[p?.name?.prefix, p?.name?.givenName, p?.name?.surName].filter(Boolean).join(' ') || 'N/A'}`,\n rows: [\n { label: 'Passport', value: na(p?.identity?.number) },\n { label: 'Email', value: na(p?.email) },\n ],\n })),\n ...children.map((p, i) => ({\n title: `Child ${i + 1} · ${[p?.name?.prefix, p?.name?.givenName, p?.name?.surName].filter(Boolean).join(' ') || 'N/A'}`,\n rows: [\n { label: 'Passport', value: na(p?.identity?.number) },\n { label: 'DOB', value: na(p?.dateOfBirth) },\n ],\n })),\n ...infants.map((p, i) => ({\n title: `Infant ${i + 1} · ${[p?.name?.prefix, p?.name?.givenName, p?.name?.surName].filter(Boolean).join(' ') || 'N/A'}`,\n rows: [\n { label: 'DOB', value: na(p?.dateOfBirth) },\n ],\n })),\n ],\n };\n },\n },\n\n // ── Airline Info ──────────────────────────────────────────────────────────\n {\n key: 'airline_info',\n type: 'flight',\n hidden: true,\n label: 'Airline Info',\n subtitle: 'Carrier · Flight no.',\n icon: 'pi pi-send',\n apiField: 'booking_info',\n formatter: (data) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const airlines: any[] = bi(data)?.airline_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legInfos: any[] = bi(data)?.leg_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durLegs: any[] = bi(data)?.duration?.legs ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sections: any[] = [];\n\n airlines.forEach((a, li) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const segs: any[] = a.Segments ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durSegs: any[] = durLegs[li]?.Segments ?? [];\n const legMeta = legInfos[li];\n const legLabel = legMeta\n ? `${dirIcon(legMeta.LegDirectionality)} ${legMeta.LegDepartureAirportCode} → ${legMeta.LegArrivalAirportCode}`\n : `Leg ${li + 1}`;\n // Leg-level times as fallback for first/last segment\n const legDepTime = legMeta?.LegDepartureDateTime;\n const legArrTime = legMeta?.LegArrivalDateTime;\n\n segs.forEach((s, si) => {\n // Use segment-level times if available, fall back to leg times\n const depTime = s.DepartureDateTime ?? (si === 0 ? legDepTime : null);\n const arrTime = s.ArrivalDateTime ?? (si === segs.length - 1 ? legArrTime : null);\n\n sections.push({\n title: `${legLabel} · ${s.AirlineCode}${s.FlightNumber} (Seg ${si + 1})`,\n rows: [\n { label: 'Airline', value: na(s.AirlineName) },\n { label: 'IATA code', value: na(s.AirlineCode) },\n { label: 'Flight no.', value: s.FlightNumber ? `${s.AirlineCode}${s.FlightNumber}` : 'Not available' },\n { label: 'Route', value: `${na(s.DepartureAirportCode)} → ${na(s.ArrivalAirportCode)}` },\n { label: 'Departure', value: fmtDate(depTime) },\n { label: 'Arrival', value: fmtDate(arrTime) },\n { label: 'Duration', value: durSegs[si]?.SegmentElapsedTimeMinutes ? fmtMins(durSegs[si].SegmentElapsedTimeMinutes) : 'Not available' },\n { label: 'Aircraft', value: na(s.AircraftType ?? s.Equipment) },\n { label: 'Operating code', value: na(s.OperatingAirlineCode) },\n ],\n });\n });\n });\n\n const totalSegs = sections.length;\n return {\n title: airlines[0]?.Segments?.[0]?.AirlineName ?? 'Airline Info',\n subtitle: `${totalSegs} segment${totalSegs !== 1 ? 's' : ''}`,\n sections,\n };\n },\n },\n\n // ── Leg Info ──────────────────────────────────────────────────────────────\n {\n key: 'leg_info',\n type: 'flight',\n hidden: true,\n label: 'Leg Info',\n subtitle: 'Route · Stops · Cabin',\n icon: 'pi pi-map-marker',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legs: any[] = d?.leg_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const airlines: any[] = d?.airline_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durLegs: any[] = d?.duration?.legs ?? [];\n\n return {\n title: 'Flight Legs',\n subtitle: `${legs.length} leg${legs.length !== 1 ? 's' : ''}`,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sections: legs.map((l: any, i: number) => {\n const dir = l.LegDirectionality ?? '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const stops: any[] = l.Stops ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const segs: any[] = airlines[i]?.Segments ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durSegs: any[] = durLegs[i]?.Segments ?? [];\n const legDurMins = durSegs.reduce((sum: number, s: any) => sum + (s.SegmentElapsedTimeMinutes ?? 0), 0);\n const flightNos = segs.map((s: any) => `${s.AirlineCode}${s.FlightNumber}`).filter(Boolean).join(', ');\n\n return {\n title: `${dirIcon(dir)} ${dir || `Leg ${i + 1}`} · ${l.LegDepartureAirportCode} → ${l.LegArrivalAirportCode}`,\n rows: [\n { label: 'Direction', value: na(dir) },\n { label: 'Departure', value: fmtDate(l.LegDepartureDateTime) },\n { label: 'Arrival', value: fmtDate(l.LegArrivalDateTime) },\n { label: 'Duration', value: legDurMins > 0 ? fmtMins(legDurMins) : na(null) },\n { label: 'Airline(s)', value: na(l.LegAirlinesNames?.join(', ')) },\n { label: 'Flight no.', value: na(flightNos) },\n { label: 'Cabin', value: na(l.LegCabins?.[0]?.Name) },\n { label: 'Fare brand', value: na(l.fareBrand?.name) },\n { label: 'Supplier', value: na(l.supplierName) },\n {\n label: 'Stops',\n value: stops.length === 0\n ? 'Non-stop'\n : stops.map((s: any) =>\n `${s.StopAirportCity ?? s.StopAirport} (${na(s.StopAirport)}) – ${fmtMins(s.LayoverDuration)} layover`\n ).join(' · '),\n },\n ],\n };\n }),\n };\n },\n },\n\n // ── PNR Info ──────────────────────────────────────────────────────────────\n {\n key: 'pnr_info',\n type: 'flight',\n label: 'PNR Info',\n subtitle: 'PNR · Booking ref',\n icon: 'pi pi-tag',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n const pnrList = resolvePnrList(d?.pnr_info);\n const pnrDep = pnrList.find((p: any) => p.LegDirectionality === 'Departure')?.pnr ?? pnrList[0]?.pnr;\n const pnrRet = pnrList.find((p: any) => p.LegDirectionality === 'Return')?.pnr;\n const cp = d?.cancellation_policy;\n const isCrossSeller = pnrList.length > 1\n || cp?.supplierName?.toLowerCase().includes('cross')\n || false;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const pnrRows: any[] = [];\n if (pnrList.length > 1) {\n pnrList.forEach((p: any) => {\n pnrRows.push({ label: `PNR (${p.LegDirectionality})`, value: na(p.pnr) });\n });\n } else {\n pnrRows.push({ label: 'PNR', value: na(pnrDep) });\n }\n pnrRows.push(\n { label: 'Booking ID', value: na(cp?.bookingId) },\n { label: 'Supplier ref', value: na(cp?.supplierBookingId) },\n { label: 'Supplier', value: na(cp?.supplierName) },\n { label: 'Cross-seller', value: isCrossSeller ? 'Yes' : 'No' },\n );\n\n return {\n title: pnrDep ? `PNR: ${pnrDep}${pnrRet ? ' / ' + pnrRet : ''}` : 'PNR Info',\n subtitle: isCrossSeller ? 'Cross-seller booking — two PNRs' : 'Global Distribution System reference',\n sections: [{ title: 'References', rows: pnrRows }],\n };\n },\n },\n\n // ── Baggage Policy ────────────────────────────────────────────────────────\n {\n key: 'baggage',\n type: 'flight',\n label: 'Baggage Policy',\n subtitle: 'Cabin · Checked · Add-ons',\n icon: 'pi pi-briefcase',\n apiField: 'booking_info',\n formatter: (data) => {\n const baggage = bi(data)?.baggage;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const infoArray: any[] = baggage?.baggage_info ?? [];\n const addOns = baggage?.add_on_baggage ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sections: any[] = [];\n const routeNames: string[] = [];\n\n infoArray.forEach((entry: any) => {\n const route = Object.keys(entry)[0];\n if (!route) return;\n routeNames.push(route);\n const paxTypes = entry[route] ?? {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rows: any[] = [];\n\n Object.entries(paxTypes).forEach(([paxType, pd]: [string, any]) => {\n const label = paxType === 'ADT' ? 'Adult' : paxType === 'CNN' ? 'Child' : paxType === 'INF' ? 'Infant' : paxType;\n const cabin = pd.CabinBaggage;\n const checked = pd.CheckedBaggage;\n const underSeat = pd.UnderSeatBaggage;\n\n rows.push(\n { label: `${label} · Cabin`, value: fmtBag(cabin) },\n { label: `${label} · Checked`, value: fmtBag(checked) },\n );\n if (underSeat) {\n rows.push({ label: `${label} · Under Seat`, value: fmtBag(underSeat) });\n }\n });\n\n sections.push({ title: `Baggage · ${route}`, rows });\n });\n\n if (addOns.length > 0) {\n sections.push({\n title: 'Add-on Baggage',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rows: addOns.map((a: any, i: number) => ({\n label: `Add-on ${i + 1}`,\n value: [a.weight, a.unit, a.route].filter(Boolean).join(' · ') || 'See booking details',\n })),\n });\n }\n\n return {\n title: 'Baggage Allowance',\n subtitle: routeNames.length > 0 ? routeNames.join(' · ') : 'All baggage types',\n sections: sections.length > 0\n ? sections\n : [{ title: 'Info', rows: [{ label: 'Status', value: 'No baggage data available' }] }],\n };\n },\n },\n\n // ── Flight Timings ────────────────────────────────────────────────────────\n {\n key: 'flight_timings',\n type: 'flight',\n hidden: true,\n label: 'Flight Timings',\n subtitle: 'Departure · Arrival',\n icon: 'pi pi-clock',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legs: any[] = d?.leg_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const airlines: any[] = d?.airline_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durLegs: any[] = d?.duration?.legs ?? [];\n\n return {\n title: 'Flight Timings',\n subtitle: legs.length > 0\n ? `${legs[0].LegDepartureAirportCode} → ${legs[legs.length - 1].LegArrivalAirportCode}`\n : 'All legs',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sections: legs.map((l: any, li: number) => {\n const dir = l.LegDirectionality ?? '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const segs: any[] = airlines[li]?.Segments ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durSegs: any[] = durLegs[li]?.Segments ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const stops: any[] = l.Stops ?? [];\n const legDurMins = durSegs.reduce((sum: number, s: any) => sum + (s.SegmentElapsedTimeMinutes ?? 0), 0);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rows: any[] = [\n { label: 'Departure', value: fmtDate(l.LegDepartureDateTime) },\n { label: 'Arrival', value: fmtDate(l.LegArrivalDateTime) },\n { label: 'Duration', value: legDurMins > 0 ? fmtMins(legDurMins) : na(null) },\n ];\n\n // Interleave segment rows with layover rows\n segs.forEach((s: any, si: number) => {\n const segDur = durSegs[si]?.SegmentElapsedTimeMinutes;\n rows.push({\n label: `Seg ${si + 1} · ${s.AirlineCode}${s.FlightNumber}`,\n value: `${na(s.DepartureAirportCode)} → ${na(s.ArrivalAirportCode)}${segDur ? ' · ' + fmtMins(segDur) : ''}`,\n });\n // Layover after this segment (if there is a stop at arrival airport)\n if (si < segs.length - 1) {\n const stop = stops.find((st: any) => st.StopAirport === s.ArrivalAirportCode);\n if (stop) {\n rows.push({ label: `Layover · ${stop.StopAirport}`, value: fmtMins(stop.LayoverDuration) });\n }\n }\n });\n\n return {\n title: `${dirIcon(dir)} ${dir || `Leg ${li + 1}`} · ${l.LegDepartureAirportCode} → ${l.LegArrivalAirportCode}`,\n rows,\n };\n }),\n };\n },\n },\n\n // ── Duration ──────────────────────────────────────────────────────────────\n {\n key: 'duration',\n type: 'flight',\n hidden: true,\n label: 'Duration',\n subtitle: 'Total flight time',\n icon: 'pi pi-refresh',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n const dur = d?.duration;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legs: any[] = d?.leg_info ?? [];\n const total = fmtMins(dur?.totalMinutes);\n\n return {\n title: total,\n subtitle: 'Total journey duration including layovers',\n sections: [\n {\n title: 'Total',\n rows: [{ label: 'Journey duration', value: total }],\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(dur?.legs ?? []).map((leg: any, li: number) => {\n const legMeta = legs[li];\n const dir = legMeta?.LegDirectionality ?? '';\n const from = legMeta?.LegDepartureAirportCode;\n const to = legMeta?.LegArrivalAirportCode;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rows: any[] = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (leg.Segments ?? []).forEach((s: any) => {\n rows.push({ label: `${s.DepartureAirportCode} → ${s.ArrivalAirportCode}`, value: fmtMins(s.SegmentElapsedTimeMinutes) });\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (leg.Stops ?? []).forEach((s: any) => {\n rows.push({ label: `Layover · ${s.StopAirport}`, value: fmtMins(s.LayoverDuration) });\n });\n return {\n title: `${dirIcon(dir)} ${dir || `Leg ${li + 1}`}${from && to ? ` · ${from} → ${to}` : ''}`,\n rows,\n };\n }),\n ],\n };\n },\n },\n\n // ── Cancellation Policy ───────────────────────────────────────────────────\n {\n key: 'cancellation_policy',\n type: 'flight',\n label: 'Cancellation Policy',\n subtitle: 'Refund · Fees · Legs',\n icon: 'pi pi-ban',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n const cp = d?.cancellation_policy;\n\n if (!cp) {\n return {\n title: 'Cancellation Policy',\n subtitle: 'No data available',\n sections: [{ title: 'Info', rows: [{ label: 'Status', value: 'No cancellation policy data available' }] }],\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sections: any[] = [];\n const pnrList = resolvePnrList(d?.pnr_info);\n const isCrossSeller = pnrList.length > 1 || cp?.supplierName?.toLowerCase().includes('cross');\n const legs: any[] = cp?.legs ?? [];\n\n sections.push({\n title: 'Booking Reference',\n rows: [\n { label: 'Booking ID', value: na(cp.bookingId) },\n { label: 'Supplier ref', value: na(cp.supplierBookingId) },\n { label: 'Supplier', value: na(cp.supplierName) },\n { label: 'Cross-seller', value: isCrossSeller ? 'Yes' : 'No' },\n ],\n });\n\n const fmtFee = (fee: number, currency: string): string =>\n fee != null ? `${fee} ${currency ?? 'SAR'}` : '0';\n\n legs.forEach((leg: any) => {\n const title = `Cancellation and Change Policy · ${leg.direction} (${leg.from} → ${leg.to})`;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rows: any[] = [];\n\n (leg.passengerPenalties ?? []).forEach((pp: any) => {\n const typeLabel = pp.type === 'ADT' ? 'Adult' : pp.type === 'CNN' ? 'Child' : 'Infant';\n const bDep = pp.penalties?.beforeDeparture;\n const aDep = pp.penalties?.afterDeparture;\n const bRefund = bDep?.refund;\n const bExchange = bDep?.exchange;\n const aRefund = aDep?.refund;\n const aExchange = aDep?.exchange;\n\n rows.push(\n {\n label: `${typeLabel} · Before dep.`,\n value: [\n bRefund?.isActionable ? `Refund: ${fmtFee(bRefund.fee, bRefund.currency)}` : 'No refund',\n bExchange?.isActionable ? `Exchange: ${fmtFee(bExchange.fee, bExchange.currency)}` : 'No exchange',\n ].join(' · '),\n valueClass: bRefund?.isActionable || bExchange?.isActionable ? 'neutral' : 'negative',\n },\n {\n label: `${typeLabel} · After dep.`,\n value: [\n aRefund?.isActionable ? `Refund: ${fmtFee(aRefund.fee, aRefund.currency)}` : 'No refund',\n aExchange?.isActionable ? `Exchange: ${fmtFee(aExchange.fee, aExchange.currency)}` : 'No exchange',\n ].join(' · '),\n valueClass: aRefund?.isActionable || aExchange?.isActionable ? 'neutral' : 'negative',\n },\n );\n });\n\n sections.push({ title, rows });\n });\n\n return {\n title: `${cp.supplierName ?? 'Cancellation'} Policy`,\n subtitle: isCrossSeller ? 'Cross-seller booking · contact supplier for refund' : `Booking ${cp.bookingId ?? ''}`,\n sections,\n callout: isCrossSeller\n ? { type: 'info', message: 'Cross-seller booking — refund is processed by the partner and may take additional time.' }\n : undefined,\n };\n },\n },\n\n // ── Flight Status ─────────────────────────────────────────────────────────\n {\n key: 'flight_status',\n type: 'flight',\n hidden: true,\n label: 'Flight Status',\n subtitle: 'Live · Delays',\n icon: 'pi pi-chart-bar',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legs: any[] = d?.leg_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const airlines: any[] = d?.airline_info ?? [];\n const origin = legs[0]?.LegDepartureAirportCode;\n const dest = legs[legs.length - 1]?.LegArrivalAirportCode;\n\n return {\n title: origin ? `${origin} → ${dest}` : 'Flight Status',\n subtitle: `${legs.length} leg${legs.length !== 1 ? 's' : ''} · Scheduled times from booking`,\n sections: legs.map((l, li) => {\n const dir = l.LegDirectionality ?? '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const segs: any[] = airlines[li]?.Segments ?? [];\n return {\n title: `${dirIcon(dir)} ${dir || `Leg ${li + 1}`} · ${l.LegDepartureAirportCode} → ${l.LegArrivalAirportCode}`,\n rows: [\n { label: 'Departure', value: fmtDate(l.LegDepartureDateTime) },\n { label: 'Arrival', value: fmtDate(l.LegArrivalDateTime) },\n { label: 'Airline(s)', value: na(l.LegAirlinesNames?.join(', ')) },\n { label: 'Cabin', value: na(l.LegCabins?.[0]?.Name) },\n { label: 'Fare brand', value: na(l.fareBrand?.name) },\n ...segs.map((s: any, si: number) => ({\n label: `Flight ${si + 1}`,\n value: `${s.AirlineCode}${s.FlightNumber} · ${s.DepartureAirportCode} → ${s.ArrivalAirportCode}`,\n })),\n ],\n };\n }),\n callout: { type: 'info', message: 'Live status not available — check the airline app or airport boards for real-time updates.' },\n };\n },\n },\n\n // ── Wi-Fi & Extras ────────────────────────────────────────────────────────\n {\n key: 'wifi',\n type: 'flight',\n hidden: true,\n label: 'Wi-Fi & Extras',\n subtitle: 'Onboard services',\n icon: 'pi pi-info-circle',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legs: any[] = d?.leg_info ?? [];\n const addOns = d?.baggage?.add_on_baggage ?? [];\n\n return {\n title: 'Onboard Extras',\n subtitle: `${legs.length} leg${legs.length !== 1 ? 's' : ''}`,\n sections: [\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...legs.map((l: any, li: number) => {\n const dir = l.LegDirectionality ?? '';\n return {\n title: `${dirIcon(dir)} ${dir || `Leg ${li + 1}`} · ${l.LegDepartureAirportCode} → ${l.LegArrivalAirportCode}`,\n rows: [\n { label: 'Cabin', value: na(l.LegCabins?.[0]?.Name) },\n { label: 'Fare brand', value: na(l.fareBrand?.name) },\n { label: 'Airline(s)', value: na(l.LegAirlinesNames?.join(', ')) },\n ],\n };\n }),\n ...(addOns.length > 0 ? [{\n title: 'Add-on Baggage',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rows: addOns.map((a: any, i: number) => ({\n label: `Add-on ${i + 1}`,\n value: [a.weight, a.unit, a.route].filter(Boolean).join(' · ') || 'See booking details',\n })),\n }] : []),\n ],\n callout: { type: 'info', message: 'Detailed onboard amenities depend on the operating airline and fare class.' },\n };\n },\n },\n];\n","import { ActionConfig } from '../models/action.types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst na = (v: any) => v ?? 'Not available';\n\nexport const HOTEL_ACTIONS: ActionConfig[] = [\n { key: 'booking_info', type: 'hotel', label: 'Booking Overview', subtitle: 'Summary · Status', icon: 'pi pi-file',\n apiField: 'booking_info',\n formatter: (data) => ({ title: `Booking ${na(data?.booking_info?.reference)}`, subtitle: `Created ${na(data?.booking_info?.created_at)}`,\n points: [{ label: 'Status', value: na(data?.booking_info?.status) }, { label: 'Total paid', value: na(data?.booking_info?.total) }, { label: 'Source', value: na(data?.booking_info?.source) }, { label: 'Currency', value: na(data?.booking_info?.currency) }] }) },\n { key: 'room_information', type: 'hotel', label: 'Room Information', subtitle: 'Type · Beds · View', icon: 'pi pi-home',\n apiField: 'room_information',\n formatter: (data) => ({ title: na(data?.room_information?.type), subtitle: na(data?.room_information?.description),\n points: [{ label: 'Room type', value: na(data?.room_information?.type) }, { label: 'Beds', value: na(data?.room_information?.beds) }, { label: 'View', value: na(data?.room_information?.view) }, { label: 'Floor', value: na(data?.room_information?.floor) }, { label: 'Size', value: na(data?.room_information?.size) }] }) },\n { key: 'packages', type: 'hotel', label: 'Room Packages', subtitle: 'Rooms · Board Basis · Price', icon: 'pi pi-box',\n apiField: 'packages',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n formatter: (data) => {\n const packages: any[] = data?.packages ?? data?.room_packages ?? [];\n const totalPackages = packages.length;\n const refundableCount = packages.filter((p: any) => p?.is_refundable || p?.isRefundable || p?.refundable).length;\n return {\n title: `${totalPackages} Package${totalPackages !== 1 ? 's' : ''}`,\n subtitle: `${refundableCount} refundable · ${totalPackages - refundableCount} non-refundable`,\n points: packages.length > 0 ? packages.flatMap((pkg: any, index: number) => [\n { label: `Package ${index + 1}`, value: na(pkg?.package_name || pkg?.packageName || pkg?.room_type) },\n { label: 'Board basis', value: na(pkg?.board_basis || pkg?.boardBasis || pkg?.board_type) },\n { label: 'Price', value: na(pkg?.room_amount || pkg?.roomAmount || pkg?.amount) },\n { label: 'Refundable', value: (pkg?.is_refundable || pkg?.isRefundable || pkg?.refundable) ? 'Yes' : 'No' },\n { label: 'Status', value: (pkg?.is_cancelled || pkg?.isCancelled || pkg?.cancelled) ? 'Cancelled' : 'Active' }\n ]) : [{ label: 'Packages', value: 'Not available' }]\n };\n }\n },\n { key: 'checkin_checkout', type: 'hotel', label: 'Check-in / Check-out', subtitle: 'Dates · Times', icon: 'pi pi-calendar',\n apiField: 'checkin_checkout',\n formatter: (data) => ({ title: `${na(data?.checkin_checkout?.checkin_date)} → ${na(data?.checkin_checkout?.checkout_date)}`, subtitle: 'Stay dates and times',\n points: [{ label: 'Check-in date', value: na(data?.checkin_checkout?.checkin_date) }, { label: 'Check-in time', value: na(data?.checkin_checkout?.checkin_time) }, { label: 'Check-out date', value: na(data?.checkin_checkout?.checkout_date) }, { label: 'Check-out time', value: na(data?.checkin_checkout?.checkout_time) }, { label: 'Nights', value: na(data?.checkin_checkout?.nights) }] }) },\n { key: 'hotel_information', type: 'hotel', label: 'Hotel Information', subtitle: 'Name · Stars · Contact', icon: 'pi pi-building',\n apiField: 'hotel_information',\n formatter: (data) => ({ title: na(data?.hotel_information?.name), subtitle: `${na(data?.hotel_information?.stars)}★ · ${na(data?.hotel_information?.city)}`,\n points: [{ label: 'Hotel', value: na(data?.hotel_information?.name) }, { label: 'Stars', value: na(data?.hotel_information?.stars) }, { label: 'Phone', value: na(data?.hotel_information?.phone) }, { label: 'Email', value: na(data?.hotel_information?.email) }, { label: 'Website', value: na(data?.hotel_information?.website) }] }) },\n { key: 'location_info', type: 'hotel', label: 'Location Info', subtitle: 'Address · Map', icon: 'pi pi-map-marker',\n apiField: 'location_info',\n formatter: (data) => ({ title: na(data?.location_info?.address), subtitle: na(data?.location_info?.city),\n points: [{ label: 'Address', value: na(data?.location_info?.address) }, { label: 'City', value: na(data?.location_info?.city) }, { label: 'Country', value: na(data?.location_info?.country) }, { label: 'Zip code', value: na(data?.location_info?.zip) }, { label: 'Landmark', value: na(data?.location_info?.landmark) }] }) },\n { key: 'hotel_amenities', type: 'hotel', label: 'Hotel Amenities', subtitle: 'Pool · Gym · Wi-Fi', icon: 'pi pi-star',\n apiField: 'hotel_amenities',\n formatter: (data) => { const amenities: string[] = data?.hotel_amenities?.list ?? []; return { title: 'Amenities', subtitle: `${amenities.length} amenities available`, points: amenities.length > 0 ? amenities.map((a) => ({ label: '✓', value: a })) : [{ label: 'Amenities', value: 'Not available' }] }; } },\n { key: 'nearby_places', type: 'hotel', label: 'Nearby Places', subtitle: 'Airport · Attractions', icon: 'pi pi-compass',\n apiField: 'nearby_places',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n formatter: (data) => { const places: any[] = data?.nearby_places?.places ?? []; return { title: 'Nearby Places', points: places.length > 0 ? places.flatMap((p: any) => [{ label: na(p?.type), value: `${na(p?.name)} (${na(p?.distance)})` }]) : [{ label: 'Places', value: 'Not available' }] }; } },\n { key: 'experiences', type: 'hotel', label: 'Experiences', subtitle: 'Tours · Activities', icon: 'pi pi-star-fill',\n apiField: 'experiences',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n formatter: (data) => { const items: any[] = data?.experiences?.list ?? []; return { title: 'Available Experiences', points: items.length > 0 ? items.map((e: any) => ({ label: na(e?.name), value: na(e?.price) })) : [{ label: 'Experiences', value: 'Not available' }] }; } },\n { key: 'payment_status', type: 'hotel', label: 'Payment Status', subtitle: 'Charges · Receipt', icon: 'pi pi-credit-card',\n apiField: 'payment_status',\n formatter: (data) => ({ title: 'Payment Details', subtitle: na(data?.payment_status?.method),\n points: [{ label: 'Status', value: na(data?.payment_status?.status) }, { label: 'Amount paid', value: na(data?.payment_status?.amount) }, { label: 'Currency', value: na(data?.payment_status?.currency) }, { label: 'Transaction', value: na(data?.payment_status?.transaction_id) }, { label: 'Date', value: na(data?.payment_status?.date) }] }) },\n { key: 'wallet', type: 'hotel', label: 'Wallet & Credits', subtitle: 'Balance · Cashback', icon: 'pi pi-wallet',\n apiField: 'wallet',\n formatter: (data) => ({ title: 'Wallet Summary',\n points: [{ label: 'Balance', value: na(data?.wallet?.balance) }, { label: 'Cashback', value: na(data?.wallet?.cashback) }, { label: 'Promo credit', value: na(data?.wallet?.promo_credit) }, { label: 'Last updated', value: na(data?.wallet?.updated_at) }] }) },\n { key: 'cancellation_policy', type: 'hotel', label: 'Cancellation Policy', subtitle: 'Fees · Deadline', icon: 'pi pi-ban',\n apiField: 'cancellation_policy',\n formatter: (data) => ({ title: 'Cancellation Rules', subtitle: data?.cancellation_policy?.refundable ? 'Refundable' : 'Non-refundable',\n points: [{ label: 'Refundable', value: data?.cancellation_policy?.refundable ? 'Yes' : 'No' }, { label: 'Cancel fee', value: na(data?.cancellation_policy?.fee) }, { label: 'Deadline', value: na(data?.cancellation_policy?.deadline) }, { label: 'Policy', value: na(data?.cancellation_policy?.description) }],\n callout: { type: 'warning', message: data?.cancellation_policy?.warning ?? 'Always verify cancellation terms with the hotel.' } }) },\n { key: 'breakfast', type: 'hotel', label: 'Meals & Breakfast', subtitle: 'Board basis', icon: 'pi pi-list',\n apiField: 'meals',\n formatter: (data) => ({ title: na(data?.meals?.board_basis), subtitle: 'Meal inclusions',\n points: [{ label: 'Board basis', value: na(data?.meals?.board_basis) }, { label: 'Breakfast', value: na(data?.meals?.breakfast) }, { label: 'Lunch', value: na(data?.meals?.lunch) }, { label: 'Dinner', value: na(data?.meals?.dinner) }] }) },\n];\n","import { IBookingPackage } from '../components/hotel-cancel/interfaces/i-almatar-hotel-auto-cancellation.interface';\n\nexport type ProductType = 'flight' | 'hotel';\n\nexport type BookingStatus = 'idle' | 'loading' | 'success' | 'error';\n\nexport interface BookingResponse {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any;\n elapsedMs: number;\n}\n\nexport interface IHotelBookingData {\n // Hotel Information\n hotelId?: string | number;\n bookingId?: string | number;\n hotelName?: string;\n coverImage?: string;\n\n // Check-in/Check-out dates\n dateFrom?: string;\n dateTo?: string;\n from?: { _i?: string }; // Alternative date format\n to?: { _i?: string }; // Alternative date format\n\n // Room/Package Information\n packages?: IBookingPackage[];\n rooms?: number;\n\n // Duration\n numberOfNights?: number;\n nightNumber?: number;\n\n // Times\n checkInTime?: string;\n checkOutTime?: string;\n\n // Pricing\n price?: number;\n\n // Preserve raw data for accessing booking_info (notes, history, etc.)\n data?: any;\n}\n\n/**\n * Maps raw API response to IHotelBookingData interface\n * This function handles the actual API response format from the booking endpoint\n */\nexport function mapToHotelBookingData(apiResponse: any): IHotelBookingData | null {\n if (!apiResponse) {\n return null;\n }\n\n // The actual API structure has hotel info in data.hotel[0]\n const data = apiResponse.data || apiResponse;\n const hotelData = data.hotel?.[0];\n\n if (!hotelData) {\n return null;\n }\n\n // Calculate number of nights from check-in and check-out dates\n const calculateNights = (checkIn: string, checkOut: string): number => {\n if (!checkIn || !checkOut) return 0;\n const start = new Date(checkIn);\n const end = new Date(checkOut);\n const diffTime = Math.abs(end.getTime() - start.getTime());\n return Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n };\n\n const numberOfNights = calculateNights(hotelData.checkIn, hotelData.checkOut);\n\n // Map roomPackages to IBookingPackage format\n const packages: IBookingPackage[] = (hotelData.roomPackages || []).map((pkg: any) => ({\n id: pkg._id,\n rooms: (pkg.rooms || []).map((room: any) => ({\n roomId: room._id,\n roomName: room.roomName || room.class || '',\n roomType: room.type || room.class || '',\n roomView: room.roomView || room.viewType || '',\n roomBasis: room.basis || '',\n bedType: room.bedType || '',\n adultsNum: room.adultNum,\n childrenNum: room.childrenNum,\n passengers: room.passengers,\n })),\n cancellationPolicies: pkg.payLaterCancellationPolicies || [],\n isRefundable: pkg.isRefundable || false,\n refundableUntil: pkg.refundableUntil || '',\n refundability: pkg.refundability || pkg.isRefundable,\n cancellationPoliciesRemarks: pkg.cancellationPoliciesRemarks,\n isCancelled: pkg.isCancelled,\n supplier: pkg.supplier?.name || pkg.supplierName,\n }));\n\n return {\n // Hotel Information\n hotelId: hotelData.hotelId,\n bookingId: data._id,\n hotelName: hotelData.hotelName,\n coverImage: hotelData.hotelMainImage,\n\n // Check-in/Check-out dates\n dateFrom: hotelData.checkIn,\n dateTo: hotelData.checkOut,\n from: hotelData.checkIn ? { _i: hotelData.checkIn } : undefined,\n to: hotelData.checkOut ? { _i: hotelData.checkOut } : undefined,\n\n // Room/Package Information\n packages: packages,\n rooms: hotelData.roomPackages?.length || packages.length,\n\n // Duration\n numberOfNights: numberOfNights,\n nightNumber: numberOfNights,\n\n // Times\n checkInTime: hotelData.checkInTime,\n checkOutTime: hotelData.checkOutTime,\n\n // Pricing\n price: hotelData.customerPrice?.amountToBeCollected || hotelData.customerPrice?.amountWithMarkeup,\n\n // Preserve raw data for accessing booking_info (notes, history, etc.)\n data: apiResponse,\n };\n}\n","import { Component, input, output, model } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ProductType } from '../../models/booking.types';\n\ninterface ProductOption { label: string; value: ProductType; disabled?: boolean; }\n\n@Component({\n selector: 'app-sbd-booking-input',\n standalone: true,\n imports: [FormsModule, SelectButtonModule, InputTextModule, ButtonModule, TooltipModule],\n templateUrl: './booking-input.component.html',\n styleUrl: './booking-input.component.scss',\n})\nexport class SbdBookingInputComponent {\n loading = input(false);\n product = model<ProductType>('flight');\n bookingId = model('');\n lookup = output<void>();\n\n readonly productOptions: ProductOption[] = [\n { label: '✈ Flight', value: 'flight' },\n { label: '🏨 Hotel', value: 'hotel' },\n ];\n\n readonly demoIds = [\n { label: 'Demo Flight: ALM-20481', value: 'ALM-20481' },\n { label: 'Demo Hotel: ALM-HTL-9921', value: 'ALM-HTL-9921' },\n ];\n\n fillDemo(id: string): void {\n const product: ProductType = id.includes('HTL') ? 'hotel' : 'flight';\n this.product.set(product);\n this.bookingId.set(id);\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') this.lookup.emit();\n }\n}\n","<div class=\"sbd-booking-input\">\n <p-selectButton\n [(ngModel)]=\"product\"\n [options]=\"productOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n optionDisabled=\"disabled\">\n <ng-template pTemplate=\"item\" let-item>\n <span\n [pTooltip]=\"item.disabled ? 'Coming soon' : null\"\n tooltipPosition=\"bottom\"\n style=\"pointer-events: auto; display: inline-block;\">\n {{ item.label }}\n </span>\n </ng-template>\n </p-selectButton>\n <div class=\"sbd-booking-input__row\">\n <div class=\"sbd-booking-input__field-wrap\">\n <i class=\"pi pi-search sbd-booking-input__icon\"></i>\n <input pInputText class=\"sbd-booking-input__field\" placeholder=\"Enter Booking ID\"\n [(ngModel)]=\"bookingId\" (keydown)=\"onKeydown($event)\" autocomplete=\"off\" spellcheck=\"false\" />\n </div>\n <button pButton label=\"Lookup →\" [disabled]=\"!bookingId().trim()\" (click)=\"lookup.emit()\" class=\"sbd-booking-input__btn\"></button>\n </div>\n</div>\n","import { Component, input, output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n selector: 'app-sbd-workflow-actions',\n standalone: true,\n imports: [ButtonModule, TooltipModule],\n templateUrl: './workflow-actions.component.html',\n styleUrl: './workflow-actions.component.scss',\n})\nexport class SbdWorkflowActionsComponent {\n bookingId = input.required<string>();\n cancelBooking = output<void>();\n}\n","<div class=\"sbd-workflow-actions\">\n <button pButton label=\"Cancel Booking\" icon=\"pi pi-times-circle\"\n class=\"p-button-danger p-button-outlined p-button-sm\"\n (click)=\"cancelBooking.emit()\">\n </button>\n\n <button pButton label=\"Send Ticket\" icon=\"pi pi-send\"\n class=\"p-button-outlined p-button-sm p-button-secondary\"\n [disabled]=\"true\"\n pTooltip=\"Coming soon\" tooltipPosition=\"bottom\">\n </button>\n\n <button pButton label=\"Flight Status\" icon=\"pi pi-chart-bar\"\n class=\"p-button-outlined p-button-sm p-button-secondary\"\n [disabled]=\"true\"\n pTooltip=\"Coming soon\" tooltipPosition=\"bottom\">\n </button>\n\n <button pButton label=\"Select Seat\" icon=\"pi pi-th-large\"\n class=\"p-button-outlined p-button-sm p-button-secondary\"\n [disabled]=\"true\"\n pTooltip=\"Coming soon\" tooltipPosition=\"bottom\">\n </button>\n\n <button pButton label=\"Add Baggage\" icon=\"pi pi-briefcase\"\n class=\"p-button-outlined p-button-sm p-button-secondary\"\n [disabled]=\"true\"\n pTooltip=\"Coming soon\" tooltipPosition=\"bottom\">\n </button>\n\n <button pButton label=\"Add Service\" icon=\"pi pi-plus-circle\"\n class=\"p-button-outlined p-button-sm p-button-secondary\"\n [disabled]=\"true\"\n pTooltip=\"Coming soon\" tooltipPosition=\"bottom\">\n </button>\n</div>\n","import { Component, input, output } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ActionConfig } from '../../models/action.types';\n\n@Component({\n selector: 'app-sbd-action-card',\n standalone: true,\n imports: [TooltipModule],\n templateUrl: './action-card.component.html',\n styleUrl: './action-card.component.scss',\n})\nexport class SbdActionCardComponent {\n action = input.required<ActionConfig>();\n active = input(false);\n loading = input(false);\n selected = output<string>();\n}\n","<button class=\"sbd-action-card\" [class.sbd-action-card--active]=\"active()\"\n [class.sbd-action-card--loading]=\"loading()\" [pTooltip]=\"action().subtitle\"\n tooltipPosition=\"top\" (click)=\"selected.emit(action().key)\" type=\"button\">\n @if (active()) { <span class=\"sbd-action-card__dot\"></span> }\n <div class=\"sbd-action-card__icon-tile\">\n <i [class]=\"action().icon\"></i>\n </div>\n <div class=\"sbd-action-card__body\">\n <span class=\"sbd-action-card__label\">{{ action().label }}</span>\n <span class=\"sbd-action-card__sub\">{{ action().subtitle }}</span>\n </div>\n</button>\n","import { Component, input, output } from '@angular/core';\nimport { SbdActionCardComponent } from '../action-card/action-card.component';\nimport { ActionConfig } from '../../models/action.types';\n\n@Component({\n selector: 'app-sbd-action-grid',\n standalone: true,\n imports: [SbdActionCardComponent],\n templateUrl: './action-grid.component.html',\n styleUrl: './action-grid.component.scss',\n})\nexport class SbdActionGridComponent {\n actions = input.required<ActionConfig[]>();\n activeKey = input<string | null>(null);\n loadingKey = input<string | null>(null);\n actionSelected = output<string>();\n}\n","<div class=\"sbd-action-grid\">\n <div class=\"sbd-action-grid__header\">\n <h3 class=\"sbd-action-grid__title\">Booking Details</h3>\n </div>\n <div class=\"sbd-action-grid__grid\">\n @for (action of actions(); track action.key) {\n <app-sbd-action-card [action]=\"action\" [active]=\"activeKey() === action.key\"\n [loading]=\"loadingKey() === action.key\" (selected)=\"actionSelected.emit($event)\" />\n }\n </div>\n</div>\n","import { Component, input, output, inject, effect, signal, computed } from '@angular/core';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { DialogModule } from 'primeng/dialog';\nimport { ButtonModule } from 'primeng/button';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { SbdBookingService } from '../../services/booking.service';\nimport { SbdToastService } from '../../services/toast.service';\n\ntype LegSelection = 'onward' | 'return' | 'both';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype LegDetails = any;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RefundData = any;\n\nconst DEDUCTION_DEFS = [\n { key: 'totalPenaltyPoints', label: 'Airline Cancellation Fee', badge: '' },\n { key: 'handlingFee', label: 'Handling Fee', badge: '' },\n { key: 'totalNonRefundableServiceCharge', label: 'Service Charge', badge: '' },\n { key: 'totalAncillaryRefundAmount', label: 'Ancillary Fee', badge: '' },\n { key: 'totalGiftAmount', label: 'Add on Fee', badge: '' },\n // `totalLoyaltyPoints` (points spent at booking time, now forfeited) is\n // intentionally not listed here — it's already surfaced under its own\n // program name (e.g. \"Qitaf\") in the \"Total Paid\" breakdown, so listing it\n // again here would double up the same amount under two different sections.\n];\n\nconst REFUND_DEFS = [\n { key: 'totalCardRefundAmount', label: 'Refund Amount' },\n { key: 'totalCreditRefundAmount', label: 'Credit Shell Refund' },\n { key: 'walletRefundAmount', label: 'Almatar Wallet' },\n { key: 'totalLoyaltyPointsRefundAmount', label: 'Loyalty Points Refund' },\n];\n\n/** Labels for `paymentMethodCustomerUsed` gateway codes returned by the backend. */\nconst PAYMENT_GATEWAY_LABELS: Record<string, string> = {\n CH: 'Card',\n HP: 'Hyperpay',\n MF: 'My Fatoora',\n WT: 'Wire Transfer',\n STC: 'STC',\n TM: 'Tamara',\n TB: 'Tabby',\n RAJHI: 'Al Rajhi Mokafaa',\n PPB: 'Customer Balance',\n PP: 'Postpay',\n TAMAM: 'Tamam',\n QITAF: 'Qitaf',\n MIS: 'MIS Pay',\n MATAR: 'Almatar Pay',\n CB: 'Company Balance',\n ANB: 'ANB',\n AMWAL: 'Amwal',\n WALA: 'Wala',\n YGG: 'YGG',\n};\n\n/** Gateway codes that refund to an installment plan rather than the original card. */\nconst INSTALLMENT_GATEWAY_CODES = ['TM', 'TB'];\n\n/** Gateway codes that refund to a loyalty-program account rather than the original card. */\nconst LOYALTY_GATEWAY_CODES = ['RAJHI', 'QITAF', 'STC', 'WALA'];\n\n/**\n * Internal payment-processor/gateway names, never customer-recognizable\n * brands — must not be surfaced verbatim (e.g. a card refund processed\n * through Hyperpay must read as \"Card\"/\"Original Payment Method\", never\n * \"Hyperpay\"). Callers fall back to a generic label whenever the normalized\n * lookup returns ''.\n */\nconst INTERNAL_GATEWAY_CODES = ['HP', 'MF', 'WT', 'PPB', 'PP', 'TAMAM'];\n\n/**\n * Result/confirmation-screen-only override: these gateways process card\n * payments through Mada — shown specifically as \"Mada Card\" instead of\n * falling back to the generic \"Original Payment Method\" label used\n * everywhere else `INTERNAL_GATEWAY_CODES` applies.\n */\nconst MADA_GATEWAY_CODES = ['HP', 'CH'];\n\nconst CREDIT_SHELL_SUFFIX = 'It can be used only for future booking on the airline website.';\n\nconst GIFT_HINT = 'Please note: If you cancel either leg of your round-trip booking, the add-on/gift service will be cancelled automatically.';\n\n@Component({\n selector: 'app-sbd-cancel-dialog',\n standalone: true,\n imports: [DialogModule, ButtonModule, SkeletonModule, NgTemplateOutlet, NgClass],\n templateUrl: './cancel-dialog.component.html',\n styleUrl: './cancel-dialog.component.scss',\n})\nexport class SbdCancelDialogComponent {\n private bookingService = inject(SbdBookingService);\n private toast = inject(SbdToastService);\n\n visible = input(false);\n bookingId = input('');\n product = input<'flight' | 'hotel'>('flight');\n pnrInfo = input<{ pnr?: string; LegDirectionality?: string }[]>([]);\n /** Same `booking_info` payload the dashboard already fetches (getBooking(..., 'booking_info')) — reused here to render real route/time details on the select-leg cards, instead of a second API call. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n bookingInfo = input<any>(null);\n closed = output<void>();\n confirmed = output<LegSelection>();\n\n /** Per-leg route/time details, mirroring app-sbd-flight-itinerary-card's mapping of booking_info.leg_info. */\n itineraryLegs = computed(() => {\n const bi = this.bookingInfo()?.data?.booking_info;\n if (!bi) return [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (bi.leg_info ?? []).map((leg: any, i: number) => ({\n direction: leg.LegDirectionality as string,\n airlineName: (leg.LegAirlinesNames ?? []).join(', '),\n cabin: leg.LegCabins?.[0]?.Name ?? '',\n from: leg.LegDepartureAirportCode as string,\n to: leg.LegArrivalAirportCode as string,\n depTime: leg.LegDepartureDateTime as string,\n arrTime: leg.LegArrivalDateTime as string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stops: (leg.Stops ?? []) as any[],\n totalMinutes: bi.duration?.legs?.[i]?.Segments\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ?.reduce((sum: number, s: any) => sum + (s.SegmentElapsedTimeMinutes ?? 0), 0) ?? null,\n operatedBy: leg.supplierName ? [leg.supplierName as string] : [],\n }));\n });\n\n /**\n * The return leg is matched by an explicit 'Return' direction; the onward\n * leg is whatever's left (some bookings don't tag the outbound leg with an\n * explicit 'Departure' value), falling back to the first entry.\n */\n itineraryLeg(kind: 'onward' | 'return') {\n const legs = this.itineraryLegs();\n if (!legs.length) return null;\n const returnLeg = legs.find((l: { direction: string }) => (l.direction ?? '').toLowerCase() === 'return') ?? null;\n if (kind === 'return') return returnLeg;\n return (\n legs.find((l: { direction: string }) => (l.direction ?? '').toLowerCase() === 'departure') ??\n legs.find((l) => l !== returnLeg) ??\n legs[0] ??\n null\n );\n }\n\n fmtTime(dt: string): string {\n if (!dt) return '—';\n try { return new Date(dt).toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' }); }\n catch { return dt; }\n }\n\n fmtShortDate(dt: string): string {\n if (!dt) return '—';\n try { return new Date(dt).toLocaleDateString('en-GB', { weekday: 'short', day: '2-digit', month: 'short' }); }\n catch { return dt; }\n }\n\n fmtMins(mins: number | null): string {\n if (mins == null) return '';\n return `${Math.floor(mins / 60)}h ${mins % 60}m`;\n }\n\n refundData = signal<RefundData | null>(null);\n cancelResult = signal<RefundData | null>(null);\n loading = signal(false);\n cancelling = signal(false);\n confirming = signal(false);\n /**\n * 'select-leg' shown once the refund preview resolves, for round-trip\n * bookings the backend hasn't already restricted to a single leg — mirrors\n * almatar-b2c's select-leg screen. Skipped straight to 'details' otherwise.\n */\n step = signal<'loading' | 'select-leg' | 'details'>('loading');\n /** Per-leg inclusion (checkbox) and expand/collapse state — round-trip only. */\n onwardChecked = signal(true);\n returnChecked = signal(true);\n onwardExpanded = signal(true);\n returnExpanded = signal(true);\n selectedSource = signal<string>('');\n cancelHint = signal<string>('');\n paidSummaryExpanded = signal(false);\n preferredRefundMethod = signal<'wallet' | 'originalPaymentMethod' | 'split'>('originalPaymentMethod');\n\n private readonly CANCEL_HINTS = [\n 'Loading your data...',\n 'Fetching Sabre data...',\n 'Fetching ATC data...',\n 'Calculating refund amount...',\n 'We are almost done, please wait...',\n ];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private hintTimer: any = null;\n\n hasOnward = computed(() => !!this.refundData()?.legInfo?.onward);\n hasReturn = computed(() => !!this.refundData()?.legInfo?.return);\n isRoundTrip = computed(() => this.hasOnward() && this.hasReturn());\n\n /** Which leg(s) the backend allows cancelling, from the refund preview response. */\n legDirectionality = computed<'ONWARD' | 'RETURN' | 'BOTH' | undefined>(\n () => this.refundData()?.legDirectionality,\n );\n\n /**\n * Whether to render the round-trip \"two leg cards\" UI. Only when the\n * backend explicitly allows cancelling both legs — otherwise (ONWARD-only /\n * RETURN-only) show a single card for that leg, same as a one-way booking.\n */\n showRoundTripLegCards = computed(\n () => this.isRoundTrip() && (this.legDirectionality() ?? 'BOTH') === 'BOTH',\n );\n\n /** Derived from the per-leg checkboxes — 'both' unless exactly one is unchecked. */\n selectedLeg = computed<LegSelection>(() => {\n if (!this.isRoundTrip()) return 'both';\n const dir = this.legDirectionality();\n if (dir === 'ONWARD') return 'onward';\n if (dir === 'RETURN') return 'return';\n const onward = this.onwardChecked();\n const ret = this.returnChecked();\n if (onward && ret) return 'both';\n return onward ? 'onward' : 'return';\n });\n\n // Returns the sourceBreakdown for the currently selected leg (or root for \"both\")\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n activeSourceBreakdown = computed((): Record<string, any> | null => {\n const sel = this.selectedLeg();\n const root = this.refundData();\n if (!root) return null;\n // A leg-scoped view (single leg, or both legs summed) must not fall back\n // to root.sourceBreakdown — its totals are for the whole/original\n // itinerary, not scoped to the leg(s) actually shown, and applying it\n // would clobber the correctly leg-scoped totals computed in\n // `currentData()`.\n if (sel === 'onward') return root.legInfo?.onward?.sourceBreakdown ?? null;\n if (sel === 'return') return root.legInfo?.return?.sourceBreakdown ?? null;\n if (root.legInfo?.onward && root.legInfo?.return) return null;\n return root.sourceBreakdown ?? null;\n });\n\n availableSources = computed((): string[] =>\n Object.keys(this.activeSourceBreakdown() ?? {})\n );\n\n currentData = computed<RefundData | null>(() => {\n const root = this.refundData();\n if (!root) return null;\n const sel = this.selectedLeg();\n if (sel === 'onward' && root.legInfo?.onward)\n return this.buildLegData(root, root.legInfo.onward, 'onward');\n if (sel === 'return' && root.legInfo?.return)\n return this.buildLegData(root, root.legInfo.return, 'return');\n // Payment/refund figures come from `legInfo`, never root (root isn't\n // reliably scoped to whichever leg(s) ended up selected) — combine both\n // legs when both are in play, otherwise use whichever one exists.\n const onward = root.legInfo?.onward;\n const ret = root.legInfo?.return;\n if (onward && ret) return this.buildCombinedLegData(root, onward, ret);\n if (onward && !ret) return this.buildLegData(root, onward, 'onward');\n if (ret && !onward) return this.buildLegData(root, ret, 'return');\n return root;\n });\n\n // currentData with source-specific penalty/refund/refundability overrides applied\n adjustedData = computed<RefundData | null>(() => {\n const base = this.currentData();\n if (!base) return null;\n return this.applySourceOverride(base, this.activeSourceBreakdown());\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private applySourceOverride(base: RefundData, breakdown: Record<string, any> | null): RefundData {\n const sel = this.selectedSource();\n if (!sel || !breakdown || !breakdown[sel]) return this.reconcileSoleDestination(base);\n const src = breakdown[sel];\n const sourceRefundable = src.isRefundable !== false; // default true if not set\n if (!sourceRefundable) {\n // Source cannot process refund — zero out financial fields\n return this.reconcileSoleDestination({\n ...base,\n isRefundable: false,\n totalPenaltyPoints: 0,\n totalSupplierPenaltyPoints: 0,\n totalCancellationFee: 0,\n totalRefundAmount: 0,\n totalCardRefundAmount: 0,\n handlingFee: 0,\n });\n }\n // Prefer the source's own walletRefundAmount/totalCardRefundAmount when\n // the API provides them (they're already net of each other for this\n // source) — only fall back to deriving cardRefund when the API doesn't.\n const newTotal = Number(src.totalRefundAmount || 0);\n const walletRefund =\n src.walletRefundAmount !== undefined\n ? Number(src.walletRefundAmount || 0)\n : Number(base.walletRefundAmount || 0);\n const cardRefund =\n src.totalCardRefundAmount !== undefined\n ? Number(src.totalCardRefundAmount || 0)\n : Math.max(\n 0,\n newTotal -\n Number(base.totalCreditRefundAmount || 0) -\n walletRefund -\n Number(base.totalLoyaltyPointsRefundAmount || 0),\n );\n return this.reconcileSoleDestination({\n ...base,\n isRefundable: true,\n totalPenaltyPoints: Number(src.totalSupplierPenaltyPoints || 0),\n totalSupplierPenaltyPoints: Number(src.totalSupplierPenaltyPoints || 0),\n totalCancellationFee: Number(src.totalCancellationFee || 0),\n totalRefundAmount: newTotal,\n walletRefundAmount: walletRefund,\n totalCardRefundAmount: cardRefund,\n handlingFee: Number(src.handlingFee || 0),\n });\n }\n\n /**\n * When exactly one of the four refund-destination fields (wallet / card /\n * credit / loyalty) is non-zero, the backend has occasionally sent that\n * field as a pre-deduction value that disagrees with the declared total\n * (e.g. wallet = total + cancellation fee) — there's no ambiguity about\n * *where* the money goes, only a stale number in that one field, so trust\n * the declared total and correct the sole destination to match rather\n * than surfacing a false discrepancy.\n */\n private reconcileSoleDestination(d: RefundData): RefundData {\n if (!d?.isRefundable) return d;\n const wallet = Number(d.walletRefundAmount ?? 0);\n const card = Number(d.totalCardRefundAmount ?? 0);\n const credit = Number(d.totalCreditRefundAmount ?? 0);\n const loyalty = Number(d.totalLoyaltyPointsRefundAmount ?? 0);\n // A forfeited-points destination (e.g. Qitaf points funded separately\n // from the card refund) also counts as a real destination here — without\n // this, a legitimately split card+loyalty-points refund (e.g. 918 card +\n // 50 Qitaf points = 968 total) looks like a single stale \"card\" field to\n // this heuristic, which then force-overwrites the correct 918 with the\n // full 968 total and silently erases the split.\n const forfeitedLoyalty = this.forfeitedLoyaltyPointsFallback(d);\n const nonZero = [wallet, card, credit, loyalty, forfeitedLoyalty].filter((v) => v > 0);\n if (nonZero.length !== 1) return d;\n const total = Number(d.totalRefundAmountBeforeCeil ?? d.totalRefundAmount ?? 0);\n if (wallet > 0 && Math.abs(wallet - total) >= 0.01) return { ...d, walletRefundAmount: total };\n if (card > 0 && Math.abs(card - total) >= 0.01) return { ...d, totalCardRefundAmount: total };\n if (credit > 0 && Math.abs(credit - total) >= 0.01) return { ...d, totalCreditRefundAmount: total };\n if (loyalty > 0 && Math.abs(loyalty - total) >= 0.01) return { ...d, totalLoyaltyPointsRefundAmount: total };\n return d;\n }\n\n /**\n * Per-leg refund view (independent of the checkbox inclusion state) — used\n * to render both legs' own breakdown cards simultaneously.\n */\n legAdjustedData(legType: 'onward' | 'return'): RefundData | null {\n const root = this.refundData();\n const leg = root?.legInfo?.[legType];\n if (!root || !leg) return null;\n const base = this.buildLegData(root, leg, legType);\n return this.applySourceOverride(base, leg.sourceBreakdown ?? null);\n }\n\n /** Deduction rows for a single leg's card. */\n legDeductions(legType: 'onward' | 'return') {\n return this.deductionRows(this.legAdjustedData(legType));\n }\n\n /**\n * Refundable pool (\"Fare\") for a leg — that leg's own paid amount\n * (`totalSupplierBookingAmount`). `totalRefundAmount + totalCancellationFee`\n * isn't reliable: `totalCancellationFee` doesn't include every deduction\n * (e.g. `handlingFee`), which produced a Fare that didn't reconcile with\n * Total Refund + the shown deductions.\n */\n legRefundPool(legType: 'onward' | 'return'): number {\n const d = this.legAdjustedData(legType);\n if (!d) return 0;\n return Number(d.totalSupplierBookingAmount || 0);\n }\n\n /** True once a leg's own departure time has passed. */\n legAlreadyFlown(legType: 'onward' | 'return'): boolean {\n const depTime = this.itineraryLeg(legType)?.depTime;\n if (!depTime) return false;\n const t = new Date(depTime).getTime();\n return !Number.isNaN(t) && t < Date.now();\n }\n\n /**\n * Non-CrossSeller airlines require the whole round-trip/multicity\n * itinerary to be cancelled together — a leg can't be excluded on its own\n * unless it has already flown (which naturally degrades to a one-way\n * cancellation of just the remaining leg). Set when an uncheck attempt was\n * blocked for this reason, so the leg's checkbox can be frozen (locked)\n * and the note shown.\n */\n forcedLegType = signal<'onward' | 'return' | null>(null);\n\n /**\n * Toggle a leg's inclusion. A non-refundable leg can't be checked, and the\n * last checked leg can't be unchecked. Used on both the select-leg screen\n * and the round-trip leg cards.\n */\n toggleLeg(legType: 'onward' | 'return') {\n const refundable = legType === 'onward' ? this.onwardRefundable() : this.returnRefundable();\n if (!refundable) return;\n const self = legType === 'onward' ? this.onwardChecked : this.returnChecked;\n const other = legType === 'onward' ? this.returnChecked : this.onwardChecked;\n if (self() && !other()) return;\n\n const isTurningOff = self();\n if (\n isTurningOff &&\n this.isRoundTrip() &&\n !this.isCrossSeller() &&\n !this.legAlreadyFlown(legType)\n ) {\n // Airline doesn't allow cancelling this leg on its own — block the\n // uncheck, keep it checked+frozen, and surface the note.\n this.forcedLegType.set(legType);\n return;\n }\n this.forcedLegType.set(null);\n self.set(!self());\n // A leg may carry its own source list — re-resolve the selection.\n const breakdown = this.activeSourceBreakdown() ?? {};\n const sources = Object.keys(breakdown);\n if (sources.length && !breakdown[this.selectedSource()]) {\n this.selectedSource.set(sources[0]);\n }\n }\n\n /** Toggle a leg card's expanded/collapsed state. */\n toggleLegExpanded(legType: 'onward' | 'return') {\n const sig = legType === 'onward' ? this.onwardExpanded : this.returnExpanded;\n sig.set(!sig());\n }\n\n sourceNonRefundableHint = computed((): string => {\n const sel = this.selectedSource();\n if (!sel) return '';\n const src = (this.activeSourceBreakdown() ?? {})[sel];\n if (!src || src.isRefundable !== false) return '';\n return `Cancellation via ${sel} is not eligible for a refund. Please select a different source.`;\n });\n\n deductions = computed(() => this.deductionRows(this.adjustedData()));\n\n /**\n * Itemized refundable rows (\"Fare\" + named refundable add-ons/ancillaries)\n * from `refundBreakdown.refundable`. Empty when the backend hasn't sent a\n * breakdown yet — callers fall back to the single aggregate Fare row.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refundableBreakdownRows(d: any): { label: string; value: number }[] {\n const b = d?.refundBreakdown?.refundable;\n if (!b) return [];\n // Fare always shows from refundBreakdown.refundable.fare, even when 0 —\n // never falls back to originalAmount.\n const rows: { label: string; value: number }[] = [{ label: 'Fare', value: Number(b.fare ?? 0) }];\n [...(b.addOns ?? []), ...(b.ancillaries ?? [])]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .filter((item: any) => Number(item.amount) > 0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .forEach((item: any) => rows.push({ label: item.name, value: Number(item.amount) }));\n return rows;\n }\n\n /** Named refundable add-ons/ancillaries only (excludes Fare) — drives the \"processed separately\" note. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private refundableAddonItems(d: any): any[] {\n // Only `addOns` need manual Customer Service processing — `ancillaries`\n // (baggage, seat, auto check-in, …) are already itemized/refunded\n // automatically as part of the total, no separate note needed for them.\n const b = d?.refundBreakdown?.refundable;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (b?.addOns ?? []).filter((item: any) => Number(item.amount) > 0);\n }\n\n /** Whether to show the \"add-on refund processed separately by Customer Service\" note. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n hasRefundableAddonNote(d: any): boolean {\n return this.refundableAddonItems(d).length > 0;\n }\n\n /**\n * Deduction rows for the \"Not Refunded\" section. When an itemized\n * breakdown is present, its named add-ons/ancillaries replace the\n * aggregate `totalAncillaryRefundAmount`/`totalGiftAmount` rows (same\n * money, named instead of lumped); the other generic rows (cancellation\n * fee, handling fee, service charge) are unaffected.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private deductionRows(d: any): { label: string; value: number; badge: string }[] {\n if (!d) return [];\n const b = d.refundBreakdown?.nonRefundable;\n if (!b) {\n return DEDUCTION_DEFS\n .filter(def => Number(d[def.key]) > 0)\n .map(def => ({ label: def.label, value: Number(d[def.key]), badge: def.badge }));\n }\n const itemRows = [...(b.addOns ?? []), ...(b.ancillaries ?? [])]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .filter((item: any) => Number(item.amount) > 0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map((item: any) => ({ label: item.name, value: Number(item.amount), badge: '' }));\n const aggregateRows = DEDUCTION_DEFS\n .filter(def => def.key !== 'totalAncillaryRefundAmount' && def.key !== 'totalGiftAmount')\n .filter(def => Number(d[def.key]) > 0)\n .map(def => ({ label: def.label, value: Number(d[def.key]), badge: def.badge }));\n return [...itemRows, ...aggregateRows];\n }\n\n refunds = computed(() => {\n const d = this.adjustedData();\n if (!d) return [];\n const isLoyalty = this.isLoyaltyMethod();\n const paymentLabel = this.customerPaymentLabel();\n const rows = REFUND_DEFS\n .filter(def => Number(d[def.key]) > 0)\n .map(def => ({\n // Wallet row always reads \"Almatar Wallet\" (def.label) — the loyalty\n // program that funded it gets its own dedicated row below via\n // `forfeitedLoyaltyPointsFallback`, so the two stay visually\n // distinct instead of merging into one label.\n // Card row: card/loyalty stay distinct — don't relabel the card\n // portion with the loyalty program name too, and never surface an\n // internal processor name (empty `paymentLabel` falls back to the\n // generic def.label, e.g. \"Refund Amount\").\n label:\n def.key === 'totalCardRefundAmount' && !isLoyalty && paymentLabel\n ? `${def.label} ${paymentLabel}`\n : def.label,\n value: Number(d[def.key]),\n }));\n const forfeitedLoyalty = this.forfeitedLoyaltyPointsFallback(d);\n if (forfeitedLoyalty > 0) {\n rows.push({ label: this.walletOrLoyaltyLabel(d), value: forfeitedLoyalty });\n }\n return rows;\n });\n\n creditShellNote = computed((): string => {\n // Golden Guarantee overrides credit-shell messaging entirely — the\n // dedicated success notice (`goldenGuaranteeNote`) is shown instead.\n if (this.hasGoldenGuaranteeGift()) return '';\n const d = this.currentData();\n if (!d) return '';\n const legInfo = d.legInfo ?? {};\n const hasO = !!legInfo.onward;\n const hasR = !!legInfo.return;\n const oShell = legInfo.onward?.isCreditShell === true;\n const rShell = legInfo.return?.isCreditShell === true;\n const isShell =\n (hasO && hasR && oShell && rShell) ||\n (hasO && !hasR && oShell) ||\n (!hasO && hasR && rShell) ||\n (hasO && hasR && (oShell || rShell));\n if (!isShell) return '';\n const amount = this.fmt(Number(this.adjustedData()?.totalRefundAmount ?? d.totalRefundAmount ?? 0));\n const pnr = this.resolvePnr();\n const pnrText = pnr ? `the same PNR (${pnr})` : 'the same PNR';\n return `The refund of ${amount} will be issued as airline credit under ${pnrText}. ${CREDIT_SHELL_SUFFIX}`;\n });\n\n // Resolve the PNR for the currently selected leg from the booking's pnr_info list.\n private resolvePnr(): string {\n const list = this.pnrInfo() ?? [];\n if (!list.length) return '';\n const sel = this.selectedLeg();\n const byDir = (dir: string) => list.find(p => p.LegDirectionality === dir)?.pnr;\n if (sel === 'return') return byDir('Return') ?? list[0]?.pnr ?? '';\n if (sel === 'onward') return byDir('Departure') ?? list[0]?.pnr ?? '';\n return byDir('Departure') ?? list[0]?.pnr ?? '';\n }\n\n /**\n * Booking includes a Golden Guarantee gift (\"Cancel for any reason\") —\n * overrides all credit-shell handling below, since a Golden Guarantee\n * cancellation always refunds 100% through the standard payment method\n * rather than the airline credit shell. May be carried on either the\n * preview (`refundData`) or the confirm (`cancelResult`) response — both\n * share the same shape, and either one may set it independently of the\n * other.\n */\n hasGoldenGuaranteeGift = computed((): boolean =>\n this.refundData()?.hasGoldenGuaranteeGift === true ||\n this.cancelResult()?.hasGoldenGuaranteeGift === true ||\n this.hasGoldenGuaranteeAddOn(),\n );\n\n /**\n * Fallback for environments whose refund response has no `hasGoldenGuaranteeGift`\n * flag: scan every itemized add-on/ancillary/gift the refund preview exposes\n * (root + per-leg, refundable + non-refundable) for a golden-guarantee\n * category/type/name match.\n */\n private hasGoldenGuaranteeAddOn = computed((): boolean => {\n const root = this.refundData();\n if (!root) return false;\n\n const GG_CATEGORY = 'golden_guarantee';\n const GG_NAME_RX = /goldens*guarantee|cancels*fors*anys*reason/i;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const isGoldenGuarantee = (item: any): boolean => {\n if (!item) return false;\n const category = String(item.category ?? item.giftCategory ?? item.type ?? item.giftType ?? '')\n .toLowerCase()\n .replace(/[s-]+/g, '_');\n if (category === GG_CATEGORY) return true;\n return GG_NAME_RX.test(String(item.name ?? item.title ?? ''));\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakdownItems = (node: any): any[] => {\n const b = node?.refundBreakdown;\n if (!b) return [];\n return [\n ...(b.refundable?.addOns ?? []),\n ...(b.refundable?.ancillaries ?? []),\n ...(b.nonRefundable?.addOns ?? []),\n ...(b.nonRefundable?.ancillaries ?? []),\n ];\n };\n\n const candidates = [\n ...breakdownItems(root),\n ...breakdownItems(root.legInfo?.onward),\n ...breakdownItems(root.legInfo?.return),\n ...(root.addOns ?? []),\n ...(root.gifts ?? []),\n ...(root.legInfo?.onward?.addOns ?? []),\n ...(root.legInfo?.onward?.gifts ?? []),\n ...(root.legInfo?.return?.addOns ?? []),\n ...(root.legInfo?.return?.gifts ?? []),\n ];\n\n return candidates.some(isGoldenGuarantee);\n });\n\n // Whether the refund is a credit-shell refund (whole booking or either leg).\n // Such refunds can only return to the airline credit shell, so the\n // refund-method picker is replaced with a single read-only credit notice.\n // A Golden Guarantee gift overrides this to `false` — that portion needs an\n // actual destination choice, so the booking falls back to the standard\n // refund-method flow despite being flagged credit-shell.\n isCreditShell = computed((): boolean => {\n if (this.hasGoldenGuaranteeGift()) return false;\n const d = this.refundData();\n return (\n d?.isCreditShell === true ||\n d?.legInfo?.onward?.isCreditShell === true ||\n d?.legInfo?.return?.isCreditShell === true\n );\n });\n\n /**\n * Refundable ancillaries (baggage, seats, …) that carry their own\n * `isCreditShell` flag, independent of the booking-level flag — rendered\n * as individual cards on the credit-shell refund-method screen so each\n * one can show either the credit-shell card style or the normal wallet\n * card style (both include the same nested credit-shell note when true).\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n creditShellAncillaryItems = computed((): any[] =>\n (this.adjustedData()?.refundBreakdown?.refundable?.ancillaries ?? [])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .filter((item: any) => Number(item.amount) > 0),\n );\n\n // Airline that issues the credit shell, for the \"<supplier> website credit\" card.\n creditShellSupplierName = computed((): string => {\n const d = this.refundData();\n return (\n d?.legInfo?.onward?.supplierName ??\n d?.legInfo?.return?.supplierName ??\n d?.supplierName ??\n d?.appliedSource ??\n ''\n );\n });\n\n // Header title reflecting the refund type for the active selection.\n refundTypeLabel = computed((): string => {\n if (!this.refundData()?.isRefundable) return 'Refund Details';\n return this.creditShellNote() ? 'Credit Shell Refund' : 'Refund Details';\n });\n\n currency = computed((): string => this.refundData()?.currency ?? 'SAR');\n\n // Self-consistency check between the paid amount, deductions and the system refund.\n // Surfaced to the agent so mismatched/over-deducted refunds can be caught before confirming.\n discrepancyNote = computed((): string => {\n const d = this.adjustedData();\n if (!d || !d.isRefundable) return '';\n const paid = Number(d.originalAmount || 0);\n const deduction = Number(d.totalCancellationFee || 0);\n const refund = Number(d.totalRefundAmount || 0);\n const issues: string[] = [];\n if (deduction > paid + 0.01)\n issues.push(`Total deduction (${this.fmt(deduction)}) exceeds the paid amount (${this.fmt(paid)}).`);\n if (Math.abs((paid - deduction) - refund) > 0.01)\n issues.push(`Computed refund (${this.fmt(paid - deduction)}) doesn't match the system refund (${this.fmt(refund)}).`);\n return issues.join(' ');\n });\n\n /** Real per-booking CrossSeller flag from the refund preview — CrossSeller suppliers allow cancelling either leg independently. */\n isCrossSeller = computed(() => this.refundData()?.isCrossSeller === true);\n\n // Non-CrossSeller round trips are one itinerary sold as a single fare —\n // both legs share the same refundability, sourced from root, even when\n // the backend's legInfo entry for a leg is missing or inconsistent.\n // CrossSeller legs are independently sellable, so each leg's own field\n // still governs there.\n onwardRefundable = computed(() => {\n if (!this.hasOnward()) return false;\n return this.isCrossSeller()\n ? this.refundData()?.legInfo?.onward?.isRefundable === true\n : this.refundData()?.isRefundable === true;\n });\n returnRefundable = computed(() => {\n if (!this.hasReturn()) return false;\n return this.isCrossSeller()\n ? this.refundData()?.legInfo?.return?.isRefundable === true\n : this.refundData()?.isRefundable === true;\n });\n isMixed = computed(() => this.isRoundTrip() && this.onwardRefundable() !== this.returnRefundable());\n\n /** Both legs present and BOTH non-refundable — nothing can be refunded for this booking. */\n allLegsNonRefundable = computed(\n () => this.isRoundTrip() && !this.onwardRefundable() && !this.returnRefundable(),\n );\n\n mixedHint = computed((): string => {\n // Only relevant when agent is about to cancel both legs together —\n // individual leg tabs already show their own non-refundable notice.\n if (!this.isMixed() || this.selectedLeg() !== 'both') return '';\n if (!this.onwardRefundable()) return '⚠️ Onward leg is not eligible for refund. Please contact customer service if you want to cancel it.';\n if (!this.returnRefundable()) return '⚠️ Return leg is not eligible for refund. Please contact customer service if you want to cancel it.';\n return '';\n });\n\n giftHint = computed((): string => {\n const root = this.refundData();\n if (!root || !this.isRoundTrip()) return '';\n const hasGift = Number(root.totalGiftAmount || 0) > 0 ||\n Number(root.legInfo?.onward?.totalGiftAmount || 0) > 0 ||\n Number(root.legInfo?.return?.totalGiftAmount || 0) > 0;\n return hasGift ? GIFT_HINT : '';\n });\n\n selectionHint = computed((): string => {\n if (!this.isRoundTrip()) return '';\n const map: Record<LegSelection, string> = {\n onward: 'You are about to cancel: Onward leg only',\n return: 'You are about to cancel: Return leg only',\n both: 'You are about to cancel: Both legs',\n };\n return map[this.selectedLeg()];\n });\n\n confirmDeductions = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const d: any = this.cancelResult();\n if (!d) return [];\n return DEDUCTION_DEFS.filter(def => Number(d[def.key]) > 0).map(def => ({ label: def.label, value: Number(d[def.key]) }));\n });\n\n confirmRefunds = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const d: any = this.cancelResult();\n if (!d) return [];\n const code = this.normalizeGatewayCode(d.paymentMethodCustomerUsed);\n const isLoyalty = LOYALTY_GATEWAY_CODES.includes(code);\n const isMada = this.confirmIsMadaMethod();\n const paymentLabel = code && !INTERNAL_GATEWAY_CODES.includes(code) ? PAYMENT_GATEWAY_LABELS[code] : '';\n const rows: {\n key: string;\n label: string;\n value: number;\n subRows?: { label: string; value: number }[];\n hasLoyaltyNote?: boolean;\n }[] = [];\n const { wallet, forfeitedLoyalty } = this.correctedConfirmWalletAndLoyalty(d);\n // Golden Guarantee overrides credit-shell handling on the result screen\n // too — whatever landed as a credit-shell amount folds into the normal\n // original-payment-method row instead of getting its own \"airline\n // credit\" card, so the confirmation reads like an ordinary Sabre/Amadeus\n // refund.\n const goldenGuaranteeOverride = this.hasGoldenGuaranteeGift();\n // Credit-shell row goes first — matches the design (airline credit above\n // the wallet row) — before the card and wallet rows below.\n if (!goldenGuaranteeOverride) {\n const credit = Number(d.totalCreditRefundAmount ?? 0);\n if (credit > 0) {\n const supplier = d.appliedSource || this.creditShellSupplierName();\n rows.push({\n key: 'totalCreditRefundAmount',\n label: supplier ? `${supplier} website credit` : 'Credit Shell Refund',\n value: credit,\n });\n }\n }\n const cardAmount =\n Number(d.totalCardRefundAmount ?? 0) +\n (goldenGuaranteeOverride ? Number(d.totalCreditRefundAmount ?? 0) : 0);\n if (cardAmount > 0) {\n rows.push({\n key: 'totalCardRefundAmount',\n label: isMada\n ? 'Mada Card'\n : !isLoyalty && paymentLabel\n ? `Refund Amount ${paymentLabel}`\n : 'Refund Amount',\n value: cardAmount,\n });\n }\n if (wallet > 0 && forfeitedLoyalty > 0) {\n // Wallet cash + a loyalty program's points both landed in the wallet —\n // shown as one combined card with the two sources broken out as named\n // sub-rows, rather than two separate top-level cards.\n rows.push({\n key: 'walletRefundAmount',\n label: 'Almatar Wallet',\n value: wallet + forfeitedLoyalty,\n subRows: [\n { label: 'Almatar wallet points', value: wallet },\n { label: `${this.walletOrLoyaltyLabel(d)} points`, value: forfeitedLoyalty },\n ],\n hasLoyaltyNote: true,\n });\n } else if (wallet > 0) {\n rows.push({ key: 'walletRefundAmount', label: 'Almatar Wallet', value: wallet });\n } else if (forfeitedLoyalty > 0) {\n // Loyalty-only — no wallet cash involved, still lands as permanent\n // wallet points, so it keeps the wallet-style card + note.\n rows.push({\n key: 'totalLoyaltyPoints',\n label: this.walletOrLoyaltyLabel(d),\n value: forfeitedLoyalty,\n hasLoyaltyNote: true,\n });\n }\n REFUND_DEFS\n .filter((def) =>\n def.key !== 'walletRefundAmount' &&\n def.key !== 'totalCardRefundAmount' &&\n def.key !== 'totalCreditRefundAmount' &&\n Number(d[def.key]) > 0,\n )\n .forEach((def) => {\n rows.push({ key: def.key, label: def.label, value: Number(d[def.key]) });\n });\n return rows;\n });\n\n /** Rows that land in the wallet — plain wallet, wallet+loyalty combined, or loyalty-only — share the wallet icon/layout on the result screen. */\n isWalletDestinationRow(r: { key: string }): boolean {\n return r.key === 'walletRefundAmount' || r.key === 'totalLoyaltyPoints';\n }\n\n /**\n * The result screen's \"issued as an Airline Credit Shell\" note. Golden\n * Guarantee overrides this to '' — the confirmation renders like a\n * standard Sabre/Amadeus refund instead (see `confirmRefunds`' folding\n * of any credit-shell amount into the normal payment-method row).\n */\n confirmCreditShellNote = computed((): string => {\n if (this.hasGoldenGuaranteeGift()) return '';\n const d = this.cancelResult();\n if (!d) return '';\n const legInfo = d.legInfo ?? {};\n const hasO = !!legInfo.onward;\n const hasR = !!legInfo.return;\n const oShell = legInfo.onward?.isCreditShell === true;\n const rShell = legInfo.return?.isCreditShell === true;\n const topShell = d.isCreditShell === true;\n if ((hasO && hasR && oShell && rShell) || (hasO && !hasR && oShell) || (!hasO && hasR && rShell) || topShell)\n return 'The refund has been issued as an Airline Credit Shell and can be used for future bookings on the airline website.';\n if (hasO && hasR) {\n if (oShell) return 'The refund for the onward flight has been issued as an Airline Credit Shell.';\n if (rShell) return 'The refund for the return flight has been issued as an Airline Credit Shell.';\n }\n return '';\n });\n\n fmtResult(value: number): string {\n const cur = this.cancelResult()?.currency ?? this.refundData()?.currency ?? 'SAR';\n return `${Number(value || 0).toLocaleString('en-SA', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} ${cur}`;\n }\n\n /**\n * The customer-facing total (ceiled) must match the pre-rounding total the\n * refund is actually computed from — i.e. `totalRefundAmount` must be\n * `totalRefundAmountBeforeCeil` rounded up to a whole currency unit (e.g.\n * 1454.5 → 1455). A mismatch here means the supplier response itself is\n * internally inconsistent and must block confirmation.\n */\n refundReconciles = computed((): boolean => {\n const d = this.adjustedData();\n if (!d || !d.isRefundable) return true;\n const beforeCeil = Number(d.totalRefundAmountBeforeCeil ?? d.totalRefundAmount ?? 0);\n const total = Number(d.totalRefundAmount ?? beforeCeil);\n return Math.abs(Math.ceil(beforeCeil) - total) < 1;\n });\n\n canConfirm = computed(() => {\n const d = this.adjustedData();\n return !!d?.isRefundable && this.refundReconciles() && !this.cancelling();\n });\n\n /**\n * `totalLoyaltyPoints` is normally the forfeited-at-booking points count\n * (no refund destination of its own). But when the backend never\n * populates `totalLoyaltyPointsRefundAmount` for a `loyaltyPaymentType`\n * booking, this is the only signal that a loyalty program was involved,\n * so it doubles as a split-refund row (alongside Card/Wallet) rather than\n * disappearing from the refund breakdown entirely. Always shown as its\n * own row under the program name (e.g. \"Wala\") — never merged into the\n * generic Wallet row, even when `walletRefundAmount` is also non-zero.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private forfeitedLoyaltyPointsFallback(d: any): number {\n if (!d?.loyaltyPaymentType) return 0;\n if (Number(d.totalLoyaltyPointsRefundAmount ?? 0) > 0) return 0;\n return Number(d.totalLoyaltyPoints ?? 0);\n }\n\n /**\n * Some `/confirm` responses for a single-leg (non-cross-seller) booking\n * put `walletRefundAmount`/`totalLoyaltyPoints` on the wrong side at the\n * root — e.g. root reads `walletRefundAmount: 40, totalLoyaltyPoints: 0`\n * while the single leg (which should mirror root exactly here) reads\n * `walletRefundAmount: 0, totalLoyaltyPoints: 40`. Detected narrowly: root\n * shows no forfeited loyalty despite `loyaltyPaymentType` being set, the\n * root wallet amount exactly equals the leg's loyalty points, and the\n * leg's own wallet amount disagrees — in that specific case the leg's\n * values are trusted instead, since with only one leg they're unambiguous.\n *\n * A second, more common shape: root doesn't swap at all, it folds the\n * points straight into `walletRefundAmount` as one opaque lump sum (e.g.\n * root wallet 340 = the leg's own cash wallet 300 + the leg's forfeited\n * loyalty points 40). Split that back into the two parts the leg already\n * tells us about too, so the result screen can show a combined wallet card\n * with the program named instead of one unexplained total.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private correctedConfirmWalletAndLoyalty(d: any): { wallet: number; forfeitedLoyalty: number } {\n const rootWallet = Number(d.walletRefundAmount ?? 0);\n const forfeitedFromRoot = this.forfeitedLoyaltyPointsFallback(d);\n if (forfeitedFromRoot > 0 || !d.loyaltyPaymentType) {\n return { wallet: rootWallet, forfeitedLoyalty: forfeitedFromRoot };\n }\n const onward = d.legInfo?.onward;\n const ret = d.legInfo?.return;\n const leg = onward && !ret ? onward : ret && !onward ? ret : null;\n if (!leg) return { wallet: rootWallet, forfeitedLoyalty: 0 };\n const legLoyalty = Number(leg.totalLoyaltyPoints ?? 0);\n const legWallet = Number(leg.walletRefundAmount ?? 0);\n // Full swap: root reads the leg's loyalty amount where its wallet should be.\n if (\n legLoyalty > 0 &&\n rootWallet === legLoyalty &&\n legWallet !== rootWallet &&\n Number(d.totalLoyaltyPointsRefundAmount ?? 0) === 0\n ) {\n return { wallet: legWallet, forfeitedLoyalty: legLoyalty };\n }\n // Lump sum: root wallet = leg's cash wallet + leg's forfeited loyalty.\n if (\n legLoyalty > 0 &&\n legWallet > 0 &&\n Math.abs(rootWallet - (legWallet + legLoyalty)) < 1 &&\n Number(d.totalLoyaltyPointsRefundAmount ?? 0) === 0\n ) {\n return { wallet: legWallet, forfeitedLoyalty: legLoyalty };\n }\n // Newer `/confirm` responses drop the loyalty portion from both root and\n // leg totals — `walletRefundAmount` arrives as one opaque lump that's the\n // cash-wallet portion (`totalWalletAmount`) plus a loyalty-program amount.\n // When `loyaltyPaymentType` is set, the lump exceeds the cash-wallet\n // portion, and it's a genuine card+wallet split (not a \"send everything to\n // the wallet\" refund), the difference is that loyalty amount.\n const cashWallet = Number(d.totalWalletAmount ?? 0);\n const impliedLoyalty = rootWallet - cashWallet;\n if (\n impliedLoyalty > 0.01 &&\n cashWallet > 0 &&\n Number(d.totalCardRefundAmount ?? 0) > 0 &&\n Number(d.totalLoyaltyPointsRefundAmount ?? 0) === 0\n ) {\n return { wallet: cashWallet, forfeitedLoyalty: impliedLoyalty };\n }\n // The whole wallet refund is the loyalty-program balance — no cash-wallet\n // portion (`totalWalletAmount` 0) and no card portion, but\n // `loyaltyPaymentType` is set. Attribute all of it to the program so the\n // popup names it (e.g. \"Wala\") with the permanent-points note.\n if (\n cashWallet === 0 &&\n rootWallet > 0 &&\n Number(d.totalCardRefundAmount ?? 0) === 0 &&\n Number(d.totalLoyaltyPointsRefundAmount ?? 0) === 0\n ) {\n return { wallet: 0, forfeitedLoyalty: rootWallet };\n }\n return { wallet: rootWallet, forfeitedLoyalty: 0 };\n }\n\n /** How many of {wallet, card, loyalty} the refund is actually split across. */\n private splitPartsCount = computed(() => {\n const d = this.adjustedData();\n if (!d) return 0;\n return [\n d.walletRefundAmount,\n d.totalCardRefundAmount,\n d.totalLoyaltyPointsRefundAmount,\n this.forfeitedLoyaltyPointsFallback(d),\n ].filter((v) => Number(v ?? 0) > 0).length;\n });\n\n /**\n * A portion of the refund is forced to the wallet (e.g. loyalty points used)\n * — in that case offer a \"Split Refund\" option instead of a pure\n * original-payment-method option, since the whole amount can't go to card.\n */\n hasSplitRefund = computed(\n () => Number(this.adjustedData()?.totalRefundAmount ?? 0) > 0 && this.splitPartsCount() >= 2,\n );\n\n /**\n * Wallet covers the whole refund (no card or loyalty portion at all) — show\n * the wallet option alone rather than a \"split\" with empty other sides.\n */\n isWalletOnlyRefund = computed(() => {\n const d = this.adjustedData();\n return (\n Number(d?.walletRefundAmount ?? 0) > 0 &&\n Number(d?.totalCardRefundAmount ?? 0) === 0 &&\n Number(d?.totalLoyaltyPointsRefundAmount ?? 0) === 0 &&\n this.forfeitedLoyaltyPointsFallback(d) === 0\n );\n });\n\n /**\n * The entire refund is forfeited loyalty points (e.g. Wala) landing back as\n * wallet balance — no cash-wallet, card, credit or real\n * loyalty-points-refund portion at all. Without this the picker falls\n * through to the \"Original Payment Method\" card and mislabels the\n * destination as the original gateway (e.g. \"Tabby\"), even though\n * `totalCardRefundAmount` is 0 and nothing goes back to that card.\n */\n isLoyaltyOnlyRefund = computed(() => {\n const d = this.adjustedData();\n return (\n this.forfeitedLoyaltyPointsFallback(d) > 0 &&\n Number(d?.walletRefundAmount ?? 0) === 0 &&\n Number(d?.totalCardRefundAmount ?? 0) === 0 &&\n Number(d?.totalCreditRefundAmount ?? 0) === 0 &&\n Number(d?.totalLoyaltyPointsRefundAmount ?? 0) === 0\n );\n });\n\n /** A real cash-wallet portion is part of the refund (distinct from forfeited loyalty points landing in the wallet). */\n hasCashWalletRefund = computed(\n () => Number(this.adjustedData()?.walletRefundAmount ?? 0) > 0,\n );\n\n /**\n * Wallet card's title — normally \"Almatar Wallet\", but the loyalty program\n * name (Wala, Qitaf, …) when the whole refund is that program's forfeited\n * balance landing back in the wallet.\n */\n walletCardLabel = computed(() =>\n this.isLoyaltyOnlyRefund()\n ? this.walletOrLoyaltyLabel(this.adjustedData()) || 'Almatar Wallet'\n : 'Almatar Wallet',\n );\n\n /**\n * Part of the refund came from converting external loyalty points into\n * wallet funds — surfaced as a note under the wallet destination so the\n * agent knows those points land as permanent wallet balance, not cash.\n */\n hasLoyaltyPointsRefund = computed(\n () => Number(this.adjustedData()?.totalLoyaltyPoints ?? 0) > 0,\n );\n\n /**\n * The booking is refundable but nets to 0.00 after deductions — a\n * dedicated NIL Refund state, distinct from \"not refundable\": no refund\n * method to choose between, just confirmation that nothing is owed back.\n */\n isNilRefund = computed((): boolean => {\n const d = this.adjustedData();\n return !!d?.isRefundable && Number(d.totalRefundAmount ?? 0) === 0;\n });\n\n /** Same as `isNilRefund`, scoped to the confirmed cancellation result — drives the result screen's title. */\n confirmIsNilRefund = computed((): boolean => {\n const d = this.cancelResult();\n return !!d?.isRefundable && Number(d.totalRefundAmount ?? 0) === 0;\n });\n\n /** Whether the customer may send the whole refund to their Almatar Wallet. */\n isFullWalletRefundAllowed = computed(() => !!this.adjustedData()?.isFullWalletRefundAllowed);\n\n /** Whether the customer paid via an installment gateway (Tamara, Tabby, …). */\n isInstallmentMethod = computed(() =>\n INSTALLMENT_GATEWAY_CODES.includes(\n this.normalizeGatewayCode(this.adjustedData()?.paymentMethodCustomerUsed),\n ),\n );\n\n /** Whether the customer paid via a loyalty-program gateway (Al Rajhi Mokafaa, …). */\n isLoyaltyMethod = computed(() =>\n LOYALTY_GATEWAY_CODES.includes(\n this.normalizeGatewayCode(this.adjustedData()?.paymentMethodCustomerUsed),\n ),\n );\n\n /** Any gateway that refunds somewhere other than a plain card — used for the wallet-style icon. */\n isSpecialGatewayMethod = computed(() => this.isInstallmentMethod() || this.isLoyaltyMethod());\n\n /**\n * Card-refund settlement-timeline badge — Tabby and Tamara each have their\n * own processing window, distinct from a plain card's generic bank policy.\n */\n cardBadgeText = computed(() => {\n const code = this.normalizeGatewayCode(this.adjustedData()?.paymentMethodCustomerUsed);\n if (code === 'TB') return 'From 5-7 business days';\n if (code === 'TM') return 'Up to 10 business days';\n if (this.isLoyaltyMethod()) return 'Loyalty Program Policy';\n return 'Up to 15 business days, bank policy';\n });\n\n /** Same as `cardBadgeText`, scoped to the confirmed cancellation result. */\n confirmCardBadgeText = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const d: any = this.cancelResult();\n const code = this.normalizeGatewayCode(d?.paymentMethodCustomerUsed);\n if (code === 'TB') return 'From 5-7 business days';\n if (code === 'TM') return 'Up to 10 business days';\n if (LOYALTY_GATEWAY_CODES.includes(code)) return 'Loyalty Program Policy';\n return 'Up to 15 business days, bank policy';\n });\n\n /**\n * Per-method breakdown of the \"Total paid\" amount. The backend doesn't\n * (yet) expose a dedicated original-payment breakdown, so the known\n * refund-destination fields (card / wallet / loyalty) are used as a proxy\n * for how the booking was originally paid, and whatever's left over after\n * those (e.g. a non-refundable leg/fee that never shows up in any refund\n * field) is folded into the primary payment method — so the rows always\n * add up to the full `originalAmount` shown above them, instead of only\n * covering the refundable portion.\n */\n paidBreakdownRows = computed((): { label: string; value: number }[] => {\n const d = this.adjustedData();\n if (!d) return [];\n // Card and loyalty stay distinct labels (same categorization as\n // `refunds`) so a gateway like Al Rajhi Mokafaa doesn't swallow an\n // actual separate card portion under one label.\n const cardLabel =\n (!this.isLoyaltyMethod() && this.customerPaymentLabel()) || 'Original Payment Method';\n // The wallet destination row always reads \"Almatar Wallet\" — unlike\n // `refunds`/`confirmRefunds`, this row never swaps to the loyalty\n // program name, since `forfeitedLoyaltyLabel` below is that program's\n // own dedicated row and the two must stay visually distinct here.\n const walletLabel = 'Almatar Wallet';\n const forfeitedLoyaltyLabel = this.walletOrLoyaltyLabel(d) || 'Loyalty Points';\n const loyaltyLabel = this.customerPaymentLabel() || 'Loyalty Points Refund';\n const amounts = new Map<string, number>();\n const add = (label: string, value: number) => {\n if (value <= 0) return;\n amounts.set(label, (amounts.get(label) ?? 0) + value);\n };\n add(cardLabel, Number(d.totalCardRefundAmount ?? 0));\n // This row shows how much of the *original* payment went through the\n // wallet — `totalWalletAmount`, not `walletRefundAmount` (a refund\n // destination amount that can differ, e.g. only part of the wallet\n // payment is refundable after deductions).\n add(walletLabel, Number(d.totalWalletAmount ?? 0));\n add(loyaltyLabel, Number(d.totalLoyaltyPointsRefundAmount ?? 0));\n // `totalLoyaltyPoints` is the portion of the *original* payment made with\n // loyalty points (now forfeited/deducted, not refunded) — distinct from\n // `totalLoyaltyPointsRefundAmount` above and from `walletRefundAmount`\n // (an unrelated refund-destination amount). Always shown as its own row\n // under the program name (e.g. \"Qitaf\"/\"Wala\") rather than merged into\n // the generic Wallet row or silently folded into the leftover remainder.\n add(forfeitedLoyaltyLabel, Number(d.totalLoyaltyPoints ?? 0));\n\n const total = Number(d.originalAmount ?? 0);\n const known = [...amounts.values()].reduce((a, b) => a + b, 0);\n const remainder = total - known;\n if (remainder > 0.01) {\n // Unaccounted leftover (e.g. a non-refundable portion) is folded into\n // the primary/default payment channel rather than a fabricated 4th row.\n add(cardLabel, remainder);\n }\n return [...amounts.entries()].map(([label, value]) => ({ label, value }));\n });\n\n /** The \"Total paid\" row always expands — there's always at least one method to show. */\n hasPaidBreakdown = computed(() => this.paidBreakdownRows().length > 0);\n\n togglePaidSummary() {\n this.paidSummaryExpanded.set(!this.paidSummaryExpanded());\n }\n\n /**\n * The backend has sent `paymentMethodCustomerUsed` as both a short code\n * (`\"CH\"`) and a full gateway name (`\"Card\"`) at different times — match\n * either, case-insensitively, against the known codes/labels rather than\n * assuming one format.\n */\n private normalizeGatewayCode(raw?: string | null): string {\n if (!raw) return '';\n const needle = raw.trim().toLowerCase();\n const codes = Object.keys(PAYMENT_GATEWAY_LABELS);\n const byCode = codes.find((code) => code.toLowerCase() === needle);\n if (byCode) return byCode;\n return codes.find((code) => PAYMENT_GATEWAY_LABELS[code].toLowerCase() === needle) ?? '';\n }\n\n /**\n * Display label for `paymentMethodCustomerUsed`, or '' if unknown/internal.\n * Never surfaces an internal processor name (e.g. Hyperpay) to the agent —\n * callers fall back to a generic \"Original Payment Method\" label whenever\n * this returns ''.\n */\n customerPaymentLabel = computed(() => {\n const code = this.normalizeGatewayCode(this.adjustedData()?.paymentMethodCustomerUsed);\n if (code && INTERNAL_GATEWAY_CODES.includes(code)) return '';\n return code ? PAYMENT_GATEWAY_LABELS[code] : '';\n });\n\n /** Whether the confirmed cancellation's card refund settles via Mada. */\n isMadaMethod = computed(() => {\n const code = this.normalizeGatewayCode(this.adjustedData()?.paymentMethodCustomerUsed);\n return !!code && MADA_GATEWAY_CODES.includes(code);\n });\n\n /**\n * Label for the standalone \"Original Payment Method\" option card (shown\n * when the whole refund goes to one destination). Mada wins over\n * everything else, reading \"Mada Card\" instead of the generic gateway\n * name or the \"Original Payment Method\" fallback.\n */\n originalPaymentLabel = computed(() => {\n if (this.isMadaMethod()) return 'Mada Card';\n return this.customerPaymentLabel() || 'Original Payment Method';\n });\n\n /** Same as `isMadaMethod`, scoped to the confirmed cancellation result. */\n confirmIsMadaMethod = computed(() => {\n const code = this.normalizeGatewayCode(this.cancelResult()?.paymentMethodCustomerUsed);\n return !!code && MADA_GATEWAY_CODES.includes(code);\n });\n\n /**\n * Split-refund destination rows — up to four: Almatar Wallet (generic\n * label), the original payment method (card/installment gateway), a\n * separate loyalty-points-refund row when the backend sends one, and a\n * dedicated loyalty-program row (Wala, Qitaf, …) for forfeited points\n * (`forfeitedLoyaltyPointsFallback`) — kept distinct from the Wallet row\n * even when both are non-zero.\n */\n splitRefundRows = computed(() => {\n const d = this.adjustedData();\n if (!d) return [];\n const rows: { label: string; value: number; instant: boolean; isLoyalty: boolean; badgeText: string; isMada?: boolean }[] = [];\n const wallet = Number(d.walletRefundAmount ?? 0);\n if (wallet > 0) {\n rows.push({ label: 'Almatar Wallet', value: wallet, instant: true, isLoyalty: false, badgeText: 'Instant' });\n }\n const card = Number(d.totalCardRefundAmount ?? 0);\n if (card > 0) {\n const badgeText = this.cardBadgeText();\n rows.push({\n label: this.isMadaMethod()\n ? 'Mada Card'\n : (!this.isLoyaltyMethod() && this.customerPaymentLabel()) || 'Original Payment Method',\n value: card,\n instant: false,\n isLoyalty: false,\n badgeText,\n isMada: this.isMadaMethod(),\n });\n }\n const loyalty = Number(d.totalLoyaltyPointsRefundAmount ?? 0);\n if (loyalty > 0) {\n rows.push({\n label: this.customerPaymentLabel() || 'Loyalty Points Refund',\n value: loyalty,\n instant: true,\n isLoyalty: true,\n badgeText: 'Instant',\n });\n }\n const forfeitedLoyalty = this.forfeitedLoyaltyPointsFallback(d);\n if (forfeitedLoyalty > 0) {\n rows.push({\n label: this.walletOrLoyaltyLabel(d) || 'Loyalty Points',\n value: forfeitedLoyalty,\n instant: true,\n isLoyalty: true,\n badgeText: 'Instant',\n });\n }\n return rows;\n });\n\n /**\n * Wallet-row label for a loyalty-program redemption — `loyaltyPaymentType`\n * (e.g. Wala, Qitaf) names the program that redeemed into the wallet\n * balance and applies regardless of `paymentMethodCustomerUsed`; the\n * backend can report an unrelated original payment gateway (e.g. Tabby)\n * alongside a wallet portion that's actually a loyalty redemption.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walletOrLoyaltyLabel(d: any): string {\n const loyalty = d?.loyaltyPaymentType ?? '';\n return PAYMENT_GATEWAY_LABELS[loyalty] ?? '';\n }\n\n constructor() {\n effect(() => {\n if (this.visible() && this.bookingId()) {\n this.loadRefund();\n } else {\n this.stopHints();\n this.refundData.set(null);\n this.cancelResult.set(null);\n this.onwardChecked.set(true);\n this.returnChecked.set(true);\n this.forcedLegType.set(null);\n this.onwardExpanded.set(true);\n this.returnExpanded.set(true);\n this.selectedSource.set('');\n this.preferredRefundMethod.set('originalPaymentMethod');\n this.confirming.set(false);\n this.cancelling.set(false);\n this.step.set('loading');\n }\n }, { allowSignalWrites: true });\n }\n\n private loadRefund(): void {\n this.loading.set(true);\n this.startHints();\n this.bookingService.getRefundDetails(this.bookingId(), this.product()).subscribe({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n next: (raw: any) => {\n let data = raw?.data ?? raw;\n\n this.stopHints();\n this.refundData.set(data);\n // Auto-select source: prefer appliedSource, otherwise pick first available\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakdown: Record<string, any> = data?.sourceBreakdown ?? {};\n const sources = Object.keys(breakdown);\n if (sources.length > 0) {\n const applied = data?.appliedSource;\n this.selectedSource.set(applied && breakdown[applied] ? applied : sources[0]);\n }\n this.loading.set(false);\n // Only show the leg picker for a genuine round-trip the backend hasn't\n // already restricted to a single leg — otherwise go straight to details.\n if (this.showRoundTripLegCards()) {\n // Pre-check whichever legs are actually refundable, matching the\n // consumer app's \"non-refundable legs can't be selected\" behavior.\n this.onwardChecked.set(this.onwardRefundable());\n this.returnChecked.set(this.returnRefundable());\n this.step.set('select-leg');\n } else {\n this.step.set('details');\n }\n },\n error: () => { this.stopHints(); this.loading.set(false); this.toast.error('Could not load refund details.'); },\n });\n }\n\n /**\n * Both legs in play — sum each leg's own figures instead of trusting root\n * (root isn't reliably scoped to the picked alternatives, e.g. rounding\n * can drift between leg totals and the combined root total).\n */\n private buildCombinedLegData(root: RefundData, onward: LegDetails, ret: LegDetails): RefundData {\n const onwardData = this.buildLegData(root, onward, 'onward');\n const returnData = this.buildLegData(root, ret, 'return');\n const sum = (key: string) => Number(onwardData[key] || 0) + Number(returnData[key] || 0);\n return {\n ...root,\n isRefundable: onward.isRefundable === true && ret.isRefundable === true,\n totalRefundAmount: sum('totalRefundAmount'),\n totalRefundAmountBeforeCeil: sum('totalRefundAmountBeforeCeil'),\n totalCardRefundAmount: sum('totalCardRefundAmount'),\n totalCreditRefundAmount: sum('totalCreditRefundAmount'),\n totalNonRefundableServiceCharge: sum('totalNonRefundableServiceCharge'),\n totalCouponAmount: sum('totalCouponAmount'),\n walletRefundAmount: sum('walletRefundAmount'),\n totalPenaltyPoints: sum('totalPenaltyPoints'),\n totalSupplierPenaltyPoints: sum('totalSupplierPenaltyPoints'),\n totalLoyaltyPoints: sum('totalLoyaltyPoints'),\n totalGiftAmount: sum('totalGiftAmount'),\n totalAncillaryRefundAmount: sum('totalAncillaryRefundAmount'),\n totalLoyaltyPointsRefundAmount: sum('totalLoyaltyPointsRefundAmount'),\n totalCancellationFee: sum('totalCancellationFee'),\n totalSupplierBookingAmount: sum('totalSupplierBookingAmount'),\n originalAmount: Number(root.originalAmount || 0),\n refundBreakdown: this.mergeBreakdowns(onwardData.refundBreakdown, returnData.refundBreakdown),\n legInfo: { onward, return: ret },\n };\n }\n\n /** Combine two legs' itemized breakdowns for the \"both legs\" combined view. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private mergeBreakdowns(a: any, b: any): any {\n if (!a && !b) return undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mergeSide = (sa: any, sb: any) => ({\n fare: Number(sa?.fare || 0) + Number(sb?.fare || 0) || undefined,\n addOns: [...(sa?.addOns ?? []), ...(sb?.addOns ?? [])],\n ancillaries: [...(sa?.ancillaries ?? []), ...(sb?.ancillaries ?? [])],\n serviceFee: Number(sa?.serviceFee || 0) + Number(sb?.serviceFee || 0) || undefined,\n handlingFee: Number(sa?.handlingFee || 0) + Number(sb?.handlingFee || 0) || undefined,\n cancellationPenalty:\n Number(sa?.cancellationPenalty || 0) + Number(sb?.cancellationPenalty || 0) || undefined,\n });\n return {\n refundable: mergeSide(a?.refundable, b?.refundable),\n nonRefundable: mergeSide(a?.nonRefundable, b?.nonRefundable),\n };\n }\n\n private buildLegData(root: RefundData, leg: LegDetails, legType: 'onward' | 'return'): RefundData {\n // When this leg has no sibling in `legInfo` (a genuine one-way booking,\n // or a narrowed CrossSeller selection where the API only ever sent the\n // one leg), root necessarily describes this same single leg — so a\n // destination total the leg's own object left at 0 can safely fall back\n // to root's figure instead of silently zeroing out a real refund\n // destination. With a sibling leg present, root aggregates both legs and\n // is not trustworthy per-leg, so the leg's own value (even 0) wins.\n const hasSiblingLeg =\n legType === 'onward' ? !!root.legInfo?.return : !!root.legInfo?.onward;\n const fallback = (value: number | undefined, rootValue: number | undefined) =>\n Number(value || (hasSiblingLeg ? 0 : rootValue) || 0);\n\n const isCreditShell = leg.isCreditShell === true;\n const legRefund = Number(leg.totalRefundAmount ?? 0);\n const cardRefund = isCreditShell ? 0 : fallback(leg.totalCardRefundAmount, root.totalCardRefundAmount);\n const creditRefund = isCreditShell ? legRefund : fallback(leg.totalCreditRefundAmount, root.totalCreditRefundAmount);\n // The backend sometimes omits `isRefundable` on a single-leg booking's\n // leg object entirely (not `false`, just absent) while the root/source\n // breakdown both say the booking is refundable — trust the root flag\n // rather than defaulting a missing field to \"not eligible for a refund\".\n const legIsRefundable =\n leg.isRefundable === undefined ? root.isRefundable === true : leg.isRefundable === true;\n return {\n ...root,\n isRefundable: legIsRefundable,\n totalRefundAmount: legRefund,\n // Pre-rounding total — the backend ceils `totalRefundAmount` to a whole\n // currency unit, so wallet+card+credit+loyalty legitimately fall a few\n // cents short of it; reconciliation must compare against this instead.\n totalRefundAmountBeforeCeil: Number(leg.totalRefundAmountBeforeCeil ?? leg.totalRefundAmount ?? 0),\n totalCardRefundAmount: cardRefund,\n totalCreditRefundAmount: creditRefund,\n totalNonRefundableServiceCharge: Number(leg.totalNonRefundableServiceCharge || 0),\n totalCouponAmount: Number(leg.totalCouponAmount || 0),\n walletRefundAmount: fallback(leg.walletRefundAmount, root.walletRefundAmount),\n totalPenaltyPoints: Number(leg.totalPenaltyPoints || 0),\n totalSupplierPenaltyPoints: Number(leg.totalSupplierPenaltyPoints || 0),\n totalLoyaltyPoints: Number(leg.totalLoyaltyPoints || 0),\n totalGiftAmount: Number(leg.totalGiftAmount || 0),\n totalAncillaryRefundAmount: Number(leg.totalAncillaryRefundAmount || 0),\n totalLoyaltyPointsRefundAmount: fallback(leg.totalLoyaltyPointsRefundAmount, root.totalLoyaltyPointsRefundAmount),\n totalCancellationFee: Number(leg.totalCancellationFee ?? leg.totalPenaltyPoints ?? 0),\n totalSupplierBookingAmount: Number(leg.totalSupplierBookingAmount || 0),\n originalAmount: Number(root.originalAmount || 0),\n // Leg-scoped breakdown wins when the backend sends one; a single-leg\n // booking may only carry it at the root instead.\n refundBreakdown: leg.refundBreakdown ?? root.refundBreakdown,\n legInfo: legType === 'onward' ? { onward: leg } : { return: leg },\n };\n }\n\n startHints(): void {\n let i = 0;\n this.cancelHint.set(this.CANCEL_HINTS[0]);\n this.hintTimer = setInterval(() => {\n if (i < this.CANCEL_HINTS.length - 1) {\n i++;\n this.cancelHint.set(this.CANCEL_HINTS[i]);\n } else {\n clearInterval(this.hintTimer);\n this.hintTimer = null;\n }\n }, 1800);\n }\n\n stopHints(): void {\n if (this.hintTimer) { clearInterval(this.hintTimer); this.hintTimer = null; }\n this.cancelHint.set('');\n }\n\n fmt(value: number, currency?: string): string {\n const cur = currency ?? this.refundData()?.currency ?? 'SAR';\n return `${this.fmtNum(value)} ${cur}`;\n }\n\n // Plain formatted number without a currency suffix (used by the calc divider / formula box).\n fmtNum(value: number): string {\n return Number(value || 0).toLocaleString('en-SA', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n }\n\n fmtNeg(value: number, currency?: string): string {\n const n = Number(value || 0);\n const str = this.fmt(n, currency);\n return n > 0 ? `− ${str}` : str;\n }\n\n fmtNegResult(value: number): string {\n const n = Number(value || 0);\n const str = this.fmtResult(n);\n return n > 0 ? `− ${str}` : str;\n }\n\n // Entry point from the details screen: always goes to the refund-method\n // step. For credit-shell refunds that step shows a single read-only credit\n // notice instead of a picker, since the refund can only go to the shell —\n // but the agent still sees it before confirming, same as the standard flow.\n requestCancel(): void {\n // NIL refund: nothing to refund at all — skip the refund-method popup\n // and cancel directly.\n if (this.isNilRefund()) {\n this.confirm();\n } else {\n this.confirming.set(true);\n }\n }\n\n confirm(): void {\n const sel = this.selectedLeg();\n\n // Build legInfo array: omit when cancelling both (backend treats absence as both)\n const legInfo: string[] | undefined =\n sel === 'onward' ? ['onward'] :\n sel === 'return' ? ['return'] :\n undefined; // both legs — omit the field\n\n const source = this.selectedSource() || undefined;\n const preferredRefundMethod = this.preferredRefundMethod();\n const splitAmounts =\n preferredRefundMethod === 'split'\n ? {\n walletRefundAmount: Number(this.adjustedData()?.walletRefundAmount ?? 0),\n totalCardRefundAmount: Number(this.adjustedData()?.totalCardRefundAmount ?? 0),\n }\n : undefined;\n this.confirming.set(false);\n this.stopHints();\n this.cancelling.set(true);\n this.bookingService.confirmCancel(this.bookingId(), this.product(), legInfo, source, preferredRefundMethod, splitAmounts).subscribe({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n next: (raw: any) => {\n this.stopHints();\n this.cancelling.set(false);\n this.cancelResult.set(raw?.data ?? raw);\n this.confirmed.emit(sel);\n },\n error: () => {\n this.stopHints();\n this.cancelling.set(false);\n this.toast.error('Cancellation failed. Please try again.');\n },\n });\n }\n}\n","<p-dialog [visible]=\"visible()\" (visibleChange)=\"$event ? null : closed.emit()\"\n [modal]=\"true\" [blockScroll]=\"true\" [draggable]=\"false\" [resizable]=\"false\"\n [showHeader]=\"false\" [style]=\"{ width: '560px', padding: '0' }\" styleClass=\"sbd-cancel-dialog-wrapper\">\n\n <div class=\"sbd-cancel\">\n\n <!-- Loading refund details — shows cycling hints -->\n @if (loading()) {\n <div class=\"sbd-cancel__are-you-sure\">\n <button type=\"button\" class=\"sbd-cancel__close-btn sbd-cancel__close-btn--floating\" (click)=\"closed.emit()\" aria-label=\"Close\">\n <i class=\"pi pi-times\"></i>\n </button>\n <div class=\"sbd-cancel__ays-icon\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n </div>\n @for (h of [cancelHint()]; track h) {\n <div class=\"sbd-cancel__ays-hint\">{{ h }}</div>\n }\n <div class=\"sbd-cancel__ays-dots\">\n <span></span><span></span><span></span>\n </div>\n </div>\n }\n\n <!-- Select leg — shown once the refund preview has fully loaded, before the\n refund breakdown, for round-trip bookings the backend hasn't already\n restricted to a single leg. Same card design as almatar-b2c's\n select-leg screen (checkbox overlay, refundable badge, disclaimer). -->\n @else if (step() === 'select-leg') {\n <div class=\"sbd-cancel__method-header\">\n <button type=\"button\" class=\"sbd-cancel__method-close\" (click)=\"closed.emit()\" aria-label=\"Close\">\n <i class=\"pi pi-times\"></i>\n </button>\n <div class=\"sbd-cancel__method-header-text\">\n <h3 class=\"sbd-cancel__method-title\">Select Leg to Cancel</h3>\n <span class=\"sbd-cancel__method-sub\">Booking ID #{{ bookingId() }}</span>\n </div>\n </div>\n\n <div class=\"sbd-cancel__select-leg-body\">\n @if (forcedLegType(); as forced) {\n <div class=\"sbd-cancel__single-leg-note\">\n <i class=\"pi pi-info-circle\"></i>\n <span>This airline doesn't allow cancelling a single flight — {{ itineraryLeg(forced)?.from }} to {{ itineraryLeg(forced)?.to }} will be included automatically.</span>\n </div>\n }\n @if (allLegsNonRefundable()) {\n <div class=\"sbd-cancel__all-non-refundable-note\">\n <i class=\"pi pi-exclamation-triangle\"></i>\n <span>Sorry, we're unable to provide a refund for this booking, as both flights are non-refundable based on airline rules.</span>\n </div>\n }\n <!-- Onward -->\n <div class=\"sbd-cancel__leg-select-card\"\n [ngClass]=\"{\n 'sbd-cancel__leg-select-card--selected': onwardChecked() && onwardRefundable(),\n 'sbd-cancel__leg-select-card--disabled': !onwardRefundable(),\n 'sbd-cancel__leg-select-card--frozen': forcedLegType() === 'onward'\n }\">\n @if (forcedLegType() !== 'onward') {\n <label class=\"sbd-cancel__leg-select-checkbox\">\n <input type=\"checkbox\" [checked]=\"onwardChecked()\" [disabled]=\"!onwardRefundable()\"\n (change)=\"toggleLeg('onward')\" />\n <span class=\"sbd-cancel__leg-select-icon\"><i class=\"pi pi-check\"></i></span>\n </label>\n } @else {\n <i class=\"pi pi-lock sbd-cancel__leg-select-lock\"></i>\n }\n <div class=\"sbd-cancel__leg-select-content\">\n @if (itineraryLeg('onward'); as leg) {\n <div class=\"sbd-cancel__leg-select-top\">\n <div>\n <span class=\"sbd-cancel__leg-select-name\">{{ leg.from }} to {{ leg.to }}</span>\n <div class=\"sbd-cancel__leg-select-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline\"\n [ngClass]=\"onwardRefundable() && forcedLegType() !== 'onward' ? 'sbd-cancel__badge--green' : 'sbd-cancel__badge--muted'\">\n {{ onwardRefundable() ? 'Refundable' : 'Non-Refundable' }}\n </span>\n </div>\n <div class=\"sbd-cancel__leg-select-times\">\n <span class=\"sbd-cancel__leg-select-time\">{{ fmtTime(leg.depTime) }}</span>\n <span class=\"sbd-cancel__leg-select-line\">\n <span class=\"sbd-cancel__leg-select-line-stops\">{{ leg.stops.length > 0 ? (leg.stops.length + ' stop' + (leg.stops.length > 1 ? 's' : '')) : 'Direct' }}</span>\n @if (fmtMins(leg.totalMinutes)) { <span class=\"sbd-cancel__leg-select-line-dur\">{{ fmtMins(leg.totalMinutes) }}</span> }\n <i class=\"pi pi-arrow-right sbd-cancel__leg-select-line-arrow\"></i>\n </span>\n <span class=\"sbd-cancel__leg-select-time\">{{ fmtTime(leg.arrTime) }}</span>\n </div>\n @if (leg.airlineName || leg.cabin) {\n <span class=\"sbd-cancel__leg-select-airline\">\n {{ leg.airlineName }}{{ leg.airlineName && leg.cabin ? ' · ' : '' }}{{ leg.cabin }}\n </span>\n }\n <div class=\"sbd-cancel__leg-select-footer\">\n @if (leg.operatedBy.length) {\n <span class=\"sbd-cancel__leg-select-operated-by\">Operated by {{ leg.operatedBy.join(', ') }}</span>\n }\n <!-- <i class=\"pi pi-chevron-down sbd-cancel__leg-select-chevron\"></i> -->\n </div>\n } @else {\n <div class=\"sbd-cancel__leg-select-top\">\n <span class=\"sbd-cancel__leg-select-name\">Onward</span>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline\"\n [ngClass]=\"onwardRefundable() && forcedLegType() !== 'onward' ? 'sbd-cancel__badge--green' : 'sbd-cancel__badge--muted'\">\n {{ onwardRefundable() ? 'Refundable' : 'Non-Refundable' }}\n </span>\n </div>\n }\n @if (!onwardRefundable()) {\n <div class=\"sbd-cancel__leg-select-notice\">\n <i class=\"pi pi-info-circle\"></i>\n <span>This flight type doesn't allow refunds on cancellation, based on the airline's fare rules.</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Return -->\n <div class=\"sbd-cancel__leg-select-card\"\n [ngClass]=\"{\n 'sbd-cancel__leg-select-card--selected': returnChecked() && returnRefundable(),\n 'sbd-cancel__leg-select-card--disabled': !returnRefundable(),\n 'sbd-cancel__leg-select-card--frozen': forcedLegType() === 'return'\n }\">\n @if (forcedLegType() !== 'return') {\n <label class=\"sbd-cancel__leg-select-checkbox\">\n <input type=\"checkbox\" [checked]=\"returnChecked()\" [disabled]=\"!returnRefundable()\"\n (change)=\"toggleLeg('return')\" />\n <span class=\"sbd-cancel__leg-select-icon\"><i class=\"pi pi-check\"></i></span>\n </label>\n } @else {\n <i class=\"pi pi-lock sbd-cancel__leg-select-lock\"></i>\n }\n <div class=\"sbd-cancel__leg-select-content\">\n @if (itineraryLeg('return'); as leg) {\n <div class=\"sbd-cancel__leg-select-top\">\n <div>\n <span class=\"sbd-cancel__leg-select-name\">{{ leg.from }} to {{ leg.to }}</span>\n <div class=\"sbd-cancel__leg-select-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline\"\n [ngClass]=\"returnRefundable() && forcedLegType() !== 'return' ? 'sbd-cancel__badge--green' : 'sbd-cancel__badge--muted'\">\n {{ returnRefundable() ? 'Refundable' : 'Non-Refundable' }}\n </span>\n </div>\n <div class=\"sbd-cancel__leg-select-times\">\n <span class=\"sbd-cancel__leg-select-time\">{{ fmtTime(leg.depTime) }}</span>\n <span class=\"sbd-cancel__leg-select-line\">\n <span class=\"sbd-cancel__leg-select-line-stops\">{{ leg.stops.length > 0 ? (leg.stops.length + ' stop' + (leg.stops.length > 1 ? 's' : '')) : 'Direct' }}</span>\n @if (fmtMins(leg.totalMinutes)) { <span class=\"sbd-cancel__leg-select-line-dur\">{{ fmtMins(leg.totalMinutes) }}</span> }\n <i class=\"pi pi-arrow-right sbd-cancel__leg-select-line-arrow\"></i>\n </span>\n <span class=\"sbd-cancel__leg-select-time\">{{ fmtTime(leg.arrTime) }}</span>\n </div>\n @if (leg.airlineName || leg.cabin) {\n <span class=\"sbd-cancel__leg-select-airline\">\n {{ leg.airlineName }}{{ leg.airlineName && leg.cabin ? ' · ' : '' }}{{ leg.cabin }}\n </span>\n }\n <div class=\"sbd-cancel__leg-select-footer\">\n @if (leg.operatedBy.length) {\n <span class=\"sbd-cancel__leg-select-operated-by\">Operated by {{ leg.operatedBy.join(', ') }}</span>\n }\n <!-- <i class=\"pi pi-chevron-down sbd-cancel__leg-select-chevron\"></i> -->\n </div>\n } @else {\n <div class=\"sbd-cancel__leg-select-top\">\n <span class=\"sbd-cancel__leg-select-name\">Return</span>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline\"\n [ngClass]=\"returnRefundable() && forcedLegType() !== 'return' ? 'sbd-cancel__badge--green' : 'sbd-cancel__badge--muted'\">\n {{ returnRefundable() ? 'Refundable' : 'Non-Refundable' }}\n </span>\n </div>\n }\n @if (!returnRefundable()) {\n <div class=\"sbd-cancel__leg-select-notice\">\n <i class=\"pi pi-info-circle\"></i>\n <span>This flight type doesn't allow refunds on cancellation, based on the airline's fare rules.</span>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (!allLegsNonRefundable() && !onwardChecked() && !returnChecked()) {\n <div class=\"sbd-cancel__leg-select-hint\">Select at least one flight to continue</div>\n }\n\n <div class=\"sbd-cancel__footer\">\n <button pButton\n styleClass=\"sbd-cancel__btn-primary\"\n label=\"Continue\"\n [disabled]=\"allLegsNonRefundable() || (!onwardChecked() && !returnChecked())\"\n (click)=\"step.set('details')\"></button>\n </div>\n }\n\n <!-- Refund method — replaces the old are-you-sure + radio picker.\n Stays mounted (dimmed) behind the result overlay once confirmed. -->\n @else if (confirming() || cancelResult()) {\n <div class=\"sbd-cancel__method-header\">\n <button type=\"button\" class=\"sbd-cancel__method-close\" (click)=\"confirming.set(false)\" aria-label=\"Close\">\n <i class=\"pi pi-times\"></i>\n </button>\n <div class=\"sbd-cancel__method-header-text\">\n <h3 class=\"sbd-cancel__method-title\">Refund Method</h3>\n <span class=\"sbd-cancel__method-sub\">Booking ID #{{ bookingId() }}</span>\n </div>\n </div>\n\n <div class=\"sbd-cancel__method-body\">\n <div class=\"sbd-cancel__method-amount\">\n <span>You will get back</span>\n <strong>{{ fmt(adjustedData()?.totalRefundAmount) }}</strong>\n </div>\n\n @if (isCreditShell()) {\n <!-- Credit-shell refunds have exactly one destination — the airline\n credit shell — so show it as a read-only card, not a picker. -->\n <div class=\"sbd-cancel__method-option sbd-cancel__method-option--active\">\n <span class=\"sbd-cancel__method-icon\"><i class=\"pi pi-wallet\"></i></span>\n <span class=\"sbd-cancel__method-body-text\">\n <span class=\"sbd-cancel__method-name\">{{ creditShellSupplierName() }} website credit</span>\n <span class=\"sbd-cancel__method-desc\">Your refund will be issued instantly by {{ creditShellSupplierName() }}.</span>\n <span class=\"sbd-cancel__method-badge sbd-cancel__method-badge--instant\">\n <svg width=\"12\" height=\"9\" viewBox=\"0 0 12 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n Instant\n </span>\n </span>\n </div>\n\n <div class=\"sbd-cancel__notice sbd-cancel__notice--credit\">\n <i class=\"pi pi-info-circle\"></i>\n <span>\n Your refund will be issued as airline credit under the same PNR.\n It can be used only for future booking on {{ creditShellSupplierName() }} website.\n </span>\n </div>\n\n <!-- Refundable ancillaries (baggage, seats, …) can independently be\n flagged credit-shell or not — each renders as its own card,\n matching either the credit-shell style above or the normal\n wallet style, both with the same nested note when credit-shell. -->\n @for (item of creditShellAncillaryItems(); track item.name) {\n <div class=\"sbd-cancel__method-option sbd-cancel__method-option--active\">\n <span class=\"sbd-cancel__method-icon\"><i class=\"pi pi-wallet\"></i></span>\n <span class=\"sbd-cancel__method-body-text\">\n <span class=\"sbd-cancel__method-name\">\n {{ item.isCreditShell ? (creditShellSupplierName() + ' website credit') : 'Almatar Wallet' }}\n — {{ item.name }}\n </span>\n <span class=\"sbd-cancel__method-desc\">\n @if (item.isCreditShell) {\n Your refund will be issued instantly by {{ creditShellSupplierName() }}.\n } @else {\n Usable for future bookings\n }\n </span>\n <span class=\"sbd-cancel__method-badge sbd-cancel__method-badge--instant\">\n <svg width=\"12\" height=\"9\" viewBox=\"0 0 12 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n Instant\n </span>\n @if (item.isCreditShell) {\n <span class=\"sbd-cancel__notice sbd-cancel__notice--info\">\n <i class=\"pi pi-info-circle\"></i>\n <span>Your refund will be issued as airline credit under the same PNR. It can be used only for future booking on {{ creditShellSupplierName() }} website.</span>\n </span>\n }\n </span>\n <strong>{{ fmt(item.amount) }}</strong>\n </div>\n }\n } @else {\n\n @if (isFullWalletRefundAllowed() || isWalletOnlyRefund() || isLoyaltyOnlyRefund()) {\n <button type=\"button\" class=\"sbd-cancel__method-option\"\n [ngClass]=\"{ 'sbd-cancel__method-option--active': preferredRefundMethod() === 'wallet' }\"\n (click)=\"preferredRefundMethod.set('wallet')\">\n <span class=\"sbd-cancel__method-icon\"><i class=\"pi pi-wallet\"></i></span>\n <span class=\"sbd-cancel__method-body-text\">\n <span class=\"sbd-cancel__method-name\">{{ walletCardLabel() }}</span>\n <span class=\"sbd-cancel__method-desc\">Usable for future bookings</span>\n <span class=\"sbd-cancel__method-badge sbd-cancel__method-badge--instant\">\n <svg width=\"12\" height=\"9\" viewBox=\"0 0 12 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n Instant Refund\n </span>\n @if (hasLoyaltyPointsRefund() && !hasCashWalletRefund()) {\n <span class=\"sbd-cancel__notice sbd-cancel__notice--info\">\n <i class=\"pi pi-info-circle\"></i>\n <span>External loyalty points are refunded to your almatar Wallet as permanent points and ready to use in your next booking.</span>\n </span>\n }\n </span>\n <span class=\"sbd-cancel__method-radio\"></span>\n </button>\n }\n\n <!-- Original payment method — replaced with a \"Split Refund\" card whenever\n part of the refund is forced to the wallet (e.g. loyalty points used),\n since the total can't go 100% to the original payment method.\n Name/desc/badge/icon become gateway-specific for installment (Tamara,\n Tabby) and loyalty (Al Rajhi Mokafaa) payment methods. -->\n @if (!hasSplitRefund() && !isWalletOnlyRefund() && !isLoyaltyOnlyRefund()) {\n <button type=\"button\" class=\"sbd-cancel__method-option\"\n [ngClass]=\"{ 'sbd-cancel__method-option--active': preferredRefundMethod() === 'originalPaymentMethod' }\"\n (click)=\"preferredRefundMethod.set('originalPaymentMethod')\">\n <span class=\"sbd-cancel__method-icon\">\n <i class=\"pi\" [ngClass]=\"isSpecialGatewayMethod() ? 'pi-wallet' : 'pi-credit-card'\"></i>\n </span>\n <span class=\"sbd-cancel__method-body-text\">\n <span class=\"sbd-cancel__method-name\">{{ originalPaymentLabel() }}</span>\n <span class=\"sbd-cancel__method-desc\">\n @if (isInstallmentMethod()) {\n Returned to your {{ customerPaymentLabel() }} installment plan\n } @else if (isLoyaltyMethod()) {\n Refunded to your {{ customerPaymentLabel() }} account\n } @else {\n Returned to your original payment method\n }\n </span>\n <span class=\"sbd-cancel__method-badge\" [ngClass]=\"isLoyaltyMethod() ? 'sbd-cancel__method-badge--loyalty' : 'sbd-cancel__method-badge--days'\">\n @if (!isLoyaltyMethod()) {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.30078 6.50195C3.20312 6.50195 3.12174 6.4694 3.05664 6.4043C2.99154 6.33919 2.95898 6.25781 2.95898 6.16016C2.95898 6.06576 2.99154 5.986 3.05664 5.9209C3.12174 5.85579 3.20312 5.82324 3.30078 5.82324H5.5127V2.86914C5.5127 2.77474 5.54525 2.69499 5.61035 2.62988C5.67546 2.56478 5.75521 2.53223 5.84961 2.53223C5.94727 2.53223 6.02865 2.56478 6.09375 2.62988C6.15885 2.69499 6.19141 2.77474 6.19141 2.86914V6.16016C6.19141 6.25781 6.15885 6.33919 6.09375 6.4043C6.02865 6.4694 5.94727 6.50195 5.84961 6.50195H3.30078ZM5.85449 10.9551C5.16764 10.9551 4.52311 10.8249 3.9209 10.5645C3.31868 10.3073 2.78971 9.95085 2.33398 9.49512C1.87826 9.03939 1.52018 8.51042 1.25977 7.9082C1.0026 7.30599 0.874023 6.66146 0.874023 5.97461C0.874023 5.28776 1.0026 4.64323 1.25977 4.04102C1.52018 3.4388 1.87826 2.90983 2.33398 2.4541C2.78971 1.99512 3.31868 1.63704 3.9209 1.37988C4.52311 1.12272 5.16764 0.994141 5.85449 0.994141C6.54134 0.994141 7.18587 1.12272 7.78809 1.37988C8.3903 1.63704 8.91927 1.99512 9.375 2.4541C9.83073 2.90983 10.1872 3.4388 10.4443 4.04102C10.7048 4.64323 10.835 5.28776 10.835 5.97461C10.835 6.66146 10.7048 7.30599 10.4443 7.9082C10.1872 8.51042 9.83073 9.03939 9.375 9.49512C8.91927 9.95085 8.3903 10.3073 7.78809 10.5645C7.18587 10.8249 6.54134 10.9551 5.85449 10.9551ZM5.85449 10.125C6.42741 10.125 6.96452 10.0176 7.46582 9.80273C7.96712 9.58789 8.4082 9.29004 8.78906 8.90918C9.16992 8.52832 9.46777 8.08724 9.68262 7.58594C9.89746 7.08464 10.0049 6.54753 10.0049 5.97461C10.0049 5.40169 9.89746 4.86458 9.68262 4.36328C9.46777 3.85872 9.16992 3.41764 8.78906 3.04004C8.4082 2.65918 7.96712 2.36133 7.46582 2.14648C6.96452 1.93164 6.42741 1.82422 5.85449 1.82422C5.28158 1.82422 4.74447 1.93164 4.24316 2.14648C3.74186 2.36133 3.30078 2.65918 2.91992 3.04004C2.53906 3.41764 2.24121 3.85872 2.02637 4.36328C1.81152 4.86458 1.7041 5.40169 1.7041 5.97461C1.7041 6.54753 1.81152 7.08464 2.02637 7.58594C2.24121 8.08724 2.53906 8.52832 2.91992 8.90918C3.30078 9.29004 3.74186 9.58789 4.24316 9.80273C4.74447 10.0176 5.28158 10.125 5.85449 10.125Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n } @else {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"#0B54C2\" stroke-width=\"1.2\" />\n <path d=\"M6 5.5v3M6 3.9v.01\" stroke=\"#0B54C2\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n </svg>\n }\n {{ cardBadgeText() }}\n </span>\n </span>\n <span class=\"sbd-cancel__option-end\">\n @if (isMadaMethod()) {\n <span class=\"sbd-cancel__mada-logo\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"madaLogo\"></ng-container>\n </span>\n }\n <span class=\"sbd-cancel__method-radio\"></span>\n </span>\n </button>\n }\n\n <!-- Split Refund -->\n @if (hasSplitRefund()) {\n <button type=\"button\" class=\"sbd-cancel__method-option sbd-cancel__method-option--split\"\n [ngClass]=\"{ 'sbd-cancel__method-option--active': preferredRefundMethod() === 'split' }\"\n (click)=\"preferredRefundMethod.set('split')\">\n <span class=\"sbd-cancel__method-icon\"><i class=\"pi pi-wallet\"></i></span>\n <span class=\"sbd-cancel__method-body-text\">\n <span class=\"sbd-cancel__method-name\">Split Refund</span>\n <span class=\"sbd-cancel__method-desc\">Returned to your original payment method</span>\n </span>\n <strong class=\"sbd-cancel__method-split-total\">{{ fmt(adjustedData()?.totalRefundAmount) }}</strong>\n <span class=\"sbd-cancel__method-radio\"></span>\n\n <span class=\"sbd-cancel__method-split-breakdown\">\n @for (row of splitRefundRows(); track row.label) {\n <span class=\"sbd-cancel__method-split-row\">\n <span class=\"sbd-cancel__method-split-label\">\n {{ row.label }}\n @if (row.isMada) {\n <span class=\"sbd-cancel__mada-logo\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"madaLogo\"></ng-container>\n </span>\n }\n </span>\n <strong>{{ fmt(row.value) }}</strong>\n </span>\n <span class=\"sbd-cancel__method-badge\"\n [ngClass]=\"row.instant ? 'sbd-cancel__method-badge--instant' : (isLoyaltyMethod() ? 'sbd-cancel__method-badge--loyalty' : 'sbd-cancel__method-badge--days')\">\n {{ row.badgeText }}\n </span>\n @if (row.isLoyalty) {\n <span class=\"sbd-cancel__notice sbd-cancel__notice--info\">\n <i class=\"pi pi-info-circle\"></i>\n <span>External loyalty points are refunded to your almatar Wallet as permanent points and ready to use in your next booking.</span>\n </span>\n }\n }\n </span>\n </button>\n }\n }\n </div>\n\n <div class=\"sbd-cancel__footer\">\n <button pButton\n styleClass=\"sbd-cancel__btn-danger-pill\"\n [label]=\"cancelling() ? 'Cancelling...' : 'Confirm Cancellation'\"\n [disabled]=\"cancelling()\" (click)=\"confirm()\"></button>\n </div>\n }\n\n <!-- Main card -->\n @else if (refundData() && step() === 'details') {\n <!-- Card header -->\n <div class=\"sbd-cancel__header sbd-cancel__header--stack\">\n <div class=\"sbd-cancel__header-titles\">\n <span class=\"sbd-cancel__header-title\">Cancel Booking Request</span>\n <span class=\"sbd-cancel__header-sub\">#{{ refundData()?.bookingId ?? bookingId() }}</span>\n </div>\n <button type=\"button\" class=\"sbd-cancel__close-btn\" (click)=\"closed.emit()\" aria-label=\"Close\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"sbd-cancel__body\">\n\n <!-- Non-refundable -->\n @if (!refundData()?.isRefundable) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-exclamation-triangle\"></i>\n <div>\n <strong>This booking is not eligible for a refund.</strong>\n @if (refundData()?.cause) {\n <p>{{ refundData()?.cause }}</p>\n } @else {\n <p>Please escalate to the relevant team for manual handling.</p>\n }\n </div>\n </div>\n }\n\n <!-- Refundable flow -->\n @else {\n\n <!-- Top summary: paid / get back -->\n <div class=\"sbd-cancel__summary\">\n <div class=\"sbd-cancel__summary-row\"\n [ngClass]=\"{ 'sbd-cancel__summary-row--toggle': hasPaidBreakdown() && !!adjustedData()?.totalWalletAmount }\"\n (click)=\"hasPaidBreakdown() && !!adjustedData()?.totalWalletAmount && togglePaidSummary()\">\n <span class=\"sbd-cancel__summary-label\"><i class=\"pi pi-wallet\"></i> Total paid</span>\n <span class=\"sbd-cancel__summary-value\">\n <strong>{{ fmt(adjustedData()?.originalAmount) }}</strong>\n @if (hasPaidBreakdown() && !!adjustedData()?.totalWalletAmount) {\n <button type=\"button\" class=\"sbd-cancel__leg-chevron\"\n [ngClass]=\"{ 'sbd-cancel__leg-chevron--collapsed': !paidSummaryExpanded() }\"\n aria-label=\"Toggle paid breakdown\">\n <i class=\"pi pi-chevron-up\"></i>\n </button>\n }\n </span>\n </div>\n\n @if (hasPaidBreakdown() && paidSummaryExpanded() && !!adjustedData()?.totalWalletAmount) {\n <div class=\"sbd-cancel__summary-breakdown\">\n @for (row of paidBreakdownRows(); track row.label) {\n @if (row.label === 'Almatar Wallet') {\n <div class=\"sbd-cancel__summary-breakdown-row\">\n <span>{{ row.label }}</span>\n <span>{{ fmt(row.value) }}</span>\n </div>\n }\n }\n </div>\n }\n\n <div class=\"sbd-cancel__summary-row sbd-cancel__summary-row--refund\">\n <span class=\"sbd-cancel__summary-label\"><i class=\"pi pi-dollar\"></i> You will get back</span>\n <strong>{{ fmt(adjustedData()?.totalRefundAmount) }}</strong>\n </div>\n </div>\n\n <!-- Golden Guarantee gift — overrides credit-shell messaging below -->\n @if (hasGoldenGuaranteeGift()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--success\">\n <i class=\"pi pi-shield\"></i>\n <span>You're covered by Cancel for any reason service, you'll get 100% refund, minus any applicable fees. See the breakdown below.</span>\n </div>\n }\n\n <!-- One-way (or a round-trip restricted to a single leg): single card -->\n @if (!showRoundTripLegCards()) {\n <!-- Source selector (multiple suppliers) -->\n @if (availableSources().length > 1) {\n <div class=\"sbd-cancel__source-selector\">\n <span class=\"sbd-cancel__source-label\">Cancel via</span>\n @for (src of availableSources(); track src) {\n <button class=\"sbd-cancel__source-chip\"\n [ngClass]=\"{\n 'sbd-cancel__source-chip--active': selectedSource() === src,\n 'sbd-cancel__source-chip--no-refund': activeSourceBreakdown()?.[src]?.isRefundable === false\n }\"\n (click)=\"selectedSource.set(src)\">\n {{ src }}\n @if (activeSourceBreakdown()?.[src]?.isRefundable === false) {\n <i class=\"pi pi-ban\" style=\"font-size:10px; margin-left:4px;\"></i>\n }\n </button>\n }\n </div>\n @if (sourceNonRefundableHint()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-ban\"></i>\n <span>{{ sourceNonRefundableHint() }}</span>\n </div>\n }\n }\n\n <!-- Not refundable -->\n @if (!currentData()?.isRefundable) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-ban\"></i>\n <div>\n <strong>This leg is not eligible for a refund.</strong>\n <p>Please escalate to the relevant team for manual handling.</p>\n </div>\n </div>\n } @else {\n <div class=\"sbd-cancel__section-title\">Refund Details</div>\n\n <div class=\"sbd-cancel__refund-card\">\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline sbd-cancel__badge--green\">Refundable</span>\n\n @if (refundableBreakdownRows(adjustedData()).length) {\n @for (r of refundableBreakdownRows(adjustedData()); track r.label) {\n <div class=\"sbd-cancel__refund-card-row\">\n <span>{{ r.label }}</span>\n <strong>{{ fmt(r.value) }}</strong>\n </div>\n }\n } @else {\n <div class=\"sbd-cancel__refund-card-row\">\n <span>Fare</span>\n <strong>{{ fmt(adjustedData()?.originalAmount) }}</strong>\n </div>\n }\n\n <!-- hide addon note new CR from CX -->\n <!-- @if (hasRefundableAddonNote(adjustedData())) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--neutral\">\n <i class=\"pi pi-info-circle\"></i>\n <span>Your add-on service/s refund will be processed separately by our Customer Service team shortly.</span>\n </div>\n } -->\n\n <!-- Deductions -->\n @if (deductions().length) {\n <div class=\"sbd-cancel__refund-card-divider\"></div>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline sbd-cancel__badge--muted\">Not Refunded - Deductions</span>\n @for (d of deductions(); track d.label) {\n <div class=\"sbd-cancel__refund-card-line\">\n <span>\n {{ d.label }}\n @if (d.badge) { <span class=\"sbd-cancel__tag\">{{ d.badge }}</span> }\n </span>\n <span class=\"sbd-cancel__refund-card-line--neg\">{{ fmtNeg(d.value) }}</span>\n </div>\n }\n }\n\n <div class=\"sbd-cancel__refund-card-divider sbd-cancel__refund-card-divider--dashed\"></div>\n <div class=\"sbd-cancel__refund-card-total\">\n <span>Total Refund</span>\n <strong>{{ fmt(adjustedData()?.totalRefundAmount) }}</strong>\n </div>\n </div>\n\n <!-- Credit shell -->\n @if (creditShellNote()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--credit\">\n <i class=\"pi pi-wallet\"></i>\n <span>ℹ️ {{ creditShellNote() }}</span>\n </div>\n }\n }\n }\n\n <!-- Round trip: one collapsible card per leg (only when both legs are cancellable) -->\n @if (showRoundTripLegCards()) {\n <!-- Gift hint -->\n @if (giftHint()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--tip\">\n <i class=\"pi pi-info-circle\"></i>\n <span>{{ giftHint() }}</span>\n </div>\n }\n\n <!-- Mixed hint -->\n @if (mixedHint()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-exclamation-triangle\"></i>\n <span>{{ mixedHint() }}</span>\n </div>\n }\n\n <!-- Source selector (multiple suppliers) -->\n @if (availableSources().length > 1) {\n <div class=\"sbd-cancel__source-selector\">\n <span class=\"sbd-cancel__source-label\">Cancel via</span>\n @for (src of availableSources(); track src) {\n <button class=\"sbd-cancel__source-chip\"\n [ngClass]=\"{\n 'sbd-cancel__source-chip--active': selectedSource() === src,\n 'sbd-cancel__source-chip--no-refund': activeSourceBreakdown()?.[src]?.isRefundable === false\n }\"\n (click)=\"selectedSource.set(src)\">\n {{ src }}\n @if (activeSourceBreakdown()?.[src]?.isRefundable === false) {\n <i class=\"pi pi-ban\" style=\"font-size:10px; margin-left:4px;\"></i>\n }\n </button>\n }\n </div>\n @if (sourceNonRefundableHint()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-ban\"></i>\n <span>{{ sourceNonRefundableHint() }}</span>\n </div>\n }\n }\n\n <!-- Onward leg card -->\n @if (onwardChecked()) {\n <div class=\"sbd-cancel__leg-card\">\n <div class=\"sbd-cancel__leg-card-header\" (click)=\"toggleLegExpanded('onward')\">\n <span class=\"sbd-cancel__leg-checkbox\">Onward</span>\n <button type=\"button\" class=\"sbd-cancel__leg-chevron\"\n [ngClass]=\"{ 'sbd-cancel__leg-chevron--collapsed': !onwardExpanded() }\"\n aria-label=\"Toggle\">\n <i class=\"pi pi-chevron-up\"></i>\n </button>\n </div>\n\n @if (onwardExpanded()) {\n <div class=\"sbd-cancel__leg-card-body\">\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline\"\n [ngClass]=\"legAdjustedData('onward')?.isRefundable ? 'sbd-cancel__badge--green' : 'sbd-cancel__badge--red'\">\n {{ legAdjustedData('onward')?.isRefundable ? 'Refundable' : 'Non-Refundable' }}\n </span>\n\n @if (legAdjustedData('onward')?.isRefundable) {\n @if (refundableBreakdownRows(legAdjustedData('onward')).length) {\n @for (r of refundableBreakdownRows(legAdjustedData('onward')); track r.label) {\n <div class=\"sbd-cancel__refund-card-row\">\n <span>{{ r.label }}</span>\n <strong>{{ fmt(r.value) }}</strong>\n </div>\n }\n } @else {\n <div class=\"sbd-cancel__refund-card-row\">\n <span>Fare</span>\n <strong>{{ fmt(legRefundPool('onward')) }}</strong>\n </div>\n }\n\n <!-- hide addon note new CR from CX -->\n <!-- @if (hasRefundableAddonNote(legAdjustedData('onward'))) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--neutral\">\n <i class=\"pi pi-info-circle\"></i>\n <span>Your add-on service/s refund will be processed separately by our Customer Service team shortly.</span>\n </div>\n } -->\n\n @if (legDeductions('onward').length && !isCreditShell()) {\n <div class=\"sbd-cancel__refund-card-divider\"></div>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline sbd-cancel__badge--muted\">Not Refunded - Deductions</span>\n @for (d of legDeductions('onward'); track d.label) {\n <div class=\"sbd-cancel__refund-card-line\">\n <span>\n {{ d.label }}\n @if (d.badge) { <span class=\"sbd-cancel__tag\">{{ d.badge }}</span> }\n </span>\n <span class=\"sbd-cancel__refund-card-line--neg\">{{ fmtNeg(d.value) }}</span>\n </div>\n }\n }\n\n <div class=\"sbd-cancel__refund-card-divider sbd-cancel__refund-card-divider--dashed\"></div>\n <div class=\"sbd-cancel__refund-card-total\">\n <span>Departure Total Refund</span>\n <strong>{{ fmt(legAdjustedData('onward')?.totalRefundAmount) }}</strong>\n </div>\n\n @if (refundData()?.legInfo?.onward?.isCreditShell && !hasGoldenGuaranteeGift()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--credit\">\n <i class=\"pi pi-wallet\"></i>\n <span>ℹ️ The refund for the onward flight has been issued as an Airline Credit Shell.</span>\n </div>\n }\n } @else {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-ban\"></i>\n <span>This leg is not eligible for a refund.</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Return leg card -->\n @if (returnChecked()) {\n <div class=\"sbd-cancel__leg-card\">\n <div class=\"sbd-cancel__leg-card-header\" (click)=\"toggleLegExpanded('return')\">\n <span class=\"sbd-cancel__leg-checkbox\">Return</span>\n <button type=\"button\" class=\"sbd-cancel__leg-chevron\"\n [ngClass]=\"{ 'sbd-cancel__leg-chevron--collapsed': !returnExpanded() }\"\n aria-label=\"Toggle\">\n <i class=\"pi pi-chevron-up\"></i>\n </button>\n </div>\n\n @if (returnExpanded()) {\n <div class=\"sbd-cancel__leg-card-body\">\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline\"\n [ngClass]=\"legAdjustedData('return')?.isRefundable ? 'sbd-cancel__badge--green' : 'sbd-cancel__badge--red'\">\n {{ legAdjustedData('return')?.isRefundable ? 'Refundable' : 'Non-Refundable' }}\n </span>\n\n @if (legAdjustedData('return')?.isRefundable) {\n @if (refundableBreakdownRows(legAdjustedData('return')).length) {\n @for (r of refundableBreakdownRows(legAdjustedData('return')); track r.label) {\n <div class=\"sbd-cancel__refund-card-row\">\n <span>{{ r.label }}</span>\n <strong>{{ fmt(r.value) }}</strong>\n </div>\n }\n } @else {\n <div class=\"sbd-cancel__refund-card-row\">\n <span>Fare</span>\n <strong>{{ fmt(legRefundPool('return')) }}</strong>\n </div>\n }\n\n <!-- hide addon note new CR from CX -->\n <!-- @if (hasRefundableAddonNote(legAdjustedData('return'))) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--neutral\">\n <i class=\"pi pi-info-circle\"></i>\n <span>Your add-on service/s refund will be processed separately by our Customer Service team shortly.</span>\n </div>\n } -->\n\n @if (legDeductions('return').length && !isCreditShell()) {\n <div class=\"sbd-cancel__refund-card-divider\"></div>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline sbd-cancel__badge--muted\">Not Refunded - Deductions</span>\n @for (d of legDeductions('return'); track d.label) {\n <div class=\"sbd-cancel__refund-card-line\">\n <span>\n {{ d.label }}\n @if (d.badge) { <span class=\"sbd-cancel__tag\">{{ d.badge }}</span> }\n </span>\n <span class=\"sbd-cancel__refund-card-line--neg\">{{ fmtNeg(d.value) }}</span>\n </div>\n }\n }\n\n <div class=\"sbd-cancel__refund-card-divider sbd-cancel__refund-card-divider--dashed\"></div>\n <div class=\"sbd-cancel__refund-card-total\">\n <span>Return Total Refund</span>\n <strong>{{ fmt(legAdjustedData('return')?.totalRefundAmount) }}</strong>\n </div>\n\n @if (refundData()?.legInfo?.return?.isCreditShell && !hasGoldenGuaranteeGift()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--credit\">\n <i class=\"pi pi-wallet\"></i>\n <span>ℹ️ The refund for the return flight has been issued as an Airline Credit Shell.</span>\n </div>\n }\n } @else {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-ban\"></i>\n <span>This leg is not eligible for a refund.</span>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n\n <!-- Instant refund notice -->\n @if (currentData()?.isRefundable) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--shield\">\n <i class=\"pi pi-shield\"></i>\n <span>\n @if (isNilRefund()) {\n We're sorry, as per airline policy, no refund applies because the cancellation fees equal or exceed your refundable fare amount.\n } @else {\n @if (isWalletOnlyRefund() || isLoyaltyOnlyRefund()) {\n Your refund is instant to the customer's almatar Wallet.\n } @else {\n Your refund is instant from our side, your bank may take up to 15 business days to reflect it.\n }\n }\n @if (!isNilRefund() && !isCreditShell()) {\n <strong>You can select refund option in the next step</strong>\n }\n </span>\n </div>\n }\n }\n\n </div>\n\n <!-- Footer -->\n <div class=\"sbd-cancel__footer\">\n @if (refundData()?.isRefundable) {\n <button pButton label=\"Keep booking\" styleClass=\"p-button-outlined p-button-secondary sbd-cancel__btn-keep\" (click)=\"closed.emit()\"></button>\n @if (currentData()?.isRefundable) {\n <button pButton\n styleClass=\"sbd-cancel__btn-primary\"\n [label]=\"isCreditShell() ? 'Continue Cancellation' : 'Select refund option'\"\n [disabled]=\"!canConfirm()\" (click)=\"requestCancel()\"></button>\n }\n } @else {\n <button pButton label=\"Close\" styleClass=\"p-button-outlined p-button-secondary\" (click)=\"closed.emit()\"></button>\n }\n </div>\n }\n\n <!-- ── Result overlay: floating modal over the dimmed refund-method screen (scoped to this dialog, not the whole viewport) ── -->\n @if (cancelResult()) {\n <div class=\"sbd-cancel__result-overlay\">\n <div class=\"sbd-cancel__result-backdrop\"></div>\n <div class=\"sbd-cancel__result-modal\">\n <div class=\"sbd-cancel__result-hero\">\n <span class=\"sbd-cancel__result-icon sbd-cancel__result-icon--green\">\n <i class=\"pi pi-check\"></i>\n </span>\n <h3 class=\"sbd-cancel__result-title\">{{ confirmIsNilRefund() ? 'Cancel Confirmed' : 'Refund Confirmed' }}</h3>\n </div>\n\n @for (r of confirmRefunds(); track r.label) {\n <div class=\"sbd-cancel__result-row\">\n <span class=\"sbd-cancel__method-icon\">\n <i class=\"pi\" [ngClass]=\"isWalletDestinationRow(r) ? 'pi-wallet' : 'pi-credit-card'\"></i>\n </span>\n <span class=\"sbd-cancel__result-body-text\">\n <span class=\"sbd-cancel__method-name\">{{ r.label }}</span>\n @if (r.subRows?.length) {\n <span class=\"sbd-cancel__result-sub-rows\">\n @for (sub of r.subRows; track sub.label) {\n <span class=\"sbd-cancel__result-sub-row\">\n <span>{{ sub.label }}</span>\n <strong>{{ fmtResult(sub.value) }}</strong>\n </span>\n }\n </span>\n }\n <span class=\"sbd-cancel__method-badge\"\n [ngClass]=\"isWalletDestinationRow(r) ? 'sbd-cancel__method-badge--instant' : 'sbd-cancel__method-badge--days'\">\n {{ isWalletDestinationRow(r) ? 'Ready Now' : (r.key === 'totalCardRefundAmount' ? confirmCardBadgeText() : 'Up to 15 business days, bank policy') }}\n </span>\n @if (r.hasLoyaltyNote) {\n <span class=\"sbd-cancel__notice sbd-cancel__notice--info\">\n <i class=\"pi pi-info-circle\"></i>\n <span>External loyalty points are refunded to your almatar Wallet as permanent points and ready to use in your next booking.</span>\n </span>\n }\n </span>\n <strong class=\"sbd-cancel__result-amount\">{{ fmtResult(r.value) }}</strong>\n </div>\n }\n\n @if (confirmCreditShellNote()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--credit\">\n <i class=\"pi pi-wallet\"></i>\n <span>ℹ️ {{ confirmCreditShellNote() }}</span>\n </div>\n }\n\n <button pButton styleClass=\"sbd-cancel__btn-primary sbd-cancel__result-done\" label=\"Close\" (click)=\"closed.emit()\"></button>\n </div>\n </div>\n }\n\n </div>\n\n</p-dialog>\n\n<ng-template #madaLogo>\n <svg width=\"43\" height=\"15\" viewBox=\"0 0 43 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_sbd_mada)\">\n <path d=\"M18.1894 8.6543H0V14.9933H18.1894V8.6543Z\" fill=\"#84B740\" />\n <path d=\"M18.1894 0H0V6.34463H18.1894V0Z\" fill=\"#259BD6\" />\n <path\n d=\"M36.3779 13.7034L36.2969 13.7203C36.016 13.7768 35.9134 13.7994 35.7082 13.7994C35.233 13.7994 34.6713 13.5452 34.6713 12.3475C34.6713 11.7316 34.7685 10.9124 35.6542 10.9124H35.6596C35.8108 10.9237 35.9836 10.9407 36.3077 11.0424L36.3779 11.065V13.7034ZM36.5237 7.73164L36.3779 7.75989V9.97458L36.2483 9.93503L36.2105 9.92373C36.0647 9.87853 35.7298 9.77684 35.4058 9.77684C33.6344 9.77684 33.2617 11.178 33.2617 12.3531C33.2617 13.9633 34.1258 14.8898 35.6326 14.8898C36.2699 14.8898 36.7397 14.822 37.215 14.6582C37.6524 14.5113 37.8091 14.3023 37.8091 13.8559V7.5C37.3878 7.5791 36.9504 7.65819 36.5237 7.73164Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M41.651 13.7385L41.5754 13.7611L41.3053 13.8345C41.0515 13.9023 40.8247 13.9419 40.6519 13.9419C40.236 13.9419 39.9876 13.7272 39.9876 13.36C39.9876 13.1227 40.0902 12.7215 40.7707 12.7215H41.651V13.7385ZM41.0299 9.74414C40.4844 9.74414 39.9228 9.84584 39.2261 10.0718L38.7724 10.2131L38.9236 11.2865L39.3665 11.134C39.831 10.9758 40.4088 10.8741 40.8409 10.8741C41.0353 10.8741 41.6294 10.8741 41.6294 11.5464V11.8402H40.8031C39.2963 11.8402 38.5996 12.343 38.5996 13.4221C38.5996 14.343 39.2423 14.8967 40.3224 14.8967C40.6573 14.8967 41.1217 14.8289 41.5214 14.7272L41.543 14.7215L41.5646 14.7272L41.6996 14.7498C42.1208 14.8289 42.5583 14.908 42.9849 14.9927V11.4673C42.9849 10.3261 42.3261 9.74414 41.0299 9.74414Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M31.1527 13.7385L31.0771 13.7611L30.807 13.8345C30.5532 13.9023 30.3318 13.9419 30.1536 13.9419C29.7377 13.9419 29.4893 13.7272 29.4893 13.36C29.4893 13.1227 29.5919 12.7215 30.267 12.7215H31.1473L31.1527 13.7385ZM30.537 9.74414C29.9861 9.74414 29.4299 9.84584 28.7332 10.0718L28.2795 10.2131L28.4308 11.2865L28.8736 11.134C29.3381 10.9758 29.9159 10.8741 30.348 10.8741C30.5424 10.8741 31.1365 10.8741 31.1365 11.5464V11.8402H30.3102C28.8034 11.8402 28.1013 12.343 28.1013 13.4221C28.1013 14.343 28.744 14.8967 29.8295 14.8967C30.1644 14.8967 30.6288 14.8289 31.0285 14.7272L31.0501 14.7215L31.0717 14.7272L31.2013 14.7498C31.6279 14.8289 32.06 14.908 32.4866 14.9984V11.473C32.492 10.3204 31.8332 9.74414 30.537 9.74414Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M25.4701 9.7576C24.7842 9.7576 24.2172 9.99489 24.0065 10.0966L23.9525 10.1248L23.9039 10.0853C23.6123 9.86495 23.1856 9.75195 22.5916 9.75195C22.0677 9.75195 21.5762 9.83105 21.0416 9.99489C20.5825 10.1418 20.4043 10.3734 20.4043 10.8085V14.8367H21.8409V11.1135L21.9111 11.0909C22.2027 10.9892 22.3755 10.9723 22.543 10.9723C22.9588 10.9723 23.1694 11.2039 23.1694 11.6559V14.8423H24.5844V11.5938C24.5844 11.4017 24.5466 11.2887 24.5412 11.2661L24.4926 11.17L24.5898 11.1248C24.8058 11.0231 25.0435 10.9723 25.2919 10.9723C25.5781 10.9723 25.9184 11.0909 25.9184 11.6559V14.8423H27.3279V11.509C27.3279 10.3282 26.7231 9.7576 25.4701 9.7576Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M40.5866 4.13559C40.3759 4.13559 40.0249 4.113 39.7495 4.0565L39.6684 4.03955V1.86441C39.6684 1.68362 39.636 1.57062 39.6306 1.55367L39.5874 1.46328L39.6793 1.42373C39.7009 1.41243 39.7225 1.40678 39.7495 1.39548L39.7657 1.38418C39.7981 1.37288 39.8305 1.36158 39.8629 1.35028C39.8791 1.34463 39.8899 1.33898 39.9007 1.33898C40.2193 1.24859 40.511 1.25989 40.6406 1.24859H40.646C41.5263 1.24859 41.6289 2.0678 41.6289 2.68362C41.6235 3.88136 41.0564 4.13559 40.5866 4.13559ZM40.5812 0C40.5704 0 40.5542 0 40.5434 0C39.7171 0 38.8692 0.237288 38.5667 0.700565C38.4047 0.926554 38.3129 1.20904 38.3075 1.54237V3.78531C38.3075 3.9774 38.2697 4.05085 38.2643 4.0678L38.2157 4.16384H35.6072V2.60452H35.6018C35.5694 0.960452 34.6404 0.0564972 33.2957 0.0564972H33.1391H31.9833C31.9293 0.457627 31.8861 0.740113 31.8321 1.14124H33.1391C33.8249 1.14124 34.1868 1.75141 34.1868 2.68927V4.25989L34.095 4.20904C34.0788 4.20339 33.9654 4.16384 33.7871 4.16384H31.5297C31.4865 4.46328 31.4325 4.85311 31.373 5.24294H38.3129C38.5505 5.19209 38.8259 5.14689 39.0636 5.10735C39.4146 5.28814 40.0681 5.38418 40.5164 5.38418C42.0231 5.38418 43.0007 4.32768 43.0007 2.70057C42.9953 1.0904 42.0501 0.0338983 40.5812 0Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M28.4189 5.90821H28.4837C29.9905 5.90821 30.6925 5.38844 30.6925 4.10595C30.6925 3.18505 30.0499 2.45059 28.9697 2.45059H27.5818C27.1659 2.45059 26.9175 2.202 26.9175 1.78392C26.9175 1.50143 27.0201 1.15115 27.7006 1.15115H30.7357C30.8006 0.738723 30.833 0.478836 30.8924 0.0664062H27.7384C26.2694 0.0664062 25.5295 0.710474 25.5295 1.78392C25.5295 2.84607 26.1722 3.39974 27.2523 3.39974H28.6403C29.0561 3.39974 29.3046 3.74437 29.3046 4.10595C29.3046 4.34324 29.202 4.83477 28.5269 4.83477H28.2947L23.8499 4.82347H23.0398C22.3539 4.82347 21.8733 4.41669 21.8733 3.47319V2.82347C21.8733 1.84042 22.2459 1.23025 23.0398 1.23025H24.3576C24.417 0.812169 24.4548 0.546632 24.5088 0.151152H22.867H22.7104C21.3656 0.151152 20.4367 1.09466 20.4043 2.73872V2.80087V3.47319C20.4367 5.11725 21.3656 5.90256 22.7104 5.90256H22.867H24.0227L26.4314 5.90821H27.868H28.4189Z\"\n fill=\"#747583\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_sbd_mada\">\n <rect width=\"43\" height=\"15\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n</ng-template>\n","// Environment configuration stub\n\nexport const environments = {\n production: false,\n apiUrl: '',\n baseUrl: '',\n isTenant: false,\n brandName: 'almatar',\n // Add other environment properties as needed\n};\n","export enum brandEnum {\n almatar = 'almatar',\n rehlat = 'rehlat',\n tajawal = 'tajawal'\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { ICurrency } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SharedService {\n getAppLanguage(): string {\n return 'en';\n }\n\n getCurrentLanguage(): string {\n return 'en';\n }\n\n getDirection(): 'ltr' | 'rtl' {\n return 'ltr';\n }\n\n getBaseCurrency(): Observable<ICurrency> {\n return of({\n code: 'SAR',\n name: 'Saudi Riyal',\n symbol: 'SAR',\n rate: 1\n });\n }\n\n getInAppView(): boolean {\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n@Injectable()\nexport class AsideBackButtonService {\n showBackButton$ = new BehaviorSubject<boolean>(false);\n backClicked$ = new Subject<void>();\n\n show(): void {\n this.showBackButton$.next(true);\n }\n\n hide(): void {\n this.showBackButton$.next(false);\n }\n\n emitBack(): void {\n this.backClicked$.next();\n }\n}\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { SidebarModule } from 'primeng/sidebar';\nimport { SharedService } from '../../shared/services/shared.service';\nimport { AsideBackButtonService } from './aside-back-button.service';\nimport { environments } from '../../shared/environments/environment';\nimport { brandEnum } from '../../shared/enums/brand-enums.enum';\n\n@Component({\n selector: 'almatar-aside',\n standalone: true,\n imports: [CommonModule, SidebarModule],\n templateUrl: './aside.component.html',\n styleUrls: ['./aside.component.scss'],\n})\nexport class AsideComponent implements OnInit, OnDestroy {\n @Input() asideTitle = '';\n @Input() showHeader = true;\n @Input() headerTemplate!: TemplateRef<any>;\n /**\n * Opt-in white header (instead of the default purple/lavender) — only\n * takes effect on the Almatar brand, so other tenants/brands sharing this\n * component keep their existing header regardless of this input.\n */\n @Input() whiteHeader = false;\n @Input() showAside = false;\n /** Opt-in desktop width override (e.g. `'600px'`) — defaults to 490px, or 580px with the white header. */\n @Input() width = '';\n @Input() modal = false;\n @Input() closable = true;\n @Input() transitionOptions = '150ms cubic-bezier(0, 0, 0.2, 1)';\n @Input() closeIconTemplate!: TemplateRef<any>;\n /**\n * When true, the dialog's own close (the X, Esc) does NOT hide the aside; it only emits\n * {@link closeRequested}, so the host can ask for confirmation and close the aside itself.\n */\n @Input() interceptClose = false;\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onClose: EventEmitter<any> = new EventEmitter<any>();\n @Output() closeRequested = new EventEmitter<void>();\n isInAppView = this.shared.getInAppView();\n selectedLang!: string;\n showBackButton = false;\n\n get backIconClass(): string {\n // Conventional back-arrow direction: points left in LTR, right in RTL.\n return this.selectedLang === 'ar'\n ? 'pi pi-arrow-right'\n : 'pi pi-arrow-left';\n }\n\n get isWhiteHeader(): boolean {\n return this.whiteHeader && environments.brandName === brandEnum.almatar;\n }\n\n constructor(\n private shared: SharedService,\n @Inject(DOCUMENT) private document: Document,\n @Optional() private backButtonService: AsideBackButtonService,\n ) {}\n\n ngOnInit(): void {\n this.selectedLang = this.shared.getAppLanguage();\n if (this.backButtonService) {\n this.backButtonService.showBackButton$.subscribe((show) => {\n this.showBackButton = show;\n });\n }\n }\n\n /** Replaces the two-way `[(visible)]` so a host can veto the dialog's own close. */\n onVisibleChange(visible: boolean): void {\n if (!visible && this.interceptClose) {\n this.closeRequested.emit();\n return;\n }\n this.showAside = visible;\n }\n\n onCloseModal() {\n this.onClose.emit();\n this.document.body.style.overflow = '';\n }\n\n // The back arrow lives in the header's leading content (via the\n // `pTemplate=\"header\"` slot), entirely separate from PrimeNG's own close\n // button — so it never touches the dialog's `visible` state, and the X\n // close button keeps working (and stays visible) exactly as before.\n onBackIconClick(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n this.backButtonService?.emitBack();\n }\n\n onDialogShow() {\n this.document.body.style.overflow = 'hidden';\n }\n\n ngOnDestroy(): void {\n this.document.body.style.overflow = '';\n }\n}\n","<!-- `position=\"right\"` is intentional for both directions: PrimeNG's flex\n positioning is writing-direction aware, so under dir=\"rtl\" (Arabic) it\n mirrors to the visual left on its own. Passing \"left\" for Arabic\n double-flips it back to the right. -->\n<p-sidebar\n class=\"almatar_aside\"\n [ngClass]=\"{ 'almatar_aside--white-header': isWhiteHeader }\"\n (onShow)=\"onDialogShow()\"\n [showCloseIcon]=\"closable && !isInAppView\"\n (onHide)=\"onCloseModal()\"\n [visible]=\"showAside\"\n (visibleChange)=\"onVisibleChange($event)\"\n position=\"right\"\n [style]=\"{ width: width || (isWhiteHeader ? '580px' : '490px') }\"\n [transitionOptions]=\"transitionOptions\"\n [modal]=\"modal\"\n>\n @if (showHeader) {\n @if (showBackButton) {\n <!-- Rendered into the header's leading content, alongside (not instead\n of) PrimeNG's own close (X) button — so both are visible together,\n and the X keeps its normal close behavior untouched. -->\n <ng-template pTemplate=\"header\">\n <!-- One flex group, not two separate header children — otherwise\n `.p-sidebar-header`'s `justify-content: space-between` spreads the\n arrow and title apart instead of keeping them side by side. -->\n <div class=\"almatar-aside__back-header\">\n <i\n class=\"almatar-aside__back-icon\"\n [class]=\"backIconClass\"\n (click)=\"onBackIconClick($event)\"\n ></i>\n <span class=\"p-sidebar-header-content\">{{ asideTitle }}</span>\n </div>\n </ng-template>\n } @else if (headerTemplate) {\n <ng-template pTemplate=\"header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ng-template>\n } @else {\n <ng-template pTemplate=\"header\">\n <span class=\"p-sidebar-header-content\">{{ asideTitle }}</span>\n </ng-template>\n }\n }\n\n @if (closeIconTemplate) {\n <!-- Custom close icon template -->\n <ng-template pTemplate=\"closeicon\">\n <ng-container *ngTemplateOutlet=\"closeIconTemplate\"></ng-container>\n </ng-template>\n } @else if (isWhiteHeader) {\n <ng-template pTemplate=\"closeicon\">\n <img src=\"/assets/icons/close-dark.svg\" alt=\"\" width=\"24\" height=\"24\" />\n </ng-template>\n }\n\n <ng-content></ng-content>\n</p-sidebar>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'manage-booking-failed-modal',\n standalone: true,\n imports: [CommonModule, ButtonModule],\n template: `\n <div class=\"modal-overlay\" *ngIf=\"visible\" (click)=\"close()\">\n <div class=\"modal-content\" (click)=\"$event.stopPropagation()\">\n <h3>Operation Failed</h3>\n <p>{{ message || 'An error occurred. Please try again.' }}</p>\n <button pButton type=\"button\" label=\"Close\" (click)=\"close()\"></button>\n </div>\n </div>\n `,\n styles: [`\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2000;\n }\n\n .modal-content {\n background: white;\n padding: 2rem;\n border-radius: 8px;\n max-width: 400px;\n width: 90%;\n }\n\n h3 {\n margin-top: 0;\n color: #d32f2f;\n }\n\n p {\n margin: 1rem 0;\n }\n `]\n})\nexport class ManageBookingFailedModalComponent {\n @Input() visible = false;\n @Input() message = '';\n\n @Output() visibleChange = new EventEmitter<boolean>();\n\n close(): void {\n this.visible = false;\n this.visibleChange.emit(false);\n }\n}\n","import { NgModule, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'app-loader',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"loader-container\" *ngIf=\"loading\">\n <div class=\"spinner\"></div>\n <p *ngIf=\"message\">{{ message }}</p>\n </div>\n `,\n styles: [`\n .loader-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 2rem;\n }\n\n .spinner {\n border: 4px solid #f3f3f3;\n border-top: 4px solid #3498db;\n border-radius: 50%;\n width: 40px;\n height: 40px;\n animation: spin 1s linear infinite;\n }\n\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n\n p {\n margin-top: 1rem;\n color: #666;\n }\n `]\n})\nexport class LoaderComponent {\n @Input() loading = false;\n @Input() message = '';\n}\n\n@NgModule({\n imports: [CommonModule, LoaderComponent],\n exports: [LoaderComponent]\n})\nexport class LoaderModule {}\n","import { Injectable, signal } from '@angular/core';\nimport { Observable, of, BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HotelManageBookingService {\n private activeAsideTab = signal<string>('details');\n selectedHotelBooking = new BehaviorSubject<any>(null);\n\n getActiveAsideTab(): string {\n return this.activeAsideTab();\n }\n\n setActiveAsideTab(tab: string): void {\n this.activeAsideTab.set(tab);\n }\n\n getBookingDetails(bookingId: string): Observable<any> {\n return of(null);\n }\n}\n","export enum AlmatarHotelAutoCancellationStepEnum {\n selectRooms = 'select_rooms',\n refundSummary = 'refund_summary',\n refundMethod = 'refund_method',\n}\n","import { Injectable, signal, computed } from '@angular/core';\nimport { AlmatarHotelAutoCancellationStepEnum } from '../enums/almatar-hotel-auto-cancellation-step.enum';\nimport {\n IAlmatarHotelAutoCancellationRoom,\n IAlmatarHotelAutoCancellationHotelInfo,\n IAlmatarHotelAutoCancellationRefundSummary,\n} from '../interfaces/i-almatar-hotel-auto-cancellation.interface';\n\n@Injectable()\nexport class AlmatarHotelAutoCancellationService {\n readonly currentStep = signal<AlmatarHotelAutoCancellationStepEnum>(\n AlmatarHotelAutoCancellationStepEnum.selectRooms,\n );\n\n readonly selectedRooms = signal<IAlmatarHotelAutoCancellationRoom[]>([]);\n readonly hotelInfo = signal<IAlmatarHotelAutoCancellationHotelInfo | null>(\n null,\n );\n\n readonly refundSummary =\n signal<IAlmatarHotelAutoCancellationRefundSummary | null>(null);\n\n readonly selectedRoomsCount = computed(\n () => this.selectedRooms().filter((room) => room.isSelected).length,\n );\n\n readonly hasSelectedRooms = computed(() => this.selectedRoomsCount() > 0);\n\n readonly totalRefundAmount = computed(() => {\n const summary = this.refundSummary();\n return summary?.totalRefund ?? 0;\n });\n\n setCurrentStep(step: AlmatarHotelAutoCancellationStepEnum): void {\n this.currentStep.set(step);\n }\n\n setSelectedRooms(rooms: IAlmatarHotelAutoCancellationRoom[]): void {\n this.selectedRooms.set(rooms);\n }\n\n setHotelInfo(info: IAlmatarHotelAutoCancellationHotelInfo): void {\n this.hotelInfo.set(info);\n }\n\n setRefundSummary(summary: IAlmatarHotelAutoCancellationRefundSummary): void {\n this.refundSummary.set(summary);\n }\n\n toggleRoomSelection(packageId: string): void {\n this.selectedRooms.update((rooms) =>\n rooms.map((room) =>\n room.packageId === packageId\n ? { ...room, isSelected: !room.isSelected }\n : room,\n ),\n );\n }\n\n calculateRefundSummary(\n rooms: IAlmatarHotelAutoCancellationRoom[],\n totalPaid: number,\n ): IAlmatarHotelAutoCancellationRefundSummary {\n const selected = rooms.filter((room) => room.isSelected);\n const totalRefund = selected.reduce(\n (sum, room) => sum + room.refundAmount,\n 0,\n );\n\n return {\n totalPaid,\n totalRefund,\n rooms: selected,\n };\n }\n\n reset(): void {\n this.currentStep.set(AlmatarHotelAutoCancellationStepEnum.selectRooms);\n this.selectedRooms.set([]);\n this.hotelInfo.set(null);\n this.refundSummary.set(null);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpContext } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\ntype HttpOptions = {\n headers?: any;\n context?: HttpContext;\n observe?: 'body';\n params?: any;\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n private http = inject(HttpClient);\n\n get<T>(url: string | { url?: string; endpoint?: string; [key: string]: any }, options?: HttpOptions): Observable<T> {\n const requestUrl = typeof url === 'string' ? url : (url.url || url.endpoint);\n return this.http.get<T>(requestUrl!, options) as Observable<T>;\n }\n\n post<T>(url: string | { url?: string; endpoint?: string; [key: string]: any }, body?: any, options?: HttpOptions): Observable<T> {\n if (typeof url === 'object') {\n // Handle object-style API calls\n const { url: urlProp, endpoint, ...requestBody } = url;\n const requestUrl = urlProp || endpoint;\n return this.http.post<T>(requestUrl!, requestBody, body) as Observable<T>;\n }\n return this.http.post<T>(url, body, options) as Observable<T>;\n }\n\n put<T>(url: string | { url?: string; endpoint?: string; [key: string]: any }, body?: any, options?: HttpOptions): Observable<T> {\n const requestUrl = typeof url === 'string' ? url : (url.url || url.endpoint);\n return this.http.put<T>(requestUrl!, body, options) as Observable<T>;\n }\n\n delete<T>(url: string | { url?: string; endpoint?: string; [key: string]: any }, options?: HttpOptions): Observable<T> {\n const requestUrl = typeof url === 'string' ? url : (url.url || url.endpoint);\n return this.http.delete<T>(requestUrl!, options) as Observable<T>;\n }\n\n patch<T>(url: string | { url?: string; endpoint?: string; [key: string]: any }, body?: any, options?: HttpOptions): Observable<T> {\n const requestUrl = typeof url === 'string' ? url : (url.url || url.endpoint);\n return this.http.patch<T>(requestUrl!, body, options) as Observable<T>;\n }\n}\n","export enum AlmatarHotelAutoCancellationEndpointsEnum {\n getRefundDetails = '/api/v1/fcr/refund/backoffice/details',\n processAutoCancellation = '/api/v1/fcr/refund/backoffice',\n uploadAttachment = '/api/v1/fcr/refund/backoffice/upload-attachment',\n nusukGetRefundDetails = 'api/v1/nusuk/fcr/refund/details',\n nusukProcessAutoCancellation = 'api/v1/nusuk/fcr/refund',\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WebengageTrackingService {\n addEvent(eventName: string | Record<string, unknown>, eventData?: any): void {\n // Stub implementation - does nothing in library context\n if (typeof eventName === 'string') {\n console.log('WebengageTracking:', eventName, eventData);\n } else {\n console.log('WebengageTracking:', eventName);\n }\n }\n\n setUserAttribute(attributeName: string, attributeValue: any): void {\n console.log('WebengageTracking setUserAttribute:', attributeName, attributeValue);\n }\n}\n\nexport function resolveMyTripsViewedEntrySourceFromQueryParams(params: any): string {\n return params?.source || 'unknown';\n}\n","import { Injectable, inject, signal, computed } from '@angular/core';\nimport { Observable, map, catchError, throwError, of } from 'rxjs';\nimport { ApiService } from '../../../shared/services/api.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { environments } from '../../../shared/environments/environment';\nimport { HotelManageBookingService } from '../../shared/services/hotel-manage-booking/hotel-manage-booking.service';\nimport { AlmatarHotelAutoCancellationEndpointsEnum } from '../enums/almatar-hotel-auto-cancellation-endpoints.enum';\nimport {\n IAlmatarHotelAutoCancellationRoom,\n IAlmatarHotelAutoCancellationRefundSummary,\n IAlmatarHotelAutoCancellationRefundPackage,\n IRefundDetailsApiResponse,\n IRefundDetailsData\n} from '../interfaces/i-almatar-hotel-auto-cancellation.interface';\nimport { resolveMyTripsViewedEntrySourceFromQueryParams } from '../../../shared/services/webengage-tracking.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface IRefundDetailsRequest {\n bookingId: string;\n product: 'hotels';\n packageIds: string[];\n}\n\nexport interface IProcessCancellationRequest {\n bookingId: string;\n product: 'hotels';\n packageIds: string[];\n preferredPaymentMethod?: string;\n}\n\nexport interface IProcessNonRefundableCancellationRequest {\n bookingId: string;\n product: 'hotels';\n packageIds: string[];\n preferredPaymentMethod: string;\n processedMode: 'auto';\n language: string;\n attachmentUrl: string;\n}\n\nexport interface IAutoCancellationProcessResponse {\n status: number;\n data: {\n error: string;\n message: string;\n bookingId: number;\n preferredPaymentMethod: string;\n isWhatsApp?: boolean;\n cancel: {\n status: string;\n packageIds: string[];\n };\n refund: {\n status: string;\n bookingStatus: string;\n amount: number;\n currency: string;\n breakdown: {\n wallet: number;\n mokafa: number;\n qitaf: number;\n card: number;\n tabby: number;\n tamara: number;\n };\n };\n };\n errors: any;\n}\n\ninterface IEntrySourceDeviceBrand {\n entrySource: string;\n device: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AlmatarHotelAutoCancellationEndpointsService {\n private readonly api = inject(ApiService);\n private readonly route = inject(ActivatedRoute);\n private readonly hotelManageBookingService = inject(\n HotelManageBookingService\n );\n\n private readonly _almatarBookingId = signal<string>('');\n private readonly _confirmationNumber = signal<string>('');\n private readonly _isNusukFlow = signal<boolean>(\n environments.isTenant || false\n );\n\n private readonly _selectedPackageIds = signal<string[]>([]);\n\n readonly almatarBookingId = computed(() => this._almatarBookingId());\n readonly confirmationNumber = computed(() => this._confirmationNumber());\n readonly isNusukFlow = computed(() => this._isNusukFlow());\n\n constructor() {\n this.initializeBookingData();\n }\n\n private initializeBookingData(): void {\n this.hotelManageBookingService.selectedHotelBooking\n .pipe(takeUntilDestroyed())\n .subscribe((selectedHotelBooking: any) => {\n // console.log('Selected Hotel Booking:', selectedHotelBooking);\n if (selectedHotelBooking) {\n this._almatarBookingId.set(selectedHotelBooking.bookingId || '');\n this._confirmationNumber.set(selectedHotelBooking.bookingId || '');\n }\n });\n }\n\n getRefundDetails(\n packageIds: string[] = []\n ): Observable<IRefundDetailsApiResponse> {\n const endpoint = AlmatarHotelAutoCancellationEndpointsEnum.getRefundDetails;\n\n const payload: IRefundDetailsRequest = {\n bookingId: `${\n this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||\n ''\n }`,\n product: 'hotels',\n packageIds: [...new Set(packageIds)] // Ensure unique package IDs\n };\n\n // return of({\n // data: {\n // bookingId: 144368,\n // currency: 'SAR',\n // status: 'Partially refunded',\n // message: 'Refund details calculated successfully',\n // flags: {\n // refundable: true,\n // partial: false,\n // goldenGift: false\n // },\n // selection: {\n // packageIds: ['f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95']\n // },\n // totals: {\n // paid: 6866,\n // beforeCoupon: 6865.61,\n // roomsBooked: 4,\n // coupon: 0,\n // gifts: 0,\n // serviceFee: 0,\n // wallet: 0,\n // card: 0,\n // tabby: 0,\n // tamara: 220,\n // mokafa: 0,\n // qitaf: 0,\n // wala: 0,\n // hassad: 0,\n // anb: 0,\n // ygg: 0\n // },\n // previous: [\n // {\n // packageId: '5eb33d59-2607-4057-9d26-4f7be745f67f',\n // roomName: 'Standard Room',\n // cancelledAt: '2026-09-02T13:42:54.848Z',\n // amount: 2990.79,\n // fee: 0,\n // refunded: 2990.79\n // }\n // ],\n // current: {\n // rooms: [\n // {\n // packageId: 'f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95',\n // roomId: '0229e622-a89a-469d-adb8-8615deb971ca',\n // roomName: 'Scene Room Twin',\n // basis: 'Room only RO',\n // pax: {\n // adults: 2,\n // children: 0,\n // total: 2\n // },\n // nights: 4,\n // amount: 1887.61,\n // fee: 0,\n // serviceFee: 50,\n // refund: 1887.61,\n // refundable: true,\n // route: 'AUTO'\n // },\n // {\n // packageId: 'f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95',\n // roomId: 'b8aed26e-d91a-4234-ae37-94b2c6232dbd',\n // roomName: 'Scene Room Twin',\n // basis: 'Room only RO',\n // pax: {\n // adults: 2,\n // children: 0,\n // total: 2\n // },\n // nights: 4,\n // amount: 1887.6,\n // fee: 0,\n // serviceFee: 50,\n // refund: 1887.6,\n // refundable: true,\n // route: 'AUTO'\n // }\n // ],\n // amount: 3775.21,\n // fee: 0,\n // surcharge: 0,\n // refund: 3775.21\n // },\n // payout: {\n // alreadyRefunded: 2990.79,\n // current: 1600,\n // afterThis: 6766,\n // feesTotal: 0,\n // wallet: 0,\n // card: 0,\n // tabby: 0,\n // tamara: 200,\n // amwal: 0,\n // mis: 0,\n // bnplManual: 0,\n // loyaltyToWallet: 600,\n // note: null\n // },\n // summaries: [\n // {\n // code: 'CARD',\n // label: 'Card',\n // paid: 6866,\n // refund: 3775.21,\n // refundable: true,\n // gateway: 'CH'\n // },\n // {\n // code: 'SERVICE_FEE',\n // label: 'Service Fee',\n // paid: 100,\n // refund: 0,\n // refundable: false\n // }\n // ],\n // gifts: []\n // },\n // status: 200,\n // errors: null\n // });\n\n return this.api\n .post<IRefundDetailsApiResponse>({\n endpoint,\n ...payload\n })\n .pipe(\n catchError((error) =>\n this.handleError(error, 'Failed to get refund details')\n )\n );\n }\n\n mapApiResponseToRooms(\n data: IRefundDetailsData\n ): IAlmatarHotelAutoCancellationRoom[] {\n return this.getAllRooms(data);\n }\n\n mapApiResponseToRefundSummary(\n data: IRefundDetailsData\n ): IAlmatarHotelAutoCancellationRefundSummary {\n return {\n totalPaid: data.totals?.paid || 0,\n totalRefund: data.current?.refund || data.current?.refund || 0,\n totalFees: data.current?.fee || 0,\n rooms: this.getAllRooms(data),\n packages: this.getAllPackages(data),\n summaries: data.summaries,\n payout: data.payout,\n totals: data.totals,\n // Additional breakdown fields\n coupon: data.totals?.coupon || 0,\n giftsTotal: data.totals?.gifts || 0,\n giftsDetails: data.gifts || [],\n serviceFee: data.totals?.serviceFee || 0,\n surcharge: data.current?.surcharge || 0,\n goldenGift: data.flags?.goldenGift || false,\n previousRooms: data.previous || []\n };\n }\n\n getAllPackages(\n data: IRefundDetailsData\n ): IAlmatarHotelAutoCancellationRefundPackage[] {\n const packages: IAlmatarHotelAutoCancellationRefundPackage[] = [];\n const packageMap = new Map<\n string,\n IAlmatarHotelAutoCancellationRefundPackage\n >();\n\n // Process previous (cancelled) rooms - group by packageId\n if (data.previous?.length) {\n data.previous.forEach((room: any) => {\n const existingPkg = packageMap.get(room.packageId);\n if (existingPkg) {\n existingPkg.rooms.push({\n roomId: room.roomId || room.packageId,\n roomName: room.roomName,\n basis: room.basis,\n nights: room.nights\n });\n existingPkg.amount += room.amount || 0;\n existingPkg.fee += room.fee || 0;\n existingPkg.refund += room.refunded || 0;\n } else {\n packageMap.set(room.packageId, {\n packageId: room.packageId,\n packageName: room.roomName,\n rooms: [\n {\n roomId: room.roomId || room.packageId,\n roomName: room.roomName,\n basis: room.basis,\n nights: room.nights\n }\n ],\n amount: room.amount || 0,\n fee: room.fee || 0,\n serviceFee: 0,\n refund: room.refunded || 0,\n refundable: false,\n cancelledBefore: true,\n cancellationDate: room.cancelledAt\n });\n }\n });\n }\n\n // Process current rooms - group by packageId\n if (data.current?.rooms?.length) {\n data.current.rooms.forEach((room: any) => {\n const existingPkg = packageMap.get(room.packageId);\n if (existingPkg && !existingPkg.cancelledBefore) {\n existingPkg.rooms.push({\n roomId: room.roomId || room.packageId,\n roomName: room.roomName,\n basis: room.basis,\n nights: room.nights,\n pax: room.pax,\n adults: room.pax?.adults,\n children: room.pax?.children\n });\n existingPkg.amount += room.amount || 0;\n existingPkg.fee += room.fee || 0;\n existingPkg.serviceFee += room.serviceFee || 0;\n existingPkg.refund += room.refund || 0;\n } else {\n packageMap.set(room.packageId, {\n packageId: room.packageId,\n packageName: room.roomName,\n rooms: [\n {\n roomId: room.roomId || room.packageId,\n roomName: room.roomName,\n basis: room.basis,\n nights: room.nights,\n pax: room.pax,\n adults: room.pax?.adults,\n children: room.pax?.children\n }\n ],\n amount: room.amount || 0,\n fee: room.fee || 0,\n serviceFee: room.serviceFee || 0,\n refund: room.refund || 0,\n refundable: room.refundable,\n route: room.route,\n cancelledBefore: false,\n cancellationDate: new Date().toISOString()\n });\n }\n });\n }\n\n packageMap.forEach((pkg) => packages.push(pkg));\n return packages;\n }\n\n getAllRooms(data: IRefundDetailsData): IAlmatarHotelAutoCancellationRoom[] {\n const allRooms: IAlmatarHotelAutoCancellationRoom[] = [];\n\n if (data.previous?.length) {\n data.previous.forEach((room) => {\n allRooms.push({\n packageId: room.packageId,\n roomId: room?.roomId,\n roomName: room.roomName,\n isRefundable: false,\n isSelected: false,\n cancelledBefore: true,\n roomAmount: room.amount,\n cancellationFee: room.fee,\n refundAmount: room.refunded,\n currentCancellation: false,\n cancellationDate: room.cancelledAt,\n nights: room.nights ?? 1\n });\n });\n }\n\n if (data.current?.rooms?.length) {\n data.current.rooms.forEach((room) => {\n allRooms.push({\n packageId: room.packageId,\n roomId: room?.roomId,\n roomName: room.roomName,\n isRefundable: room.refundable,\n isSelected: false,\n roomAmount: room.amount,\n cancellationFee: room.fee,\n cancelledBefore: false,\n refundAmount: room.refund,\n route: room.route,\n currentCancellation: true,\n cancellationDate: `${new Date()}`,\n nights: room.nights ?? 1\n });\n });\n }\n\n return allRooms;\n }\n\n processAutoCancellation(\n packageIds: string[],\n refundOption = 'originalPaymentMethod'\n ): Observable<IAutoCancellationProcessResponse> {\n const endpoint = \n AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation;\n\n const uniquePackageIds = [...new Set(packageIds)]; // Ensure unique package IDs\n const payload: IProcessCancellationRequest = {\n bookingId: `${\n this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||\n ''\n }`,\n product: 'hotels',\n packageIds: uniquePackageIds,\n preferredPaymentMethod: refundOption\n };\n\n this._selectedPackageIds.set(uniquePackageIds);\n\n // return of({\n // data: {\n // error: '1',\n // message:\n // 'Cancel requested — supplier cancellation failed; ticket created',\n // bookingId: 144368,\n // preferredPaymentMethod: 'wallet',\n // cancel: {\n // status: 'failed',\n // packageIds: ['f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95'],\n // },\n // refund: {\n // status: 'skipped',\n // bookingStatus: 'Cancelled',\n // amount: 1050,\n // currency: 'SAR',\n // breakdown: {\n // wallet: 750,\n // mokafa: 200,\n // qitaf: 100,\n // card: 0,\n // tabby: 0,\n // tamara: 0,\n // },\n // },\n // },\n // status: 200,\n // errors: null,\n // });\n\n return this.api\n .post<IAutoCancellationProcessResponse>({\n endpoint,\n ...payload\n })\n .pipe(\n map((response) => {\n this._selectedPackageIds.set([]);\n return response;\n }),\n catchError((error) =>\n this.handleError(error, 'Failed to process cancellation')\n )\n );\n }\n\n processNonRefundableCancellation(\n packageId: string,\n attachmentUrl: string,\n language = 'en'\n ): Observable<IAutoCancellationProcessResponse> {\n const endpoint =\n AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation;\n\n const payload: IProcessNonRefundableCancellationRequest = {\n bookingId: `${\n this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||\n ''\n }`,\n product: 'hotels',\n packageIds: [packageId],\n preferredPaymentMethod: 'originalPaymentMethod',\n processedMode: 'auto',\n language,\n attachmentUrl\n };\n\n return this.api\n .post<IAutoCancellationProcessResponse>({\n endpoint,\n ...payload\n })\n .pipe(\n catchError((error) =>\n this.handleError(\n error,\n 'Failed to process non-refundable cancellation'\n )\n )\n );\n }\n\n calculateLocalRefundSummary(\n rooms: IAlmatarHotelAutoCancellationRoom[]\n ): IAlmatarHotelAutoCancellationRefundSummary {\n const selectedRooms = rooms.filter((room) => room.isSelected);\n const totalPaid = rooms.reduce((sum, room) => sum + room.roomAmount, 0);\n const totalRefund = selectedRooms.reduce(\n (sum, room) => sum + room.refundAmount,\n 0\n );\n\n return {\n totalPaid,\n totalRefund,\n rooms: selectedRooms.map((room) => ({\n ...room,\n currentCancellation: true,\n cancellationDate: new Date().toISOString()\n }))\n };\n }\n\n getSelectedPackageIds(): string[] {\n return this._selectedPackageIds();\n }\n\n clearSelectedPackageIds(): void {\n this._selectedPackageIds.set([]);\n }\n\n private getEntrySourceDeviceBrand(): IEntrySourceDeviceBrand {\n return {\n entrySource: this.getEntrySource(),\n device: this.getDevice()\n };\n }\n\n private getEntrySource(): string {\n return resolveMyTripsViewedEntrySourceFromQueryParams(\n this.route.snapshot.queryParams as Record<string, unknown>\n );\n }\n\n private getDevice(): string {\n let device = 'web';\n if (this.route.snapshot.queryParams['mobileAuth']) {\n device = this.route.snapshot.queryParams['device'] || 'mobile';\n }\n localStorage.setItem('deviceType', device);\n return device;\n }\n\n private handleError(error: any, message: string): Observable<never> {\n // console.log(message, error);\n const errorMessage =\n error?.error?.message || error?.message || message;\n return throwError(() => new Error(errorMessage));\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n// Translation module removed - using English only\nimport {\n IAlmatarHotelAutoCancellationPackage,\n IAlmatarHotelAutoCancellationPackageRoom,\n} from '../../../../interfaces/i-almatar-hotel-auto-cancellation.interface';\n\ninterface IGroupedPackageRoom {\n key: string;\n bedTypeOrRoomType: string;\n roomBasis: string;\n count: number;\n rooms: IAlmatarHotelAutoCancellationPackageRoom[];\n}\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation-refundable-room',\n standalone: true,\n imports: [CommonModule],\n templateUrl:\n './almatar-hotel-auto-cancellation-refundable-room.component.html',\n styleUrls: [\n './almatar-hotel-auto-cancellation-refundable-room.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlmatarHotelAutoCancellationRefundableRoomComponent {\n readonly package = input.required<IAlmatarHotelAutoCancellationPackage>();\n readonly hideCheckbox = input<boolean>(false);\n\n readonly togglePackage = output<string>();\n\n readonly groupedRooms = computed<IGroupedPackageRoom[]>(() => {\n const rooms = this.package()?.rooms || [];\n const groupMap = new Map<string, IGroupedPackageRoom>();\n\n for (const room of rooms) {\n // const bedTypeOrRoomType = rawBedType || rawRoomType || room.roomName || '';\n const bedTypeOrRoomType = room?.roomName;\n const roomBasis = room.roomBasis || '';\n const key = `${bedTypeOrRoomType}|||${roomBasis}`;\n\n if (groupMap.has(key)) {\n const group = groupMap.get(key)!;\n group.count++;\n group.rooms.push(room);\n } else {\n groupMap.set(key, {\n key,\n bedTypeOrRoomType,\n roomBasis,\n count: 1,\n rooms: [room],\n });\n }\n }\n\n return Array.from(groupMap.values());\n });\n\n onTogglePackage(): void {\n if (this.hideCheckbox()) {\n return;\n }\n this.togglePackage.emit(this.package()?.packageId);\n }\n}\n","<div\n class=\"package-item\"\n [class.package-item--selected]=\"package().isSelected\"\n (click)=\"onTogglePackage()\"\n>\n <div class=\"package-item__header\">\n @if (!hideCheckbox()) {\n <div\n class=\"package-item__checkbox\"\n [class.package-item__checkbox--checked]=\"package().isSelected\"\n (click)=\"$event.stopPropagation(); onTogglePackage()\"\n >\n <svg\n class=\"package-item__checkbox-icon\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2 7L5.5 10.5L12 3.5\"\n stroke=\"white\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n }\n\n <div class=\"package-item__content\">\n <div class=\"package-item__info\">\n <h4 class=\"package-item__name\">{{ package().packageName }}</h4>\n @if (package().boardBasis) {\n <span class=\"package-item__board-basis\">{{\n package().boardBasis\n }}</span>\n }\n </div>\n\n <span\n class=\"package-item__refund-badge package-item__refund-badge--refundable\"\n >\n REFUNDABLE\n </span>\n </div>\n </div>\n\n @if (groupedRooms().length) {\n <div class=\"package-item__rooms\">\n @for (group of groupedRooms(); track i; let i = $index) {\n <div class=\"package-item__room\">\n <h5 class=\"package-item__room-name\">\n @if (group.count > 1) {\n {{ group.count }}x\n @if (group.bedTypeOrRoomType) {\n {{ group.bedTypeOrRoomType }}\n }\n } @else {\n Room\n {{ i + 1 }}\n @if (group.bedTypeOrRoomType) {\n <span class=\"package-item__separator\">•</span>\n {{ group.bedTypeOrRoomType }}\n }\n }\n </h5>\n @if (group.roomBasis) {\n <span class=\"package-item__room-basis\">{{ group.roomBasis }}</span>\n }\n </div>\n }\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\n\n/**\n * Simple translation service that provides English translations\n * without requiring ngx-translate\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslationService {\n private currentLanguage = 'en';\n\n private translations: { [key: string]: string } = {\n // Wallet and refund\n 'manage-booking.smart-cancel.result.wallet-points-label': 'Wallet Points',\n 'manage-booking.smart-cancel.result.your-wallet': 'Your Wallet',\n 'manage-booking.smart-cancel.result.ready-now': 'Ready Now',\n 'manage-booking.smart-cancel.refund-method.original': 'Original Payment Method',\n 'manage-booking.smart-cancel.refund-method.days-badge': '5-7 business days',\n 'manage-booking.smart-cancel.refund-method.installment-badge-tabby': '3-5 business days',\n 'manage-booking.smart-cancel.refund-method.installment-badge-tamara': '7-10 business days',\n 'manage-booking.smart-cancel.refund-method.loyalty-badge': 'Instant',\n 'manage-booking.smart-cancel.result.mada-card': 'Mada Card',\n 'manage-booking.smart-cancel.refund-method.wallet': 'Almatar Wallet',\n 'manage-booking.smart-cancel.refunds.loyalty': 'Loyalty Points',\n\n // Refund method descriptions\n 'manage-booking.smart-cancel.refund-method.installment-desc': 'Refund to {{method}}',\n 'manage-booking.smart-cancel.refund-method.loyalty-desc': 'Refund to {{method}}',\n 'manage-booking.smart-cancel.refund-method.original-desc': 'Refund to {{method}}',\n\n // Hotel cancellation policy\n 'HOTEL.cancellation-policy': 'Cancellation Policy',\n\n // Refund method selector\n 'manage-booking.smart-cancel.refund-method.title': 'Select Refund Method',\n };\n\n getCurrentLanguage(): string {\n return this.currentLanguage;\n }\n\n setLanguage(lang: string): void {\n this.currentLanguage = lang;\n }\n\n instant(key: string, params?: { [key: string]: string }): string {\n let translation = this.translations[key] || key;\n\n // Replace {{param}} placeholders\n if (params) {\n Object.keys(params).forEach(param => {\n translation = translation.replace(`{{${param}}}`, params[param]);\n });\n }\n\n return translation;\n }\n\n get currentLang(): string {\n return this.currentLanguage;\n }\n}\n","import { NgModule, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'almatar-icon',\n standalone: true,\n imports: [CommonModule],\n template: `\n <i [class]=\"'pi pi-' + name\" [style.font-size.px]=\"size\"></i>\n `,\n styles: [`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n `]\n})\nexport class AlmatarIconComponent {\n @Input() name = '';\n @Input() size = 16;\n}\n\n@NgModule({\n imports: [CommonModule, AlmatarIconComponent],\n exports: [AlmatarIconComponent]\n})\nexport class AlmatarIconModule {}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n signal,\n inject,\n DestroyRef,\n effect,\n computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslationService } from '../../../../../../shared/services/translation.service';\nimport { HttpClient, HttpEventType, HttpRequest } from '@angular/common/http';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n IAlmatarHotelAutoCancellationPackage,\n IAlmatarHotelAutoCancellationHotelInfo,\n IAlmatarHotelAutoCancellationPackageRoom,\n} from '../../../../interfaces/i-almatar-hotel-auto-cancellation.interface';\nimport { AlmatarIconModule } from '../../../../../../shared/modules/almatar-icon/almatar-icon.module';\nimport { AlmatarHotelAutoCancellationEndpointsEnum } from '../../../../enums/almatar-hotel-auto-cancellation-endpoints.enum';\nimport { AlmatarHotelAutoCancellationEndpointsService } from '../../../../services/almatar-hotel-auto-cancellation-endpoints.service';\nimport { DialogService } from 'primeng/dynamicdialog';\n\ninterface IGroupedPackageRoom {\n key: string;\n bedTypeOrRoomType: string;\n roomBasis: string;\n count: number;\n rooms: IAlmatarHotelAutoCancellationPackageRoom[];\n}\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation-non-refundable-room',\n standalone: true,\n imports: [CommonModule, AlmatarIconModule],\n providers: [DialogService],\n templateUrl:\n './almatar-hotel-auto-cancellation-non-refundable-room.component.html',\n styleUrls: [\n './almatar-hotel-auto-cancellation-non-refundable-room.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlmatarHotelAutoCancellationNonRefundableRoomComponent {\n private readonly http = inject(HttpClient);\n private readonly destroyRef = inject(DestroyRef);\n private readonly endpointsService = inject(\n AlmatarHotelAutoCancellationEndpointsService,\n );\n\n private readonly translateService = inject(TranslationService);\n private readonly dialogService = inject(DialogService);\n\n readonly package = input.required<IAlmatarHotelAutoCancellationPackage>();\n readonly allPackages = input<IAlmatarHotelAutoCancellationPackage[]>([]);\n readonly hotelInfo = input<IAlmatarHotelAutoCancellationHotelInfo | null>(\n null,\n );\n\n // constructor(){effect(() => {\n // console.log(this.package())\n // })}\n\n readonly hotelId = input<string | number>('');\n readonly currencyCode = input<string>('SAR');\n readonly allPackagesNonRefundable = input<boolean>(false);\n\n private readonly useLocalCancellationPolicies = true;\n\n readonly closeModal = output<void>();\n readonly nonRefundableSubmitSuccess = output<string>();\n\n readonly uploadedFile = signal<File | null>(null);\n readonly uploadedFileUrl = signal<string | null>(null);\n readonly filePicked = signal<File | null>(null);\n readonly uploadSuccess = signal<boolean>(false);\n readonly uploadProgress = signal<number>(0);\n readonly isUploading = signal<boolean>(false);\n readonly isSubmitting = signal<boolean>(false);\n readonly submitSuccess = signal<boolean>(false);\n readonly submitError = signal<string | null>(null);\n\n readonly groupedRooms = computed<IGroupedPackageRoom[]>(() => {\n const rooms = this.package()?.rooms || [];\n const groupMap = new Map<string, IGroupedPackageRoom>();\n\n for (const room of rooms) {\n // const bedTypeOrRoomType = room.bedType || room.roomType || '';\n const bedTypeOrRoomType = room?.roomName;\n const roomBasis = room.roomBasis || '';\n const key = `${bedTypeOrRoomType}|||${roomBasis}`;\n\n if (groupMap.has(key)) {\n const group = groupMap.get(key)!;\n group.count++;\n group.rooms.push(room);\n } else {\n groupMap.set(key, {\n key,\n bedTypeOrRoomType,\n roomBasis,\n count: 1,\n rooms: [room],\n });\n }\n }\n\n return Array.from(groupMap.values());\n });\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n const file = input.files[0];\n this.filePicked.set(file);\n this.uploadFile(file);\n }\n }\n\n private uploadFile(file: File): void {\n this.isUploading.set(true);\n this.uploadProgress.set(0);\n this.uploadSuccess.set(false);\n this.uploadedFileUrl.set(null);\n\n const formData = new FormData();\n formData.append('file', file);\n\n const req = new HttpRequest(\n 'POST',\n AlmatarHotelAutoCancellationEndpointsEnum.uploadAttachment,\n formData,\n {\n reportProgress: true,\n responseType: 'json',\n },\n );\n\n this.http\n .request<{ data: { url: string } }>(req)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (event) => {\n if (event.type === HttpEventType.UploadProgress && event.total) {\n const progress = Math.round((100 * event.loaded) / event.total);\n this.uploadProgress.set(progress);\n } else if (event.type === HttpEventType.Response) {\n this.uploadProgress.set(100);\n this.isUploading.set(false);\n this.uploadSuccess.set(true);\n this.uploadedFile.set(file);\n this.uploadedFileUrl.set(event.body?.data?.url ?? null);\n }\n },\n error: () => {\n this.isUploading.set(false);\n this.uploadProgress.set(0);\n this.uploadSuccess.set(false);\n this.filePicked.set(null);\n this.uploadedFileUrl.set(null);\n },\n });\n }\n\n onSubmitRequest(): void {\n const url = this.uploadedFileUrl();\n if (!url) {\n return;\n }\n\n this.isSubmitting.set(true);\n this.submitError.set(null);\n this.submitSuccess.set(false);\n\n const language = 'en';\n\n this.endpointsService\n .processNonRefundableCancellation(this.package().packageId, url, language)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.isSubmitting.set(false);\n this.submitSuccess.set(true);\n this.nonRefundableSubmitSuccess.emit(this.package().packageName);\n },\n error: (error) => {\n this.isSubmitting.set(false);\n this.submitError.set(error?.message || 'Failed to submit request');\n },\n });\n }\n\n onRetry(): void {\n this.submitError.set(null);\n this.onSubmitRequest();\n }\n\n onOpenCancellationPolicy(): void {\n const hotelInfoData = this.hotelInfo();\n const currencyCode = this.currencyCode();\n\n // Use all packages if available, otherwise fall back to current package\n const packagesToShow =\n this.allPackages().length > 0 ? this.allPackages() : [this.package()];\n\n // Transform all packages with their cancellation policies\n const packagesForPopup = packagesToShow.map((pkg) => {\n // Transform cancellation policies to the format expected by mapCancellationPolicies\n const rawCancellationPolicies = (pkg.cancellationPolicies || []).map(\n (policy) => ({\n dateFrom: policy.fromDate,\n dateTo: policy.toDate,\n currencyIsoCode: currencyCode,\n finalPrice: policy.penaltyValue,\n refundabilityType:\n policy.penaltyType === 'FullRefunded'\n ? 'FullRefunded'\n : policy.penaltyType === 'Percentage' ||\n policy.penaltyType === 'Amount'\n ? 'PartialRefunded'\n : 'NonRefunded',\n }),\n );\n\n // Ensure at least one policy exists\n if (rawCancellationPolicies.length === 0) {\n rawCancellationPolicies.push({\n dateFrom: hotelInfoData?.checkIn,\n dateTo: hotelInfoData?.checkOut,\n currencyIsoCode: currencyCode,\n finalPrice: pkg.cancellationFee || 0,\n refundabilityType: pkg.isRefundable ? 'Refundable' : 'NonRefunded',\n });\n }\n\n // Build package data with all required fields\n const remarks =\n (pkg as any)?.cancellationPoliciesRemarks ??\n (pkg as any)?.CancellationPoliciesRemarks;\n return {\n ...pkg,\n cancellationPolicies: rawCancellationPolicies,\n isRefundable: pkg.isRefundable ?? pkg.refundability ?? false,\n refundableUntil: pkg.refundableUntil,\n currency: currencyCode,\n finalPrice: pkg.roomAmount,\n bookingRemarks: remarks,\n cancellationPoliciesRemarks: remarks,\n };\n });\n\n const cartInfo = {\n packages: packagesForPopup,\n fromDate: hotelInfoData?.checkIn,\n date_from: hotelInfoData?.checkIn,\n toDate: hotelInfoData?.checkOut,\n date_to: hotelInfoData?.checkOut,\n almtaarHotelId: this.hotelId(),\n };\n\n const lang = 'en';\n const formatDate =\n lang === 'en'\n ? 'dddd Do of MMMM YYYY - hh:mm A [GMT]'\n : 'dddd , DD MMMM YYYY - hh:mm A [GMT]';\n\n // TODO: Fix import path for CancellationPolicyPopupComponent\n // import('libs/features/src/lib/features/hotels/shared/modules/hotel-booking-information/components/booking-summary/components/cancellation-policy-popup/cancellation-policy.popup.component').then(\n // ({ CancellationPolicyPopupComponent }) => {\n const header = this.translateService.instant(\n 'HOTEL.cancellation-policy',\n );\n console.warn('CancellationPolicyPopupComponent not available - import path needs to be fixed');\n // this.dialogService.open(CancellationPolicyPopupComponent, {\n // header,\n // data: {\n // cartInfo,\n // currentCurrencyObj: {\n // code: currencyCode,\n // currency: currencyCode,\n // },\n // formatDate,\n // hotelDetails: {\n // hotelName: hotelInfoData?.hotelName,\n // paymentOption: null,\n // },\n // },\n // styleClass: 'cancellation-policy-dialog',\n // contentStyle: { overflow: 'auto' },\n // baseZIndex: 10000,\n // maximizable: false,\n // style: { width: '600px', maxWidth: '90%' },\n // });\n //},\n //);\n }\n\n formatFileSize(bytes: number | undefined): string {\n if (!bytes) {\n return '';\n }\n if (bytes < 1024) {\n return `${bytes} B`;\n }\n if (bytes < 1024 * 1024) {\n return `${Math.round(bytes / 1024)} KB`;\n }\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n }\n}\n","@if (!package().isCancelled) {\n <div class=\"package-item package-item--non-refundable\">\n <div class=\"package-item__header\">\n <div class=\"package-item__content\">\n <div class=\"package-item__info\">\n <h4 class=\"package-item__name\">{{ package().packageName }}</h4>\n @if (package().boardBasis) {\n <span class=\"package-item__board-basis\">{{\n package().boardBasis\n }}</span>\n }\n </div>\n\n <span\n class=\"package-item__refund-badge package-item__refund-badge--non-refundable\"\n >\n @if (\n allPackagesNonRefundable() ||\n (!package()?.isRefundable && !package()?.isCancelled)\n ) {\n NON-REFUNDABLE\n }\n @if (package()?.isCancelled) {\n PREVIOUS CANCELLATION\n }\n </span>\n </div>\n </div>\n\n @if (groupedRooms().length) {\n <div class=\"package-item__rooms\">\n @for (group of groupedRooms(); track i; let i = $index) {\n <div class=\"package-item__room\">\n <h5 class=\"package-item__room-name\">\n @if (group.count > 1) {\n {{ group.count }}x\n @if (group.bedTypeOrRoomType) {\n {{ group.bedTypeOrRoomType }}\n }\n } @else {\n Room\n {{ i + 1 }}\n @if (group.bedTypeOrRoomType) {\n <span class=\"package-item__separator\">•</span>\n {{ group.bedTypeOrRoomType }}\n }\n }\n </h5>\n @if (group.roomBasis) {\n <span class=\"package-item__room-basis\">{{\n group.roomBasis\n }}</span>\n }\n </div>\n }\n </div>\n }\n\n @if (!package()?.isCancelled && !allPackagesNonRefundable()) {\n <div class=\"package-item__non-refundable-content\">\n <div class=\"info-message\">\n <almatar-icon [name]=\"'exclamation-circle'\"> </almatar-icon>\n <p\n class=\"info-message__text\"\n (click)=\"$event.preventDefault(); onOpenCancellationPolicy()\"\n [innerHTML]=\"\n 'We can\\'t process automatic cancellation with this room. Check the <a class=&quot;info-message__link&quot;>cancellation policy</a> for details'\n \"\n ></p>\n </div>\n\n @if (uploadSuccess()) {\n <div class=\"upload-success\">\n <span class=\"upload-success__icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.4697 8.20112C13.7626 7.90822 14.2373 7.90822 14.5302 8.20112C14.8231 8.49401 14.8231 8.96877 14.5302 9.26166L7.53022 16.2617C7.23732 16.5546 6.76256 16.5546 6.46967 16.2617L3.46967 13.2617C3.17678 12.9688 3.17678 12.494 3.46967 12.2011C3.74427 11.9265 4.17899 11.909 4.47358 12.1494L4.53022 12.2011L6.99994 14.6708L13.4697 8.20112Z\"\n fill=\"#1B1A1F\"\n />\n <path\n d=\"M19.4697 8.20112C19.7626 7.90822 20.2373 7.90822 20.5302 8.20112C20.8231 8.49401 20.8231 8.96877 20.5302 9.26166L13.5302 16.2617C13.2639 16.5279 12.8415 16.5556 12.5429 16.3261L11.5429 15.5576L11.4843 15.5078C11.2079 15.2468 11.1686 14.8137 11.4052 14.5058C11.6418 14.198 12.0703 14.1245 12.3935 14.3242L12.457 14.3681L12.9345 14.7353L19.4697 8.20112Z\"\n fill=\"#1B1A1F\"\n />\n </svg>\n </span>\n <div class=\"upload-success__info\">\n <p class=\"upload-success__filename\">{{ filePicked()?.name }}</p>\n <p class=\"upload-success__meta\">\n {{ formatFileSize(filePicked()?.size) }} •\n Uploaded\n </p>\n </div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".pdf,.jpg,.jpeg,.png,.doc,.docx\"\n />\n <button\n type=\"button\"\n class=\"upload-success__change-btn\"\n (click)=\"fileInput.click()\"\n >\n Change\n </button>\n </div>\n } @else {\n <div class=\"upload-section\">\n <almatar-icon [name]=\"'arrow-up-on-square'\"></almatar-icon>\n <div style=\"flex: 1\">\n <h5 class=\"upload-section__title\">\n Upload a document to support your request\n </h5>\n <p class=\"upload-section__subtitle\">\n Required to submit and track your request\n </p>\n @if (filePicked() && !uploadSuccess()) {\n <p class=\"upload-section__filename\">\n {{ filePicked()?.name }}\n </p>\n }\n @if (isUploading()) {\n <div class=\"upload-progress\">\n <div class=\"upload-progress__bar\">\n <div\n class=\"upload-progress__fill\"\n [style.width.%]=\"uploadProgress()\"\n ></div>\n </div>\n <span class=\"upload-progress__text\"\n >{{ uploadProgress() }}%</span\n >\n </div>\n }\n </div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".pdf,.jpg,.jpeg,.png,.doc,.docx\"\n />\n <button\n type=\"button\"\n class=\"upload-section__button\"\n [disabled]=\"isUploading()\"\n (click)=\"fileInput.click()\"\n >\n Upload file\n </button>\n </div>\n }\n\n @if (submitError()) {\n <div class=\"submit-result submit-result--error\">\n <almatar-icon [name]=\"'exclamation-circle'\"></almatar-icon>\n <p class=\"submit-result__text\">{{ submitError() }}</p>\n <button\n type=\"button\"\n class=\"submit-result__retry-btn\"\n (click)=\"onRetry()\"\n >\n Try Again\n </button>\n </div>\n } @else if (!submitSuccess()) {\n <button\n type=\"button\"\n class=\"submit-request-btn\"\n [disabled]=\"!uploadSuccess() || isSubmitting()\"\n (click)=\"onSubmitRequest()\"\n >\n @if (isSubmitting()) {\n Submitting...\n } @else {\n Submit my request\n }\n </button>\n }\n </div>\n }\n </div>\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n DestroyRef,\n input,\n output,\n signal,\n computed,\n inject,\n effect,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharedService } from '../../../../shared/services/shared.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport moment from 'moment';\nimport {\n IAlmatarHotelAutoCancellationPackage,\n IAlmatarHotelAutoCancellationHotelInfo,\n} from '../../interfaces/i-almatar-hotel-auto-cancellation.interface';\nimport { AlmatarHotelAutoCancellationRefundableRoomComponent } from './components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component';\nimport { AlmatarHotelAutoCancellationNonRefundableRoomComponent } from './components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component';\nimport { AlmatarHotelAutoCancellationEndpointsService } from '../../services/almatar-hotel-auto-cancellation-endpoints.service';\nimport { AlmatarHotelAutoCancellationService } from '../../services/almatar-hotel-auto-cancellation.service';\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation-select-rooms',\n standalone: true,\n imports: [\n CommonModule,\n AlmatarHotelAutoCancellationRefundableRoomComponent,\n AlmatarHotelAutoCancellationNonRefundableRoomComponent,\n ],\n templateUrl: './almatar-hotel-auto-cancellation-select-rooms.component.html',\n styleUrls: ['./almatar-hotel-auto-cancellation-select-rooms.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlmatarHotelAutoCancellationSelectRoomsComponent {\n private readonly sharedService = inject(SharedService);\n private readonly endpointsService = inject(\n AlmatarHotelAutoCancellationEndpointsService,\n );\n\n private readonly autoCancellationService = inject(\n AlmatarHotelAutoCancellationService,\n );\n\n private readonly destroyRef = inject(DestroyRef);\n\n readonly packages = input.required<IAlmatarHotelAutoCancellationPackage[]>();\n readonly isLoadingRefund = signal(false);\n\n constructor() {\n effect(\n () => {\n // get only un cancelled packages\n const packagesList = this.packages().filter(\n (pkg: any) => !pkg?.isCancelled,\n );\n if (packagesList.length === 1 && !packagesList[0].isSelected) {\n const selectedPackage = { ...packagesList[0], isSelected: true };\n this.localPackages.set([selectedPackage]);\n }\n },\n { allowSignalWrites: true },\n );\n }\n\n readonly hotelInfo =\n input.required<IAlmatarHotelAutoCancellationHotelInfo | null>();\n\n readonly bookingId = input<string | number>('');\n\n readonly hotelId = input<string | number>('');\n\n readonly continueToCancel = output<IAlmatarHotelAutoCancellationPackage[]>();\n readonly closeModal = output<void>();\n readonly nonRefundableSubmitSuccess = output<string>();\n readonly chatWithAgent = output<void>();\n\n readonly currencyCode = input<string>('SAR');\n\n readonly localPackages = signal<IAlmatarHotelAutoCancellationPackage[]>([]);\n\n readonly displayPackages = computed(() => {\n const local = this.localPackages();\n return local.length > 0 ? local : this.packages();\n });\n\n readonly selectedPackagesCount = computed(\n () => this.displayPackages().filter((pkg) => pkg.isSelected).length,\n );\n\n readonly hasSelectedPackages = computed(\n () => this.selectedPackagesCount() > 0,\n );\n\n readonly isSinglePackage = computed(() => this.packages().length === 1);\n\n readonly totalRoomsCount = computed(() =>\n this.packages().reduce((acc, pkg) => acc + (pkg.rooms?.length || 0), 0),\n );\n\n readonly allPackagesNonRefundable = computed(() =>\n this.packages().every((pkg) => !pkg.isRefundable && !pkg.isCancelled),\n );\n\n togglePackage(packageId: string): void {\n const currentPackages = this.displayPackages();\n const updatedPackages = currentPackages.map((pkg) =>\n pkg.packageId === packageId\n ? { ...pkg, isSelected: !pkg.isSelected }\n : pkg,\n );\n this.localPackages.set(updatedPackages);\n }\n\n onContinue(): void {\n if (this.hasSelectedPackages()) {\n const selectedPackages = this.displayPackages().filter(\n (pkg) => pkg.isSelected && !pkg.isCancelled,\n );\n this.continueToCancel.emit(selectedPackages);\n }\n }\n\n onClose(): void {\n this.closeModal.emit();\n }\n\n onChatWithAgent(): void {\n this.chatWithAgent.emit();\n }\n\n onNonRefundableSubmitSuccess(packageName: string): void {\n this.nonRefundableSubmitSuccess.emit(packageName);\n }\n\n formatDate(date: any): {\n day: number;\n month: string;\n year: number;\n dayName: string;\n } {\n const lang = this.sharedService.getAppLanguage();\n const m = moment(date).locale(lang);\n\n return {\n day: m.date(),\n month: m.format('MMMM'),\n year: m.year(),\n dayName: m.format('dddd'),\n };\n }\n}\n","<div class=\"select-rooms\">\n <div class=\"select-rooms__content\">\n @if (hotelInfo(); as hotel) {\n <div class=\"hotel-info-card\">\n <h3 class=\"hotel-info-card__name\">{{ hotel.hotelName }}</h3>\n\n <div class=\"hotel-info-card__content\">\n @if (hotel.hotelImage) {\n <div class=\"hotel-info-card__image\">\n <img [src]=\"hotel.hotelImage\" [alt]=\"hotel.hotelName\" />\n </div>\n }\n\n <div class=\"hotel-info-card__dates\">\n <div class=\"date-box\">\n <span class=\"date-box__label\">CHECK-IN</span>\n <span class=\"date-box__day\">{{\n formatDate(hotel.checkIn).day\n }}</span>\n <span class=\"date-box__month\">{{\n formatDate(hotel.checkIn).month\n }}</span>\n <span class=\"date-box__day-name\">{{\n formatDate(hotel.checkIn).dayName\n }}</span>\n <span class=\"date-box__time\"\n >From\n {{ hotel?.checkInTime }}</span\n >\n </div>\n\n <div class=\"date-box\">\n <span class=\"date-box__label\">CHECK-OUT</span>\n <span class=\"date-box__day\">{{\n formatDate(hotel.checkOut).day\n }}</span>\n <span class=\"date-box__month\">{{\n formatDate(hotel.checkOut).month\n }}</span>\n <span class=\"date-box__day-name\">{{\n formatDate(hotel.checkOut).dayName\n }}</span>\n <span class=\"date-box__time\"\n >Until\n {{ hotel?.checkOutTime }}</span\n >\n </div>\n </div>\n\n <div class=\"hotel-info-card__stats\">\n <div class=\"stat-box\">\n <span class=\"stat-box__label\">Rooms</span>\n <span class=\"stat-box__value\">{{ totalRoomsCount() }}</span>\n </div>\n <div class=\"stat-box\">\n <span class=\"stat-box__label\">NIGHTS</span>\n <span class=\"stat-box__value\">{{ hotel.nights }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n <div class=\"select-rooms__notice select-rooms__notice--default\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n />\n <path\n d=\"M12 11v5.5M12 8v.01\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span>\n Some rooms in each package, share one booking reference, so they will be cancelled together.</span\n >\n </div>\n\n <div class=\"rooms-list\">\n @for (package of displayPackages(); track $index) {\n @if (!package.manualRefundRequest) {\n <almatar-hotel-auto-cancellation-refundable-room\n [package]=\"package\"\n [hideCheckbox]=\"isSinglePackage()\"\n (togglePackage)=\"togglePackage($event)\"\n />\n } @else {\n <almatar-hotel-auto-cancellation-non-refundable-room\n [package]=\"package\"\n [allPackages]=\"displayPackages()\"\n [hotelInfo]=\"hotelInfo()\"\n [hotelId]=\"hotelId()\"\n [currencyCode]=\"currencyCode()\"\n [allPackagesNonRefundable]=\"allPackagesNonRefundable()\"\n (closeModal)=\"onClose()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n />\n }\n }\n </div>\n\n @if (allPackagesNonRefundable()) {\n <div class=\"select-rooms__notice select-rooms__notice--warning\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <!-- warning triangle icon -->\n <path\n d=\"M12 9v4M12 17h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <span>Sorry, we couldn't process your refund right now. Please chat with our Customer Service team for help.</span>\n </div>\n }\n </div>\n\n <div class=\"select-rooms__footer\">\n @if (allPackagesNonRefundable()) {\n <button\n class=\"main_btn main_btn--chat-with-us\"\n type=\"button\"\n (click)=\"onChatWithAgent()\"\n >\n Chat with customer service\n </button>\n } @else {\n @if (!hasSelectedPackages()) {\n <p class=\"select-rooms__hint\">\n Select at least one room to continue\n </p>\n }\n <button\n class=\"main_btn\"\n type=\"button\"\n [disabled]=\"!hasSelectedPackages()\"\n (click)=\"onContinue()\"\n >\n Continue to cancel\n </button>\n }\n </div>\n</div>\n","import { createSelector } from '@ngrx/store';\nimport { ICurrency } from '../../models';\n\n// Stub selector for getCurrentCurrency\nexport const getCurrentCurrency = createSelector(\n () => ({}),\n (): ICurrency => ({\n code: 'SAR',\n name: 'Saudi Riyal',\n symbol: 'SAR',\n rate: 1\n })\n);\n","import { Pipe, PipeTransform, NgModule } from '@angular/core';\n\n@Pipe({\n name: 'exchange',\n standalone: true\n})\nexport class ExchangePipe implements PipeTransform {\n transform(value: number, currency?: string, rate?: number): number {\n if (!rate || rate === 1) {\n return value;\n }\n return value * rate;\n }\n}\n\n@Pipe({\n name: 'exchange_round',\n standalone: true\n})\nexport class ExchangeRoundPipe implements PipeTransform {\n transform(value: number, currency?: string, rate?: number): number {\n if (!rate || rate === 1) {\n return Math.round(value);\n }\n return Math.round(value * rate);\n }\n}\n\n@NgModule({\n imports: [ExchangePipe, ExchangeRoundPipe],\n exports: [ExchangePipe, ExchangeRoundPipe]\n})\nexport class ExchangePipeModule {}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport enum CurrencySizeEnum {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n LG = 'large'\n}\n\n@Component({\n selector: 'currency-code-icon',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span class=\"currency-icon\" [class]=\"'currency-icon--' + size\">\n {{ currencyCode }}\n </span>\n `,\n styles: [`\n .currency-icon {\n display: inline-block;\n font-weight: 600;\n }\n\n .currency-icon--small {\n font-size: 0.75rem;\n }\n\n .currency-icon--medium {\n font-size: 1rem;\n }\n\n .currency-icon--large {\n font-size: 1.25rem;\n }\n `]\n})\nexport class CurrencyCodeIconComponent {\n @Input() currencyCode = 'SAR';\n @Input() size: CurrencySizeEnum = CurrencySizeEnum.MEDIUM;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HotelManageBookingEndpointsService {\n cancelBookingRequest(payload: any): Observable<any> {\n return of(null);\n }\n}\n","export class CancelHotelBookingPayload {\n bookingId?: string;\n roomIds?: string[];\n refundMethod?: string;\n // Add other properties as needed\n\n constructor(data?: Partial<CancelHotelBookingPayload>) {\n Object.assign(this, data);\n }\n}\n","export enum HotelManageBookingAsideTabEnum {\n DETAILS = 'details',\n CANCELLATION = 'cancellation',\n MODIFICATION = 'modification',\n REFUND = 'refund',\n whatsAppAgent = 'whatsAppAgent'\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'confirm-modal',\n standalone: true,\n imports: [CommonModule, ButtonModule],\n template: `\n <div class=\"modal-overlay\" *ngIf=\"visible\" (click)=\"onCancel()\">\n <div class=\"modal-content\" (click)=\"$event.stopPropagation()\">\n <h3>{{ title || 'Confirm' }}</h3>\n <p>{{ message }}</p>\n <div class=\"modal-actions\">\n <button pButton type=\"button\" [label]=\"cancelLabel || 'Cancel'\" class=\"p-button-secondary\" (click)=\"onCancel()\"></button>\n <button pButton type=\"button\" [label]=\"confirmLabel || 'Confirm'\" (click)=\"onConfirm()\"></button>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2000;\n }\n\n .modal-content {\n background: white;\n padding: 2rem;\n border-radius: 8px;\n max-width: 400px;\n width: 90%;\n }\n\n h3 {\n margin-top: 0;\n }\n\n .modal-actions {\n display: flex;\n gap: 1rem;\n justify-content: flex-end;\n margin-top: 1.5rem;\n }\n `]\n})\nexport class ConfirmModalComponent {\n @Input() visible = false;\n @Input() title = '';\n @Input() message = '';\n @Input() confirmLabel = 'Confirm';\n @Input() cancelLabel = 'Cancel';\n\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() confirm = new EventEmitter<void>();\n @Output() cancel = new EventEmitter<void>();\n\n onConfirm(): void {\n this.confirm.emit();\n this.close();\n }\n\n onCancel(): void {\n this.cancel.emit();\n this.close();\n }\n\n private close(): void {\n this.visible = false;\n this.visibleChange.emit(false);\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n DestroyRef,\n OnInit,\n inject,\n input,\n output,\n signal,\n computed,\n effect,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LoaderModule } from '../../../../shared/modules/loader/loader.module';\nimport {\n IAlmatarHotelAutoCancellationRoom,\n IAlmatarHotelAutoCancellationRefundSummary,\n IAlmatarHotelAutoCancellationHotelInfo,\n IAlmatarHotelAutoCancellationRefundPackage,\n IAlmatarHotelAutoCancellationRefundPackageRoom,\n IGift,\n} from '../../interfaces/i-almatar-hotel-auto-cancellation.interface';\nimport { AlmatarHotelAutoCancellationEndpointsService } from '../../services/almatar-hotel-auto-cancellation-endpoints.service';\nimport { AlmatarHotelAutoCancellationService } from '../../services/almatar-hotel-auto-cancellation.service';\nimport { AlmatarIconModule } from '../../../../shared/modules/almatar-icon/almatar-icon.module';\nimport { Store } from '@ngrx/store';\nimport { filter } from 'rxjs/operators';\nimport { getCurrentCurrency } from '../../../../shared/store/selectors/currency.selectors';\nimport { ExchangePipeModule } from '../../../../shared/pipes/exchange.pipe';\nimport { CurrencyCodeIconComponent } from '../../../../shared/components/currency-code-icon/currency-code-icon.component';\nimport { SharedService } from '../../../../shared/services/shared.service';\nimport { TranslationService } from '../../../../shared/services/translation.service';\nimport moment from 'moment';\nimport { HotelManageBookingEndpointsService } from '../../../shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service';\nimport { HotelManageBookingService } from '../../../shared/services/hotel-manage-booking/hotel-manage-booking.service';\nimport { CancelHotelBookingPayload } from '../../../shared/models/cancel-hotel-booking.model';\nimport { HotelManageBookingAsideTabEnum } from '../../../shared/enums/hotel-manage-booking-aside-tab.enum';\nimport { environments } from '../../../../shared/environments/environment';\nimport { ConfirmModalComponent } from '../../../shared/components/confirm-modal/confirm-modal.component';\nimport { ManageBookingFailedModalComponent } from '../../../shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component';\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation-refund-summary',\n standalone: true,\n imports: [\n CommonModule,\n LoaderModule,\n AlmatarIconModule,\n ExchangePipeModule,\n CurrencyCodeIconComponent,\n ConfirmModalComponent,\n ManageBookingFailedModalComponent,\n ],\n templateUrl:\n './almatar-hotel-auto-cancellation-refund-summary.component.html',\n styleUrls: [\n './almatar-hotel-auto-cancellation-refund-summary.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlmatarHotelAutoCancellationRefundSummaryComponent implements OnInit {\n private readonly endpointsService = inject(\n AlmatarHotelAutoCancellationEndpointsService,\n );\n\n private readonly autoCancellationService = inject(\n AlmatarHotelAutoCancellationService,\n );\n\n private readonly store = inject(Store);\n private readonly sharedService = inject(SharedService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly translateService = inject(TranslationService);\n private readonly hotelManageBookingsEndpointsService = inject(\n HotelManageBookingEndpointsService,\n );\n\n private readonly hotelManageBookingService = inject(\n HotelManageBookingService,\n );\n\n constructor(){\n // effect(() => {\n // console.log('Refund Summary Updated:', this.currentCurrency());\n // })\n }\n\n // Currency\n readonly baseCurrencyCode = signal('SAR');\n readonly currentCurrency = signal<any>(null);\n\n readonly paymentMethod = signal<any>(null);\n\n // Language\n readonly currentLang = signal('en');\n\n readonly selectedRooms =\n input.required<IAlmatarHotelAutoCancellationRoom[]>();\n\n readonly bookingId = input<string | number>('');\n\n readonly hotelId = input<string | number>('');\n\n readonly hotelInfo = input<IAlmatarHotelAutoCancellationHotelInfo | null>(\n null,\n );\n\n readonly selectionSkipped = input<boolean>(false);\n\n readonly keepRoom = output<void>();\n readonly selectRefundOption = output<{\n packageIds: string[];\n payout: any;\n totalRefund: number;\n responseData: any;\n }>();\n\n readonly closeModal = output<void>();\n\n readonly isCancelLoading = signal(false);\n\n // Modal state\n readonly showConfirmModalFlag = signal(false);\n readonly showErrorModalFlag = signal(false);\n readonly hotelManageError = signal<string>('');\n\n backArrow = computed(() => {\n return 'arrow-left'; // Always LTR for English\n });\n\n readonly expandedPackageIds = signal<Set<string>>(new Set());\n readonly expandedAmountIds = signal<Set<string>>(new Set());\n readonly isLoading = signal(true);\n readonly refundSummary =\n signal<IAlmatarHotelAutoCancellationRefundSummary | null>(null);\n\n readonly error = signal<string | null>(null);\n readonly responseData = signal<any | null>(null);\n\n readonly rooms = computed(() => this.refundSummary()?.rooms ?? []);\n\n groupRoomsByName(rooms: IAlmatarHotelAutoCancellationRefundPackageRoom[]): {\n roomName: string;\n count: number;\n nights?: number;\n adults?: number;\n children?: number;\n basis?: string;\n }[] {\n const grouped = new Map<\n string,\n {\n count: number;\n nights?: number;\n adults?: number;\n children?: number;\n basis?: string;\n }\n >();\n\n rooms.forEach((room) => {\n const name = room.roomName || 'Room';\n const adults = room.pax?.adults ?? room.adults;\n const children = room.pax?.children ?? room.children;\n if (grouped.has(name)) {\n const existing = grouped.get(name)!;\n existing.count++;\n } else {\n grouped.set(name, {\n count: 1,\n nights: room.nights,\n adults,\n children,\n basis: room.basis,\n });\n }\n });\n\n return Array.from(grouped.entries()).map(([roomName, data]) => ({\n roomName,\n ...data,\n }));\n }\n\n readonly packages = computed(() => this.refundSummary()?.packages ?? []);\n\n readonly currentRefundRoomsNumber = computed(() => {\n const packages = this.packages();\n return packages\n .filter((pkg) => !pkg.cancelledBefore)\n .reduce((acc, pkg) => acc + (pkg.rooms?.length || 0), 0);\n });\n\n readonly totalPaid = computed(() => this.refundSummary()?.totalPaid ?? 0);\n readonly totalRefund = computed(() => this.refundSummary()?.totalRefund ?? 0);\n readonly alreadyRefunded = computed(\n () => this.payout()?.alreadyRefunded ?? 0,\n );\n\n readonly summaries = computed(() => this.refundSummary()?.summaries ?? []);\n readonly payout = computed(() => this.refundSummary()?.payout ?? null);\n readonly packageIds = computed(() =>\n this.selectedRooms().map((room) => room.packageId),\n );\n\n readonly totalPackagesCount = computed(() =>\n this.packages().reduce((acc, pkg) => acc + (pkg.rooms?.length || 0), 0),\n );\n\n // Additional breakdown fields\n readonly couponAmount = computed(() => this.refundSummary()?.coupon ?? 0);\n readonly giftsTotal = computed(() => this.refundSummary()?.giftsTotal ?? 0);\n readonly giftsDetails = computed(\n () => this.refundSummary()?.giftsDetails ?? [],\n );\n\n readonly giftsHasRefundableEntity = computed(() =>\n this.giftsDetails().some((gift: IGift) => gift.refundable),\n );\n\n readonly serviceFeeAmount = computed(\n () => this.refundSummary()?.serviceFee ?? 0,\n );\n\n readonly surchargeAmount = computed(\n () => this.refundSummary()?.surcharge ?? 0,\n );\n\n readonly isGoldenGift = computed(\n () => this.refundSummary()?.goldenGift ?? false,\n );\n\n readonly payoutNote = computed(() => this.payout()?.note ?? null);\n readonly previousRooms = computed(\n () => this.refundSummary()?.previousRooms ?? [],\n );\n\n // Check if there are any deductions to show\n readonly hasDeductions = computed(\n () =>\n this.couponAmount() > 0 ||\n this.giftsTotal() > 0 ||\n this.serviceFeeAmount() > 0 ||\n this.surchargeAmount() > 0,\n );\n\n ngOnInit(): void {\n this.loadRefundDetails();\n this.initCurrency();\n this.initLanguage();\n }\n\n private initLanguage(): void {\n // Language is fixed to English\n this.currentLang.set('en');\n }\n\n private initCurrency(): void {\n this.store\n .select(getCurrentCurrency)\n .pipe(\n filter((currency) => !!currency),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((currency) => {\n this.currentCurrency.set(currency);\n });\n\n this.sharedService\n .getBaseCurrency()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((currency) => {\n this.baseCurrencyCode.set(currency.code);\n });\n }\n\n loadRefundDetails(): void {\n const packageIds = this.packageIds();\n this.isLoading.set(true);\n this.error.set(null);\n\n this.endpointsService\n .getRefundDetails(packageIds)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.data) {\n const summary = this.endpointsService.mapApiResponseToRefundSummary(\n response.data,\n );\n\n this.responseData.set(response.data);\n\n this.refundSummary.set(summary);\n\n this.paymentMethod.set(\n this.determinePaymentMethod(\n this.refundSummary()?.payout,\n this.refundSummary()?.totals,\n ),\n );\n }\n this.isLoading.set(false);\n },\n error: (err) => {\n // this.calculateLocalRefundSummary();\n this.error.set(err?.message || 'Failed to load refund details');\n this.isLoading.set(false);\n },\n });\n }\n\n private calculateLocalRefundSummary(): void {\n const summary = this.endpointsService.calculateLocalRefundSummary(\n this.selectedRooms().map((room) => ({ ...room, isSelected: true })),\n );\n this.refundSummary.set(summary);\n }\n\n togglePackageExpand(packageId: string): void {\n this.expandedPackageIds.update((current) => {\n const newSet = new Set(current);\n if (newSet.has(packageId)) {\n newSet.delete(packageId);\n } else {\n newSet.add(packageId);\n }\n return newSet;\n });\n }\n\n toggleAmountExpand(packageId: string): void {\n this.expandedAmountIds.update((current) => {\n const newSet = new Set(current);\n if (newSet.has(packageId)) {\n newSet.delete(packageId);\n } else {\n newSet.add(packageId);\n }\n return newSet;\n });\n }\n\n isPackageExpanded(packageId: string): boolean {\n return this.expandedPackageIds().has(packageId);\n }\n\n isAmountExpanded(packageId: string): boolean {\n return this.expandedAmountIds().has(packageId);\n }\n\n onKeepRoom(): void {\n this.keepRoom.emit();\n }\n\n onSelectRefundOption(): void {\n this.selectRefundOption.emit({\n packageIds: this.packageIds(),\n payout: this.payout(),\n totalRefund: this.totalRefund(),\n responseData: this.responseData(),\n });\n }\n\n onClose(): void {\n this.closeModal.emit();\n }\n\n submitData(): void {\n this.onConfirmSend();\n }\n\n onConfirmSend(): void {\n this.isCancelLoading.set(true);\n this.hotelManageBookingsEndpointsService\n .cancelBookingRequest(new CancelHotelBookingPayload())\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (res: any) => {\n this.isCancelLoading.set(false);\n if (environments.isTenant) {\n this.onShowWhatsAppAgent();\n } else {\n if (res?.data?.isWhatsAppRedirect) {\n this.onShowWhatsAppAgent();\n } else {\n this.onShowConfirmModal();\n }\n }\n },\n error: (error: any) => {\n this.isCancelLoading.set(false);\n this.hotelManageError.set(error?.error?.errors?.message || '');\n this.showErrorModalFlag.set(true);\n },\n });\n }\n\n private onShowWhatsAppAgent(): void {\n this.hotelManageBookingService.setActiveAsideTab(\n HotelManageBookingAsideTabEnum.whatsAppAgent,\n );\n this.closeModal.emit();\n }\n\n private onShowConfirmModal(): void {\n this.showConfirmModalFlag.set(true);\n }\n\n closeAllModals(): void {\n this.showConfirmModalFlag.set(false);\n this.showErrorModalFlag.set(false);\n this.closeModal.emit();\n }\n\n formatDate(date: string | undefined): string {\n if (!date) {\n return '';\n }\n const day = moment(date).format('D');\n const month = moment(date).locale('en').format('MMMM');\n const year = moment(date).format('YYYY');\n return `${day} ${month} ${year}`;\n }\n\n private determinePaymentMethod(totals: any, payout: any): string {\n if ((payout?.tabby ?? totals?.tabby ?? 0) > 0) {\n return 'TB'; // Tabby\n }\n if ((payout?.tamara ?? totals?.tamara ?? 0) > 0) {\n return 'TM'; // Tamara\n }\n if ((payout?.card ?? totals?.card ?? 0) > 0) {\n return 'CH'; // Card\n }\n return '';\n }\n}\n","<div class=\"refund-summary\">\n <!-- Header -->\n <!-- <div class=\"refund-summary__header\">\n <button\n type=\"button\"\n class=\"refund-summary__header-btn\"\n (click)=\"onKeepRoom()\"\n aria-label=\"Close\"\n >\n <almatar-icon [name]=\"backArrow()\"></almatar-icon>\n </button>\n\n <div class=\"refund-summary__header-text\">\n <h3 class=\"refund-summary__header-title\">\n Cancel Booking Request\n </h3>\n </div>\n <button\n type=\"button\"\n class=\"refund-summary__header-btn\"\n (click)=\"onClose()\"\n aria-label=\"Close\"\n >\n <almatar-icon [name]=\"'x-mark'\"></almatar-icon>\n </button>\n </div> -->\n\n @if (isLoading()) {\n <div class=\"refund-summary__loader\">\n <almatar-loader></almatar-loader>\n </div>\n } @else if (error()) {\n <div class=\"refund-summary__error\">\n <div class=\"refund-summary__error-card\">\n <div class=\"refund-summary__error-icon-wrapper\">\n <svg\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 8V12M12 16H12.01M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <h4 class=\"refund-summary__error-title\">\n Failed to load refund details. Please try again.\n </h4>\n <button\n class=\"refund-summary__error-btn\"\n type=\"button\"\n (click)=\"loadRefundDetails()\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 4V10H7M23 20V14H17M20.49 9C19.9828 7.56678 19.1209 6.2854 17.9845 5.27542C16.8482 4.26543 15.4745 3.55976 13.9917 3.22426C12.5089 2.88875 10.9652 2.93434 9.50481 3.35677C8.04437 3.77921 6.71475 4.56471 5.64 5.64L1 10M23 14L18.36 18.36C17.2853 19.4353 15.9556 20.2208 14.4952 20.6432C13.0348 21.0657 11.4911 21.1112 10.0083 20.7757C8.52547 20.4402 7.1518 19.7346 6.01547 18.7246C4.87913 17.7146 4.01717 16.4332 3.51 15\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n Try Again\n </button>\n </div>\n </div>\n } @else {\n <div class=\"refund-summary__content\">\n <h3 class=\"refund-summary__title\">\n Refund summary\n </h3>\n\n <div class=\"package-cards\">\n @for (pkg of packages(); track i; let i = $index) {\n <div\n class=\"package-card\"\n [class.package-card--expanded]=\"isPackageExpanded(pkg.packageId)\"\n [class.package-card--cancelled-before]=\"pkg.cancelledBefore\"\n >\n <div\n class=\"package-card__header\"\n (click)=\"togglePackageExpand(pkg.packageId)\"\n >\n <div class=\"package-card__info\">\n <div class=\"package-card__title-row\">\n <h4 class=\"package-card__name\">{{ pkg.packageName }}</h4>\n @if (!pkg.cancelledBefore) {\n <span class=\"package-card__badge\">\n CURRENT CANCELLATION\n </span>\n <!-- <span class=\"package-card__date\">\n Today on\n {{ formatDate(pkg.cancellationDate) }}\n </span> -->\n } @else {\n <span\n class=\"package-card__badge package-card__badge--cancelled\"\n >\n PREVIOUS CANCELLATION\n </span>\n <!-- <span class=\"package-card__date\">\n Cancellation date:\n {{ formatDate(pkg.cancellationDate) }}\n </span> -->\n }\n </div>\n </div>\n <div\n class=\"package-card__expand-icon\"\n [class.rotated]=\"isPackageExpanded(pkg.packageId)\"\n >\n <almatar-icon [name]=\"'chevron-down'\"></almatar-icon>\n </div>\n </div>\n\n <!-- Rooms display -->\n @if (pkg.rooms?.length) {\n <div class=\"package-card__rooms-container\">\n @for (\n group of groupRoomsByName(pkg.rooms);\n track i;\n let i = $index\n ) {\n <div class=\"package-card__room-summary\">\n @if (group.count > 1) {\n <!-- Multiple rooms -->\n {{ group.count }}x {{ group.roomName }}\n } @else {\n <!-- Single room -->\n Room\n\n {{ i + 1 }}\n <span class=\"package-card__separator\">&bull;</span>\n {{ group.roomName }}\n }\n @if (group.nights) {\n <span class=\"package-card__separator\">&bull;</span>\n {{ group.nights }}\n @if (group.nights === 1) {\n night\n } @else {\n nights\n }\n }\n @if (group.adults) {\n <span class=\"package-card__separator\">&bull;</span>\n {{ group.adults }}\n @if (group.adults === 1) {\n Adult\n } @else {\n Adults\n }\n }\n @if (group.children) {\n <span class=\"package-card__separator\">&bull;</span>\n {{ group.children }}\n @if (group.children === 1) {\n Child\n } @else {\n Children\n }\n }\n </div>\n }\n </div>\n }\n\n @if (!pkg.cancelledBefore) {\n <span class=\"package-card__date\">\n Today on\n {{ formatDate(pkg.cancellationDate) }}\n </span>\n } @else {\n <span class=\"package-card__date\">\n Cancellation date:\n {{ formatDate(pkg.cancellationDate) }}\n </span>\n }\n\n <!-- Room Amount Row with expand -->\n\n <!-- Expandable content: Rooms, Date, and Financial breakdown -->\n <div\n class=\"package-card__expandable-content\"\n [class.expanded]=\"isPackageExpanded(pkg.packageId)\"\n >\n <div\n class=\"package-card__row package-card__row--clickable\"\n (click)=\"\n toggleAmountExpand(pkg.packageId); $event.stopPropagation()\n \"\n >\n @if (pkg?.rooms?.length > 1) {\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >Rooms amount</span\n >\n } @else {\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >Room amount</span\n >\n }\n <span class=\"package-card__value package-card__value--regular\">\n @if (\n pkg.fee > 0 || pkg.serviceFee > 0 || surchargeAmount() > 0\n ) {\n <div\n class=\"package-card__expand-icon\"\n [class.rotated]=\"isAmountExpanded(pkg.packageId)\"\n >\n <almatar-icon [name]=\"'chevron-down'\"></almatar-icon>\n </div>\n }\n\n {{\n pkg.amount\n }}\n {{ currentCurrency()?.code }}\n @if (currentCurrency()) {\n <app-currency-code-icon\n [currency]=\"currentCurrency()\"\n ></app-currency-code-icon>\n }\n </span>\n </div>\n\n <!-- Expanded content: Cancellation fee and Service fee -->\n <div\n class=\"package-card__expanded-content\"\n [class.expanded]=\"\n isAmountExpanded(pkg.packageId) &&\n (pkg.fee > 0 || pkg.serviceFee > 0)\n \"\n >\n @if (pkg.fee > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">Cancellation fee</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n pkg.fee\n }}\n {{ currentCurrency()?.code }}\n @if (currentCurrency()) {\n <app-currency-code-icon\n [currency]=\"currentCurrency()\"\n ></app-currency-code-icon>\n }\n </span>\n </div>\n }\n\n @if (pkg.serviceFee > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">Service Fee</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n pkg.serviceFee\n }}\n {{ currentCurrency()?.code }}\n @if (currentCurrency()) {\n <app-currency-code-icon\n [currency]=\"currentCurrency()\"\n ></app-currency-code-icon>\n }\n </span>\n </div>\n }\n\n @if (surchargeAmount() > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">\n Surcharge (2.5%)\n </span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n surchargeAmount()\n }}\n {{ currentCurrency()?.code }}\n @if (currentCurrency()) {\n <app-currency-code-icon\n [currency]=\"currentCurrency()\"\n ></app-currency-code-icon>\n }\n </span>\n </div>\n }\n </div>\n <!-- Add-Ons Refund Section -->\n @if (giftsDetails().length > 0 && i === packages()?.length - 1) {\n <div class=\"addons-refund\">\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >\n Add-Ons Refund\n </span>\n <div class=\"addons-refund__list\">\n @for (gift of giftsDetails(); track $index) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">{{ gift.name }}</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n {{\n gift.toBeRefundedAmount\n | exchange_round\n : baseCurrencyCode()\n : currentCurrency()\n }}\n @if (currentCurrency()) {\n <app-currency-code-icon\n [currency]=\"currentCurrency()\"\n ></app-currency-code-icon>\n }\n <!-- @if (!gift.refundable) {\n <span> - </span>\n } -->\n </span>\n </div>\n }\n </div>\n\n <!-- @if (giftsHasRefundableEntity()) {\n <div class=\"addons-refund__notice\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M10 9V14\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <circle cx=\"10\" cy=\"6.5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n <span class=\"addons-refund__notice-text\">\n Your add-on service/s refund will be processed separately by our Customer Service team shortly.\n </span>\n </div>\n } -->\n </div>\n }\n </div>\n <!-- End expandable content -->\n\n <!-- You will get back row - ALWAYS VISIBLE -->\n <div class=\"package-card__details\">\n @if (pkg.cancelledBefore) {\n <div class=\"package-card__row package-card__row--total\">\n <span class=\"package-card__label package-card__label--dark\">Refunded amount</span>\n <span\n class=\"package-card__value package-card__value--highlight\"\n >\n {{\n pkg.refund\n }}\n {{ currentCurrency()?.code }}\n @if (currentCurrency()) {\n <app-currency-code-icon\n [currency]=\"currentCurrency()\"\n ></app-currency-code-icon>\n }\n </span>\n </div>\n } @else {\n <div class=\"package-card__row package-card__row--total\">\n <span class=\"package-card__label package-card__label--dark\">You will get back</span>\n <span\n class=\"package-card__value package-card__value--highlight package-card__value--regular\"\n >\n {{\n pkg.refund\n }}\n {{ currentCurrency()?.code }}\n @if (currentCurrency()) {\n <app-currency-code-icon\n [currency]=\"currentCurrency()\"\n ></app-currency-code-icon>\n }\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <hr class=\"seperator\" />\n\n <div class=\"total-summary\">\n <div class=\"total-summary__row\">\n <span class=\"total-summary__label\">Total paid</span>\n <span class=\"total-summary__value\">\n {{\n totalPaid()\n }}\n {{ currentCurrency()?.code }}\n @if (currentCurrency()) {\n <app-currency-code-icon\n [currency]=\"currentCurrency()\"\n ></app-currency-code-icon>\n }\n </span>\n </div>\n\n @if (alreadyRefunded()) {\n <div class=\"total-summary__row\">\n <span class=\"total-summary__label\">Rooms Refunded</span>\n <span class=\"total-summary__value\">\n {{\n alreadyRefunded()\n }}\n {{ currentCurrency()?.code }}\n @if (currentCurrency()) {\n <app-currency-code-icon\n [currency]=\"currentCurrency()\"\n ></app-currency-code-icon>\n }\n </span>\n </div>\n }\n\n <div class=\"total-summary__row total-summary__row--highlight\">\n <div class=\"total-summary__label total-summary__label--highlight\">\n <span>\n You'll get back for\n {{ currentRefundRoomsNumber() }}\n {{\n currentLang() !== 'ar'\n ? currentRefundRoomsNumber() > 1\n ? ('Rooms')\n : ('Room')\n : ''\n }}\n </span>\n </div>\n <span class=\"total-summary__value total-summary__value--highlight\">\n {{\n totalRefund()\n }}\n {{ currentCurrency()?.code }}\n @if (currentCurrency()) {\n <app-currency-code-icon\n [currency]=\"currentCurrency()\"\n ></app-currency-code-icon>\n }\n </span>\n </div>\n </div>\n\n <div class=\"info-banner\">\n <div class=\"info-banner__icon\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 2L3 5V9C3 13.55 6.24 17.74 10 18.5C13.76 17.74 17 13.55 17 9V5L10 2Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M7 10L9 12L13 8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <div class=\"info-banner__content\">\n @if (paymentMethod() === 'CH') {\n <p class=\"info-banner__text\">\n Your refund is instant from our side, your bank may take up to 15 business days to reflect it.\n </p>\n } @else if (paymentMethod() === 'TB') {\n <p class=\"info-banner__text\">\n Your refund will be processed to Tabby within 3-5 business days.\n </p>\n } @else if (paymentMethod() === 'TM') {\n <p class=\"info-banner__text\">\n Your refund will be processed to Tamara within 7-10 business days.\n </p>\n } @else {\n <p class=\"info-banner__text\">\n Your loyalty points will be refunded instantly to your account.\n </p>\n }\n\n <p class=\"info-banner__subtext\">\n You can select refund option in the next step\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"refund-summary__footer\">\n @if (totalRefund()) {\n <button class=\"btn btn--secondary\" type=\"button\" (click)=\"onKeepRoom()\">\n Keep Room\n </button>\n <button\n class=\"btn btn--primary\"\n type=\"button\"\n (click)=\"onSelectRefundOption()\"\n >\n Select refund option\n </button>\n } @else {\n <button\n class=\"btn btn--danger\"\n type=\"button\"\n [disabled]=\"isCancelLoading()\"\n (click)=\"submitData()\"\n >\n @if (isCancelLoading()) {\n <span class=\"btn__spinner\"></span>\n } @else {\n Cancel Booking\n }\n </button>\n }\n </div>\n }\n</div>\n\n<!-- Confirm Modal -->\n@if (showConfirmModalFlag()) {\n <div\n almatar-confirm-modal\n [Message]=\"'Your request has been submitted. Our customer service team will contact you shortly.'\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n<!-- Error Modal -->\n@if (showErrorModalFlag()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n","// Flight refund details interfaces\n\nexport interface IRefundDetailsData {\n bookingId?: string | number;\n refundAmount?: number;\n totalRefundAmount?: number;\n walletRefundAmount?: number;\n totalCardRefundAmount?: number;\n totalLoyaltyPointsRefundAmount?: number;\n totalLoyaltyPoints?: number;\n currency?: string;\n refundMethod?: RefundPreferredMethod | string;\n paymentGateway?: PaymentGatewayCode | LoyaltyPaymentType | string;\n loyaltyPaymentType?: LoyaltyPaymentType | string;\n isFullWalletRefundAllowed?: boolean;\n paymentMethodCustomerUsed?: string;\n isRefundable?: boolean;\n}\n\nexport type RefundPreferredMethod =\n | 'ORIGINAL_PAYMENT_METHOD'\n | 'WALLET'\n | 'wallet'\n | 'originalPaymentMethod'\n | 'BANK_TRANSFER'\n | 'LOYALTY_POINTS';\n\nexport type LoyaltyPaymentType =\n | 'ALMATAR_POINTS'\n | 'ALFURSAN'\n | 'AlRajhiMokafaa'\n | 'Qitaf'\n | 'Wala';\n\nexport enum PaymentGatewayCode {\n MADA = 'MADA',\n VISA = 'VISA',\n MASTERCARD = 'MASTERCARD',\n AMEX = 'AMEX',\n APPLE_PAY = 'APPLE_PAY',\n AlRajhiMokafaa = 'RAJHI',\n Qitaf = 'QITAF',\n Wala = 'WALA',\n Tamara = 'TM',\n Tabby = 'TB',\n Stc = 'STC',\n CH = 'CH',\n HP = 'HP',\n MF = 'MF',\n WT = 'WT',\n TM = 'TM',\n TB = 'TB',\n RAJHI = 'RAJHI',\n STC = 'STC',\n PPB = 'PPB',\n PP = 'PP',\n TAMAM = 'TAMAM',\n QITAF = 'QITAF',\n WALA = 'WALA'\n}\n\n/** Labels for `paymentMethodCustomerUsed` gateway codes returned by the backend. */\nexport const PAYMENT_GATEWAY_LABELS: Record<string, { en: string; ar: string }> = {\n CH: { en: 'Card', ar: 'البطاقة' },\n HP: { en: 'Hyperpay', ar: 'هايبر باي' },\n MF: { en: 'My Fatoora', ar: 'ماي فاتورة' },\n WT: { en: 'Wire Transfer', ar: 'تحويل بنكي' },\n STC: { en: 'STC', ar: 'STC' },\n TM: { en: 'Tamara', ar: 'تمارا' },\n TB: { en: 'Tabby', ar: 'تابي' },\n RAJHI: { en: 'Al Rajhi Mokafaa', ar: 'الراجحي مكافآت' },\n PPB: { en: 'Customer Balance', ar: 'رصيد العميل' },\n PP: { en: 'Postpay', ar: 'بوست باي' },\n TAMAM: { en: 'Tamam', ar: 'تمام' },\n QITAF: { en: 'Qitaf', ar: 'قطاف' },\n MIS: { en: 'MIS Pay', ar: 'MIS Pay' },\n MATAR: { en: 'Almatar Pay', ar: 'المطار باي' },\n CB: { en: 'Company Balance', ar: 'رصيد الشركة' },\n ANB: { en: 'ANB', ar: 'العربي الوطني' },\n AMWAL: { en: 'Amwal', ar: 'أموال' },\n WALA: { en: 'Wala', ar: 'ولاء' },\n YGG: { en: 'YGG', ar: 'YGG' },\n};\n\n/** Gateway codes that refund to an installment plan rather than the original card. */\nexport const INSTALLMENT_GATEWAY_CODES = ['TM', 'TB'];\n\n/** Gateway codes that refund to a loyalty-program account rather than the original card. */\nexport const LOYALTY_GATEWAY_CODES = ['RAJHI', 'QITAF', 'STC', 'WALA'];\n\n/**\n * Internal payment-processor/gateway names, never customer-recognizable\n * brands — must not be surfaced verbatim (e.g. a card refund processed\n * through Hyperpay must read as \"Card\"/\"Original Payment Method\", never\n * \"Hyperpay\"). Callers fall back to a generic label whenever the normalized\n * lookup returns ''.\n */\nexport const INTERNAL_GATEWAY_CODES = ['HP', 'MF', 'WT', 'PPB', 'PP', 'TAMAM'];\n\n/**\n * Result/confirmation-screen-only override: these gateways process card\n * payments through Mada — shown specifically as \"Mada Card\" instead of\n * falling back to the generic \"Original Payment Method\" label used\n * everywhere else `INTERNAL_GATEWAY_CODES` applies.\n */\nexport const MADA_GATEWAY_CODES = ['HP', 'CH'];\n\n/**\n * Normalizes a raw payment gateway code from the backend to a standardized code.\n * Handles both uppercase codes (e.g. 'HP') and labels (e.g. 'Hyperpay').\n */\nexport function normalizePaymentGatewayCode(raw?: string | null): PaymentGatewayCode | '' {\n if (!raw) return '';\n const needle = raw.trim().toLowerCase();\n const codes = Object.keys(PAYMENT_GATEWAY_LABELS);\n const byCode = codes.find((code) => code.toLowerCase() === needle);\n if (byCode) return byCode as PaymentGatewayCode;\n const byLabel = codes.find((code) =>\n PAYMENT_GATEWAY_LABELS[code].en.toLowerCase() === needle ||\n PAYMENT_GATEWAY_LABELS[code].ar.toLowerCase() === needle\n );\n return byLabel ? (byLabel as PaymentGatewayCode) : '';\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n computed,\n input,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslationService } from '../../../../shared/services/translation.service';\nimport { CurrencyCodeIconComponent } from '../../../../shared/components/currency-code-icon/currency-code-icon.component';\nimport { CurrencySizeEnum } from '../../../../shared/components/currency-code-icon/currency-code-icon.component';\nimport { ICurrency } from '../../../../shared/models';\nimport {\n INSTALLMENT_GATEWAY_CODES,\n INTERNAL_GATEWAY_CODES,\n IRefundDetailsData,\n LOYALTY_GATEWAY_CODES,\n MADA_GATEWAY_CODES,\n normalizePaymentGatewayCode,\n PAYMENT_GATEWAY_LABELS,\n PaymentGatewayCode,\n RefundPreferredMethod,\n} from '../../../shared/interfaces/i-flight-refund-details';\n\nexport interface RefundMethodSplitRow {\n label: string;\n value: number;\n instant: boolean;\n isLoyalty: boolean;\n isMada?: boolean;\n}\n\n/**\n * Hotel Refund-method selection screen (\"You will get back … / Wallet / Card /\n * Split Refund\"). Takes the raw refund snapshot (`data`) as its single\n * source of truth and derives every display/eligibility decision from it\n * internally — which options are eligible, the split breakdown, gateway and\n * loyalty-program label resolution — so callers don't need to replicate any\n * of that logic themselves.\n */\n@Component({\n selector: 'almatar-hotel-refund-method-selector',\n standalone: true,\n imports: [CommonModule, CurrencyCodeIconComponent],\n templateUrl: './hotel-refund-method-selector.component.html',\n styleUrls: ['./hotel-refund-method-selector.component.scss'],\n})\nexport class HotelRefundMethodSelectorComponent {\n private _data = signal<IRefundDetailsData | null | undefined>(null);\n @Input() set data(value: IRefundDetailsData | null | undefined) {\n this._data.set(value);\n }\n\n get data(): IRefundDetailsData | null | undefined {\n return this._data();\n }\n\n /** Fallback booking id to display when `data.bookingId` isn't set yet. */\n @Input() bookingId: string | number | null | undefined;\n @Input() currencyObj: ICurrency | null = null;\n @Input() refundMethod: RefundPreferredMethod = 'wallet';\n /** Whether the header's Back button is shown at all — off by default; callers that want it opt in. */\n @Input() showBack = false;\n /** Whether the close button is shown — off by default; callers that want it opt in. */\n readonly showCloseButton = input<boolean>(false);\n /** Whether to show the loyalty points note explaining points are refunded as permanent wallet points. */\n readonly showLoyaltyPointsNote = input<boolean>(false);\n\n /** Left arrow — abandons the cancellation flow entirely (closes the whole manage-booking modal). */\n @Output() closed = new EventEmitter<void>();\n /** Right ✕ — steps back to the Refund Details screen only (mirrors the native dialog close this screen's custom header replaced). */\n @Output() backRequested = new EventEmitter<void>();\n @Output() methodSelected = new EventEmitter<RefundPreferredMethod>();\n\n currencySizeEnum = CurrencySizeEnum.LG;\n private translateService = new TranslationService();\n\n displayBookingId = computed(() => this._data()?.bookingId ?? this.bookingId);\n totalRefundAmount = computed(() => this._data()?.totalRefundAmount);\n walletRefundAmount = computed(() =>\n Number(this._data()?.walletRefundAmount ?? 0),\n );\n\n private gatewayCode = computed(() =>\n normalizePaymentGatewayCode(this._data()?.paymentMethodCustomerUsed),\n );\n\n private isLoyaltyGateway(code: PaymentGatewayCode | '' | undefined): boolean {\n return !!code && LOYALTY_GATEWAY_CODES.includes(code);\n }\n\n /** Whether the customer paid via an installment gateway (Tamara, Tabby, …). */\n isInstallmentMethod = computed(() => {\n const code = this.gatewayCode();\n return !!code && INSTALLMENT_GATEWAY_CODES.includes(code);\n });\n\n /** Whether the customer paid via a loyalty-program gateway (Al Rajhi Mokafaa, …). */\n isLoyaltyMethod = computed(() => this.isLoyaltyGateway(this.gatewayCode()));\n\n /**\n * Whether the payment was 100% loyalty points (no card portion).\n * Used for description/badge when loyaltyPaymentType is set but no gateway code.\n */\n isLoyaltyOnlyPayment = computed(() => {\n const d = this._data();\n return (\n !!d?.loyaltyPaymentType && Number(d?.totalCardRefundAmount ?? 0) === 0\n );\n });\n\n /** Whether to show loyalty-style description/badge (either loyalty gateway OR 100% loyalty payment). */\n showAsLoyalty = computed(\n () => this.isLoyaltyMethod() || this.isLoyaltyOnlyPayment(),\n );\n\n /** Whether the original card was a Mada card — its refund row reads \"Mada Card\" instead of the generic gateway label. */\n isMadaMethod = computed(() => {\n const code = this.gatewayCode();\n return !!code && MADA_GATEWAY_CODES.includes(code);\n });\n\n /** Any gateway that refunds somewhere other than a plain card — used for the wallet-style icon. */\n isSpecialGatewayMethod = computed(\n () => this.isInstallmentMethod() || this.showAsLoyalty(),\n );\n\n /** Settlement-time badge — differs per installment gateway (Tamara settles slower than Tabby). */\n paymentBadgeKey = computed((): string => {\n if (this.isInstallmentMethod()) {\n return this.gatewayCode() === PaymentGatewayCode.Tamara\n ? '7-10 business days'\n : '3-5 business days';\n }\n if (this.showAsLoyalty()) {\n return 'Instant';\n }\n return '5-7 business days';\n });\n\n /**\n * Display label for `paymentMethodCustomerUsed`, localized. `loyaltyPaymentType`\n * (once the backend sends it) wins when present — it names the specific\n * loyalty program (e.g. Al Rajhi vs Qitaf) behind a gateway like STC that\n * doesn't say which one on its own.\n */\n customerPaymentLabel = computed((): string => {\n const d = this._data();\n const gateway = this.gatewayCode();\n // `loyaltyPaymentType` only disambiguates a genuinely ambiguous gateway\n // (STC spans more than one loyalty program) — it must never override an\n // unambiguous gateway like Tamara/Tabby/Card just because the backend\n // happened to also send a `loyaltyPaymentType` value on that booking.\n const code =\n (gateway === PaymentGatewayCode.Stc && d?.loyaltyPaymentType) || gateway;\n if (code && INTERNAL_GATEWAY_CODES.includes(code)) {\n // Never surface an internal processor name (e.g. Hyperpay) to the\n // customer — falls back to a generic \"Card\"/original-payment label.\n return '';\n }\n const entry = code ? PAYMENT_GATEWAY_LABELS[code] : undefined;\n if (!entry) {\n return '';\n }\n return this.translateService.currentLang?.startsWith('ar')\n ? entry.ar\n : entry.en;\n });\n\n /**\n * Label for the standalone \"Original Payment Method\" option card (shown\n * when the whole refund goes to one destination — no separate loyalty\n * row exists here, so unlike `splitRefundRows`, the loyalty program name\n * (e.g. \"Wala\") is still shown when that's what was used). Mada wins over\n * everything else, reading \"Mada Card\" instead of the generic gateway\n * name or the \"Original Payment Method\" fallback.\n */\n originalPaymentLabel = computed((): string => {\n if (this.isMadaMethod()) {\n return this.translateService.instant(\n 'manage-booking.smart-cancel.result.mada-card',\n );\n }\n return (\n this.customerPaymentLabel() ||\n this.walletOrLoyaltyLabel(\n this._data(),\n 'manage-booking.smart-cancel.refund-method.original',\n )\n );\n });\n\n /**\n * \"Almatar Wallet\" row label — when the backend names a specific loyalty\n * program via `loyaltyPaymentType` (e.g. Qitaf, Al Rajhi Mokafaa), that\n * program's name replaces the generic \"Almatar Wallet\" label, since the\n * amount is actually a loyalty-program redemption rather than a plain\n * wallet balance.\n */\n private walletOrLoyaltyLabel(\n d: IRefundDetailsData | null | undefined,\n fallbackKey = 'manage-booking.smart-cancel.refund-method.wallet',\n ): string {\n const loyalty = d?.loyaltyPaymentType;\n const entry = loyalty ? PAYMENT_GATEWAY_LABELS[loyalty] : undefined;\n if (entry) {\n return this.translateService.currentLang?.startsWith('ar')\n ? entry.ar\n : entry.en;\n }\n return this.translateService.instant(fallbackKey);\n }\n\n // Wallet card's own name always reads \"Almatar Wallet\" — the loyalty\n // program name (e.g. \"Qitaf\") is surfaced via the note below instead of\n // replacing the card's title.\n walletLabel = computed(() =>\n this.translateService.instant(\n 'manage-booking.smart-cancel.refund-method.wallet',\n ),\n );\n\n /**\n * Part of the refund came from converting external loyalty points into\n * wallet funds — surfaced as a note under the wallet destination so the\n * customer knows those points land as permanent wallet balance, not cash.\n */\n hasLoyaltyPointsRefund = computed(\n () => Number(this._data()?.totalLoyaltyPoints ?? 0) > 0,\n );\n\n /**\n * `totalLoyaltyPoints` is normally the forfeited-at-booking points count\n * (no refund destination of its own). But when the backend never\n * populates `totalLoyaltyPointsRefundAmount` for a `loyaltyPaymentType`\n * booking, this is the only signal that a loyalty program was involved,\n * so it doubles as a split-refund row (alongside Card) rather than\n * disappearing from the refund breakdown entirely.\n */\n private forfeitedLoyaltyPointsFallback(\n d: IRefundDetailsData | null | undefined,\n ): number {\n if (!d?.loyaltyPaymentType) {\n return 0;\n }\n if (Number(d.totalLoyaltyPointsRefundAmount ?? 0) > 0) {\n return 0;\n }\n return Number(d.totalLoyaltyPoints ?? 0);\n }\n\n /** How many of {wallet, card, loyalty} the refund is actually split across. */\n private splitPartsCount = computed(() => {\n const d = this._data();\n if (!d) {\n return 0;\n }\n return [\n d.walletRefundAmount,\n d.totalCardRefundAmount,\n d.totalLoyaltyPointsRefundAmount,\n this.forfeitedLoyaltyPointsFallback(d),\n ].filter((v) => Number(v ?? 0) > 0).length;\n });\n\n /**\n * A portion of the refund is forced to the wallet (e.g. loyalty points used)\n * — in that case offer a \"Split Refund\" option instead of a pure\n * original-payment-method option, since the whole amount can't go to card.\n */\n hasSplitRefund = computed(\n () =>\n Number(this._data()?.totalRefundAmount ?? 0) > 0 &&\n this.splitPartsCount() >= 2,\n );\n\n /**\n * Wallet covers the whole refund (no card or loyalty portion at all) — show\n * the wallet option alone rather than a \"split\" with empty other sides.\n */\n isWalletOnlyRefund = computed(() => {\n const d = this._data();\n return (\n Number(d?.walletRefundAmount ?? 0) > 0 &&\n Number(d?.totalCardRefundAmount ?? 0) === 0 &&\n Number(d?.totalLoyaltyPointsRefundAmount ?? 0) === 0 &&\n this.forfeitedLoyaltyPointsFallback(d) === 0\n );\n });\n\n showWallet = computed(\n () =>\n !!(this._data()?.isFullWalletRefundAllowed || this.isWalletOnlyRefund()),\n );\n\n showOriginal = computed(\n () => !this.hasSplitRefund() && !this.isWalletOnlyRefund(),\n );\n\n showSplit = computed(() => this.hasSplitRefund());\n\n /**\n * Only one refund-method card is eligible — there's nothing to choose\n * between, so the radio button and active-selection highlight (which imply\n * a choice) are hidden; the single card is used automatically.\n */\n hasSingleOption = computed(\n () =>\n [this.showWallet(), this.showOriginal(), this.showSplit()].filter(Boolean)\n .length === 1,\n );\n\n /**\n * Split-refund destination rows — up to three: Almatar Wallet, the\n * original payment method (card/installment gateway), and a separate\n * loyalty-program row (Al Rajhi Mokafaa, Qitaf, …) when the refund is\n * actually spread across a loyalty balance *and* something else.\n */\n splitRefundRows = computed((): RefundMethodSplitRow[] => {\n const d = this._data();\n if (!d) {\n return [];\n }\n const rows: RefundMethodSplitRow[] = [];\n const wallet = Number(d.walletRefundAmount ?? 0);\n if (wallet > 0) {\n // Always the generic \"Wallet\" row — the loyalty program that funded it\n // (e.g. Wala) gets its own dedicated row below via\n // `forfeitedLoyaltyPointsFallback`, so the two stay visually distinct.\n rows.push({\n label: this.translateService.instant(\n 'manage-booking.smart-cancel.refund-method.wallet',\n ),\n value: wallet,\n instant: true,\n isLoyalty: false,\n });\n }\n const card = Number(d.totalCardRefundAmount ?? 0);\n if (card > 0) {\n rows.push({\n // When a separate loyalty row is also shown, this row is purely the\n // card/original-payment-method portion — don't relabel it with the\n // loyalty program name too.\n label: this.isMadaMethod()\n ? this.translateService.instant(\n 'manage-booking.smart-cancel.result.mada-card',\n )\n : (!this.isLoyaltyMethod() && this.customerPaymentLabel()) ||\n this.translateService.instant(\n 'manage-booking.smart-cancel.refund-method.original',\n ),\n value: card,\n instant: false,\n isLoyalty: false,\n isMada: this.isMadaMethod(),\n });\n }\n const loyalty = Number(d.totalLoyaltyPointsRefundAmount ?? 0);\n if (loyalty > 0) {\n rows.push({\n // when paying with card and loyalty program all backed as card\n label: this.walletOrLoyaltyLabel(\n d,\n 'manage-booking.smart-cancel.refunds.loyalty',\n ),\n value: loyalty,\n instant: true,\n isLoyalty: true,\n });\n }\n const forfeitedLoyalty = this.forfeitedLoyaltyPointsFallback(d);\n if (forfeitedLoyalty > 0) {\n rows.push({\n label: this.walletOrLoyaltyLabel(d),\n value: forfeitedLoyalty,\n instant: true,\n isLoyalty: true,\n });\n }\n return rows;\n });\n\n select(method: RefundPreferredMethod) {\n this.methodSelected.emit(method);\n }\n\n close() {\n this.closed.emit();\n }\n\n back() {\n this.backRequested.emit();\n }\n\n /** Format an amount without the currency suffix (for interpolated copy). */\n fmtAmount(value: number | undefined): string {\n return Number(value || 0).toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n\n /** Get the description for the original payment method */\n getOriginalPaymentDescription(): string {\n const key = this.isInstallmentMethod()\n ? 'manage-booking.smart-cancel.refund-method.installment-desc'\n : this.showAsLoyalty()\n ? 'manage-booking.smart-cancel.refund-method.loyalty-desc'\n : 'manage-booking.smart-cancel.refund-method.original-desc';\n\n return this.translateService.instant(key, { method: this.originalPaymentLabel() });\n }\n}\n","<div class=\"refund-method-selector\">\n <div class=\"refund-method-selector__header\">\n @if (showBack) {\n <button\n type=\"button\"\n class=\"refund-method-selector__close\"\n (click)=\"back()\"\n aria-label=\"Back\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M19 12H5M12 19l-7-7 7-7\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n }\n <div class=\"refund-method-selector__header-text\">\n <h3 class=\"refund-method-selector__title\">\n Refund Method\n </h3>\n <span class=\"refund-method-selector__sub\"\n >Booking ID #{{\n displayBookingId()\n }}</span\n >\n </div>\n <!-- @if (showCloseButton()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__close\"\n (click)=\"close()\"\n aria-label=\"Close\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 18L18 6M6 6L18 18\"\n stroke=\"#1B1A1F\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n } -->\n </div>\n\n <div class=\"refund-method-selector__amount\">\n <span>You will get back</span>\n <strong>\n @if (currencyObj) {\n <app-currency-code-icon\n [size]=\"currencySizeEnum\"\n [currency]=\"currencyObj\"\n ></app-currency-code-icon>\n }\n {{ fmtAmount(totalRefundAmount()) }}\n </strong>\n </div>\n\n <!-- Wallet option -->\n @if (showWallet()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__option\"\n [class.refund-method-selector__option--active]=\"\n refundMethod === 'wallet' && !hasSingleOption()\n \"\n (click)=\"select('wallet')\"\n >\n <span class=\"refund-method-selector__icon\">\n <svg\n width=\"22\"\n height=\"24\"\n viewBox=\"0 0 22 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_25478_1880)\">\n <path\n d=\"M2.67676 20.8852C1.74902 20.8852 1.04704 20.6533 0.570801 20.1894C0.100749 19.7256 -0.134277 19.0359 -0.134277 18.1206V8.51852C-0.134277 7.77015 0.0265299 7.1764 0.348145 6.73727C0.675944 6.29815 1.18929 5.97344 1.88818 5.76315L13.7817 2.3027C14.4559 2.11097 15.0589 2.06149 15.5908 2.15427C16.1289 2.24704 16.5495 2.49443 16.8525 2.89645C17.1618 3.29229 17.3164 3.85511 17.3164 4.58493V6.25485L15.8042 6.38473V4.45505C15.8042 4.04684 15.6898 3.76543 15.4609 3.61081C15.2321 3.45619 14.895 3.44382 14.4497 3.5737L7.27832 5.55905C7.19173 5.5776 7.15153 5.61471 7.15771 5.67038C7.1639 5.71986 7.20719 5.7446 7.2876 5.7446H17.5947C18.5286 5.7446 19.2275 5.97962 19.6914 6.44968C20.1615 6.91354 20.3965 7.60316 20.3965 8.51852V10.8564H18.8936V8.60202C18.8936 8.15671 18.7791 7.81963 18.5503 7.59079C18.3215 7.36195 17.9937 7.24753 17.5669 7.24753H2.69531C2.26855 7.24753 1.94076 7.36195 1.71191 7.59079C1.48926 7.81963 1.37793 8.15671 1.37793 8.60202V18.0371C1.37793 18.4824 1.48926 18.8164 1.71191 19.039C1.94076 19.2679 2.26855 19.3823 2.69531 19.3823H17.5669C17.9937 19.3823 18.3215 19.2679 18.5503 19.039C18.7791 18.8164 18.8936 18.4824 18.8936 18.0371V15.4394H20.3965V18.1206C20.3965 19.0359 20.1615 19.7256 19.6914 20.1894C19.2275 20.6533 18.5286 20.8852 17.5947 20.8852H2.67676ZM16.769 14.2334C16.5093 14.2334 16.2866 14.1437 16.1011 13.9643C15.9217 13.7788 15.832 13.5561 15.832 13.2964C15.832 13.0366 15.9217 12.817 16.1011 12.6377C16.2866 12.4521 16.5093 12.3593 16.769 12.3593C17.0288 12.3593 17.2484 12.4521 17.4277 12.6377C17.6133 12.817 17.7061 13.0366 17.7061 13.2964C17.7061 13.5561 17.6133 13.7788 17.4277 13.9643C17.2484 14.1437 17.0288 14.2334 16.769 14.2334ZM16.6763 16.2187C15.7424 16.2187 14.9878 15.9775 14.4126 15.4951C13.8374 15.0065 13.5498 14.2767 13.5498 13.3056C13.5498 12.3346 13.8374 11.6079 14.4126 11.1255C14.9878 10.643 15.7424 10.4018 16.6763 10.4018H20.1089C20.6903 10.4018 21.1479 10.5812 21.4819 10.9399C21.8221 11.2986 21.9922 11.7439 21.9922 12.2758V14.3354C21.9922 14.8673 21.8221 15.3157 21.4819 15.6806C21.1479 16.0394 20.6903 16.2187 20.1089 16.2187H16.6763ZM16.769 14.9756H19.7842C20.1058 14.9756 20.347 14.8921 20.5078 14.7251C20.6748 14.5519 20.7583 14.3138 20.7583 14.0107V12.6006C20.7583 12.2975 20.6748 12.0625 20.5078 11.8955C20.347 11.7223 20.1058 11.6357 19.7842 11.6357H16.769C16.1196 11.6357 15.6372 11.7841 15.3218 12.081C15.0125 12.3779 14.8579 12.7861 14.8579 13.3056C14.8579 13.8252 15.0125 14.2334 15.3218 14.5302C15.6372 14.8271 16.1196 14.9756 16.769 14.9756Z\"\n fill=\"black\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_25478_1880\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span class=\"refund-method-selector__body\">\n <span class=\"refund-method-selector__name\">{{ walletLabel() }}</span>\n <span class=\"refund-method-selector__desc\">Usable for future bookings</span>\n <span\n class=\"refund-method-selector__badge refund-method-selector__badge--instant\"\n >\n <svg\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n Instant\n </span>\n </span>\n @if (!hasSingleOption()) {\n <span class=\"refund-method-selector__radio\"></span>\n }\n </button>\n }\n\n <!-- Original Payment Method option -->\n @if (showOriginal()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__option\"\n [class.refund-method-selector__option--active]=\"\n refundMethod === 'originalPaymentMethod' && !hasSingleOption()\n \"\n (click)=\"select('originalPaymentMethod')\"\n >\n <span class=\"refund-method-selector__icon\">\n @if (isSpecialGatewayMethod()) {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M21 12a2.25 2.25 0 0 0-2.25-2.25H15a3 3 0 1 1-6 0H5.25A2.25 2.25 0 0 0 3 12m18 0v6a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 18v-6m18 0V9M3 12V9m18 0a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 9m18 0V6a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 6v3\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n } @else {\n <ng-container *ngTemplateOutlet=\"cardIcon\"></ng-container>\n }\n <ng-template #cardIcon>\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.25 8.25H21.75M2.25 9H21.75M5.25 14.25H11.25M5.25 16.5H8.25M4.5 19.5H19.5C20.0967 19.5 20.669 19.2629 21.091 18.841C21.5129 18.419 21.75 17.8467 21.75 17.25V6.75C21.75 6.15326 21.5129 5.58097 21.091 5.15901C20.669 4.73705 20.0967 4.5 19.5 4.5H4.5C3.90326 4.5 3.33097 4.73705 2.90901 5.15901C2.48705 5.58097 2.25 6.15326 2.25 6.75V17.25C2.25 17.8467 2.48705 18.419 2.90901 18.841C3.33097 19.2629 3.90326 19.5 4.5 19.5Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </ng-template>\n </span>\n <span class=\"refund-method-selector__body\">\n <span class=\"refund-method-selector__name\">{{\n originalPaymentLabel()\n }}</span>\n <span class=\"refund-method-selector__desc\">{{\n getOriginalPaymentDescription()\n }}</span>\n @if (!showAsLoyalty()) {\n <span\n class=\"refund-method-selector__badge\"\n [class.refund-method-selector__badge--days]=\"!showAsLoyalty()\"\n [class.refund-method-selector__badge--loyalty]=\"showAsLoyalty()\"\n >\n @if (!showAsLoyalty()) {\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.30078 6.50195C3.20312 6.50195 3.12174 6.4694 3.05664 6.4043C2.99154 6.33919 2.95898 6.25781 2.95898 6.16016C2.95898 6.06576 2.99154 5.986 3.05664 5.9209C3.12174 5.85579 3.20312 5.82324 3.30078 5.82324H5.5127V2.86914C5.5127 2.77474 5.54525 2.69499 5.61035 2.62988C5.67546 2.56478 5.75521 2.53223 5.84961 2.53223C5.94727 2.53223 6.02865 2.56478 6.09375 2.62988C6.15885 2.69499 6.19141 2.77474 6.19141 2.86914V6.16016C6.19141 6.25781 6.15885 6.33919 6.09375 6.4043C6.02865 6.4694 5.94727 6.50195 5.84961 6.50195H3.30078ZM5.85449 10.9551C5.16764 10.9551 4.52311 10.8249 3.9209 10.5645C3.31868 10.3073 2.78971 9.95085 2.33398 9.49512C1.87826 9.03939 1.52018 8.51042 1.25977 7.9082C1.0026 7.30599 0.874023 6.66146 0.874023 5.97461C0.874023 5.28776 1.0026 4.64323 1.25977 4.04102C1.52018 3.4388 1.87826 2.90983 2.33398 2.4541C2.78971 1.99512 3.31868 1.63704 3.9209 1.37988C4.52311 1.12272 5.16764 0.994141 5.85449 0.994141C6.54134 0.994141 7.18587 1.12272 7.78809 1.37988C8.3903 1.63704 8.91927 1.99512 9.375 2.4541C9.83073 2.90983 10.1872 3.4388 10.4443 4.04102C10.7048 4.64323 10.835 5.28776 10.835 5.97461C10.835 6.66146 10.7048 7.30599 10.4443 7.9082C10.1872 8.51042 9.83073 9.03939 9.375 9.49512C8.91927 9.95085 8.3903 10.3073 7.78809 10.5645C7.18587 10.8249 6.54134 10.9551 5.85449 10.9551ZM5.85449 10.125C6.42741 10.125 6.96452 10.0176 7.46582 9.80273C7.96712 9.58789 8.4082 9.29004 8.78906 8.90918C9.16992 8.52832 9.46777 8.08724 9.68262 7.58594C9.89746 7.08464 10.0049 6.54753 10.0049 5.97461C10.0049 5.40169 9.89746 4.86458 9.68262 4.36328C9.46777 3.85872 9.16992 3.41764 8.78906 3.04004C8.4082 2.65918 7.96712 2.36133 7.46582 2.14648C6.96452 1.93164 6.42741 1.82422 5.85449 1.82422C5.28158 1.82422 4.74447 1.93164 4.24316 2.14648C3.74186 2.36133 3.30078 2.65918 2.91992 3.04004C2.53906 3.41764 2.24121 3.85872 2.02637 4.36328C1.81152 4.86458 1.7041 5.40169 1.7041 5.97461C1.7041 6.54753 1.81152 7.08464 2.02637 7.58594C2.24121 8.08724 2.53906 8.52832 2.91992 8.90918C3.30078 9.29004 3.74186 9.58789 4.24316 9.80273C4.74447 10.0176 5.28158 10.125 5.85449 10.125Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n } @else {\n <ng-container *ngTemplateOutlet=\"loyaltyBadgeIcon\"></ng-container>\n }\n <ng-template #loyaltyBadgeIcon>\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"5\"\n stroke=\"#0B54C2\"\n stroke-width=\"1.2\"\n />\n <path\n d=\"M6 5.5v3M6 3.9v.01\"\n stroke=\"#0B54C2\"\n stroke-width=\"1.2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </ng-template>\n\n {{ paymentBadgeKey() }}\n </span>\n }\n <!-- showing loyalty note for hotels -->\n @if (showLoyaltyPointsNote() && showAsLoyalty()) {\n <div\n class=\"refund-method-selector__notice refund-method-selector__notice--info\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M4.1582 21.1777C3.60482 21.1777 3.12956 21.0605 2.73242 20.8262C2.33529 20.5918 2.0293 20.2728 1.81445 19.8691C1.59961 19.472 1.49219 19.026 1.49219 18.5312C1.49219 18.056 1.61914 17.6003 1.87305 17.1641L9.45117 3.96094C9.69857 3.51823 10.0273 3.1862 10.4375 2.96484C10.8477 2.73698 11.2773 2.62305 11.7266 2.62305C12.1758 2.62305 12.6022 2.73698 13.0059 2.96484C13.416 3.1862 13.748 3.51823 14.002 3.96094L21.5801 17.1641C21.7038 17.3789 21.7982 17.6035 21.8633 17.8379C21.9284 18.0723 21.9609 18.3034 21.9609 18.5312C21.9609 19.026 21.8535 19.472 21.6387 19.8691C21.4238 20.2728 21.1178 20.5918 20.7207 20.8262C20.3236 21.0605 19.8483 21.1777 19.2949 21.1777H4.1582ZM4.16797 19.6445H19.2754C19.6139 19.6445 19.8809 19.5306 20.0762 19.3027C20.278 19.0814 20.3789 18.821 20.3789 18.5215C20.3789 18.3132 20.3268 18.1081 20.2227 17.9062L12.6543 4.70312C12.5501 4.52083 12.4134 4.39062 12.2441 4.3125C12.0814 4.22786 11.9089 4.18555 11.7266 4.18555C11.5443 4.18555 11.3685 4.22786 11.1992 4.3125C11.0299 4.39062 10.8932 4.52083 10.7891 4.70312L3.2207 17.8965C3.16862 18.0007 3.12956 18.1081 3.10352 18.2188C3.08398 18.3294 3.07422 18.4303 3.07422 18.5215C3.07422 18.821 3.17188 19.0814 3.36719 19.3027C3.5625 19.5306 3.82943 19.6445 4.16797 19.6445ZM11.7266 14.5859C11.2253 14.5859 10.9681 14.3288 10.9551 13.8145L10.8281 8.64844C10.8216 8.40104 10.8997 8.19596 11.0625 8.0332C11.2318 7.87044 11.4499 7.78906 11.7168 7.78906C11.9772 7.78906 12.1921 7.8737 12.3613 8.04297C12.5371 8.20573 12.6217 8.41081 12.6152 8.6582L12.4688 13.8145C12.4622 14.3288 12.2148 14.5859 11.7266 14.5859ZM11.7266 17.7598C11.4401 17.7598 11.1927 17.6621 10.9844 17.4668C10.776 17.265 10.6719 17.0241 10.6719 16.7441C10.6719 16.4642 10.776 16.2266 10.9844 16.0312C11.1927 15.8294 11.4401 15.7285 11.7266 15.7285C12.013 15.7285 12.2604 15.8262 12.4688 16.0215C12.6771 16.2168 12.7812 16.4577 12.7812 16.7441C12.7812 17.0306 12.6738 17.2715 12.459 17.4668C12.2507 17.6621 12.0065 17.7598 11.7266 17.7598Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n <span>Loyalty points will be refunded instantly to your account</span>\n </div>\n }\n </span>\n <span class=\"refund-method-selector__option-end\">\n @if (isMadaMethod()) {\n <span class=\"refund-method-selector__mada-logo\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"madaLogo\"></ng-container>\n </span>\n }\n @if (!hasSingleOption()) {\n <span class=\"refund-method-selector__radio\"></span>\n }\n </span>\n </button>\n }\n\n <!-- Split Refund option -->\n @if (showSplit()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__option refund-method-selector__option--split\"\n [class.refund-method-selector__option--active]=\"\n refundMethod === 'split' && !hasSingleOption()\n \"\n (click)=\"select('split')\"\n >\n <span class=\"refund-method-selector__icon\">\n <svg\n width=\"45\"\n height=\"45\"\n viewBox=\"0 0 45 45\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"0.5\"\n y=\"0.5\"\n width=\"44\"\n height=\"44\"\n rx=\"7.5\"\n stroke=\"#D9D9DE\"\n />\n <g clip-path=\"url(#clip0_24079_7906_selector)\">\n <path\n d=\"M28.1621 14.9951C28.1621 14.7998 28.2142 14.6501 28.3184 14.5459C28.429 14.4417 28.5853 14.3896 28.7871 14.3896C28.8783 14.3896 28.9661 14.4059 29.0508 14.4385C29.1419 14.4645 29.2233 14.5068 29.2949 14.5654L32.9863 17.6318C33.1426 17.7686 33.2207 17.9248 33.2207 18.1006C33.2207 18.2764 33.1426 18.4294 32.9863 18.5596L29.2949 21.6162C29.2233 21.6748 29.1419 21.7204 29.0508 21.7529C28.9661 21.7855 28.8783 21.8018 28.7871 21.8018C28.5853 21.8018 28.429 21.7497 28.3184 21.6455C28.2142 21.5348 28.1621 21.3818 28.1621 21.1865V14.9951ZM10.7793 28.2373C10.7793 27.9964 10.8607 27.8011 11.0234 27.6514C11.1927 27.5016 11.4108 27.4268 11.6777 27.4268H13.9531C14.4479 27.4268 14.8841 27.3258 15.2617 27.124C15.6458 26.9222 16.0495 26.5739 16.4727 26.0791L22.3809 19.1748C22.9668 18.4912 23.5332 18.016 24.0801 17.749C24.627 17.4821 25.3073 17.3486 26.1211 17.3486H29.5977C29.8255 17.3486 30.0176 17.43 30.1738 17.5928C30.3366 17.749 30.418 17.9411 30.418 18.1689C30.418 18.3903 30.3366 18.5824 30.1738 18.7451C30.0176 18.9014 29.8255 18.9795 29.5977 18.9795H26.1699C25.8118 18.9795 25.4863 19.0251 25.1934 19.1162C24.9069 19.2008 24.6302 19.3408 24.3633 19.5361C24.1029 19.7314 23.8327 19.9919 23.5527 20.3174L17.6348 27.2217C17.0423 27.9053 16.4727 28.3805 15.9258 28.6475C15.3854 28.9144 14.7116 29.0479 13.9043 29.0479H11.6777C11.4108 29.0479 11.1927 28.973 11.0234 28.8232C10.8607 28.6735 10.7793 28.4782 10.7793 28.2373ZM28.1621 31.4795V25.2881C28.1621 25.0928 28.2142 24.943 28.3184 24.8389C28.429 24.7282 28.5853 24.6729 28.7871 24.6729C28.8783 24.6729 28.9661 24.6891 29.0508 24.7217C29.1419 24.7542 29.2233 24.7998 29.2949 24.8584L32.9863 27.915C33.1426 28.0452 33.2207 28.1982 33.2207 28.374C33.2207 28.5498 33.1426 28.7061 32.9863 28.8428L29.2949 31.9092C29.2233 31.9678 29.1419 32.0101 29.0508 32.0361C28.9661 32.0687 28.8783 32.085 28.7871 32.085C28.5853 32.085 28.429 32.0329 28.3184 31.9287C28.2142 31.8245 28.1621 31.6748 28.1621 31.4795ZM10.7793 18.2373C10.7793 17.9964 10.8607 17.8011 11.0234 17.6514C11.1927 17.5016 11.4108 17.4268 11.6777 17.4268H13.9043C14.7116 17.4268 15.3854 17.5602 15.9258 17.8271C16.4727 18.0941 17.0423 18.5693 17.6348 19.2529L23.5527 26.1572C23.8327 26.4827 24.1029 26.7432 24.3633 26.9385C24.6302 27.1338 24.9069 27.277 25.1934 27.3682C25.4863 27.4528 25.8118 27.4951 26.1699 27.4951H29.5977C29.8255 27.4951 30.0176 27.5765 30.1738 27.7393C30.3366 27.8955 30.418 28.0843 30.418 28.3057C30.418 28.5335 30.3366 28.7288 30.1738 28.8916C30.0176 29.0479 29.8255 29.126 29.5977 29.126H26.1211C25.3073 29.126 24.627 28.9925 24.0801 28.7256C23.5332 28.4587 22.9668 27.9834 22.3809 27.2998L16.4727 20.3955C16.0495 19.9007 15.6458 19.5524 15.2617 19.3506C14.8841 19.1488 14.4479 19.0479 13.9531 19.0479H11.6777C11.4108 19.0479 11.1927 18.973 11.0234 18.8232C10.8607 18.6735 10.7793 18.4782 10.7793 18.2373Z\"\n fill=\"#1B1A1F\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_24079_7906_selector\">\n <rect\n width=\"24\"\n height=\"24\"\n fill=\"white\"\n transform=\"translate(10 11.5)\"\n />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span class=\"refund-method-selector__body\">\n <span class=\"refund-method-selector__name\">Split Refund</span>\n <span class=\"refund-method-selector__desc\">Returned to your original payment method</span>\n </span>\n <strong class=\"refund-method-selector__split-total\">\n @if (currencyObj) {\n <app-currency-code-icon\n [currency]=\"currencyObj\"\n ></app-currency-code-icon>\n }\n {{ fmtAmount(totalRefundAmount()) }}\n </strong>\n @if (!hasSingleOption()) {\n <span class=\"refund-method-selector__radio\"></span>\n }\n\n <span class=\"refund-method-selector__split-breakdown\">\n @for (row of splitRefundRows(); track $index) {\n <span class=\"refund-method-selector__split-row\">\n <span class=\"refund-method-selector__split-label\">\n {{ row.label }}\n @if (row.isMada) {\n <span\n class=\"refund-method-selector__mada-logo\"\n aria-hidden=\"true\"\n >\n <ng-container *ngTemplateOutlet=\"madaLogo\"></ng-container>\n </span>\n }\n </span>\n <strong>\n @if (currencyObj) {\n <app-currency-code-icon\n [currency]=\"currencyObj\"\n ></app-currency-code-icon>\n }\n {{ fmtAmount(row.value) }}\n </strong>\n </span>\n <span\n class=\"refund-method-selector__badge\"\n [class.refund-method-selector__badge--instant]=\"row.instant\"\n [class.refund-method-selector__badge--days]=\"!row.instant\"\n >\n @if (row.instant) {\n <svg\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n }\n @if (!row.instant) {\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.30078 6.50195C3.20312 6.50195 3.12174 6.4694 3.05664 6.4043C2.99154 6.33919 2.95898 6.25781 2.95898 6.16016C2.95898 6.06576 2.99154 5.986 3.05664 5.9209C3.12174 5.85579 3.20312 5.82324 3.30078 5.82324H5.5127V2.86914C5.5127 2.77474 5.54525 2.69499 5.61035 2.62988C5.67546 2.56478 5.75521 2.53223 5.84961 2.53223C5.94727 2.53223 6.02865 2.56478 6.09375 2.62988C6.15885 2.69499 6.19141 2.77474 6.19141 2.86914V6.16016C6.19141 6.25781 6.15885 6.33919 6.09375 6.4043C6.02865 6.4694 5.94727 6.50195 5.84961 6.50195H3.30078ZM5.85449 10.9551C5.16764 10.9551 4.52311 10.8249 3.9209 10.5645C3.31868 10.3073 2.78971 9.95085 2.33398 9.49512C1.87826 9.03939 1.52018 8.51042 1.25977 7.9082C1.0026 7.30599 0.874023 6.66146 0.874023 5.97461C0.874023 5.28776 1.0026 4.64323 1.25977 4.04102C1.52018 3.4388 1.87826 2.90983 2.33398 2.4541C2.78971 1.99512 3.31868 1.63704 3.9209 1.37988C4.52311 1.12272 5.16764 0.994141 5.85449 0.994141C6.54134 0.994141 7.18587 1.12272 7.78809 1.37988C8.3903 1.63704 8.91927 1.99512 9.375 2.4541C9.83073 2.90983 10.1872 3.4388 10.4443 4.04102C10.7048 4.64323 10.835 5.28776 10.835 5.97461C10.835 6.66146 10.7048 7.30599 10.4443 7.9082C10.1872 8.51042 9.83073 9.03939 9.375 9.49512C8.91927 9.95085 8.3903 10.3073 7.78809 10.5645C7.18587 10.8249 6.54134 10.9551 5.85449 10.9551ZM5.85449 10.125C6.42741 10.125 6.96452 10.0176 7.46582 9.80273C7.96712 9.58789 8.4082 9.29004 8.78906 8.90918C9.16992 8.52832 9.46777 8.08724 9.68262 7.58594C9.89746 7.08464 10.0049 6.54753 10.0049 5.97461C10.0049 5.40169 9.89746 4.86458 9.68262 4.36328C9.46777 3.85872 9.16992 3.41764 8.78906 3.04004C8.4082 2.65918 7.96712 2.36133 7.46582 2.14648C6.96452 1.93164 6.42741 1.82422 5.85449 1.82422C5.28158 1.82422 4.74447 1.93164 4.24316 2.14648C3.74186 2.36133 3.30078 2.65918 2.91992 3.04004C2.53906 3.41764 2.24121 3.85872 2.02637 4.36328C1.81152 4.86458 1.7041 5.40169 1.7041 5.97461C1.7041 6.54753 1.81152 7.08464 2.02637 7.58594C2.24121 8.08724 2.53906 8.52832 2.91992 8.90918C3.30078 9.29004 3.74186 9.58789 4.24316 9.80273C4.74447 10.0176 5.28158 10.125 5.85449 10.125Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n }\n {{ row.instant ? 'Instant' : paymentBadgeKey() }}\n </span>\n\n @if (row.isLoyalty) {\n <div\n class=\"refund-method-selector__notice refund-method-selector__notice--info\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n />\n <path\n d=\"M12 11v5.5M12 8v.01\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span>Loyalty points will be refunded instantly to your account</span>\n </div>\n }\n }\n </span>\n </button>\n }\n</div>\n\n<ng-template #madaLogo>\n <svg\n width=\"43\"\n height=\"15\"\n viewBox=\"0 0 43 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_rms_mada)\">\n <path d=\"M18.1894 8.6543H0V14.9933H18.1894V8.6543Z\" fill=\"#84B740\" />\n <path d=\"M18.1894 0H0V6.34463H18.1894V0Z\" fill=\"#259BD6\" />\n <path\n d=\"M36.3779 13.7034L36.2969 13.7203C36.016 13.7768 35.9134 13.7994 35.7082 13.7994C35.233 13.7994 34.6713 13.5452 34.6713 12.3475C34.6713 11.7316 34.7685 10.9124 35.6542 10.9124H35.6596C35.8108 10.9237 35.9836 10.9407 36.3077 11.0424L36.3779 11.065V13.7034ZM36.5237 7.73164L36.3779 7.75989V9.97458L36.2483 9.93503L36.2105 9.92373C36.0647 9.87853 35.7298 9.77684 35.4058 9.77684C33.6344 9.77684 33.2617 11.178 33.2617 12.3531C33.2617 13.9633 34.1258 14.8898 35.6326 14.8898C36.2699 14.8898 36.7397 14.822 37.215 14.6582C37.6524 14.5113 37.8091 14.3023 37.8091 13.8559V7.5C37.3878 7.5791 36.9504 7.65819 36.5237 7.73164Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M41.651 13.7385L41.5754 13.7611L41.3053 13.8345C41.0515 13.9023 40.8247 13.9419 40.6519 13.9419C40.236 13.9419 39.9876 13.7272 39.9876 13.36C39.9876 13.1227 40.0902 12.7215 40.7707 12.7215H41.651V13.7385ZM41.0299 9.74414C40.4844 9.74414 39.9228 9.84584 39.2261 10.0718L38.7724 10.2131L38.9236 11.2865L39.3665 11.134C39.831 10.9758 40.4088 10.8741 40.8409 10.8741C41.0353 10.8741 41.6294 10.8741 41.6294 11.5464V11.8402H40.8031C39.2963 11.8402 38.5996 12.343 38.5996 13.4221C38.5996 14.343 39.2423 14.8967 40.3224 14.8967C40.6573 14.8967 41.1217 14.8289 41.5214 14.7272L41.543 14.7215L41.5646 14.7272L41.6996 14.7498C42.1208 14.8289 42.5583 14.908 42.9849 14.9927V11.4673C42.9849 10.3261 42.3261 9.74414 41.0299 9.74414Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M31.1527 13.7385L31.0771 13.7611L30.807 13.8345C30.5532 13.9023 30.3318 13.9419 30.1536 13.9419C29.7377 13.9419 29.4893 13.7272 29.4893 13.36C29.4893 13.1227 29.5919 12.7215 30.267 12.7215H31.1473L31.1527 13.7385ZM30.537 9.74414C29.9861 9.74414 29.4299 9.84584 28.7332 10.0718L28.2795 10.2131L28.4308 11.2865L28.8736 11.134C29.3381 10.9758 29.9159 10.8741 30.348 10.8741C30.5424 10.8741 31.1365 10.8741 31.1365 11.5464V11.8402H30.3102C28.8034 11.8402 28.1013 12.343 28.1013 13.4221C28.1013 14.343 28.744 14.8967 29.8295 14.8967C30.1644 14.8967 30.6288 14.8289 31.0285 14.7272L31.0501 14.7215L31.0717 14.7272L31.2013 14.7498C31.6279 14.8289 32.06 14.908 32.4866 14.9984V11.473C32.492 10.3204 31.8332 9.74414 30.537 9.74414Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M25.4701 9.7576C24.7842 9.7576 24.2172 9.99489 24.0065 10.0966L23.9525 10.1248L23.9039 10.0853C23.6123 9.86495 23.1856 9.75195 22.5916 9.75195C22.0677 9.75195 21.5762 9.83105 21.0416 9.99489C20.5825 10.1418 20.4043 10.3734 20.4043 10.8085V14.8367H21.8409V11.1135L21.9111 11.0909C22.2027 10.9892 22.3755 10.9723 22.543 10.9723C22.9588 10.9723 23.1694 11.2039 23.1694 11.6559V14.8423H24.5844V11.5938C24.5844 11.4017 24.5466 11.2887 24.5412 11.2661L24.4926 11.17L24.5898 11.1248C24.8058 11.0231 25.0435 10.9723 25.2919 10.9723C25.5781 10.9723 25.9184 11.0909 25.9184 11.6559V14.8423H27.3279V11.509C27.3279 10.3282 26.7231 9.7576 25.4701 9.7576Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M40.5866 4.13559C40.3759 4.13559 40.0249 4.113 39.7495 4.0565L39.6684 4.03955V1.86441C39.6684 1.68362 39.636 1.57062 39.6306 1.55367L39.5874 1.46328L39.6793 1.42373C39.7009 1.41243 39.7225 1.40678 39.7495 1.39548L39.7657 1.38418C39.7981 1.37288 39.8305 1.36158 39.8629 1.35028C39.8791 1.34463 39.8899 1.33898 39.9007 1.33898C40.2193 1.24859 40.511 1.25989 40.6406 1.24859H40.646C41.5263 1.24859 41.6289 2.0678 41.6289 2.68362C41.6235 3.88136 41.0564 4.13559 40.5866 4.13559ZM40.5812 0C40.5704 0 40.5542 0 40.5434 0C39.7171 0 38.8692 0.237288 38.5667 0.700565C38.4047 0.926554 38.3129 1.20904 38.3075 1.54237V3.78531C38.3075 3.9774 38.2697 4.05085 38.2643 4.0678L38.2157 4.16384H35.6072V2.60452H35.6018C35.5694 0.960452 34.6404 0.0564972 33.2957 0.0564972H33.1391H31.9833C31.9293 0.457627 31.8861 0.740113 31.8321 1.14124H33.1391C33.8249 1.14124 34.1868 1.75141 34.1868 2.68927V4.25989L34.095 4.20904C34.0788 4.20339 33.9654 4.16384 33.7871 4.16384H31.5297C31.4865 4.46328 31.4325 4.85311 31.373 5.24294H38.3129C38.5505 5.19209 38.8259 5.14689 39.0636 5.10735C39.4146 5.28814 40.0681 5.38418 40.5164 5.38418C42.0231 5.38418 43.0007 4.32768 43.0007 2.70057C42.9953 1.0904 42.0501 0.0338983 40.5812 0Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M28.4189 5.90821H28.4837C29.9905 5.90821 30.6925 5.38844 30.6925 4.10595C30.6925 3.18505 30.0499 2.45059 28.9697 2.45059H27.5818C27.1659 2.45059 26.9175 2.202 26.9175 1.78392C26.9175 1.50143 27.0201 1.15115 27.7006 1.15115H30.7357C30.8006 0.738723 30.833 0.478836 30.8924 0.0664062H27.7384C26.2694 0.0664062 25.5295 0.710474 25.5295 1.78392C25.5295 2.84607 26.1722 3.39974 27.2523 3.39974H28.6403C29.0561 3.39974 29.3046 3.74437 29.3046 4.10595C29.3046 4.34324 29.202 4.83477 28.5269 4.83477H28.2947L23.8499 4.82347H23.0398C22.3539 4.82347 21.8733 4.41669 21.8733 3.47319V2.82347C21.8733 1.84042 22.2459 1.23025 23.0398 1.23025H24.3576C24.417 0.812169 24.4548 0.546632 24.5088 0.151152H22.867H22.7104C21.3656 0.151152 20.4367 1.09466 20.4043 2.73872V2.80087V3.47319C20.4367 5.11725 21.3656 5.90256 22.7104 5.90256H22.867H24.0227L26.4314 5.90821H27.868H28.4189Z\"\n fill=\"#747583\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_rms_mada\">\n <rect width=\"43\" height=\"15\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n</ng-template>\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n ViewChild,\n ElementRef,\n effect,\n OnDestroy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n IRefundDetailsData,\n RefundPreferredMethod,\n} from '../../../shared/interfaces/i-flight-refund-details';\nimport { HotelRefundMethodSelectorComponent } from '../hotel-refund-method-selector/hotel-refund-method-selector.component';\n\ndeclare const lottie: any;\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation-refund-method',\n standalone: true,\n imports: [CommonModule, HotelRefundMethodSelectorComponent],\n templateUrl: './almatar-hotel-auto-cancellation-refund-method.component.html',\n styleUrls: ['./almatar-hotel-auto-cancellation-refund-method.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlmatarHotelAutoCancellationRefundMethodComponent {\n\n readonly refundDetailsData = input.required<IRefundDetailsData | null>();\n readonly currencyObj = input.required<any>();\n readonly refundMethod = input.required<RefundPreferredMethod>();\n readonly bookingId = input.required<string>();\n readonly isCancelling = input<boolean>(false);\n /** Show the selector's back arrow (off for hotel - train's cancel flow turns it on). */\n readonly showBack = input<boolean>(false);\n\n readonly methodSelected = output<RefundPreferredMethod>();\n readonly backRequested = output<void>();\n readonly confirmRequested = output<void>();\n readonly closeModal = output<void>();\n\n private animation: any;\n private lottieLoaded = false;\n\n readonly isNilRefund = computed(() => {\n const data = this.refundDetailsData();\n return Number(data?.totalRefundAmount ?? 0) === 0;\n });\n\n constructor() {\n }\n\n onMethodSelected(method: RefundPreferredMethod): void {\n this.methodSelected.emit(method);\n }\n\n onBack(): void {\n this.backRequested.emit();\n }\n\n onConfirm(): void {\n this.confirmRequested.emit();\n }\n\n onClose(): void {\n this.closeModal.emit();\n }\n}\n","<div class=\"refund-method\">\n <!-- Loading State -->\n @if (isCancelling()) {\n <div class=\"refund-method__loading\">\n <!-- <div class=\"refund-method__lottie-wrapper\">\n <div #lottieContainer class=\"refund-method__lottie\"></div>\n </div> -->\n <h2 class=\"refund-method__loading-title\">\n Processing your cancellation...\n </h2>\n <p class=\"refund-method__loading-subtitle\">\n This may take a moment. Please wait...\n </p>\n </div>\n }\n\n <!-- Main Content -->\n @if (!isCancelling()) {\n <div class=\"refund-method__content\">\n <almatar-hotel-refund-method-selector\n [data]=\"refundDetailsData()\"\n [currencyObj]=\"currencyObj()\"\n [refundMethod]=\"refundMethod()\"\n (methodSelected)=\"onMethodSelected($event)\"\n (backRequested)=\"onBack()\"\n (closed)=\"onClose()\"\n [bookingId]=\"bookingId()\"\n [showCloseButton]=\"true\"\n [showBack]=\"showBack()\"\n [showLoyaltyPointsNote]=\"true\"\n />\n </div>\n\n <div class=\"refund-method__footer\">\n <button class=\"btn btn--danger\" type=\"button\" (click)=\"onConfirm()\">\n {{ isNilRefund() ? 'Cancel Booking' : 'Confirm Cancellation' }}\n </button>\n </div>\n }\n</div>\n","import { Component, input, output, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ResultType = 'success' | 'error' | 'warning';\n\nexport interface ResultOverlayData {\n type: ResultType;\n title: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n showCancel?: boolean;\n icon?: string;\n}\n\n@Component({\n selector: 'app-result-overlay',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './result-overlay.component.html',\n styleUrls: ['./result-overlay.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ResultOverlayComponent {\n readonly data = input.required<ResultOverlayData>();\n readonly show = input(true);\n\n readonly confirm = output<void>();\n readonly cancel = output<void>();\n\n onConfirm(): void {\n this.confirm.emit();\n }\n\n onCancel(): void {\n this.cancel.emit();\n }\n\n getIcon(): string {\n if (this.data().icon) {\n return this.data().icon;\n }\n\n switch (this.data().type) {\n case 'success':\n return 'pi pi-check-circle';\n case 'error':\n return 'pi pi-times-circle';\n case 'warning':\n return 'pi pi-exclamation-triangle';\n default:\n return 'pi pi-info-circle';\n }\n }\n\n getIconClass(): string {\n switch (this.data().type) {\n case 'success':\n return 'icon--success';\n case 'error':\n return 'icon--error';\n case 'warning':\n return 'icon--warning';\n default:\n return 'icon--info';\n }\n }\n}\n","@if (show()) {\n <div class=\"result-overlay\">\n <div class=\"result-overlay__backdrop\" (click)=\"onCancel()\"></div>\n\n <div class=\"result-overlay__content\">\n <div class=\"result-overlay__icon-wrapper\" [ngClass]=\"getIconClass()\">\n <i [class]=\"getIcon()\" class=\"result-overlay__icon\"></i>\n </div>\n\n <h2 class=\"result-overlay__title\">{{ data().title }}</h2>\n\n <p class=\"result-overlay__message\">{{ data().message }}</p>\n\n <div class=\"result-overlay__actions\">\n <button\n type=\"button\"\n class=\"result-overlay__btn result-overlay__btn--primary\"\n (click)=\"onConfirm()\"\n >\n {{ data().confirmText || 'OK' }}\n </button>\n\n @if (data().showCancel) {\n <button\n type=\"button\"\n class=\"result-overlay__btn result-overlay__btn--secondary\"\n (click)=\"onCancel()\"\n >\n {{ data().cancelText || 'Cancel' }}\n </button>\n }\n </div>\n </div>\n </div>\n}\n","import { AsideComponent } from '../almatar-aside/aside.component';\nimport {\n Component,\n ChangeDetectionStrategy,\n DestroyRef,\n OnDestroy,\n OnInit,\n inject,\n signal,\n computed,\n output,\n input,\n effect\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ManageBookingFailedModalComponent } from '../shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component';\nimport { LoaderModule } from '../../shared/modules/loader/loader.module';\nimport { HotelManageBookingService } from '../shared/services/hotel-manage-booking/hotel-manage-booking.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { AlmatarHotelAutoCancellationStepEnum } from './enums/almatar-hotel-auto-cancellation-step.enum';\nimport { AlmatarHotelAutoCancellationService } from './services/almatar-hotel-auto-cancellation.service';\nimport {\n AlmatarHotelAutoCancellationEndpointsService,\n IAutoCancellationProcessResponse\n} from './services/almatar-hotel-auto-cancellation-endpoints.service';\nimport {\n IAlmatarHotelAutoCancellationRoom,\n IAlmatarHotelAutoCancellationHotelInfo,\n IAlmatarHotelAutoCancellationPackage,\n IBookingPackage\n} from './interfaces/i-almatar-hotel-auto-cancellation.interface';\nimport {\n IRefundDetailsData as IFlightRefundDetailsData,\n RefundPreferredMethod,\n LoyaltyPaymentType\n} from '../shared/interfaces/i-flight-refund-details';\nimport { IHotelBookingData } from '../../models/booking.types';\nimport { AlmatarHotelAutoCancellationSelectRoomsComponent } from './components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component';\nimport { AlmatarHotelAutoCancellationRefundSummaryComponent } from './components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component';\nimport { AlmatarHotelAutoCancellationRefundMethodComponent } from './components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component';\nimport { ResultOverlayComponent, ResultOverlayData } from './components/result-overlay/result-overlay.component';\nimport { HotelManageBookingAsideTabEnum } from '../shared/enums/hotel-manage-booking-aside-tab.enum';\nimport { Store } from '@ngrx/store';\nimport { filter } from 'rxjs/operators';\nimport { getCurrentCurrency } from '../../shared/store/selectors/currency.selectors';\nimport { environments } from '../../shared/environments/environment';\nimport { AlmatarIconModule } from '../../shared/modules/almatar-icon/almatar-icon.module';\nimport { SharedService } from '../../shared/services/shared.service';\nimport { loyaltyPointsMethods } from '../../shared/models';\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation',\n standalone: true,\n imports: [\n CommonModule,\n LoaderModule,\n AsideComponent,\n ManageBookingFailedModalComponent,\n AlmatarHotelAutoCancellationSelectRoomsComponent,\n AlmatarHotelAutoCancellationRefundSummaryComponent,\n AlmatarHotelAutoCancellationRefundMethodComponent,\n AlmatarIconModule,\n ResultOverlayComponent\n ],\n providers: [\n AlmatarHotelAutoCancellationService,\n AlmatarHotelAutoCancellationEndpointsService\n ],\n templateUrl: './almatar-hotel-auto-cancellation.component.html',\n styleUrls: ['./almatar-hotel-auto-cancellation.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AlmatarHotelAutoCancellationComponent\n implements OnInit, OnDestroy\n{\n private readonly hotelManageBookingService = inject(\n HotelManageBookingService\n );\n\n readonly autoCancellationService = inject(\n AlmatarHotelAutoCancellationService\n );\n\n HotelManageBookingService = inject(HotelManageBookingService);\n\n private readonly autoCancellationEndpointsService = inject(\n AlmatarHotelAutoCancellationEndpointsService\n );\n\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly destroyRef = inject(DestroyRef);\n private readonly store = inject(Store);\n private readonly sharedService = inject(SharedService);\n\n readonly selectedHotelBooking = input<IHotelBookingData | null>(null);\n\n readonly closed = output<void>();\n readonly cancellationSuccess = output<IAutoCancellationProcessResponse>();\n readonly nonRefundableSubmitSuccess = output<string>();\n readonly chatWithAgent = output<void>();\n\n readonly showConfirmModal = signal(false);\n readonly showErrorModal = signal(false);\n readonly showAside = signal(true);\n readonly isLoading = signal(false);\n readonly isCancelling = signal(false);\n readonly hotelManageError = signal<string>('');\n readonly isNusk = signal(false);\n readonly showResultOverlay = signal(false);\n readonly resultOverlayData = signal<ResultOverlayData | null>(null);\n readonly rooms = signal<IAlmatarHotelAutoCancellationRoom[]>([]);\n readonly packages = signal<IAlmatarHotelAutoCancellationPackage[]>([]);\n readonly hotelInfo = signal<IAlmatarHotelAutoCancellationHotelInfo | null>(\n null\n );\n\n readonly currentCurrency = signal<any>(null);\n readonly refundDetailsData = signal<IFlightRefundDetailsData | null>(null);\n readonly selectedPackageIds = signal<string[]>([]);\n readonly refundMethod = signal<RefundPreferredMethod>('wallet');\n readonly refundResponseData = signal<any>(null);\n\n readonly stepEnum = AlmatarHotelAutoCancellationStepEnum;\n readonly currentStep = computed(() =>\n this.autoCancellationService.currentStep()\n );\n\n readonly isSingleRoom = computed(() => this.rooms().length === 1);\n readonly isSinglePackage = computed(() => this.packages().length === 1);\n\n // Get supplier from booking or first package\n readonly bookingSuppliers = computed(() => {\n const booking = this.selectedHotelBooking();\n if (!booking) return undefined;\n\n // Try to get supplier from booking level first\n if ((booking as any).supplier) {\n return (booking as any).supplier;\n }\n\n // Otherwise get from first package\n const packages = this.packages();\n return packages.length > 0 ? packages[0].supplier : undefined;\n });\n\n // Computed totals for adults, children, infants from booking packages\n readonly totalAdults = computed(() => {\n const booking = this.selectedHotelBooking();\n if (!booking?.packages) {\n return 0;\n }\n return booking.packages.reduce((total: number, pkg: any) => {\n const rooms = pkg.rooms || [];\n return (\n total +\n rooms.reduce((sum: number, room: any) => sum + (room.adultsNum || 0), 0)\n );\n }, 0);\n });\n\n readonly totalChildren = computed(() => {\n const booking = this.selectedHotelBooking();\n if (!booking?.packages) {\n return 0;\n }\n return booking.packages.reduce((total: number, pkg: any) => {\n const rooms = pkg.rooms || [];\n return (\n total +\n rooms.reduce(\n (sum: number, room: any) => sum + (room.childrenNum || 0),\n 0\n )\n );\n }, 0);\n });\n\n readonly totalInfants = computed(() => {\n const booking = this.selectedHotelBooking();\n if (!booking?.packages) {\n return 0;\n }\n return booking.packages.reduce((total: number, pkg: any) => {\n const rooms = pkg.rooms || [];\n return (\n total +\n rooms.reduce(\n (sum: number, room: any) => sum + (room.infantsNum || 0),\n 0\n )\n );\n }, 0);\n });\n\n readonly asideTitle = computed(() => {\n const step = this.currentStep();\n switch (step) {\n case AlmatarHotelAutoCancellationStepEnum.selectRooms:\n return this.isSinglePackage() ? 'Confirm Cancellation' : 'Select Rooms';\n case AlmatarHotelAutoCancellationStepEnum.refundSummary:\n return 'Cancel Booking Request';\n case AlmatarHotelAutoCancellationStepEnum.refundMethod:\n return 'Select Refund Method';\n default:\n return 'Cancel Booking';\n }\n });\n\n constructor() {\n effect(() => {\n this.HotelManageBookingService.selectedHotelBooking.next(\n this.selectedHotelBooking()\n );\n // console.log('selectedHotelBooking', this.selectedHotelBooking());\n // console.log('refundDetailsData', this.refundDetailsData());\n });\n }\n\n get closeIconName(): string {\n const lang = this.sharedService.getAppLanguage();\n return lang === 'ar' ? 'arrow-left' : 'arrow-right';\n }\n\n ngOnInit(): void {\n this.initializeQueryParams();\n this.loadBookingDataFromPackages();\n this.initCurrency();\n }\n\n private initCurrency(): void {\n this.store\n .select(getCurrentCurrency)\n .pipe(\n filter((currency) => !!currency),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((currency) => {\n this.currentCurrency.set(currency);\n });\n }\n\n ngOnDestroy(): void {\n this.autoCancellationService.reset();\n this.autoCancellationEndpointsService.clearSelectedPackageIds();\n }\n\n private initializeQueryParams(): void {\n this.activatedRoute.queryParams\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((params) => {\n if (params['skipCheck']) {\n this.isNusk.set(true);\n }\n });\n }\n\n private loadBookingDataFromPackages(): void {\n this.isLoading.set(true);\n const booking = this.selectedHotelBooking();\n\n if (booking) {\n this.processBookingData(booking);\n } else {\n this.hotelManageBookingService.selectedHotelBooking\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((serviceBooking) => {\n if (serviceBooking) {\n this.processBookingData(serviceBooking);\n }\n this.isLoading.set(false);\n });\n }\n }\n\n private processBookingData(booking: IHotelBookingData): void {\n const hotelInfoData: IAlmatarHotelAutoCancellationHotelInfo = {\n hotelName: booking.hotelName || '',\n hotelImage: booking.coverImage || '',\n checkIn: booking.dateFrom || booking?.from?._i,\n checkOut: booking.dateTo || booking?.to?._i,\n totalRooms: booking.packages?.length || booking.rooms || 1,\n nights:\n booking.numberOfNights ||\n booking.nightNumber ||\n this.calculateNights(booking.dateFrom, booking.dateTo),\n checkInTime: booking.checkInTime?.split(' ')[0],\n checkOutTime: booking.checkOutTime?.split(' ')[0]\n };\n this.hotelInfo.set(hotelInfoData);\n this.autoCancellationService.setHotelInfo(hotelInfoData);\n\n // Map to both rooms (for backward compatibility) and packages (new structure)\n const mappedRooms = this.mapPackagesToRooms(booking);\n this.rooms.set(mappedRooms);\n\n const mappedPackages = this.mapBookingToPackages(booking);\n this.packages.set(mappedPackages);\n\n this.autoCancellationService.setSelectedRooms(mappedRooms);\n\n this.isLoading.set(false);\n }\n\n private mapPackagesToRooms(\n booking: any\n ): IAlmatarHotelAutoCancellationRoom[] {\n const nights =\n booking.numberOfNights ||\n booking.nightNumber ||\n this.calculateNights(booking.from, booking.to);\n const packages: IBookingPackage[] = booking.packages || [];\n\n return packages.flatMap((pkg: IBookingPackage, pkgIndex: number) => {\n const rooms = pkg.rooms || [];\n return rooms.map((room: any, roomIndex: number) => ({\n packageId: pkg.id || String(pkgIndex + 1),\n roomId: room?.roomId || `${pkg.id}-${roomIndex}`,\n roomName: room?.roomName || `Room ${roomIndex + 1}`,\n roomType: room?.roomType || 'Standard Room',\n mealPlan: room?.roomBasis || '',\n isRefundable: pkg.isRefundable !== false,\n isCancelled: pkg.isCancelled,\n manualRefundRequest: !pkg.isRefundable,\n isSelected: false,\n nights: this.hotelInfo()?.nights || nights,\n roomAmount: 0,\n cancellationFee: 0,\n refundAmount: 0,\n bedType: room?.bedType || '',\n roomView: room?.roomView || '',\n roomBasis: room?.roomBasis || '',\n refundability: pkg.isRefundable,\n refundableUntil: pkg.refundableUntil || '',\n adultsNum: room?.adultsNum || 0,\n childrenNum: room?.childrenNum || 0,\n passengerName: room?.passengers?.name || ''\n }));\n });\n }\n\n private mapBookingToPackages(\n booking: any\n ): IAlmatarHotelAutoCancellationPackage[] {\n const bookingPackages: IBookingPackage[] = booking.packages || [];\n\n return bookingPackages.map((pkg: IBookingPackage, pkgIndex: number) => {\n const rooms = pkg.rooms || [];\n const firstRoom = rooms[0];\n\n return {\n packageId: pkg.id || String(pkgIndex + 1),\n packageName: firstRoom?.roomName || `Package ${pkgIndex + 1}`,\n boardBasis: firstRoom?.roomBasis || '',\n isRefundable: pkg.isRefundable !== false,\n isSelected: false,\n isCancelled: pkg.isCancelled,\n refundability: pkg.isRefundable,\n refundableUntil: pkg.refundableUntil || '',\n rooms: rooms.map((room: any, roomIndex: number) => ({\n roomId: room?.roomId || `${pkg.id}-${roomIndex}`,\n roomName: room?.roomName || `Room ${roomIndex + 1}`,\n roomType: room?.roomType || 'Standard Room',\n bedType: room?.bedType || '',\n roomBasis: room?.roomBasis || ''\n })),\n roomAmount: 0,\n cancellationFee: 0,\n refundAmount: 0,\n manualRefundRequest: !pkg.isRefundable,\n cancelledBefore: false,\n cancellationPolicies: pkg.cancellationPolicies || [],\n CancellationPoliciesRemarks: pkg.cancellationPoliciesRemarks,\n supplier: pkg.supplier\n };\n });\n }\n\n private calculateNights(from: any, to: any): number {\n if (!from || !to) {\n return 1;\n }\n if (from.diff && typeof from.diff === 'function') {\n return to.diff(from, 'days') || 1;\n }\n const fromDate = new Date(from);\n const toDate = new Date(to);\n const diffTime = Math.abs(toDate.getTime() - fromDate.getTime());\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n return diffDays || 1;\n }\n\n onContinueToCancel(\n selectedPackages: IAlmatarHotelAutoCancellationPackage[]\n ): void {\n // Convert packages to rooms format for backward compatibility with the service\n const selectedRooms: IAlmatarHotelAutoCancellationRoom[] =\n selectedPackages.flatMap((pkg) =>\n pkg.rooms.map((room) => ({\n packageId: pkg.packageId,\n roomId: room.roomId,\n roomName: room.roomName,\n roomType: room.roomType,\n mealPlan: room.roomBasis,\n isRefundable: pkg.isRefundable,\n isCancelled: pkg.isCancelled,\n isSelected: pkg.isSelected,\n nights: 0,\n roomAmount: pkg.roomAmount,\n cancellationFee: pkg.cancellationFee,\n refundAmount: pkg.refundAmount,\n bedType: room.bedType,\n roomBasis: room.roomBasis,\n refundability: pkg.refundability,\n refundableUntil: pkg.refundableUntil,\n cancelledBefore: pkg.cancelledBefore,\n manualRefundRequest: pkg.manualRefundRequest\n }))\n );\n\n this.autoCancellationService.setSelectedRooms(selectedRooms);\n this.autoCancellationService.setCurrentStep(\n AlmatarHotelAutoCancellationStepEnum.refundSummary\n );\n }\n\n onKeepRoom(): void {\n this.autoCancellationService.setCurrentStep(\n AlmatarHotelAutoCancellationStepEnum.selectRooms\n );\n }\n\n onSelectRefundOption(data: {\n packageIds: string[];\n payout: any;\n totalRefund: number;\n responseData: any;\n }): void {\n // Check if tenant - redirect to WhatsApp for tenant bookings\n if (environments.isTenant) {\n this.hotelManageBookingService.setActiveAsideTab(\n HotelManageBookingAsideTabEnum.whatsAppAgent\n );\n this.showAside.set(false);\n return;\n }\n\n // console.log('Refund option selected:', data);\n\n this.selectedPackageIds.set(data.packageIds);\n this.refundResponseData.set(data.responseData);\n\n const response = data?.responseData;\n const payout = response?.payout || data.payout;\n const totals = response?.totals;\n\n // const walletRefund = payout?.wallet || payout?.loyaltyToWallet;\n const walletRefund = payout?.wallet;\n\n const cardRefund = payout?.card ?? 0;\n const tabbyRefund = payout?.tabby ?? payout?.tabby ?? 0;\n const tamaraRefund = payout?.tamara ?? payout?.tamara ?? 0;\n\n // Check if full wallet refund is allowed based on payout breakdown\n // Wallet refund is allowed if there's no card/tabby/tamara portion\n const hasNonWalletRefund = tabbyRefund > 0 || tamaraRefund > 0;\n const totalRefundAmount = payout?.current ?? data.totalRefund;\n const isFullWalletAllowed =\n (!hasNonWalletRefund && walletRefund > 0) || cardRefund > 0;\n\n const loyaltyPointsValue =\n payout?.loyaltyToWallet ||\n totals?.wala ||\n totals?.qitaf ||\n totals?.mokafa ||\n totals?.hassad ||\n totals?.ygg;\n\n // Build refund details data for the method selector\n this.refundDetailsData.set({\n totalRefundAmount,\n walletRefundAmount: payout?.wallet,\n totalCardRefundAmount: cardRefund + tabbyRefund + tamaraRefund,\n isFullWalletRefundAllowed: isFullWalletAllowed,\n currency: response?.currency,\n isRefundable: response?.flags?.refundable,\n totalLoyaltyPointsRefundAmount: loyaltyPointsValue,\n // Pass payment method info for proper labeling\n paymentMethodCustomerUsed: this.determinePaymentMethod(totals, payout),\n // Additional fields for proper loyalty program labeling and split refund display\n loyaltyPaymentType: this.determineLoyaltyType(totals, payout),\n totalLoyaltyPoints: loyaltyPointsValue,\n bookingId: this.selectedHotelBooking()?.bookingId\n });\n\n // Default to wallet if allowed, otherwise originalPaymentMethod\n if (isFullWalletAllowed && walletRefund > 0) {\n this.refundMethod.set('wallet');\n } else {\n this.refundMethod.set('originalPaymentMethod');\n }\n this.autoCancellationService.setCurrentStep(\n AlmatarHotelAutoCancellationStepEnum.refundMethod\n );\n }\n\n /**\n * Determines the payment method label based on totals/payout breakdown.\n * Returns the appropriate gateway code for proper labeling.\n */\n /**\n * Determines the card/installment payment method for the card row label.\n * Loyalty programs are handled separately by determineLoyaltyType().\n */\n private determinePaymentMethod(totals: any, payout: any): string {\n if ((payout?.tabby ?? totals?.tabby ?? 0) > 0) {\n return 'TB'; // Tabby\n }\n if ((payout?.tamara ?? totals?.tamara ?? 0) > 0) {\n return 'TM'; // Tamara\n }\n if ((payout?.card ?? totals?.card ?? 0) > 0) {\n return 'CH'; // Card\n }\n return '';\n }\n\n /**\n * Determines the loyalty payment type for proper labeling in split refund rows.\n * Returns the loyalty program code (e.g., 'QITAF', 'RAJHI') if applicable.\n */\n private determineLoyaltyType(\n totals: any,\n payout: any\n ): LoyaltyPaymentType | undefined {\n if ((totals?.mokafa ?? 0) > 0) {\n return 'AlRajhiMokafaa';\n }\n if ((totals?.qitaf ?? 0) > 0) {\n return 'Qitaf';\n }\n if ((totals?.wala ?? 0) > 0) {\n return 'Wala';\n }\n if (\n (payout?.loyaltyToWallet ?? 0) > 0 ||\n (payout?.loyaltyPoints ?? 0) > 0\n ) {\n // Check if we have a specific loyalty type from the response\n const loyaltyType = totals?.loyaltyType as LoyaltyPaymentType | undefined;\n if (\n loyaltyType &&\n [\n 'AlRajhiMokafaa',\n 'Qitaf',\n 'Wala',\n 'ALFURSAN',\n 'ALMATAR_POINTS'\n ].includes(loyaltyType)\n ) {\n return loyaltyType;\n }\n }\n return undefined;\n }\n\n onMethodSelected(method: RefundPreferredMethod): void {\n this.refundMethod.set(method);\n }\n\n onBackFromRefundMethod(): void {\n this.autoCancellationService.setCurrentStep(\n AlmatarHotelAutoCancellationStepEnum.refundSummary\n );\n }\n\n onGoBack(): void {\n const step = this.currentStep();\n switch (step) {\n case AlmatarHotelAutoCancellationStepEnum.refundSummary:\n this.autoCancellationService.setCurrentStep(\n AlmatarHotelAutoCancellationStepEnum.selectRooms\n );\n break;\n case AlmatarHotelAutoCancellationStepEnum.refundMethod:\n this.autoCancellationService.setCurrentStep(\n AlmatarHotelAutoCancellationStepEnum.refundSummary\n );\n break;\n default:\n // For selectRooms or other steps, do nothing (close modal)\n break;\n }\n }\n\n canGoBack(): boolean {\n const step = this.currentStep();\n return (\n step === AlmatarHotelAutoCancellationStepEnum.refundSummary ||\n step === AlmatarHotelAutoCancellationStepEnum.refundMethod\n );\n }\n\n confirmCancellation(): void {\n this.isCancelling.set(true);\n\n this.autoCancellationEndpointsService\n .processAutoCancellation(this.selectedPackageIds(), this.refundMethod())\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n this.isCancelling.set(false);\n this.showAside.set(false);\n\n // Check if tenant - redirect to WhatsApp\n if (environments.isTenant || response?.data?.isWhatsApp) {\n this.hotelManageBookingService.setActiveAsideTab(\n HotelManageBookingAsideTabEnum.whatsAppAgent\n );\n return;\n }\n\n // Show success overlay\n this.resultOverlayData.set({\n type: 'success',\n title: 'Cancellation Successful!',\n message:\n 'Your booking has been cancelled successfully. The refund will be processed according to your selected method.',\n confirmText: 'Done'\n });\n this.showResultOverlay.set(true);\n\n // Also emit for parent component if needed\n this.cancellationSuccess.emit(response);\n },\n error: (error) => {\n this.isCancelling.set(false);\n this.showAside.set(false);\n\n // Extract error message from various possible structures\n let errorMessage = 'We encountered an issue processing your cancellation. Please try again or contact support.';\n\n console.error('Cancellation error:', error);\n\n if (error?.error?.message) {\n errorMessage = error.error.message;\n } else if (error?.error?.errors && Array.isArray(error.error.errors) && error.error.errors.length > 0) {\n errorMessage = error.error.errors[0];\n } else if (error?.message) {\n errorMessage = error.message;\n } else if (typeof error === 'string') {\n errorMessage = error;\n }\n\n // Show error overlay\n this.resultOverlayData.set({\n type: 'error',\n title: 'Cancellation Failed',\n message: errorMessage,\n confirmText: 'Close'\n });\n this.showResultOverlay.set(true);\n }\n });\n }\n\n onCloseModal(): void {\n this.closed.emit();\n }\n\n onNonRefundableSubmitSuccess(packageName: string): void {\n this.showAside.set(false);\n\n // Show success overlay for non-refundable request\n this.resultOverlayData.set({\n type: 'success',\n title: 'Request Submitted!',\n message: `Your cancellation request for ${packageName} has been submitted successfully. Our team will review your request and contact you shortly.`,\n confirmText: 'Done'\n });\n this.showResultOverlay.set(true);\n\n // Also emit for parent component if needed\n this.nonRefundableSubmitSuccess.emit(packageName);\n }\n\n onChatWithAgent(): void {\n this.showAside.set(false);\n this.chatWithAgent.emit();\n }\n\n closeAllModals(): void {\n this.showConfirmModal.set(false);\n this.showErrorModal.set(false);\n this.showAside.set(false);\n this.closed.emit();\n }\n\n onResultOverlayConfirm(): void {\n this.showResultOverlay.set(false);\n this.resultOverlayData.set(null);\n this.closed.emit();\n }\n\n onResultOverlayCancel(): void {\n this.showResultOverlay.set(false);\n this.resultOverlayData.set(null);\n }\n}\n","@if (showAside()) {\n <almatar-aside\n\n class=\"auto_cancellation_wrapper\"\n [asideTitle]=\"asideTitle()\"\n [showAside]=\"showAside()\"\n [whiteHeader]=\"true\"\n [showHeader]=\"false\"\n (onClose)=\"onCloseModal()\"\n >\n <!-- Custom Header with 60px height -->\n <div class=\"auto_cancellation__header\">\n @if (canGoBack()) {\n <button class=\"auto_cancellation__header-back\" (click)=\"onGoBack()\" type=\"button\">\n <i class=\"pi pi-arrow-left\"></i>\n </button>\n }\n <div class=\"auto_cancellation__header-content\">\n @if (currentStep() === stepEnum.selectRooms) {\n <h2 class=\"auto_cancellation__header-title\">\n @if (isSinglePackage()) {\n Cancel Rooms\n } @else {\n Select Rooms\n }\n </h2>\n <p class=\"auto_cancellation__header-subtitle\">\n @if (isSinglePackage()) {\n Review and confirm your cancellation\n } @else {\n Choose which room(s) you'd like to cancel\n }\n </p>\n } @else if (currentStep() === stepEnum.refundSummary) {\n <h2 class=\"auto_cancellation__header-title\">Cancel Booking Request</h2>\n <p class=\"auto_cancellation__header-subtitle\">Review your refund summary and proceed</p>\n } @else if (currentStep() === stepEnum.refundMethod) {\n <h2 class=\"auto_cancellation__header-title\">Select Refund Method</h2>\n <p class=\"auto_cancellation__header-subtitle\">Choose how you'd like to receive your refund</p>\n } @else {\n <h2 class=\"auto_cancellation__header-title\">{{ asideTitle() }}</h2>\n <p class=\"auto_cancellation__header-subtitle\">Complete your booking cancellation</p>\n }\n </div>\n <button class=\"auto_cancellation__header-close\" (click)=\"onCloseModal()\" type=\"button\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"auto_cancellation__component\" [class.isNusk]=\"isNusk()\">\n @if (isLoading()) {\n <div class=\"auto_cancellation__loading\">\n <app-loader></app-loader>\n </div>\n }\n\n @if (currentStep() === stepEnum.selectRooms && !isLoading()) {\n <almatar-hotel-auto-cancellation-select-rooms\n [packages]=\"packages()\"\n [hotelInfo]=\"hotelInfo()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.hotelId\"\n [currencyCode]=\"selectedHotelBooking()?.currencyCode || 'SAR'\"\n (continueToCancel)=\"onContinueToCancel($event)\"\n (closeModal)=\"onCloseModal()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n (chatWithAgent)=\"onChatWithAgent()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundSummary && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary\n [selectedRooms]=\"autoCancellationService.selectedRooms()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.id || selectedHotelBooking()?.hpk\"\n [hotelInfo]=\"hotelInfo()\"\n [selectionSkipped]=\"packages().length <= 1\"\n (keepRoom)=\"onKeepRoom()\"\n (selectRefundOption)=\"onSelectRefundOption($event)\"\n (closeModal)=\"onCloseModal()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundMethod && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-method\n [refundDetailsData]=\"refundDetailsData()\"\n [currencyObj]=\"currentCurrency()\"\n [refundMethod]=\"refundMethod()\"\n [isCancelling]=\"isCancelling()\"\n (methodSelected)=\"onMethodSelected($event)\"\n (backRequested)=\"onBackFromRefundMethod()\"\n (confirmRequested)=\"confirmCancellation()\"\n (closeModal)=\"onCloseModal()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n />\n }\n </div>\n </almatar-aside>\n}\n\n@if (showErrorModal()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n@if (showResultOverlay() && resultOverlayData()) {\n <app-result-overlay\n [data]=\"resultOverlayData()!\"\n [show]=\"showResultOverlay()\"\n (confirm)=\"onResultOverlayConfirm()\"\n (cancel)=\"onResultOverlayCancel()\"\n />\n}\n","import { Component, computed, input } from '@angular/core';\nimport { UpperCasePipe, LowerCasePipe } from '@angular/common';\nimport { TagModule } from 'primeng/tag';\nimport { ProductType } from '../../models/booking.types';\n\n@Component({\n selector: 'app-sbd-flight-itinerary-card',\n standalone: true,\n imports: [TagModule, UpperCasePipe, LowerCasePipe],\n templateUrl: './flight-itinerary-card.component.html',\n styleUrl: './flight-itinerary-card.component.scss',\n})\nexport class SbdFlightItineraryCardComponent {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = input<any>(null);\n product = input.required<ProductType>();\n verified = input(false);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private bi = computed(() => this.data()?.data?.booking_info);\n\n legs = computed(() => {\n const d = this.bi();\n if (!d) return [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (d.leg_info ?? []).map((leg: any, i: number) => ({\n direction: leg.LegDirectionality as string,\n airlineName: (leg.LegAirlinesNames ?? []).join(', '),\n cabin: leg.LegCabins?.[0]?.Name ?? '',\n fareBrand: leg.fareBrand?.name ?? '',\n from: leg.LegDepartureAirportCode as string,\n to: leg.LegArrivalAirportCode as string,\n depTime: leg.LegDepartureDateTime as string,\n arrTime: leg.LegArrivalDateTime as string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stops: (leg.Stops ?? []) as any[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n segments: (d.airline_info?.[i]?.Segments ?? []) as any[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n durationSegments: (d.duration?.legs?.[i]?.Segments ?? []) as any[],\n }));\n });\n\n passengers = computed(() =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.bi()?.passenger_info?.passengers ?? []) as any[]\n );\n\n payment = computed(() => this.bi()?.payment_status);\n\n readonly typeLabel: Record<string, string> = { ADT: 'Adult', CNN: 'Child', INF: 'Infant' };\n\n fmtTime(dt: string): string {\n if (!dt) return '—';\n try { return new Date(dt).toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' }); }\n catch { return dt; }\n }\n\n fmtShortDate(dt: string): string {\n if (!dt) return '—';\n try { return new Date(dt).toLocaleDateString('en-GB', { day: '2-digit', month: 'short' }); }\n catch { return dt; }\n }\n\n fmtMins(mins: number): string {\n if (mins == null) return '—';\n return `${Math.floor(mins / 60)}h ${mins % 60}m`;\n }\n}\n","<div class=\"fic\">\n @if (product() === 'flight') {\n\n <!-- ── Verified pill ──────────────────────────── -->\n @if (verified()) {\n <div class=\"fic__verified-bar\">\n <span class=\"fic__verified-pill\">\n <i class=\"pi pi-verified\"></i> Verified with Airlines\n </span>\n </div>\n }\n\n <!-- ── Legs ─────────────────────────────────── -->\n @for (leg of legs(); track leg.direction + $index; let li = $index) {\n <div class=\"fic__leg\" [class.fic__leg--return]=\"leg.direction === 'Return'\">\n\n <!-- Leg header -->\n <div class=\"fic__leg-header\">\n <div class=\"fic__leg-direction\">\n <i class=\"pi\" [class.pi-arrow-right]=\"leg.direction !== 'Return'\" [class.pi-arrow-left]=\"leg.direction === 'Return'\"></i>\n <span>{{ leg.direction }}</span>\n </div>\n <div class=\"fic__leg-chips\">\n @if (leg.cabin) {\n <span class=\"fic__chip fic__chip--cabin\">{{ leg.cabin }}</span>\n }\n @if (leg.fareBrand) {\n <span class=\"fic__chip fic__chip--fare\">{{ leg.fareBrand }}</span>\n }\n </div>\n </div>\n\n <!-- Airline row -->\n @if (leg.airlineName) {\n <div class=\"fic__airline\">\n <i class=\"pi pi-send\"></i>\n <span>{{ leg.airlineName }}</span>\n </div>\n }\n\n <!-- Route timeline -->\n <div class=\"fic__route\">\n\n <!-- Origin -->\n <div class=\"fic__airport\">\n <div class=\"fic__airport-code\">{{ leg.from }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.depTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n\n <!-- Segments + stops -->\n <div class=\"fic__timeline\">\n\n <!-- Top row: all labels -->\n <div class=\"fic__tl-top\">\n @for (seg of leg.durationSegments; track seg.DepartureAirportCode; let si = $index) {\n <div class=\"fic__tl-seg\">\n <span class=\"fic__tl-flt\">{{ leg.segments[si]?.AirlineCode }}{{ leg.segments[si]?.FlightNumber }}</span>\n <span class=\"fic__tl-dur\">{{ fmtMins(seg.SegmentElapsedTimeMinutes) }}</span>\n </div>\n @if (si < leg.stops.length) {\n <div class=\"fic__tl-stop\">\n <span class=\"fic__stop-dot\"></span>\n <span class=\"fic__stop-code\">{{ leg.stops[si].StopAirport }}</span>\n <span class=\"fic__stop-sep\">·</span>\n <span class=\"fic__stop-dur\">{{ fmtMins(leg.stops[si].LayoverDuration) }}</span>\n </div>\n }\n }\n </div>\n\n <!-- Bottom row: single continuous line + one arrow -->\n <div class=\"fic__tl-track\">\n <div class=\"fic__tl-line\"></div>\n <i class=\"pi pi-send fic__tl-plane\"></i>\n </div>\n\n </div>\n\n <!-- Destination -->\n <div class=\"fic__airport fic__airport--right\">\n <div class=\"fic__airport-code\">{{ leg.to }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.arrTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.arrTime) }}</div>\n </div>\n\n </div>\n </div>\n }\n\n <!-- ── Passengers ─────────────────────────── -->\n @if (passengers().length > 0) {\n <div class=\"fic__section\">\n <div class=\"fic__section-label\">\n <i class=\"pi pi-users\"></i> Passengers\n <span class=\"fic__section-count\">{{ passengers().length }}</span>\n </div>\n <div class=\"fic__pax-list\">\n @for (p of passengers(); track p.passengerId) {\n <div class=\"fic__pax\">\n <div class=\"fic__pax-top\">\n <span class=\"fic__pax-badge fic__pax-badge--{{ p.type | lowercase }}\">{{ typeLabel[p.type] ?? p.type }}</span>\n <span class=\"fic__pax-name\">{{ p.name?.prefix }} {{ p.name?.givenName }} {{ p.name?.surName }}</span>\n </div>\n <div class=\"fic__pax-bottom\">\n @if (p.identity?.number) {\n <span class=\"fic__pax-doc\"><i class=\"pi pi-id-card\"></i> {{ p.identity?.number }}</span>\n }\n @if (p.email) {\n <span class=\"fic__pax-email\">{{ p.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ── Payment ────────────────────────────── -->\n @if (payment()) {\n <div class=\"fic__payment\">\n <div class=\"fic__payment-main\">\n <i class=\"pi pi-credit-card fic__payment-icon\"></i>\n <span class=\"fic__payment-amount\">{{ payment()?.amount }} {{ payment()?.currency }}</span>\n <span class=\"fic__payment-status\" [class.fic__payment-status--ok]=\"payment()?.status?.key === 'SUCCESS'\">\n <i class=\"pi\" [class.pi-check-circle]=\"payment()?.status?.key === 'SUCCESS'\" [class.pi-clock]=\"payment()?.status?.key !== 'SUCCESS'\"></i>\n {{ payment()?.status?.name }}\n </span>\n </div>\n @if (payment()?.method || payment()?.date) {\n <div class=\"fic__payment-sub\">\n @if (payment()?.method) { <span>{{ payment()?.method }}</span> }\n @if (payment()?.method && payment()?.date) { <span class=\"fic__dot\">·</span> }\n @if (payment()?.date) { <span>{{ payment()?.date }}</span> }\n </div>\n }\n </div>\n }\n\n\n }\n</div>\n","import { Component, computed, input } from '@angular/core';\nimport { UpperCasePipe, LowerCasePipe } from '@angular/common';\nimport { TagModule } from 'primeng/tag';\n\n@Component({\n selector: 'app-sbd-hotel-itinerary-card',\n standalone: true,\n imports: [TagModule, UpperCasePipe, LowerCasePipe],\n templateUrl: './hotel-itinerary-card.component.html',\n styleUrl: './hotel-itinerary-card.component.scss',\n})\nexport class SbdHotelItineraryCardComponent {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = input<any>(null);\n verified = input(false);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private bi = computed(() => this.data()?.data?.booking_info);\n\n hotelInfo = computed(() => this.data()?.data?.hotel_information);\n checkinCheckout = computed(() => this.data()?.data?.checkin_checkout);\n roomInfo = computed(() => this.data()?.data?.room_information);\n\n passengers = computed(() =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.bi()?.passenger_info?.passengers ?? []) as any[]\n );\n\n payment = computed(() => this.bi()?.payment_status);\n\n readonly typeLabel: Record<string, string> = { ADT: 'Adult', CNN: 'Child', INF: 'Infant' };\n\n fmtTime(dt: string): string {\n if (!dt) return '—';\n try { return new Date(dt).toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' }); }\n catch { return dt; }\n }\n\n fmtShortDate(dt: string): string {\n if (!dt) return '—';\n try { return new Date(dt).toLocaleDateString('en-GB', { day: '2-digit', month: 'short' }); }\n catch { return dt; }\n }\n}\n","<div class=\"hic\">\n\n <!-- ── Hotel Information ─────────────────────── -->\n @if (hotelInfo()) {\n <div class=\"hic__hotel-header\">\n <div class=\"hic__hotel-name\">{{ hotelInfo()?.hotel_name }}</div>\n @if (hotelInfo()?.star_rating) {\n <div class=\"hic__hotel-rating\">\n @for (star of [].constructor(hotelInfo()?.star_rating); track $index) {\n <i class=\"pi pi-star-fill\"></i>\n }\n </div>\n }\n @if (hotelInfo()?.address) {\n <div class=\"hic__hotel-address\">\n <i class=\"pi pi-map-marker\"></i>\n {{ hotelInfo()?.address }}\n </div>\n }\n </div>\n }\n\n <!-- ── Check-in / Check-out ─────────────────── -->\n @if (checkinCheckout()) {\n <div class=\"hic__hotel-dates\">\n <div class=\"hic__hotel-date\">\n <div class=\"hic__hotel-date-label\">\n <i class=\"pi pi-sign-in\"></i> Check-in\n </div>\n <div class=\"hic__hotel-date-value\">{{ fmtShortDate(checkinCheckout()?.check_in) }}</div>\n <div class=\"hic__hotel-date-time\">{{ fmtTime(checkinCheckout()?.check_in) }}</div>\n </div>\n <div class=\"hic__hotel-date-separator\">\n <i class=\"pi pi-arrow-right\"></i>\n @if (checkinCheckout()?.nights) {\n <span class=\"hic__hotel-nights\">{{ checkinCheckout()?.nights }} night{{ checkinCheckout()?.nights > 1 ? 's' : '' }}</span>\n }\n </div>\n <div class=\"hic__hotel-date\">\n <div class=\"hic__hotel-date-label\">\n <i class=\"pi pi-sign-out\"></i> Check-out\n </div>\n <div class=\"hic__hotel-date-value\">{{ fmtShortDate(checkinCheckout()?.check_out) }}</div>\n <div class=\"hic__hotel-date-time\">{{ fmtTime(checkinCheckout()?.check_out) }}</div>\n </div>\n </div>\n }\n\n <!-- ── Room Information ─────────────────────── -->\n @if (roomInfo()) {\n <div class=\"hic__section\">\n <div class=\"hic__section-label\">\n <i class=\"pi pi-building\"></i> Room Details\n </div>\n <div class=\"hic__hotel-room\">\n @if (roomInfo()?.room_type) {\n <div class=\"hic__hotel-room-type\">{{ roomInfo()?.room_type }}</div>\n }\n @if (roomInfo()?.board_type) {\n <div class=\"hic__hotel-room-board\">\n <i class=\"pi pi-shopping-bag\"></i> {{ roomInfo()?.board_type }}\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ── Guests ─────────────────────────── -->\n @if (passengers().length > 0) {\n <div class=\"hic__section\">\n <div class=\"hic__section-label\">\n <i class=\"pi pi-users\"></i> Guests\n <span class=\"hic__section-count\">{{ passengers().length }}</span>\n </div>\n <div class=\"hic__pax-list\">\n @for (p of passengers(); track p.passengerId) {\n <div class=\"hic__pax\">\n <div class=\"hic__pax-top\">\n <span class=\"hic__pax-badge hic__pax-badge--{{ p.type | lowercase }}\">{{ typeLabel[p.type] ?? p.type }}</span>\n <span class=\"hic__pax-name\">{{ p.name?.prefix }} {{ p.name?.givenName }} {{ p.name?.surName }}</span>\n </div>\n <div class=\"hic__pax-bottom\">\n @if (p.identity?.number) {\n <span class=\"hic__pax-doc\"><i class=\"pi pi-id-card\"></i> {{ p.identity?.number }}</span>\n }\n @if (p.email) {\n <span class=\"hic__pax-email\">{{ p.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ── Payment ────────────────────────────── -->\n @if (payment()) {\n <div class=\"hic__payment\">\n <div class=\"hic__payment-main\">\n <i class=\"pi pi-credit-card hic__payment-icon\"></i>\n <span class=\"hic__payment-amount\">{{ payment()?.amount }} {{ payment()?.currency }}</span>\n <span class=\"hic__payment-status\" [class.hic__payment-status--ok]=\"payment()?.status?.key === 'SUCCESS'\">\n <i class=\"pi\" [class.pi-check-circle]=\"payment()?.status?.key === 'SUCCESS'\" [class.pi-clock]=\"payment()?.status?.key !== 'SUCCESS'\"></i>\n {{ payment()?.status?.name }}\n </span>\n </div>\n @if (payment()?.method || payment()?.date) {\n <div class=\"hic__payment-sub\">\n @if (payment()?.method) { <span>{{ payment()?.method }}</span> }\n @if (payment()?.method && payment()?.date) { <span class=\"hic__dot\">·</span> }\n @if (payment()?.date) { <span>{{ payment()?.date }}</span> }\n </div>\n }\n </div>\n }\n\n</div>\n","import { Component, computed, input, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { InputTextModule } from 'primeng/inputtext';\n\ntype EntryType = 'date' | 'duration' | 'bool' | 'number' | 'text';\n\ninterface FlatEntry {\n path: string;\n key: string;\n rawValue: string;\n displayValue: string;\n type: EntryType;\n}\n\n@Component({\n selector: 'app-sbd-data-search',\n standalone: true,\n imports: [FormsModule, InputTextModule],\n templateUrl: './data-search.component.html',\n styleUrl: './data-search.component.scss',\n})\nexport class SbdDataSearchComponent {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = input<any>(null);\n query = signal('');\n\n private allEntries = computed((): FlatEntry[] => {\n const d = this.data()?.data?.booking_info;\n if (!d) return [];\n return this.flatten(d);\n });\n\n results = computed((): FlatEntry[] => {\n const q = this.query().trim().toLowerCase();\n if (q.length < 2) return [];\n return this.allEntries()\n .filter(e =>\n e.key.toLowerCase().includes(q) ||\n e.rawValue.toLowerCase().includes(q) ||\n e.displayValue.toLowerCase().includes(q)\n )\n .slice(0, 50);\n });\n\n totalCount = computed((): number => {\n const q = this.query().trim().toLowerCase();\n if (q.length < 2) return 0;\n return this.allEntries().filter(e =>\n e.key.toLowerCase().includes(q) ||\n e.rawValue.toLowerCase().includes(q) ||\n e.displayValue.toLowerCase().includes(q)\n ).length;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private flatten(obj: any, pathParts: string[] = []): FlatEntry[] {\n if (obj === null || obj === undefined) return [];\n if (typeof obj !== 'object') {\n const raw = String(obj);\n const key = pathParts[pathParts.length - 1] ?? '';\n const { display, type } = this.formatEntry(key, raw);\n return [{ path: pathParts.slice(0, -1).join(' › '), key, rawValue: raw, displayValue: display, type }];\n }\n if (Array.isArray(obj)) {\n return obj.flatMap((item, i) => this.flatten(item, [...pathParts, `[${i}]`]));\n }\n return Object.entries(obj).flatMap(([k, v]) => this.flatten(v, [...pathParts, k]));\n }\n\n private formatEntry(key: string, raw: string): { display: string; type: EntryType } {\n if (/minutes|duration/i.test(key)) {\n const n = Number(raw);\n if (!isNaN(n) && raw !== '') {\n return { display: `${Math.floor(n / 60)}h ${n % 60}m`, type: 'duration' };\n }\n }\n if (/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/.test(raw)) {\n try {\n return { display: new Date(raw).toLocaleString('en-GB', { day: '2-digit', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit' }), type: 'date' };\n } catch { /* fall through */ }\n }\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(raw)) {\n try {\n return { display: new Date(raw + 'T00:00:00').toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' }), type: 'date' };\n } catch { /* fall through */ }\n }\n if (raw === 'true' || raw === 'false') return { display: raw, type: 'bool' };\n if (raw !== '' && !isNaN(Number(raw))) return { display: raw, type: 'number' };\n return { display: raw, type: 'text' };\n }\n}\n","<div class=\"sbd-data-search\">\n <div class=\"sbd-data-search__input-wrap\">\n <i class=\"pi pi-search sbd-data-search__icon\"></i>\n <input pInputText class=\"sbd-data-search__input\"\n placeholder=\"Search any field or value from this booking…\"\n [ngModel]=\"query()\" (ngModelChange)=\"query.set($event)\" />\n @if (query().length >= 2) {\n <span class=\"sbd-data-search__count\">{{ totalCount() }} match{{ totalCount() !== 1 ? 'es' : '' }}</span>\n }\n </div>\n\n @if (query().length >= 2 && results().length > 0) {\n <div class=\"sbd-data-search__results\">\n @for (entry of results(); track entry.path + entry.key) {\n <div class=\"sbd-data-search__result\">\n <div class=\"sbd-data-search__result-left\">\n <div class=\"sbd-data-search__result-path\">\n @if (entry.path) { <span class=\"sbd-data-search__result-pathtext\">{{ entry.path }} ›</span> }\n <span class=\"sbd-data-search__result-key\">{{ entry.key }}</span>\n </div>\n </div>\n <div class=\"sbd-data-search__result-right\">\n <span class=\"sbd-data-search__type-badge sbd-data-search__type-badge--{{ entry.type }}\">{{ entry.type }}</span>\n <span class=\"sbd-data-search__result-value\">{{ entry.displayValue }}</span>\n </div>\n </div>\n }\n @if (totalCount() > 50) {\n <div class=\"sbd-data-search__more\">+{{ totalCount() - 50 }} more — refine your search</div>\n }\n </div>\n }\n\n @if (query().length >= 2 && results().length === 0) {\n <div class=\"sbd-data-search__empty\">\n <i class=\"pi pi-inbox\"></i> No fields or values match \"{{ query() }}\"\n </div>\n }\n</div>\n","export const AR_LABELS: Record<string, string> = {\n 'PNR': 'رقم الحجز',\n 'Booking ID': 'معرف الحجز',\n 'Supplier ref': 'مرجع المورد',\n 'Supplier': 'المورد',\n 'Cross-seller': 'حجز متقاطع',\n 'Departure': 'المغادرة',\n 'Arrival': 'الوصول',\n 'Duration': 'المدة',\n 'Direction': 'الاتجاه',\n 'Departure time': 'وقت المغادرة',\n 'Arrival time': 'وقت الوصول',\n 'Stops': 'التوقفات',\n 'Journey duration': 'مدة الرحلة',\n 'Airline(s)': 'شركة الطيران',\n 'Flight no.': 'رقم الرحلة',\n 'Flight': 'الرحلة',\n 'IATA code': 'رمز IATA',\n 'Aircraft': 'نوع الطائرة',\n 'Operating code': 'رمز التشغيل',\n 'Route': 'المسار',\n 'Cabin': 'درجة المقصورة',\n 'Fare brand': 'نوع التعرفة',\n 'Fare desc.': 'وصف التعرفة',\n 'Departure airport': 'مطار المغادرة',\n 'Dep. terminal': 'صالة المغادرة',\n 'Arrival airport': 'مطار الوصول',\n 'Arr. terminal': 'صالة الوصول',\n 'Type': 'النوع',\n 'Gender': 'الجنس',\n 'Date of birth': 'تاريخ الميلاد',\n 'Passport': 'جواز السفر',\n 'Nationality': 'الجنسية',\n 'Passport exp.': 'انتهاء الجواز',\n 'Issue country': 'بلد الإصدار',\n 'Doc type': 'نوع الوثيقة',\n 'Email': 'البريد الإلكتروني',\n 'Phone': 'الهاتف',\n 'Total': 'الإجمالي',\n 'Adults (ADT)': 'بالغون',\n 'Children (CNN)': 'أطفال',\n 'Infants (INF)': 'رضع',\n 'Status': 'الحالة',\n 'Amount': 'المبلغ',\n 'Paid amount': 'المبلغ المدفوع',\n 'Payment method': 'طريقة الدفع',\n 'Date': 'التاريخ',\n 'Currency': 'العملة',\n 'Transaction ref': 'مرجع المعاملة',\n 'Amount paid': 'المبلغ المدفوع',\n 'Source': 'المصدر',\n 'Total paid': 'إجمالي المدفوع',\n 'Adult · Cabin': 'بالغ · حقيبة مقصورة',\n 'Adult · Checked': 'بالغ · حقيبة مسجلة',\n 'Child · Cabin': 'طفل · حقيبة مقصورة',\n 'Child · Checked': 'طفل · حقيبة مسجلة',\n 'Infant · Cabin': 'رضيع · حقيبة مقصورة',\n 'Infant · Checked': 'رضيع · حقيبة مسجلة',\n 'Checked': 'حقيبة مسجلة',\n 'Original amount': 'المبلغ الأصلي',\n 'Cancellation fee': 'رسوم الإلغاء',\n 'Total refund': 'إجمالي الاسترداد',\n 'Refundable': 'قابل للاسترداد',\n 'Cancel fee': 'رسوم الإلغاء',\n 'Deadline': 'الموعد النهائي',\n 'Policy': 'السياسة',\n 'Penalty': 'الغرامة',\n 'Non-refundable charge': 'رسوم غير قابلة للاسترداد',\n 'Non-refundable ancillary': 'خدمات إضافية غير قابلة للاسترداد',\n 'Gift deduction': 'خصم الهدية',\n 'Coupon deduction': 'خصم القسيمة',\n 'Loyalty deduction': 'خصم نقاط الولاء',\n 'Card refund': 'استرداد البطاقة',\n 'Credit refund': 'استرداد الرصيد',\n 'Wallet refund': 'استرداد المحفظة',\n 'Loyalty points refund': 'استرداد نقاط الولاء',\n 'Leg total refund': 'إجمالي استرداد هذا الاتجاه',\n 'Room type': 'نوع الغرفة',\n 'Beds': 'الأسرّة',\n 'View': 'الإطلالة',\n 'Floor': 'الطابق',\n 'Size': 'المساحة',\n 'Check-in date': 'تاريخ الوصول',\n 'Check-in time': 'وقت الوصول',\n 'Check-out date': 'تاريخ المغادرة',\n 'Check-out time': 'وقت المغادرة',\n 'Nights': 'عدد الليالي',\n 'Hotel': 'الفندق',\n 'Stars': 'النجوم',\n 'Address': 'العنوان',\n 'City': 'المدينة',\n 'Country': 'الدولة',\n 'Zip code': 'الرمز البريدي',\n 'Landmark': 'معلم قريب',\n 'Balance': 'الرصيد',\n 'Cashback': 'كاش باك',\n 'Promo credit': 'رصيد ترويجي',\n 'Last updated': 'آخر تحديث',\n 'Board basis': 'أساس الإقامة',\n 'Breakfast': 'الإفطار',\n 'Lunch': 'الغداء',\n 'Dinner': 'العشاء',\n};\n\nexport const AR_SECTION_TITLES: Record<string, string> = {\n 'Booking Reference': 'مرجع الحجز',\n 'Payment': 'الدفع',\n 'Summary': 'ملخص',\n 'Transaction': 'المعاملة',\n 'References': 'المراجع',\n 'Total': 'الإجمالي',\n 'Info': 'معلومات',\n 'Status': 'الحالة',\n 'Add-on Baggage': 'أمتعة إضافية',\n 'Change History': 'سجل التغييرات',\n};\n","import { Component, input, output, inject } from '@angular/core';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { ButtonModule } from 'primeng/button';\nimport { ResultContent } from '../../models/action.types';\nimport { SbdToastService } from '../../services/toast.service';\n\n@Component({\n selector: 'app-sbd-result-panel',\n standalone: true,\n imports: [SkeletonModule, ButtonModule],\n templateUrl: './result-panel.component.html',\n styleUrl: './result-panel.component.scss',\n animations: [\n trigger('fadeInUp', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(8px)' }),\n animate('200ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n ]),\n ],\n})\nexport class SbdResultPanelComponent {\n private toast = inject(SbdToastService);\n\n actionLabel = input('');\n elapsedMs = input(0);\n status = input<'idle' | 'loading' | 'success' | 'error'>('idle');\n result = input<ResultContent | null>(null);\n\n feedbackGiven = output<'up' | 'down'>();\n\n get elapsedSeconds(): string { return (this.elapsedMs() / 1000).toFixed(2); }\n\n copy(): void {\n const r = this.result();\n if (!r) return;\n const lines = [r.title, r.subtitle ?? '', '', ...r.points.map(p => `${p.label}: ${p.value}`), r.callout ? `\\nNote: ${r.callout.message}` : ''].filter(Boolean);\n navigator.clipboard.writeText(lines.join('\\n')).then(() => this.toast.success('Copied to clipboard'));\n }\n}\n","<div class=\"sbd-result-panel\">\n @if (status() === 'loading') {\n <div class=\"sbd-result-panel__loading\">\n <div class=\"sbd-result-panel__loading-header\">\n <p-skeleton width=\"200px\" height=\"18px\" /><p-skeleton width=\"80px\" height=\"18px\" />\n </div>\n <p-skeleton width=\"60%\" height=\"28px\" styleClass=\"mt-3 mb-2\" />\n <p-skeleton width=\"40%\" height=\"16px\" styleClass=\"mb-4\" />\n <div class=\"sbd-result-panel__loading-points\">\n @for (i of [1,2,3,4]; track i) {\n <div class=\"sbd-result-panel__loading-row\">\n <p-skeleton width=\"100px\" height=\"13px\" /><p-skeleton width=\"160px\" height=\"13px\" />\n </div>\n }\n </div>\n </div>\n }\n @if (status() === 'success' && result()) {\n <div @fadeInUp>\n <div class=\"sbd-result-panel__header\">\n <div class=\"sbd-result-panel__header-left\">\n <i class=\"pi pi-check-circle sbd-result-panel__check-icon\"></i>\n <span class=\"sbd-result-panel__header-label\">Result · {{ actionLabel() }}</span>\n </div>\n <span class=\"sbd-result-panel__elapsed\">Found in {{ elapsedSeconds }}s</span>\n </div>\n <div class=\"sbd-result-panel__body\">\n <h2 class=\"sbd-result-panel__title\">{{ result()!.title }}</h2>\n @if (result()!.subtitle) { <p class=\"sbd-result-panel__subtitle\">{{ result()!.subtitle }}</p> }\n\n <!-- Sectioned layout (refund breakdown etc.) -->\n @if (result()!.sections?.length) {\n <div class=\"sbd-result-panel__sections\">\n @for (section of result()!.sections!; track section.title) {\n <div class=\"sbd-result-panel__section\">\n <div class=\"sbd-result-panel__section-title\">{{ section.title }}</div>\n @for (row of section.rows; track row.label) {\n @if (row.value) {\n <div class=\"sbd-result-panel__section-row\">\n <span class=\"sbd-result-panel__section-row-label\">{{ row.label }}</span>\n <span class=\"sbd-result-panel__section-row-value sbd-result-panel__section-row-value--{{ row.valueClass ?? 'neutral' }}\">{{ row.value }}</span>\n </div>\n } @else {\n <div class=\"sbd-result-panel__section-divider\">{{ row.label }}</div>\n }\n }\n </div>\n }\n </div>\n }\n\n <!-- Flat points layout (all other actions) -->\n @else if (result()!.points?.length) {\n <ul class=\"sbd-result-panel__points\">\n @for (point of result()!.points!; track point.label) {\n <li class=\"sbd-result-panel__point\">\n <span class=\"sbd-result-panel__point-label\">{{ point.label }}</span>\n <span class=\"sbd-result-panel__point-value\">{{ point.value }}</span>\n </li>\n }\n </ul>\n }\n\n @if (result()!.callout) {\n <div class=\"sbd-result-panel__callout sbd-result-panel__callout--{{ result()!.callout!.type }}\">\n <i class=\"pi pi-info-circle\"></i><span>{{ result()!.callout!.message }}</span>\n </div>\n }\n </div>\n <div class=\"sbd-result-panel__footer\">\n <div class=\"sbd-result-panel__feedback\">\n <span class=\"sbd-result-panel__feedback-label\">Helpful?</span>\n <button class=\"sbd-result-panel__feedback-btn sbd-result-panel__feedback-btn--up\" (click)=\"feedbackGiven.emit('up')\">\n <i class=\"pi pi-thumbs-up\"></i>\n </button>\n <button class=\"sbd-result-panel__feedback-btn sbd-result-panel__feedback-btn--down\" (click)=\"feedbackGiven.emit('down')\">\n <i class=\"pi pi-thumbs-down\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n @if (status() === 'error') {\n <div class=\"sbd-result-panel__error\" @fadeInUp>\n <i class=\"pi pi-exclamation-triangle\"></i><span>Could not load this information. Please try again.</span>\n </div>\n }\n @if (status() === 'idle') {\n <div class=\"sbd-result-panel__idle\">\n <i class=\"pi pi-arrow-up-left\"></i><span>Select an action above to see results here</span>\n </div>\n }\n</div>\n","import { Component, input, output, inject, signal, computed, effect } from '@angular/core';\nimport { DialogModule } from 'primeng/dialog';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nimport { ActionConfig, ResultContent } from '../../models/action.types';\nimport { AR_LABELS, AR_SECTION_TITLES } from '../../config/labels.ar';\nimport { ProductType } from '../../models/booking.types';\nimport { SbdBookingService } from '../../services/booking.service';\nimport { SbdToastService } from '../../services/toast.service';\nimport { SbdResultPanelComponent } from '../result-panel/result-panel.component';\n\n@Component({\n selector: 'app-sbd-action-dialog',\n standalone: true,\n imports: [DialogModule, ButtonModule, FormsModule, NgSelectModule, SbdResultPanelComponent],\n templateUrl: './action-dialog.component.html',\n styleUrl: './action-dialog.component.scss',\n})\nexport class SbdActionDialogComponent {\n private bookingService = inject(SbdBookingService);\n private toast = inject(SbdToastService);\n\n visible = input(false);\n bookingId = input('');\n product = input<ProductType>('flight');\n actions = input<ActionConfig[]>([]);\n initialKey = input<string | null>(null);\n // Pre-fetched booking data from the parent — avoids a redundant API call\n // when the action's apiField is already satisfied by the initial lookup.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n preloadedData = input<any | null>(null);\n closed = output<void>();\n\n selectedAction = signal<ActionConfig | null>(null);\n actionStatus = signal<'idle' | 'loading' | 'success' | 'error'>('idle');\n actionData = signal<unknown>(null);\n elapsedMs = signal(0);\n copying = signal(false);\n\n resultContent = computed<ResultContent | null>(() => {\n const a = this.selectedAction();\n const d = this.actionData();\n return a && d ? a.formatter(d) : null;\n });\n\n constructor() {\n effect(() => {\n if (this.visible()) {\n const key = this.initialKey();\n const action = key ? this.actions().find(a => a.key === key) ?? null : null;\n if (action) {\n this.onActionSelect(action);\n }\n } else {\n this.selectedAction.set(null);\n this.actionStatus.set('idle');\n this.actionData.set(null);\n this.elapsedMs.set(0);\n }\n }, { allowSignalWrites: true });\n }\n\n copyResult(mode: 'en' | 'ar' | 'both'): void {\n const enResult = this.resultContent();\n const action = this.selectedAction();\n if (!enResult || !action) return;\n\n if (mode === 'en') {\n const text = this.buildBilingualText(enResult, null);\n navigator.clipboard.writeText(text).then(() => this.toast.success('Copied EN'));\n return;\n }\n\n this.copying.set(true);\n\n const arData$ = action.apiField === '$refund_details'\n ? this.bookingService.getRefundDetails(this.bookingId(), this.product(), 'ar').pipe(\n map((data: unknown) => data), catchError(() => of(null)),\n )\n : this.bookingService.getBooking(this.bookingId(), this.product(), action.apiField, 'ar').pipe(\n map(({ data }) => data), catchError(() => of(null)),\n );\n\n arData$.subscribe(arRaw => {\n const arResult = arRaw ? action.formatter(arRaw) : null;\n const text = mode === 'ar'\n ? this.buildBilingualText(null, arResult)\n : this.buildBilingualText(enResult, arResult);\n const msg = mode === 'ar' ? 'Copied AR' : 'Copied EN + AR';\n navigator.clipboard.writeText(text)\n .then(() => this.toast.success(msg))\n .catch(() => this.toast.success('Copied to clipboard'))\n .finally(() => this.copying.set(false));\n });\n }\n\n private buildBilingualText(en: ResultContent | null, ar: ResultContent | null): string {\n const LTR = '‎';\n const RTL = '‏';\n const divider = `${LTR}${'─'.repeat(40)}`;\n\n const formatEn = (r: ResultContent): string[] => {\n const lines: string[] = [`${LTR}${r.title}`];\n if (r.subtitle) lines.push(`${LTR}${r.subtitle}`);\n lines.push('');\n if (r.sections?.length) {\n for (const s of r.sections) {\n lines.push(`${LTR}── ${s.title} ──`);\n for (const row of s.rows) {\n lines.push(row.value ? `${LTR}${row.label}: ${row.value}` : `${LTR}· ${row.label}`);\n }\n lines.push('');\n }\n } else if (r.points?.length) {\n for (const p of r.points) lines.push(`${LTR}${p.label}: ${p.value}`);\n }\n if (r.callout) lines.push(`${LTR}Note: ${r.callout.message}`);\n return lines;\n };\n\n const formatAr = (r: ResultContent): string[] => {\n const tl = (label: string) => AR_LABELS[label] ?? label;\n const ts = (title: string) => AR_SECTION_TITLES[title] ?? title;\n const lines: string[] = [`${RTL}${r.title}`];\n if (r.subtitle) lines.push(`${RTL}${r.subtitle}`);\n lines.push('');\n if (r.sections?.length) {\n for (const s of r.sections) {\n lines.push(`${RTL}── ${ts(s.title)} ──`);\n for (const row of s.rows) {\n lines.push(row.value ? `${RTL}${tl(row.label)}: ${row.value}` : `${RTL}· ${tl(row.label)}`);\n }\n lines.push('');\n }\n } else if (r.points?.length) {\n for (const p of r.points) lines.push(`${RTL}${tl(p.label)}: ${p.value}`);\n }\n if (r.callout) lines.push(`${RTL}ملاحظة: ${r.callout.message}`);\n return lines;\n };\n\n if (!en && ar) return formatAr(ar).join('\\r\\n');\n if (en && !ar) return formatEn(en).join('\\r\\n');\n return [...formatEn(en!), '', divider, '', ...formatAr(ar!)].join('\\r\\n');\n }\n\n onActionSelect(action: ActionConfig | null): void {\n if (!action) return;\n this.selectedAction.set(action);\n this.actionStatus.set('loading');\n this.actionData.set(null);\n\n // Use pre-fetched data when available and the action doesn't need its own\n // endpoint (i.e. not the special $refund_details POST).\n const cached = this.preloadedData();\n if (action.apiField !== '$refund_details' && cached) {\n this.actionData.set(cached);\n this.elapsedMs.set(0);\n this.actionStatus.set('success');\n return;\n }\n\n const start = performance.now();\n\n const source$ = action.apiField === '$refund_details'\n ? this.bookingService.getRefundDetails(this.bookingId(), this.product()).pipe(\n map((data: unknown) => ({ data, elapsedMs: performance.now() - start }))\n )\n : this.bookingService.getBooking(this.bookingId(), this.product(), action.apiField);\n\n source$.subscribe({\n next: ({ data, elapsedMs }) => {\n this.actionData.set(data);\n this.elapsedMs.set(elapsedMs);\n this.actionStatus.set('success');\n },\n error: () => {\n this.actionStatus.set('error');\n },\n });\n }\n}\n","<p-dialog\n [visible]=\"visible()\"\n (visibleChange)=\"$event ? null : closed.emit()\"\n [modal]=\"true\"\n [blockScroll]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '720px', maxHeight: '90vh' }\"\n styleClass=\"sbd-action-dialog-wrapper\"\n header=\"Browse Actions\">\n\n <div class=\"sad\">\n\n <!-- ng-select dropdown -->\n <div class=\"sad__picker\">\n <ng-select\n [items]=\"actions()\"\n [ngModel]=\"selectedAction()\"\n (change)=\"onActionSelect($event)\"\n [searchable]=\"true\"\n [clearable]=\"false\"\n bindLabel=\"label\"\n placeholder=\"Search actions...\"\n class=\"sad__select\">\n\n <!-- Selected value display -->\n <ng-template ng-label-tmp let-item=\"item\">\n <div class=\"sad__option\">\n <i class=\"{{ item.icon }} sad__option-icon\"></i>\n <div class=\"sad__option-text\">\n <span class=\"sad__option-label\">{{ item.label }}</span>\n <span class=\"sad__option-sub\">{{ item.subtitle }}</span>\n </div>\n </div>\n </ng-template>\n\n <!-- Dropdown list item -->\n <ng-template ng-option-tmp let-item=\"item\" let-search=\"searchTerm\">\n <div class=\"sad__option\">\n <i class=\"{{ item.icon }} sad__option-icon\"></i>\n <div class=\"sad__option-text\">\n <span class=\"sad__option-label\">{{ item.label }}</span>\n <span class=\"sad__option-sub\">{{ item.subtitle }}</span>\n </div>\n </div>\n </ng-template>\n\n </ng-select>\n </div>\n\n <!-- Result area -->\n <div class=\"sad__result\">\n <app-sbd-result-panel\n [actionLabel]=\"selectedAction()?.label ?? ''\"\n [elapsedMs]=\"elapsedMs()\"\n [status]=\"actionStatus()\"\n [result]=\"resultContent()\"\n />\n </div>\n\n </div>\n\n <ng-template pTemplate=\"footer\">\n <button pButton label=\"Copy EN\" icon=\"pi pi-copy\"\n class=\"p-button-outlined p-button-sm\"\n [disabled]=\"actionStatus() !== 'success' || copying()\"\n (click)=\"copyResult('en')\">\n </button>\n <button pButton label=\"Copy AR\" icon=\"pi pi-copy\"\n class=\"p-button-outlined p-button-sm\"\n [disabled]=\"actionStatus() !== 'success' || copying()\"\n (click)=\"copyResult('ar')\">\n </button>\n <button pButton label=\"Copy EN + AR\"\n [icon]=\"copying() ? 'pi pi-spin pi-spinner' : 'pi pi-copy'\"\n class=\"p-button-outlined p-button-sm\"\n [disabled]=\"actionStatus() !== 'success' || copying()\"\n (click)=\"copyResult('both')\">\n </button>\n <button pButton label=\"Close\" icon=\"pi pi-times\" class=\"p-button-outlined p-button-secondary p-button-sm\" (click)=\"closed.emit()\"></button>\n </ng-template>\n\n</p-dialog>\n","import { Component, input, output, inject, signal, effect } from '@angular/core';\nimport { DialogModule } from 'primeng/dialog';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\n\nimport { SbdBookingService } from '../../services/booking.service';\nimport { SbdToastService } from '../../services/toast.service';\nimport { ProductType } from '../../models/booking.types';\n\ntype NoteAction = 'GENERAL' | 'FEEDBACK' | 'REMARK';\n\n@Component({\n selector: 'app-sbd-add-note-dialog',\n standalone: true,\n imports: [DialogModule, ButtonModule, FormsModule, NgSelectModule],\n templateUrl: './add-note-dialog.component.html',\n styleUrl: './add-note-dialog.component.scss',\n})\nexport class SbdAddNoteDialogComponent {\n private bookingService = inject(SbdBookingService);\n private toast = inject(SbdToastService);\n\n visible = input(false);\n bookingId = input('');\n product = input<ProductType>('flight');\n closed = output<void>();\n\n message = signal('');\n action = signal<NoteAction>('GENERAL');\n submitting = signal(false);\n\n readonly actionOptions: { label: string; value: NoteAction; icon: string }[] = [\n { label: 'General', value: 'GENERAL', icon: 'pi pi-comment' },\n { label: 'Feedback', value: 'FEEDBACK', icon: 'pi pi-thumbs-up' },\n { label: 'Remark', value: 'REMARK', icon: 'pi pi-exclamation-circle' },\n ];\n\n constructor() {\n effect(() => {\n if (!this.visible()) this.reset();\n }, { allowSignalWrites: true });\n }\n\n submit(): void {\n const msg = this.message().trim();\n if (!msg) return;\n\n this.submitting.set(true);\n this.bookingService.addNote(this.bookingId(), this.product(), msg, this.action()).subscribe({\n next: () => {\n this.toast.success('Note added successfully');\n this.closed.emit();\n },\n error: () => {\n this.toast.error('Failed to add note. Please try again.');\n this.submitting.set(false);\n },\n });\n }\n\n private reset(): void {\n this.message.set('');\n this.action.set('GENERAL');\n this.submitting.set(false);\n }\n}\n","<p-dialog\n [visible]=\"visible()\"\n (visibleChange)=\"$event ? null : closed.emit()\"\n [modal]=\"true\"\n [blockScroll]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '480px' }\"\n styleClass=\"sbd-add-note-dialog-wrapper\"\n header=\"Add Note\">\n\n <div class=\"and\">\n\n <!-- Note type -->\n <div class=\"and__field\">\n <label class=\"and__label\">Note type</label>\n <div class=\"and__type-group\">\n @for (opt of actionOptions; track opt.value) {\n <button\n type=\"button\"\n class=\"and__type-btn\"\n [class.and__type-btn--active]=\"action() === opt.value\"\n (click)=\"action.set(opt.value)\">\n <i class=\"{{ opt.icon }}\"></i>\n {{ opt.label }}\n </button>\n }\n </div>\n </div>\n\n <!-- Message -->\n <div class=\"and__field\">\n <label class=\"and__label\">\n Message\n <span class=\"and__char-count\">{{ message().length }} / 1000</span>\n </label>\n <textarea\n class=\"and__textarea\"\n [ngModel]=\"message()\"\n (ngModelChange)=\"message.set($event)\"\n placeholder=\"Write your note here...\"\n rows=\"6\"\n maxlength=\"1000\"\n [disabled]=\"submitting()\">\n </textarea>\n </div>\n\n </div>\n\n <ng-template pTemplate=\"footer\">\n <button pButton label=\"Cancel\" icon=\"pi pi-times\"\n class=\"p-button-outlined p-button-secondary p-button-sm\"\n [disabled]=\"submitting()\"\n (click)=\"closed.emit()\">\n </button>\n <button pButton label=\"Submit Note\"\n [icon]=\"submitting() ? 'pi pi-spin pi-spinner' : 'pi pi-check'\"\n class=\"p-button-sm sbd-note-submit\"\n [disabled]=\"!message().trim() || submitting()\"\n (click)=\"submit()\">\n </button>\n </ng-template>\n\n</p-dialog>\n","import { Component, input, output, signal } from '@angular/core';\nimport { LowerCasePipe, NgIf } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\n\nimport { IHotelBookingData } from '../../../../models/booking.types';\nimport { SbdHotelItineraryCardComponent } from '../../../hotel-itinerary-card/hotel-itinerary-card.component';\nimport { SbdDataSearchComponent } from '../../../data-search/data-search.component';\n\n@Component({\n selector: 'app-sbd-hotel-content',\n standalone: true,\n imports: [\n SbdHotelItineraryCardComponent,\n SbdDataSearchComponent,\n LowerCasePipe,\n NgIf,\n ButtonModule,\n DialogModule,\n ],\n templateUrl: './hotel-content.component.html',\n styleUrl: './hotel-content.component.scss',\n})\nexport class SbdHotelContentComponent {\n // Inputs\n bookingData = input.required<IHotelBookingData | null>();\n bookingStatus = input.required<'idle' | 'loading' | 'success' | 'error'>();\n bookingId = input.required<string>();\n dataVerified = input.required<boolean>();\n bookingNotes = input.required<any[]>();\n bookingHistory = input.required<any[]>();\n historyGroups = input.required<any[]>();\n activeContextTab = input.required<'notes' | 'changes'>();\n\n // Outputs\n cancelBooking = output<void>();\n addNoteRequested = output<void>();\n contextTabChanged = output<'notes' | 'changes'>();\n\n // Dialog state\n detailDialogVisible = signal(false);\n selectedDetail = signal<{ title: string; data: any; type: string } | null>(null);\n\n fmtNoteDate(date: { sec: number; usec?: number }): string {\n if (!date?.sec) return '—';\n try {\n return new Date(date.sec * 1000).toLocaleString('en-GB', {\n day: '2-digit', month: 'short', year: 'numeric',\n hour: '2-digit', minute: '2-digit',\n });\n } catch { return '—'; }\n }\n\n formatField(field: string): string {\n return field\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/([a-z\\d])([A-Z])/g, '$1 $2')\n .trim();\n }\n\n fmtDate(dt: string): string {\n if (!dt) return '—';\n try {\n return new Date(dt).toLocaleString('en-GB', {\n day: '2-digit', month: 'short', hour: '2-digit', minute: '2-digit',\n });\n } catch { return dt; }\n }\n\n onCancelBooking(): void {\n this.cancelBooking.emit();\n }\n\n onAddNote(): void {\n this.addNoteRequested.emit();\n }\n\n onTabChange(tab: 'notes' | 'changes'): void {\n this.contextTabChanged.emit(tab);\n }\n\n formatDate(date: string | undefined): string {\n if (!date) return '—';\n try {\n return new Date(date).toLocaleDateString('en-GB', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n });\n } catch {\n return date;\n }\n }\n\n formatPrice(price: number | undefined): string {\n if (!price) return '—';\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'SAR',\n minimumFractionDigits: 2,\n }).format(price);\n }\n\n showDetailDialog(title: string, data: any, type: string): void {\n this.selectedDetail.set({ title, data, type });\n this.detailDialogVisible.set(true);\n }\n\n closeDetailDialog(): void {\n this.detailDialogVisible.set(false);\n this.selectedDetail.set(null);\n }\n\n showPackagesDetail(): void {\n const packages = this.bookingData()?.packages;\n if (packages && packages.length > 0) {\n this.showDetailDialog('Room Packages', packages, 'packages');\n }\n }\n\n formatDetailValue(value: any): string {\n if (value === null || value === undefined) return '—';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n if (typeof value === 'object') return JSON.stringify(value, null, 2);\n return String(value);\n }\n}\n","<!-- 2-column layout for hotels -->\n<div class=\"sbd-hotel-content\">\n\n <!-- Left: booking context -->\n <aside class=\"sbd-hotel-content__aside\">\n\n <!-- Data search at the top of the sidebar -->\n @if (bookingStatus() === 'success') {\n <app-sbd-data-search [data]=\"bookingData()\" />\n <app-sbd-hotel-itinerary-card [data]=\"bookingData()\" [verified]=\"dataVerified()\" />\n }\n\n <!-- Loading skeleton for aside -->\n @if (bookingStatus() === 'loading') {\n <div class=\"sbd-hotel-content__skeleton-card\">\n <div class=\"sbd-hotel-content__skeleton-row\" style=\"width:60%\"></div>\n <div class=\"sbd-hotel-content__skeleton-row\" style=\"width:40%\"></div>\n <div class=\"sbd-hotel-content__skeleton-row\" style=\"width:80%\"></div>\n <div class=\"sbd-hotel-content__skeleton-row\" style=\"width:50%\"></div>\n </div>\n }\n\n </aside>\n\n <!-- Right: agent workspace -->\n <main class=\"sbd-hotel-content__main\">\n\n <!-- Error state -->\n @if (bookingStatus() === 'error') {\n <div class=\"sbd-hotel-content__error\">\n <i class=\"pi pi-exclamation-circle\"></i>\n <span>Booking not found. Double-check the ID and product type, then try again.</span>\n </div>\n }\n\n <!-- Content once loaded -->\n @if (bookingStatus() === 'success') {\n\n <!-- Quick actions -->\n <div class=\"sbd-hotel-content__quick-actions\">\n <span class=\"sbd-hotel-content__quick-label\">Quick actions</span>\n <button\n pButton\n label=\"Cancel Booking\"\n icon=\"pi pi-times-circle\"\n class=\"p-button-danger p-button-sm\"\n (click)=\"onCancelBooking()\">\n </button>\n </div>\n\n <!-- Modern Data Overview Cards -->\n <div class=\"sbd-hotel-content__data-overview\">\n <h3 class=\"sbd-hotel-content__section-title\">Booking Overview</h3>\n\n <div class=\"sbd-hotel-content__data-grid\">\n <!-- Booking ID Card -->\n @if (bookingData()?.bookingId) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--blue\">\n <i class=\"pi pi-bookmark\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Booking ID</span>\n <span class=\"sbd-hotel-content__data-value\">{{ bookingData()?.bookingId }}</span>\n </div>\n </div>\n }\n\n <!-- Hotel Name Card -->\n @if (bookingData()?.hotelName) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--purple\">\n <i class=\"pi pi-building\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Hotel</span>\n <span class=\"sbd-hotel-content__data-value\">{{ bookingData()?.hotelName }}</span>\n </div>\n </div>\n }\n\n <!-- Check-in Date Card -->\n @if (bookingData()?.dateFrom) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--green\">\n <i class=\"pi pi-calendar-plus\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Check-in</span>\n <span class=\"sbd-hotel-content__data-value\">{{ formatDate(bookingData()?.dateFrom) }}</span>\n @if (bookingData()?.checkInTime) {\n <span class=\"sbd-hotel-content__data-subtext\">{{ bookingData()?.checkInTime }}</span>\n }\n </div>\n </div>\n }\n\n <!-- Check-out Date Card -->\n @if (bookingData()?.dateTo) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--orange\">\n <i class=\"pi pi-calendar-minus\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Check-out</span>\n <span class=\"sbd-hotel-content__data-value\">{{ formatDate(bookingData()?.dateTo) }}</span>\n @if (bookingData()?.checkOutTime) {\n <span class=\"sbd-hotel-content__data-subtext\">{{ bookingData()?.checkOutTime }}</span>\n }\n </div>\n </div>\n }\n\n <!-- Number of Nights Card -->\n @if (bookingData()?.numberOfNights) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--indigo\">\n <i class=\"pi pi-moon\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Duration</span>\n <span class=\"sbd-hotel-content__data-value\">{{ bookingData()?.numberOfNights }} Nights</span>\n </div>\n </div>\n }\n\n <!-- Number of Rooms Card -->\n @if (bookingData()?.rooms) {\n <div class=\"sbd-hotel-content__data-card sbd-hotel-content__data-card--clickable\" (click)=\"showPackagesDetail()\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--pink\">\n <i class=\"pi pi-home\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Rooms</span>\n <span class=\"sbd-hotel-content__data-value\">{{ bookingData()?.rooms }} Room{{ bookingData()?.rooms > 1 ? 's' : '' }}</span>\n @if (bookingData()?.packages && bookingData()?.packages.length > 0) {\n <span class=\"sbd-hotel-content__data-subtext\">Click for details</span>\n }\n </div>\n @if (bookingData()?.packages && bookingData()?.packages.length > 0) {\n <i class=\"pi pi-chevron-right sbd-hotel-content__data-arrow\"></i>\n }\n </div>\n }\n\n <!-- Price Card -->\n @if (bookingData()?.price) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--emerald\">\n <i class=\"pi pi-wallet\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Total Price</span>\n <span class=\"sbd-hotel-content__data-value\">{{ formatPrice(bookingData()?.price) }}</span>\n </div>\n </div>\n }\n\n <!-- Hotel ID Card -->\n @if (bookingData()?.hotelId) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--teal\">\n <i class=\"pi pi-id-card\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Hotel ID</span>\n <span class=\"sbd-hotel-content__data-value\">{{ bookingData()?.hotelId }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Context: Notes + Changes tabbed -->\n <div class=\"sbd-hotel-content__context\">\n\n <!-- Tab bar -->\n <div class=\"sbd-hotel-content__context-tabs\">\n <button class=\"sbd-hotel-content__context-tab\"\n [class.sbd-hotel-content__context-tab--active]=\"activeContextTab() === 'changes'\"\n (click)=\"onTabChange('changes')\">\n <i class=\"pi pi-history\"></i>\n Changes\n @if (bookingHistory().length > 0) {\n <span class=\"sbd-hotel-content__context-pill sbd-hotel-content__context-pill--changes\">{{ bookingHistory().length }}</span>\n }\n </button>\n <button class=\"sbd-hotel-content__context-tab\"\n [class.sbd-hotel-content__context-tab--active]=\"activeContextTab() === 'notes'\"\n (click)=\"onTabChange('notes')\">\n <i class=\"pi pi-comments\"></i>\n Notes\n <span class=\"sbd-hotel-content__context-pill sbd-hotel-content__context-pill--notes\">{{ bookingNotes().length }}</span>\n </button>\n @if (activeContextTab() === 'notes') {\n <button pButton label=\"Add Note\" icon=\"pi pi-plus\" class=\"p-button-sm p-button-outlined sbd-hotel-content__context-add\"\n (click)=\"onAddNote()\">\n </button>\n }\n </div>\n\n <!-- Notes tab -->\n @if (activeContextTab() === 'notes') {\n <div class=\"sbd-hotel-content__notes-list\">\n @if (bookingNotes().length === 0) {\n <div class=\"sbd-hotel-content__context-empty\">\n <i class=\"pi pi-inbox\"></i> No notes yet\n </div>\n }\n @for (note of bookingNotes(); track $index) {\n <div class=\"sbd-hotel-content__note\">\n <div class=\"sbd-hotel-content__note-top\">\n <span class=\"sbd-hotel-content__note-badge sbd-hotel-content__note-badge--{{ note.action | lowercase }}\">\n {{ note.action }}\n </span>\n <span class=\"sbd-hotel-content__note-author\">\n {{ note.writtenBy?.firstName }} {{ note.writtenBy?.lastName }}\n </span>\n <span class=\"sbd-hotel-content__note-date\">{{ fmtNoteDate(note.date) }}</span>\n </div>\n <p class=\"sbd-hotel-content__note-msg\">{{ note.message }}</p>\n </div>\n }\n </div>\n }\n\n <!-- Changes tab -->\n @if (activeContextTab() === 'changes') {\n <div class=\"sbd-hotel-content__changes-groups\">\n @if (historyGroups().length === 0) {\n <div class=\"sbd-hotel-content__context-empty\">\n <i class=\"pi pi-check\"></i> No changes recorded\n </div>\n }\n @for (group of historyGroups(); track group.changedAt) {\n <div class=\"sbd-hotel-content__changes-group\">\n <div class=\"sbd-hotel-content__changes-meta\">\n <i class=\"pi pi-user\"></i>\n <strong>{{ group.changedBy }}</strong>\n <span class=\"sbd-hotel-content__changes-sep\">·</span>\n <span>{{ fmtDate(group.changedAt) }}</span>\n </div>\n <table class=\"sbd-hotel-content__changes-table\">\n <thead>\n <tr>\n <th>Field</th>\n <th><i class=\"pi pi-times-circle\"></i> Before</th>\n <th><i class=\"pi pi-check-circle\"></i> After</th>\n </tr>\n </thead>\n <tbody>\n @for (entry of group.entries; track entry.field) {\n <tr>\n <td class=\"sbd-hotel-content__changes-field\">{{ formatField(entry.field) }}</td>\n <td class=\"sbd-hotel-content__changes-old\">{{ entry.from }}</td>\n <td class=\"sbd-hotel-content__changes-new\">{{ entry.to }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n </div>\n\n }\n\n <!-- Loading skeleton for main -->\n @if (bookingStatus() === 'loading') {\n <div class=\"sbd-hotel-content__skeleton-card\">\n <div class=\"sbd-hotel-content__skeleton-row\" style=\"width:40%\"></div>\n <div class=\"sbd-hotel-content__skeleton-row\" style=\"width:25%\"></div>\n </div>\n }\n\n </main>\n\n</div>\n\n<!-- Detail Dialog -->\n<p-dialog\n [(visible)]=\"detailDialogVisible\"\n [header]=\"selectedDetail()?.title || 'Details'\"\n [modal]=\"true\"\n [style]=\"{ width: '600px', maxWidth: '90vw' }\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n styleClass=\"sbd-hotel-content__detail-dialog\">\n\n @if (selectedDetail()?.type === 'packages' && selectedDetail()?.data) {\n <div class=\"sbd-hotel-content__packages-detail\">\n @for (pkg of selectedDetail()?.data; track $index) {\n <div class=\"sbd-hotel-content__package-card\">\n <div class=\"sbd-hotel-content__package-header\">\n <span class=\"sbd-hotel-content__package-title\">Package {{ $index + 1 }}</span>\n @if (pkg.isRefundable) {\n <span class=\"sbd-hotel-content__badge sbd-hotel-content__badge--success\">Refundable</span>\n } @else {\n <span class=\"sbd-hotel-content__badge sbd-hotel-content__badge--danger\">Non-Refundable</span>\n }\n </div>\n\n @if (pkg.supplier) {\n <div class=\"sbd-hotel-content__package-row\">\n <span class=\"sbd-hotel-content__package-label\">Supplier</span>\n <span class=\"sbd-hotel-content__package-value\">{{ pkg.supplier }}</span>\n </div>\n }\n\n @if (pkg.rooms && pkg.rooms.length > 0) {\n <div class=\"sbd-hotel-content__rooms-section\">\n <h4 class=\"sbd-hotel-content__subsection-title\">Rooms ({{ pkg.rooms.length }})</h4>\n @for (room of pkg.rooms; track room.roomId || $index) {\n <div class=\"sbd-hotel-content__room-item\">\n <div class=\"sbd-hotel-content__room-icon\">\n <i class=\"pi pi-home\"></i>\n </div>\n <div class=\"sbd-hotel-content__room-details\">\n @if (room.roomName) {\n <div class=\"sbd-hotel-content__room-name\">{{ room.roomName }}</div>\n }\n <div class=\"sbd-hotel-content__room-info\">\n @if (room.roomType) {\n <span class=\"sbd-hotel-content__room-tag\">{{ room.roomType }}</span>\n }\n @if (room.roomBasis) {\n <span class=\"sbd-hotel-content__room-tag\">{{ room.roomBasis }}</span>\n }\n @if (room.bedType) {\n <span class=\"sbd-hotel-content__room-tag\">{{ room.bedType }}</span>\n }\n </div>\n @if (room.adultsNum || room.childrenNum) {\n <div class=\"sbd-hotel-content__room-occupancy\">\n @if (room.adultsNum) {\n <span><i class=\"pi pi-user\"></i> {{ room.adultsNum }} Adult{{ room.adultsNum > 1 ? 's' : '' }}</span>\n }\n @if (room.childrenNum) {\n <span><i class=\"pi pi-users\"></i> {{ room.childrenNum }} Child{{ room.childrenNum > 1 ? 'ren' : '' }}</span>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n\n @if (pkg.refundableUntil) {\n <div class=\"sbd-hotel-content__package-row\">\n <span class=\"sbd-hotel-content__package-label\">Refundable Until</span>\n <span class=\"sbd-hotel-content__package-value\">{{ pkg.refundableUntil }}</span>\n </div>\n }\n </div>\n }\n </div>\n }\n</p-dialog>\n","import { Component, computed, inject, signal, HostListener } from '@angular/core';\nimport { LowerCasePipe, NgIf } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\n\n\nimport { SbdBookingService } from '../../services/booking.service';\nimport { SbdToastService } from '../../services/toast.service';\nimport { FLIGHT_ACTIONS } from '../../config/flight-actions.config';\nimport { HOTEL_ACTIONS } from '../../config/hotel-actions.config';\nimport { ProductType, IHotelBookingData, mapToHotelBookingData } from '../../models/booking.types';\n\nimport { SbdBookingInputComponent } from '../../components/booking-input/booking-input.component';\nimport { SbdWorkflowActionsComponent } from '../../components/workflow-actions/workflow-actions.component';\nimport { SbdActionGridComponent } from '../../components/action-grid/action-grid.component';\nimport { SbdCancelDialogComponent } from '../../components/cancel-dialog/cancel-dialog.component';\nimport { AlmatarHotelAutoCancellationComponent } from '../../components/hotel-cancel/almatar-hotel-auto-cancellation.component';\nimport { SbdFlightItineraryCardComponent } from '../../components/flight-itinerary-card/flight-itinerary-card.component';\nimport { SbdHotelItineraryCardComponent } from '../../components/hotel-itinerary-card/hotel-itinerary-card.component';\nimport { SbdDataSearchComponent } from '../../components/data-search/data-search.component';\nimport { SbdActionDialogComponent } from '../../components/action-dialog/action-dialog.component';\nimport { SbdAddNoteDialogComponent } from '../../components/add-note-dialog/add-note-dialog.component';\nimport { SbdHotelContentComponent } from '../../components/hotel-cancel/components/hotel-content/hotel-content.component';\n\n@Component({\n selector: 'app-smart-booking-dashboard',\n standalone: true,\n imports: [\n SbdBookingInputComponent,\n SbdWorkflowActionsComponent,\n SbdActionGridComponent,\n SbdCancelDialogComponent,\n AlmatarHotelAutoCancellationComponent,\n SbdFlightItineraryCardComponent,\n SbdHotelItineraryCardComponent,\n SbdDataSearchComponent,\n SbdActionDialogComponent,\n SbdAddNoteDialogComponent,\n SbdHotelContentComponent,\n LowerCasePipe,\n NgIf,\n ButtonModule,\n ],\n templateUrl: './smart-booking-dashboard.component.html',\n styleUrl: './smart-booking-dashboard.component.scss',\n})\nexport class SmartBookingDashboardComponent {\n private bookingService = inject(SbdBookingService);\n private toast = inject(SbdToastService);\n\n product = signal<ProductType>('flight');\n bookingId = signal('');\n\n bookingStatus = signal<'idle' | 'loading' | 'success' | 'error'>('idle');\n bookingData = signal<IHotelBookingData | any | null>(null);\n\n cancelDialogOpen = signal(false);\n hotelAutoCancelDialogOpen = signal(false);\n actionDialogOpen = signal(false);\n addNoteDialogOpen = signal(false);\n selectedActionKey = signal<string | null>(null);\n activeContextTab = signal<'notes' | 'changes'>('changes');\n\n availableActions = computed(() =>\n (this.product() === 'flight' ? FLIGHT_ACTIONS : HOTEL_ACTIONS).filter(a => !a.hidden)\n );\n\n // Handle both correct spelling (dataVerified) and BE typo (dataVerfied)\n dataVerified = computed(() => {\n const bi = this.bookingData()?.data?.booking_info;\n return bi?.dataVerified === true || bi?.dataVerfied === true;\n });\n\n // PNR list for the active booking, normalized to a flat array regardless of BE shape.\n cancelPnrInfo = computed<{ pnr?: string; LegDirectionality?: string }[]>(() => {\n const raw = this.bookingData()?.data?.booking_info?.pnr_info;\n if (Array.isArray(raw)) return raw;\n if (raw?.pnr) return [{ pnr: raw.pnr, LegDirectionality: 'Departure' }];\n return [];\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n bookingHistory = computed(() => (this.bookingData()?.data?.booking_info?.history ?? []) as any[]);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n bookingNotes = computed(() => (this.bookingData()?.data?.booking_info?.notes ?? []) as any[]);\n\n historyGroups = computed(() => {\n const groups = new Map<string, { changedBy: string; changedAt: string; entries: { field: string; from: string; to: string }[] }>();\n for (const e of this.bookingHistory()) {\n if (!groups.has(e.changedAt)) groups.set(e.changedAt, { changedBy: e.changedBy, changedAt: e.changedAt, entries: [] });\n const rawField = (e.field as string).split('.').pop() ?? e.field;\n groups.get(e.changedAt)!.entries.push({\n field: rawField.replace(/\\[.*?\\]/g, ''),\n from: e.previousValue,\n to: e.newValue,\n });\n }\n return [...groups.values()];\n });\n\n fmtNoteDate(date: { sec: number; usec?: number }): string {\n if (!date?.sec) return '—';\n try {\n return new Date(date.sec * 1000).toLocaleString('en-GB', {\n day: '2-digit', month: 'short', year: 'numeric',\n hour: '2-digit', minute: '2-digit',\n });\n } catch { return '—'; }\n }\n\n formatField(field: string): string {\n return field\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/([a-z\\d])([A-Z])/g, '$1 $2')\n .trim();\n }\n\n fmtDate(dt: string): string {\n if (!dt) return '—';\n try {\n return new Date(dt).toLocaleString('en-GB', {\n day: '2-digit', month: 'short', hour: '2-digit', minute: '2-digit',\n });\n } catch { return dt; }\n }\n\n openAction(key: string): void {\n this.selectedActionKey.set(key);\n this.actionDialogOpen.set(true);\n }\n\n @HostListener('document:keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if ((event.metaKey || event.ctrlKey) && event.key === 'k') {\n event.preventDefault();\n document.querySelector<HTMLInputElement>('.sbd-booking-input__field')?.focus();\n }\n }\n\n lookupBooking(): void {\n const id = this.bookingId().trim();\n if (!id) return;\n\n this.bookingStatus.set('loading');\n\n const fields = this.product() === 'hotel'\n ? ['booking_info', 'hotel_information', 'checkin_checkout', 'room_information']\n : 'booking_info';\n\n this.bookingService.getBooking(id, this.product(), fields).subscribe({\n next: ({ data }) => {\n // console.log('Booking data received:', data); \n if(this.product() === 'hotel'){\n const mappedData = mapToHotelBookingData(data);\n this.bookingData.set(mappedData);\n } else {\n this.bookingData.set(data);\n }\n this.bookingStatus.set('success');\n },\n error: () => {\n this.bookingStatus.set('error');\n this.bookingData.set(null);\n this.toast.error('Booking not found. Check the ID and try again.');\n },\n });\n }\n\n}\n","<div class=\"sbd-page\">\n\n <!-- Search bar full-width at top -->\n <div class=\"sbd-page__search\">\n <app-sbd-booking-input\n [(product)]=\"product\"\n [(bookingId)]=\"bookingId\"\n [loading]=\"bookingStatus() === 'loading'\"\n (lookup)=\"lookupBooking()\"\n />\n </div>\n\n <!-- Hotel: Use dedicated component -->\n @if (product() === 'hotel') {\n <app-sbd-hotel-content\n [bookingData]=\"bookingData()\"\n [bookingStatus]=\"bookingStatus()\"\n [bookingId]=\"bookingId()\"\n [dataVerified]=\"dataVerified()\"\n [bookingNotes]=\"bookingNotes()\"\n [bookingHistory]=\"bookingHistory()\"\n [historyGroups]=\"historyGroups()\"\n [activeContextTab]=\"activeContextTab()\"\n (cancelBooking)=\"cancelDialogOpen.set(true)\"\n (addNoteRequested)=\"addNoteDialogOpen.set(true)\"\n (contextTabChanged)=\"activeContextTab.set($event)\"\n />\n }\n\n <!-- Flight: Keep original 2-column layout -->\n @if (product() === 'flight') {\n <div class=\"sbd-page__content\">\n\n <!-- Left: booking context -->\n <aside class=\"sbd-page__aside\">\n\n <!-- Data search at the top of the sidebar -->\n @if (bookingStatus() === 'success') {\n <app-sbd-data-search [data]=\"bookingData()\" />\n <app-sbd-flight-itinerary-card [product]=\"product()\" [data]=\"bookingData()\" [verified]=\"dataVerified()\" />\n }\n\n <!-- Loading skeleton for aside -->\n @if (bookingStatus() === 'loading') {\n <div class=\"sbd-page__skeleton-card\">\n <div class=\"sbd-page__skeleton-row\" style=\"width:60%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:40%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:80%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:50%\"></div>\n </div>\n }\n\n </aside>\n\n <!-- Right: agent workspace -->\n <main class=\"sbd-page__main\">\n\n <!-- Error state -->\n @if (bookingStatus() === 'error') {\n <div class=\"sbd-page__error\">\n <i class=\"pi pi-exclamation-circle\"></i>\n <span>Booking not found. Double-check the ID and product type, then try again.</span>\n </div>\n }\n\n <!-- Content once loaded -->\n @if (bookingStatus() === 'success') {\n\n <!-- Quick actions -->\n <div class=\"sbd-page__quick-actions\">\n <span class=\"sbd-page__quick-label\">Quick actions</span>\n <app-sbd-workflow-actions\n [bookingId]=\"bookingId()\"\n (cancelBooking)=\"cancelDialogOpen.set(true)\"\n />\n </div>\n\n <!-- Action grid -->\n <app-sbd-action-grid\n [actions]=\"availableActions()\"\n [activeKey]=\"selectedActionKey()\"\n (actionSelected)=\"openAction($event)\"\n />\n\n <!-- Context: Notes + Changes tabbed -->\n <div class=\"sbd-page__context\">\n\n <!-- Tab bar -->\n <div class=\"sbd-page__context-tabs\">\n <button class=\"sbd-page__context-tab\"\n [class.sbd-page__context-tab--active]=\"activeContextTab() === 'changes'\"\n (click)=\"activeContextTab.set('changes')\">\n <i class=\"pi pi-history\"></i>\n Changes\n @if (bookingHistory().length > 0) {\n <span class=\"sbd-page__context-pill sbd-page__context-pill--changes\">{{ bookingHistory().length }}</span>\n }\n </button>\n <button class=\"sbd-page__context-tab\"\n [class.sbd-page__context-tab--active]=\"activeContextTab() === 'notes'\"\n (click)=\"activeContextTab.set('notes')\">\n <i class=\"pi pi-comments\"></i>\n Notes\n <span class=\"sbd-page__context-pill sbd-page__context-pill--notes\">{{ bookingNotes().length }}</span>\n </button>\n @if (activeContextTab() === 'notes') {\n <button pButton label=\"Add Note\" icon=\"pi pi-plus\" class=\"p-button-sm p-button-outlined sbd-page__context-add\"\n (click)=\"addNoteDialogOpen.set(true)\">\n </button>\n }\n </div>\n\n <!-- Notes tab -->\n @if (activeContextTab() === 'notes') {\n <div class=\"sbd-page__notes-list\">\n @if (bookingNotes().length === 0) {\n <div class=\"sbd-page__context-empty\">\n <i class=\"pi pi-inbox\"></i> No notes yet\n </div>\n }\n @for (note of bookingNotes(); track $index) {\n <div class=\"sbd-page__note\">\n <div class=\"sbd-page__note-top\">\n <span class=\"sbd-page__note-badge sbd-page__note-badge--{{ note.action | lowercase }}\">\n {{ note.action }}\n </span>\n <span class=\"sbd-page__note-author\">\n {{ note.writtenBy?.firstName }} {{ note.writtenBy?.lastName }}\n </span>\n <span class=\"sbd-page__note-date\">{{ fmtNoteDate(note.date) }}</span>\n </div>\n <p class=\"sbd-page__note-msg\">{{ note.message }}</p>\n </div>\n }\n </div>\n }\n\n <!-- Changes tab -->\n @if (activeContextTab() === 'changes') {\n <div class=\"sbd-page__changes-groups\">\n @if (historyGroups().length === 0) {\n <div class=\"sbd-page__context-empty\">\n <i class=\"pi pi-check\"></i> No changes recorded\n </div>\n }\n @for (group of historyGroups(); track group.changedAt) {\n <div class=\"sbd-page__changes-group\">\n <div class=\"sbd-page__changes-meta\">\n <i class=\"pi pi-user\"></i>\n <strong>{{ group.changedBy }}</strong>\n <span class=\"sbd-page__changes-sep\">·</span>\n <span>{{ fmtDate(group.changedAt) }}</span>\n </div>\n <table class=\"sbd-page__changes-table\">\n <thead>\n <tr>\n <th>Field</th>\n <th><i class=\"pi pi-times-circle\"></i> Before</th>\n <th><i class=\"pi pi-check-circle\"></i> After</th>\n </tr>\n </thead>\n <tbody>\n @for (entry of group.entries; track entry.field) {\n <tr>\n <td class=\"sbd-page__changes-field\">{{ formatField(entry.field) }}</td>\n <td class=\"sbd-page__changes-old\">{{ entry.from }}</td>\n <td class=\"sbd-page__changes-new\">{{ entry.to }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n </div>\n\n }\n\n <!-- Loading skeleton for main -->\n @if (bookingStatus() === 'loading') {\n <div class=\"sbd-page__skeleton-card\">\n <div class=\"sbd-page__skeleton-row\" style=\"width:40%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:25%\"></div>\n </div>\n }\n\n </main>\n\n </div>\n }\n\n</div>\n\n<app-sbd-cancel-dialog\n [visible]=\"cancelDialogOpen() && product() === 'flight'\"\n [bookingId]=\"bookingId()\"\n [product]=\"product()\"\n [pnrInfo]=\"cancelPnrInfo()\"\n [bookingInfo]=\"bookingData()\"\n (closed)=\"cancelDialogOpen.set(false)\"\n (confirmed)=\"bookingStatus.set('idle'); bookingData.set(null)\"\n/>\n\n<almatar-hotel-auto-cancellation\n *ngIf=\"cancelDialogOpen() && product() === 'hotel'\"\n [selectedHotelBooking]=\"bookingData()\"\n (closed)=\"cancelDialogOpen.set(false)\"\n (cancellationSuccess)=\"bookingStatus.set('idle'); bookingData.set(null)\"\n/>\n\n<app-sbd-action-dialog\n [visible]=\"actionDialogOpen()\"\n [bookingId]=\"bookingId()\"\n [product]=\"product()\"\n [actions]=\"availableActions()\"\n [initialKey]=\"selectedActionKey()\"\n [preloadedData]=\"bookingData()\"\n (closed)=\"actionDialogOpen.set(false)\"\n/>\n\n<app-sbd-add-note-dialog\n [visible]=\"addNoteDialogOpen()\"\n [bookingId]=\"bookingId()\"\n [product]=\"product()\"\n (closed)=\"addNoteDialogOpen.set(false)\"\n/>\n","import { Routes } from '@angular/router';\n\nexport const smartBookingDashboardRoutes: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('./pages/smart-booking-dashboard/smart-booking-dashboard.component').then(\n c => c.SmartBookingDashboardComponent\n ),\n },\n];\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { smartBookingDashboardRoutes } from './smart-booking-dashboard.routes';\n\n@NgModule({\n imports: [RouterModule.forChild(smartBookingDashboardRoutes)],\n})\nexport class SmartBookingDashboardModule {}\n","/*\n * Public API of the Smart Booking Dashboard.\n * Host apps should import only from this file.\n */\nexport { SmartBookingDashboardComponent } from './lib/pages/smart-booking-dashboard/smart-booking-dashboard.component';\nexport { smartBookingDashboardRoutes } from './lib/smart-booking-dashboard.routes';\nexport { SmartBookingDashboardModule } from './lib/smart-booking-dashboard.module';\nexport { SBD_CONFIG, SBD_DEFAULT_CONFIG, provideSmartBookingDashboard } from './lib/config/dashboard.config';\nexport type { SbdConfig } from './lib/config/dashboard.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["na","i4","i2","i1","PAYMENT_GATEWAY_LABELS","INSTALLMENT_GATEWAY_CODES","LOYALTY_GATEWAY_CODES","INTERNAL_GATEWAY_CODES","MADA_GATEWAY_CODES","i2.AsideBackButtonService","map","i1.AlmatarIconComponent","i2.ExchangeRoundPipe","catchError","i3","i5"],"mappings":"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"}
1
+ {"version":3,"file":"almatar-smart-booking-dashboard.mjs","sources":["../../../projects/smart-booking-dashboard/src/lib/config/dashboard.config.ts","../../../projects/smart-booking-dashboard/src/lib/services/booking.service.ts","../../../projects/smart-booking-dashboard/src/lib/services/toast.service.ts","../../../projects/smart-booking-dashboard/src/lib/config/flight-actions.config.ts","../../../projects/smart-booking-dashboard/src/lib/config/hotel-actions.config.ts","../../../projects/smart-booking-dashboard/src/lib/models/booking.types.ts","../../../projects/smart-booking-dashboard/src/lib/components/booking-input/booking-input.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/booking-input/booking-input.component.html","../../../projects/smart-booking-dashboard/src/lib/components/workflow-actions/workflow-actions.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/workflow-actions/workflow-actions.component.html","../../../projects/smart-booking-dashboard/src/lib/components/action-card/action-card.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/action-card/action-card.component.html","../../../projects/smart-booking-dashboard/src/lib/components/action-grid/action-grid.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/action-grid/action-grid.component.html","../../../projects/smart-booking-dashboard/src/lib/components/cancel-dialog/cancel-dialog.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/cancel-dialog/cancel-dialog.component.html","../../../projects/smart-booking-dashboard/src/lib/shared/environments/environment.ts","../../../projects/smart-booking-dashboard/src/lib/shared/enums/brand-enums.enum.ts","../../../projects/smart-booking-dashboard/src/lib/shared/services/shared.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/almatar-aside/aside-back-button.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/almatar-aside/aside.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/almatar-aside/aside.component.html","../../../projects/smart-booking-dashboard/src/lib/components/shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component.ts","../../../projects/smart-booking-dashboard/src/lib/shared/modules/loader/loader.module.ts","../../../projects/smart-booking-dashboard/src/lib/components/shared/services/hotel-manage-booking/hotel-manage-booking.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-step.enum.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.ts","../../../projects/smart-booking-dashboard/src/lib/shared/services/api.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-endpoints.enum.ts","../../../projects/smart-booking-dashboard/src/lib/shared/services/webengage-tracking.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.html","../../../projects/smart-booking-dashboard/src/lib/shared/services/translation.service.ts","../../../projects/smart-booking-dashboard/src/lib/shared/modules/almatar-icon/almatar-icon.module.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.html","../../../projects/smart-booking-dashboard/src/lib/shared/store/selectors/currency.selectors.ts","../../../projects/smart-booking-dashboard/src/lib/shared/pipes/exchange.pipe.ts","../../../projects/smart-booking-dashboard/src/lib/shared/components/currency-code-icon/currency-code-icon.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service.ts","../../../projects/smart-booking-dashboard/src/lib/components/shared/models/cancel-hotel-booking.model.ts","../../../projects/smart-booking-dashboard/src/lib/components/shared/enums/hotel-manage-booking-aside-tab.enum.ts","../../../projects/smart-booking-dashboard/src/lib/components/shared/components/confirm-modal/confirm-modal.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.html","../../../projects/smart-booking-dashboard/src/lib/components/shared/interfaces/i-flight-refund-details.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-result-overlay/almatar-hotel-auto-cancellation-result-overlay.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-result-overlay/almatar-hotel-auto-cancellation-result-overlay.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.html","../../../projects/smart-booking-dashboard/src/lib/components/flight-itinerary-card/flight-itinerary-card.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/flight-itinerary-card/flight-itinerary-card.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.html","../../../projects/smart-booking-dashboard/src/lib/components/data-search/data-search.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/data-search/data-search.component.html","../../../projects/smart-booking-dashboard/src/lib/config/labels.ar.ts","../../../projects/smart-booking-dashboard/src/lib/components/result-panel/result-panel.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/result-panel/result-panel.component.html","../../../projects/smart-booking-dashboard/src/lib/components/action-dialog/action-dialog.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/action-dialog/action-dialog.component.html","../../../projects/smart-booking-dashboard/src/lib/components/add-note-dialog/add-note-dialog.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/add-note-dialog/add-note-dialog.component.html","../../../projects/smart-booking-dashboard/src/lib/utils/reissue-url.builder.ts","../../../projects/smart-booking-dashboard/src/lib/services/reissue.service.ts","../../../projects/smart-booking-dashboard/src/lib/utils/reissue-format.ts","../../../projects/smart-booking-dashboard/src/lib/components/reissue-dialog/reissue.store.ts","../../../projects/smart-booking-dashboard/src/lib/components/reissue-dialog/reissue-upgrade.store.ts","../../../projects/smart-booking-dashboard/src/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/reissue-dialog/reissue-dialog.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/reissue-dialog/reissue-dialog.component.html","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.ts","../../../projects/smart-booking-dashboard/src/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.html","../../../projects/smart-booking-dashboard/src/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.ts","../../../projects/smart-booking-dashboard/src/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.html","../../../projects/smart-booking-dashboard/src/lib/smart-booking-dashboard.routes.ts","../../../projects/smart-booking-dashboard/src/lib/smart-booking-dashboard.module.ts","../../../projects/smart-booking-dashboard/src/public-api.ts","../../../projects/smart-booking-dashboard/src/almatar-smart-booking-dashboard.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport type { Observable } from 'rxjs';\n\n/** Query/hash parameters (name -> value) the host adds to the link that opens the consumer web, e.g. its auth token. */\nexport type SbdRedirectAuthParams = Record<string, string>;\n\n/**\n * Host-app configuration for the Smart Booking Dashboard.\n * Every field is optional; the defaults match the Almatar backoffice.\n */\nexport interface SbdConfig {\n /** Base URL of the backend API. Default: '/api' */\n apiBase: string;\n /** Value of the `platform` header sent with FCR requests. Default: 'BO' */\n platform: string;\n /**\n * Base URL of the consumer web app the Reissue search redirects to, INCLUDING the language/country\n * prefix the web requires, e.g. 'https://prelive-alpha.alm6ar.com/en/sa'. Without the prefix the web answers 404.\n */\n webBaseUrl: string;\n /**\n * Base of the customer payment page, WITHOUT the payment id, e.g. 'https://alpha3.alm6ar.com/en/payment'. The cart\n * returns the link as a path only (`/<paymentId>`); this base is put in front of it to get the URL the agent sends.\n * Not set (default) = a relative link is rejected instead of guessing a host.\n */\n paymentLinkBase?: string;\n /**\n * Auth parameters added to the web link that Change Date / Change Route open, so the web can call its APIs for the\n * agent. The host decides the names and the values, for example Backoffice `{ 'bo-token': token }` and Helix\n * `{ 'x-helix-token': token }`. It runs in an injection context (the host can `inject()` its auth service first) and\n * may return the object, a Promise or an Observable. Not set = nothing is added. If it fails, the web still opens\n * without the token.\n */\n redirectAuthParams?: () => SbdRedirectAuthParams | Promise<SbdRedirectAuthParams> | Observable<SbdRedirectAuthParams>;\n /** Where `redirectAuthParams` go in the URL: the query string (default) or the `#fragment` (not sent to servers). */\n redirectAuthIn?: 'query' | 'hash';\n /**\n * Show the Reissue button. Off by default so upgrading the package does not expose Reissue to agents before the host's\n * backend serves the Reissue APIs; the host turns it on when they are ready.\n */\n reissueEnabled: boolean;\n}\n\nexport const SBD_DEFAULT_CONFIG: SbdConfig = {\n apiBase: '/api',\n platform: 'BO',\n webBaseUrl: '',\n reissueEnabled: false,\n};\n\nexport const SBD_CONFIG = new InjectionToken<SbdConfig>('SBD_CONFIG', {\n providedIn: 'root',\n factory: () => SBD_DEFAULT_CONFIG,\n});\n\n/** Optional: call in the host app's providers to override the defaults. */\nexport function provideSmartBookingDashboard(config: Partial<SbdConfig> = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: SBD_CONFIG, useValue: { ...SBD_DEFAULT_CONFIG, ...config } },\n ]);\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { SBD_CONFIG } from '../config/dashboard.config';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ApiResponse = any;\n\n@Injectable({ providedIn: 'root' })\nexport class SbdBookingService {\n private http = inject(HttpClient);\n private config = inject(SBD_CONFIG);\n private base = this.config.apiBase;\n\n getBooking(\n id: string,\n product: 'flight' | 'hotel',\n fields: string | string[] = 'all',\n language: 'en' | 'ar' = 'en',\n ): Observable<{ data: ApiResponse; elapsedMs: number }> {\n const start = performance.now();\n const fieldsParam = Array.isArray(fields) ? fields.join(',') : fields;\n const productParam = product === 'flight' ? 'flights' : 'hotels';\n const headers: Record<string, string> = { platform: this.config.platform, 'Accept-Language': language };\n\n const params: Record<string, string> = { product: productParam, fields: fieldsParam };\n if (product === 'flight') {\n params['addAirlineStamp'] = 'true';\n }\n\n return this.http\n .get(`${this.base}/v1/fcr/booking/information/${id}`, {\n params,\n headers,\n })\n .pipe(map(data => ({ data, elapsedMs: performance.now() - start })));\n }\n\n resendTicket(id: string): Observable<ApiResponse> {\n return this.http.post(`${this.base}/v1/fcr/booking/${id}/resend`, {});\n }\n\n getRefundDetails(id: string, product: 'flight' | 'hotel' = 'flight', language: 'en' | 'ar' = 'en'): Observable<ApiResponse> {\n const productParam = product === 'flight' ? 'flights' : 'hotels';\n const headers: Record<string, string> = { platform: this.config.platform };\n if (language === 'ar') headers['Accept-Language'] = 'ar';\n return this.http.post(`${this.base}/v1/fcr/refund/details`, {\n bookingId: id,\n product: productParam,\n }, { headers });\n }\n\n addNote(\n id: string,\n product: 'flight' | 'hotel' = 'flight',\n message: string,\n action: 'GENERAL' | 'FEEDBACK' | 'REMARK' = 'GENERAL',\n ): Observable<ApiResponse> {\n const productParam = product === 'flight' ? 'flight' : 'hotel';\n return this.http.put(\n `${this.base}/v1/back-office/booking/${productParam}/addNote/${id}`,\n { notes: [{ message, action }] },\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n confirmCancel(\n id: string,\n product: 'flight' | 'hotel' = 'flight',\n legInfo?: string[],\n selectedSource?: string,\n preferredRefundMethod?: 'wallet' | 'originalPaymentMethod' | 'split',\n splitAmounts?: { walletRefundAmount: number; totalCardRefundAmount: number },\n ): Observable<ApiResponse> {\n const productParam = product === 'flight' ? 'flights' : 'hotels';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const body: any = { bookingId: String(id), product: productParam };\n if (legInfo && legInfo.length > 0) body.legInfo = legInfo;\n if (selectedSource) body.selectedSource = selectedSource;\n if (preferredRefundMethod) body.preferredRefundMethod = preferredRefundMethod;\n if (preferredRefundMethod === 'split' && splitAmounts) {\n body.walletRefundAmount = splitAmounts.walletRefundAmount;\n body.totalCardRefundAmount = splitAmounts.totalCardRefundAmount;\n }\n return this.http.post(`${this.base}/v1/fcr/refund`, body, { headers: { platform: this.config.platform } });\n }\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { ToastrService } from 'ngx-toastr';\n\n/**\n * How the dashboard shows messages. The backoffice uses ngx-toastr (the default); a host that has its own toast\n * system (e.g. Helix with PrimeNG's `MessageService`) provides this token and the dashboard uses it instead.\n */\nexport interface SbdToastHandler {\n success(message: string): void;\n error(message: string): void;\n info(message: string): void;\n warning(message: string): void;\n}\n\nexport const SBD_TOAST_HANDLER = new InjectionToken<SbdToastHandler>('SBD_TOAST_HANDLER');\n\n@Injectable({ providedIn: 'root' })\nexport class SbdToastService {\n // The host's handler wins; ngx-toastr is the fallback and is optional, so a host that never configured it still works.\n private handler: SbdToastHandler | null =\n inject(SBD_TOAST_HANDLER, { optional: true }) ?? inject(ToastrService, { optional: true });\n\n success(msg: string): void { this.show('success', msg); }\n error(msg: string): void { this.show('error', msg); }\n info(msg: string): void { this.show('info', msg); }\n warning(msg: string): void { this.show('warning', msg); }\n\n private show(kind: keyof SbdToastHandler, msg: string): void {\n if (this.handler) this.handler[kind](msg);\n else console.warn(`[smart-booking-dashboard] ${kind}: ${msg}`);\n }\n}\n","import { ActionConfig } from '../models/action.types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst na = (v: any): string =>\n v != null && v !== '' ? String(v) : 'Not available';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst bi = (data: any) => data?.data?.booking_info;\n\nconst fmtMins = (mins: number): string =>\n mins != null ? `${Math.floor(mins / 60)}h ${mins % 60}m` : 'Not available';\n\nconst fmtDate = (dt: string): string => {\n if (!dt) return 'Not available';\n try {\n return new Date(dt).toLocaleString('en-GB', {\n day: '2-digit', month: 'short', year: 'numeric',\n hour: '2-digit', minute: '2-digit',\n });\n } catch { return dt; }\n};\n\nconst dirIcon = (dir: string) => (dir === 'Return' || dir === 'return') ? '←' : '→';\n\n/**\n * Format a baggage allowance object (CabinBaggage / CheckedBaggage / UnderSeatBaggage).\n * Negative values (-1) indicate the allowance is not applicable.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst fmtBag = (bag: any): string => {\n if (!bag) return 'Not included';\n const { Pieces, Weight, Unit, Dimension, Remark } = bag;\n // Negative Pieces = not applicable (e.g. Pieces: -1, Weight: -1)\n if (Pieces != null && Pieces < 0 && (Weight == null || Weight < 0)) return 'Not included';\n // Zero across the board = not included\n if (Pieces === 0 && (Weight === 0 || Weight == null)) return 'Not included';\n const parts: string[] = [];\n if (Pieces != null && Pieces > 0) parts.push(`${Pieces} pc${Pieces > 1 ? 's' : ''}`);\n if (Weight != null && Weight > 0) parts.push(`${Weight} ${Unit ?? 'KG'}`);\n if (Dimension) parts.push(Dimension);\n if (Remark) parts.push(Remark);\n return parts.length > 0 ? parts.join(' · ') : 'Not available';\n};\n\n/**\n * Resolve pnr_info to a flat array regardless of shape.\n * New BE format: [{pnr, LegDirectionality}, ...]\n * Legacy format: {pnr: '...'} or null\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst resolvePnrList = (pnrRaw: any): any[] => {\n if (Array.isArray(pnrRaw)) return pnrRaw;\n if (pnrRaw?.pnr) return [{ pnr: pnrRaw.pnr, LegDirectionality: 'Departure' }];\n return [];\n};\n\nexport const FLIGHT_ACTIONS: ActionConfig[] = [\n // ── Booking Overview ──────────────────────────────────────────────────────\n {\n key: 'booking_info',\n type: 'flight',\n label: 'Booking Overview',\n subtitle: 'Route · Class · Fare',\n icon: 'pi pi-file',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legs: any[] = d?.leg_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const airlines: any[] = d?.airline_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const passengers: any[] = d?.passenger_info?.passengers ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const baggage: any = d?.baggage;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dur: any = d?.duration;\n const ps = d?.payment_status;\n const cp = d?.cancellation_policy;\n const pnrList = resolvePnrList(d?.pnr_info);\n const pnrDep = pnrList.find((p: any) => p.LegDirectionality === 'Departure')?.pnr ?? pnrList[0]?.pnr;\n const pnrRet = pnrList.find((p: any) => p.LegDirectionality === 'Return')?.pnr;\n const origin = legs[0]?.LegDepartureAirportCode;\n const dest = legs[legs.length - 1]?.LegArrivalAirportCode;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sections: any[] = [];\n\n // ── Booking Reference ────────────────────────────────────────────────\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const refRows: any[] = [];\n if (pnrList.length > 1) {\n pnrList.forEach((p: any) => refRows.push({ label: `PNR (${p.LegDirectionality})`, value: na(p.pnr) }));\n } else {\n refRows.push({ label: 'PNR', value: na(pnrDep) });\n }\n refRows.push(\n { label: 'Booking ID', value: na(cp?.bookingId) },\n { label: 'Supplier ref', value: na(cp?.supplierBookingId) },\n { label: 'Supplier', value: na(cp?.supplierName ?? legs[0]?.supplierName) },\n );\n sections.push({ title: 'Booking Reference', rows: refRows });\n\n // ── Per-leg sections ─────────────────────────────────────────────────\n legs.forEach((l, i) => {\n const dir = l.LegDirectionality ?? '';\n const from = l.LegDepartureAirportCode;\n const to = l.LegArrivalAirportCode;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const segs: any[] = airlines[i]?.Segments ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durSegs: any[] = dur?.legs?.[i]?.Segments ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const stops: any[] = l.Stops ?? [];\n const legDurMins = durSegs.reduce((sum: number, s: any) => sum + (s.SegmentElapsedTimeMinutes ?? 0), 0);\n const flightNos = segs.map((s: any) => `${s.AirlineCode}${s.FlightNumber}`).filter(Boolean).join(', ');\n\n sections.push({\n title: `${dirIcon(dir)} ${dir || `Leg ${i + 1}`} · ${from} → ${to}`,\n rows: [\n { label: 'Departure', value: fmtDate(l.LegDepartureDateTime) },\n { label: 'Arrival', value: fmtDate(l.LegArrivalDateTime) },\n { label: 'Duration', value: legDurMins > 0 ? fmtMins(legDurMins) : na(null) },\n { label: 'Airline(s)', value: na(l.LegAirlinesNames?.join(', ')) },\n { label: 'Flight no.', value: na(flightNos) },\n { label: 'Cabin', value: na(l.LegCabins?.[0]?.Name) },\n { label: 'Fare brand', value: na(l.fareBrand?.name) },\n {\n label: 'Stops',\n value: stops.length === 0\n ? 'Non-stop'\n : stops.map((s: any) => `${s.StopAirportCity ?? s.StopAirport} (${fmtMins(s.LayoverDuration)})`).join(', '),\n },\n ],\n });\n });\n\n // ── Passengers ───────────────────────────────────────────────────────\n const paxTypeLabel: Record<string, string> = { ADT: 'Adult', CNN: 'Child', INF: 'Infant' };\n passengers.forEach((p, i) => {\n const fullName = [p?.name?.prefix, p?.name?.givenName, p?.name?.surName].filter(Boolean).join(' ');\n const phone = p?.phone ?? (p?.contactNumber?.phoneNumber\n ? `${p.contactNumber.countryCode ?? ''}${p.contactNumber.phoneNumber}` : null);\n sections.push({\n title: `Passenger ${i + 1} · ${fullName || na(null)}`,\n rows: [\n { label: 'Type', value: na(paxTypeLabel[p?.type] ?? p?.type) },\n { label: 'Gender', value: na(p?.gender) },\n { label: 'Date of birth', value: na(p?.dateOfBirth) },\n { label: 'Passport', value: na(p?.identity?.number) },\n { label: 'Nationality', value: na(p?.identity?.nationality) },\n { label: 'Passport exp.', value: na(p?.identity?.expirationDate) },\n { label: 'Issue country', value: na(p?.identity?.issueCountry) },\n { label: 'Doc type', value: na(p?.identity?.type) },\n { label: 'Email', value: na(p?.email) },\n { label: 'Phone', value: na(phone) },\n ],\n });\n });\n\n // ── Payment ──────────────────────────────────────────────────────────\n if (ps) {\n const statusName = ps?.status?.name ?? ps?.status?.key;\n const paid = ps?.amountInPaidCurrency != null && ps?.paidCurrency\n ? `${ps.amountInPaidCurrency} ${ps.paidCurrency}` : null;\n sections.push({\n title: 'Payment',\n rows: [\n { label: 'Status', value: na(statusName) },\n { label: 'Amount', value: ps?.amount != null ? `${ps.amount} ${na(ps.currency)}` : 'Not available' },\n { label: 'Paid amount', value: na(paid) },\n { label: 'Payment method', value: na(ps?.method) },\n { label: 'Date', value: fmtDate(ps?.date) },\n ],\n });\n }\n\n // ── Baggage per route (full detail) ──────────────────────────────────\n const baggageInfo: any[] = baggage?.baggage_info ?? [];\n baggageInfo.forEach((entry: any) => {\n const route = Object.keys(entry)[0];\n if (!route) return;\n const paxTypes = entry[route] ?? {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rows: any[] = [];\n Object.entries(paxTypes).forEach(([paxType, pd]: [string, any]) => {\n const label = paxType === 'ADT' ? 'Adult' : paxType === 'CNN' ? 'Child' : paxType === 'INF' ? 'Infant' : paxType;\n const cabin = pd.CabinBaggage;\n const checked = pd.CheckedBaggage;\n const underSeat = pd.UnderSeatBaggage;\n rows.push(\n { label: `${label} · Cabin`, value: fmtBag(cabin) },\n { label: `${label} · Checked`, value: fmtBag(checked) },\n );\n if (underSeat) rows.push({ label: `${label} · Under Seat`, value: fmtBag(underSeat) });\n });\n sections.push({ title: `Baggage · ${route}`, rows });\n });\n\n // ── Terminal Info summary ────────────────────────────────────────────\n const terminalData: any[] = d?.terminal ?? [];\n terminalData.forEach((tl: any, li: number) => {\n const legMeta = legs[li];\n const legLabel = legMeta\n ? `Terminal · ${legMeta.LegDepartureAirportCode} → ${legMeta.LegArrivalAirportCode}`\n : `Terminal · Leg ${li + 1}`;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const termRows: any[] = [];\n (tl.Segments ?? []).forEach((s: any, si: number) => {\n const airlineSeg = airlines[li]?.Segments?.[si];\n const flightNo = airlineSeg ? `${airlineSeg.AirlineCode}${airlineSeg.FlightNumber}` : `Seg ${si + 1}`;\n const depTerm = s.DepartureAirportTerminalID ? `T${s.DepartureAirportTerminalID}` : '—';\n const arrTerm = s.ArrivalAirportTerminalID ? `T${s.ArrivalAirportTerminalID}` : '—';\n termRows.push({\n label: flightNo,\n value: `${na(s.DepartureAirportCode)} ${depTerm} → ${na(s.ArrivalAirportCode)} ${arrTerm}`,\n });\n });\n if (termRows.length > 0) sections.push({ title: legLabel, rows: termRows });\n });\n\n // ── Cancellation Policy summary ──────────────────────────────────────\n const cpLegs: any[] = cp?.legs ?? [];\n cpLegs.forEach((leg: any) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cpRows: any[] = [];\n (leg.passengerPenalties ?? []).forEach((pp: any) => {\n const typeLabel = pp.type === 'ADT' ? 'Adult' : pp.type === 'CNN' ? 'Child' : 'Infant';\n const bDep = pp.penalties?.beforeDeparture;\n const refund = bDep?.refund;\n const exchange = bDep?.exchange;\n const refundStr = refund?.isActionable ? `Refund: ${refund.fee} ${refund.currency}` : 'No refund';\n const exchangeStr = exchange?.isActionable ? `Exchange: ${exchange.fee} ${exchange.currency}` : 'No exchange';\n cpRows.push({ label: typeLabel, value: `${refundStr} · ${exchangeStr}` });\n });\n if (cpRows.length > 0) {\n sections.push({\n title: `Cancellation and Change Policy · ${leg.direction} (${leg.from} → ${leg.to})`,\n rows: cpRows,\n });\n }\n });\n\n return {\n title: origin ? `${origin} → ${dest}` : 'Flight Booking',\n subtitle: pnrDep\n ? `PNR: ${pnrDep}${pnrRet ? ' / ' + pnrRet : ''} · ${legs.length} leg${legs.length !== 1 ? 's' : ''} · ${passengers.length} pax`\n : `${legs.length} leg${legs.length !== 1 ? 's' : ''} · ${passengers.length} pax`,\n sections,\n };\n },\n },\n\n // ── Terminal Info ─────────────────────────────────────────────────────────\n {\n key: 'terminal',\n type: 'flight',\n label: 'Terminal Info',\n subtitle: 'Gate · Check-in',\n icon: 'pi pi-send',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const terminalLegs: any[] = d?.terminal ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legInfos: any[] = d?.leg_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const airlines: any[] = d?.airline_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sections: any[] = [];\n\n terminalLegs.forEach((tl, li) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const segs: any[] = tl.Segments ?? [];\n const legMeta = legInfos[li];\n const legLabel = legMeta\n ? `${dirIcon(legMeta.LegDirectionality)} ${legMeta.LegDepartureAirportCode} → ${legMeta.LegArrivalAirportCode}`\n : `Leg ${li + 1}`;\n // Leg-level times as fallback when segment-level times are absent\n const legDepTime = legMeta?.LegDepartureDateTime;\n const legArrTime = legMeta?.LegArrivalDateTime;\n\n segs.forEach((s, si) => {\n const airlineSeg = airlines[li]?.Segments?.[si];\n // Resolve flight number: terminal seg → airline_info seg\n const flightNo = s.FlightNumber\n ? `${s.AirlineCode ?? ''}${s.FlightNumber}`\n : airlineSeg ? `${airlineSeg.AirlineCode}${airlineSeg.FlightNumber}` : null;\n // Resolve times: terminal seg → airline_info seg → leg-level fallback\n const depTime = s.DepartureDateTime\n ?? airlineSeg?.DepartureDateTime\n ?? (si === 0 ? legDepTime : null);\n const arrTime = s.ArrivalDateTime\n ?? airlineSeg?.ArrivalDateTime\n ?? (si === segs.length - 1 ? legArrTime : null);\n\n sections.push({\n title: `${legLabel} · ${flightNo ?? `Seg ${si + 1}`}`,\n rows: [\n { label: 'Departure airport', value: s.DepartureAirportName ? `${s.DepartureAirportName} (${s.DepartureAirportCode})` : na(s.DepartureAirportCode) },\n { label: 'Dep. terminal', value: na(s.DepartureAirportTerminalID) },\n { label: 'Arrival airport', value: s.ArrivalAirportName ? `${s.ArrivalAirportName} (${s.ArrivalAirportCode})` : na(s.ArrivalAirportCode) },\n { label: 'Arr. terminal', value: na(s.ArrivalAirportTerminalID) },\n { label: 'Flight', value: na(flightNo) },\n { label: 'Departure time', value: fmtDate(depTime) },\n { label: 'Arrival time', value: fmtDate(arrTime) },\n ],\n });\n });\n });\n\n const totalSegs = sections.length;\n return {\n title: 'Terminal Details',\n subtitle: `${totalSegs} segment${totalSegs !== 1 ? 's' : ''}`,\n sections: sections.length\n ? sections\n : [{ title: 'Info', rows: [{ label: 'Status', value: 'No terminal data available' }] }],\n };\n },\n },\n\n // ── Payment Status ────────────────────────────────────────────────────────\n {\n key: 'payment_status',\n type: 'flight',\n hidden: true,\n label: 'Payment Status',\n subtitle: 'Charges · Receipt',\n icon: 'pi pi-credit-card',\n apiField: 'booking_info',\n formatter: (data) => {\n const ps = bi(data)?.payment_status;\n const statusName = ps?.status?.name ?? ps?.status?.key;\n const paid = ps?.amountInPaidCurrency != null && ps?.paidCurrency\n ? `${ps.amountInPaidCurrency} ${ps.paidCurrency}` : null;\n const isSuccess = ps?.status?.key === 'SUCCESS';\n return {\n title: 'Payment Details',\n subtitle: na(statusName),\n sections: [\n {\n title: 'Transaction',\n rows: [\n { label: 'Status', value: na(statusName), valueClass: isSuccess ? 'positive' : 'neutral' },\n { label: 'Amount', value: ps?.amount != null ? `${ps.amount} ${na(ps.currency)}` : 'Not available' },\n { label: 'Paid amount', value: na(paid) },\n { label: 'Payment method', value: na(ps?.method) },\n { label: 'Transaction ref', value: na(ps?.transactionRef ?? ps?.reference) },\n { label: 'Date', value: fmtDate(ps?.date) },\n { label: 'Currency', value: na(ps?.currency) },\n ],\n },\n ],\n };\n },\n },\n\n // ── Passenger Info ────────────────────────────────────────────────────────\n {\n key: 'passenger_info',\n type: 'flight',\n hidden: true,\n label: 'Passenger Info',\n subtitle: 'Names · Docs',\n icon: 'pi pi-users',\n apiField: 'booking_info',\n formatter: (data) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const passengers: any[] = bi(data)?.passenger_info?.passengers ?? [];\n const typeLabel: Record<string, string> = { ADT: 'Adult', CNN: 'Child', INF: 'Infant' };\n return {\n title: 'Passenger Details',\n subtitle: `${passengers.length} traveller${passengers.length !== 1 ? 's' : ''}`,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sections: passengers.map((p: any, i: number) => {\n const fullName = [p?.name?.prefix, p?.name?.givenName, p?.name?.surName].filter(Boolean).join(' ');\n const phone = p?.phone ?? (p?.contactNumber?.phoneNumber\n ? `${p.contactNumber.countryCode ?? ''}${p.contactNumber.phoneNumber}` : null);\n return {\n title: `Passenger ${i + 1} · ${fullName || na(null)}`,\n rows: [\n { label: 'Type', value: na(typeLabel[p?.type] ?? p?.type) },\n { label: 'Gender', value: na(p?.gender) },\n { label: 'Date of birth', value: na(p?.dateOfBirth) },\n { label: 'Passport', value: na(p?.identity?.number) },\n { label: 'Nationality', value: na(p?.identity?.nationality) },\n { label: 'Passport exp.', value: na(p?.identity?.expirationDate) },\n { label: 'Issue country', value: na(p?.identity?.issueCountry) },\n { label: 'Doc type', value: na(p?.identity?.type) },\n { label: 'Email', value: na(p?.email) },\n { label: 'Phone', value: na(phone) },\n ],\n };\n }),\n };\n },\n },\n\n // ── Passenger Count ───────────────────────────────────────────────────────\n {\n key: 'passenger_count',\n type: 'flight',\n hidden: true,\n label: 'Passenger Count',\n subtitle: 'Adults · Children · Infants',\n icon: 'pi pi-users',\n apiField: 'booking_info',\n formatter: (data) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const passengers: any[] = bi(data)?.passenger_info?.passengers ?? [];\n const adults = passengers.filter(p => p?.type === 'ADT');\n const children = passengers.filter(p => p?.type === 'CNN');\n const infants = passengers.filter(p => p?.type === 'INF');\n return {\n title: 'Traveller Breakdown',\n subtitle: `${passengers.length} total`,\n sections: [\n {\n title: 'Summary',\n rows: [\n { label: 'Total', value: String(passengers.length) },\n { label: 'Adults (ADT)', value: String(adults.length) },\n { label: 'Children (CNN)', value: String(children.length) },\n { label: 'Infants (INF)', value: String(infants.length) },\n ],\n },\n ...adults.map((p, i) => ({\n title: `Adult ${i + 1} · ${[p?.name?.prefix, p?.name?.givenName, p?.name?.surName].filter(Boolean).join(' ') || 'N/A'}`,\n rows: [\n { label: 'Passport', value: na(p?.identity?.number) },\n { label: 'Email', value: na(p?.email) },\n ],\n })),\n ...children.map((p, i) => ({\n title: `Child ${i + 1} · ${[p?.name?.prefix, p?.name?.givenName, p?.name?.surName].filter(Boolean).join(' ') || 'N/A'}`,\n rows: [\n { label: 'Passport', value: na(p?.identity?.number) },\n { label: 'DOB', value: na(p?.dateOfBirth) },\n ],\n })),\n ...infants.map((p, i) => ({\n title: `Infant ${i + 1} · ${[p?.name?.prefix, p?.name?.givenName, p?.name?.surName].filter(Boolean).join(' ') || 'N/A'}`,\n rows: [\n { label: 'DOB', value: na(p?.dateOfBirth) },\n ],\n })),\n ],\n };\n },\n },\n\n // ── Airline Info ──────────────────────────────────────────────────────────\n {\n key: 'airline_info',\n type: 'flight',\n hidden: true,\n label: 'Airline Info',\n subtitle: 'Carrier · Flight no.',\n icon: 'pi pi-send',\n apiField: 'booking_info',\n formatter: (data) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const airlines: any[] = bi(data)?.airline_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legInfos: any[] = bi(data)?.leg_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durLegs: any[] = bi(data)?.duration?.legs ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sections: any[] = [];\n\n airlines.forEach((a, li) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const segs: any[] = a.Segments ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durSegs: any[] = durLegs[li]?.Segments ?? [];\n const legMeta = legInfos[li];\n const legLabel = legMeta\n ? `${dirIcon(legMeta.LegDirectionality)} ${legMeta.LegDepartureAirportCode} → ${legMeta.LegArrivalAirportCode}`\n : `Leg ${li + 1}`;\n // Leg-level times as fallback for first/last segment\n const legDepTime = legMeta?.LegDepartureDateTime;\n const legArrTime = legMeta?.LegArrivalDateTime;\n\n segs.forEach((s, si) => {\n // Use segment-level times if available, fall back to leg times\n const depTime = s.DepartureDateTime ?? (si === 0 ? legDepTime : null);\n const arrTime = s.ArrivalDateTime ?? (si === segs.length - 1 ? legArrTime : null);\n\n sections.push({\n title: `${legLabel} · ${s.AirlineCode}${s.FlightNumber} (Seg ${si + 1})`,\n rows: [\n { label: 'Airline', value: na(s.AirlineName) },\n { label: 'IATA code', value: na(s.AirlineCode) },\n { label: 'Flight no.', value: s.FlightNumber ? `${s.AirlineCode}${s.FlightNumber}` : 'Not available' },\n { label: 'Route', value: `${na(s.DepartureAirportCode)} → ${na(s.ArrivalAirportCode)}` },\n { label: 'Departure', value: fmtDate(depTime) },\n { label: 'Arrival', value: fmtDate(arrTime) },\n { label: 'Duration', value: durSegs[si]?.SegmentElapsedTimeMinutes ? fmtMins(durSegs[si].SegmentElapsedTimeMinutes) : 'Not available' },\n { label: 'Aircraft', value: na(s.AircraftType ?? s.Equipment) },\n { label: 'Operating code', value: na(s.OperatingAirlineCode) },\n ],\n });\n });\n });\n\n const totalSegs = sections.length;\n return {\n title: airlines[0]?.Segments?.[0]?.AirlineName ?? 'Airline Info',\n subtitle: `${totalSegs} segment${totalSegs !== 1 ? 's' : ''}`,\n sections,\n };\n },\n },\n\n // ── Leg Info ──────────────────────────────────────────────────────────────\n {\n key: 'leg_info',\n type: 'flight',\n hidden: true,\n label: 'Leg Info',\n subtitle: 'Route · Stops · Cabin',\n icon: 'pi pi-map-marker',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legs: any[] = d?.leg_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const airlines: any[] = d?.airline_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durLegs: any[] = d?.duration?.legs ?? [];\n\n return {\n title: 'Flight Legs',\n subtitle: `${legs.length} leg${legs.length !== 1 ? 's' : ''}`,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sections: legs.map((l: any, i: number) => {\n const dir = l.LegDirectionality ?? '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const stops: any[] = l.Stops ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const segs: any[] = airlines[i]?.Segments ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durSegs: any[] = durLegs[i]?.Segments ?? [];\n const legDurMins = durSegs.reduce((sum: number, s: any) => sum + (s.SegmentElapsedTimeMinutes ?? 0), 0);\n const flightNos = segs.map((s: any) => `${s.AirlineCode}${s.FlightNumber}`).filter(Boolean).join(', ');\n\n return {\n title: `${dirIcon(dir)} ${dir || `Leg ${i + 1}`} · ${l.LegDepartureAirportCode} → ${l.LegArrivalAirportCode}`,\n rows: [\n { label: 'Direction', value: na(dir) },\n { label: 'Departure', value: fmtDate(l.LegDepartureDateTime) },\n { label: 'Arrival', value: fmtDate(l.LegArrivalDateTime) },\n { label: 'Duration', value: legDurMins > 0 ? fmtMins(legDurMins) : na(null) },\n { label: 'Airline(s)', value: na(l.LegAirlinesNames?.join(', ')) },\n { label: 'Flight no.', value: na(flightNos) },\n { label: 'Cabin', value: na(l.LegCabins?.[0]?.Name) },\n { label: 'Fare brand', value: na(l.fareBrand?.name) },\n { label: 'Supplier', value: na(l.supplierName) },\n {\n label: 'Stops',\n value: stops.length === 0\n ? 'Non-stop'\n : stops.map((s: any) =>\n `${s.StopAirportCity ?? s.StopAirport} (${na(s.StopAirport)}) – ${fmtMins(s.LayoverDuration)} layover`\n ).join(' · '),\n },\n ],\n };\n }),\n };\n },\n },\n\n // ── PNR Info ──────────────────────────────────────────────────────────────\n {\n key: 'pnr_info',\n type: 'flight',\n label: 'PNR Info',\n subtitle: 'PNR · Booking ref',\n icon: 'pi pi-tag',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n const pnrList = resolvePnrList(d?.pnr_info);\n const pnrDep = pnrList.find((p: any) => p.LegDirectionality === 'Departure')?.pnr ?? pnrList[0]?.pnr;\n const pnrRet = pnrList.find((p: any) => p.LegDirectionality === 'Return')?.pnr;\n const cp = d?.cancellation_policy;\n const isCrossSeller = pnrList.length > 1\n || cp?.supplierName?.toLowerCase().includes('cross')\n || false;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const pnrRows: any[] = [];\n if (pnrList.length > 1) {\n pnrList.forEach((p: any) => {\n pnrRows.push({ label: `PNR (${p.LegDirectionality})`, value: na(p.pnr) });\n });\n } else {\n pnrRows.push({ label: 'PNR', value: na(pnrDep) });\n }\n pnrRows.push(\n { label: 'Booking ID', value: na(cp?.bookingId) },\n { label: 'Supplier ref', value: na(cp?.supplierBookingId) },\n { label: 'Supplier', value: na(cp?.supplierName) },\n { label: 'Cross-seller', value: isCrossSeller ? 'Yes' : 'No' },\n );\n\n return {\n title: pnrDep ? `PNR: ${pnrDep}${pnrRet ? ' / ' + pnrRet : ''}` : 'PNR Info',\n subtitle: isCrossSeller ? 'Cross-seller booking — two PNRs' : 'Global Distribution System reference',\n sections: [{ title: 'References', rows: pnrRows }],\n };\n },\n },\n\n // ── Baggage Policy ────────────────────────────────────────────────────────\n {\n key: 'baggage',\n type: 'flight',\n label: 'Baggage Policy',\n subtitle: 'Cabin · Checked · Add-ons',\n icon: 'pi pi-briefcase',\n apiField: 'booking_info',\n formatter: (data) => {\n const baggage = bi(data)?.baggage;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const infoArray: any[] = baggage?.baggage_info ?? [];\n const addOns = baggage?.add_on_baggage ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sections: any[] = [];\n const routeNames: string[] = [];\n\n infoArray.forEach((entry: any) => {\n const route = Object.keys(entry)[0];\n if (!route) return;\n routeNames.push(route);\n const paxTypes = entry[route] ?? {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rows: any[] = [];\n\n Object.entries(paxTypes).forEach(([paxType, pd]: [string, any]) => {\n const label = paxType === 'ADT' ? 'Adult' : paxType === 'CNN' ? 'Child' : paxType === 'INF' ? 'Infant' : paxType;\n const cabin = pd.CabinBaggage;\n const checked = pd.CheckedBaggage;\n const underSeat = pd.UnderSeatBaggage;\n\n rows.push(\n { label: `${label} · Cabin`, value: fmtBag(cabin) },\n { label: `${label} · Checked`, value: fmtBag(checked) },\n );\n if (underSeat) {\n rows.push({ label: `${label} · Under Seat`, value: fmtBag(underSeat) });\n }\n });\n\n sections.push({ title: `Baggage · ${route}`, rows });\n });\n\n if (addOns.length > 0) {\n sections.push({\n title: 'Add-on Baggage',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rows: addOns.map((a: any, i: number) => ({\n label: `Add-on ${i + 1}`,\n value: [a.weight, a.unit, a.route].filter(Boolean).join(' · ') || 'See booking details',\n })),\n });\n }\n\n return {\n title: 'Baggage Allowance',\n subtitle: routeNames.length > 0 ? routeNames.join(' · ') : 'All baggage types',\n sections: sections.length > 0\n ? sections\n : [{ title: 'Info', rows: [{ label: 'Status', value: 'No baggage data available' }] }],\n };\n },\n },\n\n // ── Flight Timings ────────────────────────────────────────────────────────\n {\n key: 'flight_timings',\n type: 'flight',\n hidden: true,\n label: 'Flight Timings',\n subtitle: 'Departure · Arrival',\n icon: 'pi pi-clock',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legs: any[] = d?.leg_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const airlines: any[] = d?.airline_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durLegs: any[] = d?.duration?.legs ?? [];\n\n return {\n title: 'Flight Timings',\n subtitle: legs.length > 0\n ? `${legs[0].LegDepartureAirportCode} → ${legs[legs.length - 1].LegArrivalAirportCode}`\n : 'All legs',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sections: legs.map((l: any, li: number) => {\n const dir = l.LegDirectionality ?? '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const segs: any[] = airlines[li]?.Segments ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const durSegs: any[] = durLegs[li]?.Segments ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const stops: any[] = l.Stops ?? [];\n const legDurMins = durSegs.reduce((sum: number, s: any) => sum + (s.SegmentElapsedTimeMinutes ?? 0), 0);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rows: any[] = [\n { label: 'Departure', value: fmtDate(l.LegDepartureDateTime) },\n { label: 'Arrival', value: fmtDate(l.LegArrivalDateTime) },\n { label: 'Duration', value: legDurMins > 0 ? fmtMins(legDurMins) : na(null) },\n ];\n\n // Interleave segment rows with layover rows\n segs.forEach((s: any, si: number) => {\n const segDur = durSegs[si]?.SegmentElapsedTimeMinutes;\n rows.push({\n label: `Seg ${si + 1} · ${s.AirlineCode}${s.FlightNumber}`,\n value: `${na(s.DepartureAirportCode)} → ${na(s.ArrivalAirportCode)}${segDur ? ' · ' + fmtMins(segDur) : ''}`,\n });\n // Layover after this segment (if there is a stop at arrival airport)\n if (si < segs.length - 1) {\n const stop = stops.find((st: any) => st.StopAirport === s.ArrivalAirportCode);\n if (stop) {\n rows.push({ label: `Layover · ${stop.StopAirport}`, value: fmtMins(stop.LayoverDuration) });\n }\n }\n });\n\n return {\n title: `${dirIcon(dir)} ${dir || `Leg ${li + 1}`} · ${l.LegDepartureAirportCode} → ${l.LegArrivalAirportCode}`,\n rows,\n };\n }),\n };\n },\n },\n\n // ── Duration ──────────────────────────────────────────────────────────────\n {\n key: 'duration',\n type: 'flight',\n hidden: true,\n label: 'Duration',\n subtitle: 'Total flight time',\n icon: 'pi pi-refresh',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n const dur = d?.duration;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legs: any[] = d?.leg_info ?? [];\n const total = fmtMins(dur?.totalMinutes);\n\n return {\n title: total,\n subtitle: 'Total journey duration including layovers',\n sections: [\n {\n title: 'Total',\n rows: [{ label: 'Journey duration', value: total }],\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(dur?.legs ?? []).map((leg: any, li: number) => {\n const legMeta = legs[li];\n const dir = legMeta?.LegDirectionality ?? '';\n const from = legMeta?.LegDepartureAirportCode;\n const to = legMeta?.LegArrivalAirportCode;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rows: any[] = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (leg.Segments ?? []).forEach((s: any) => {\n rows.push({ label: `${s.DepartureAirportCode} → ${s.ArrivalAirportCode}`, value: fmtMins(s.SegmentElapsedTimeMinutes) });\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (leg.Stops ?? []).forEach((s: any) => {\n rows.push({ label: `Layover · ${s.StopAirport}`, value: fmtMins(s.LayoverDuration) });\n });\n return {\n title: `${dirIcon(dir)} ${dir || `Leg ${li + 1}`}${from && to ? ` · ${from} → ${to}` : ''}`,\n rows,\n };\n }),\n ],\n };\n },\n },\n\n // ── Cancellation Policy ───────────────────────────────────────────────────\n {\n key: 'cancellation_policy',\n type: 'flight',\n label: 'Cancellation Policy',\n subtitle: 'Refund · Fees · Legs',\n icon: 'pi pi-ban',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n const cp = d?.cancellation_policy;\n\n if (!cp) {\n return {\n title: 'Cancellation Policy',\n subtitle: 'No data available',\n sections: [{ title: 'Info', rows: [{ label: 'Status', value: 'No cancellation policy data available' }] }],\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sections: any[] = [];\n const pnrList = resolvePnrList(d?.pnr_info);\n const isCrossSeller = pnrList.length > 1 || cp?.supplierName?.toLowerCase().includes('cross');\n const legs: any[] = cp?.legs ?? [];\n\n sections.push({\n title: 'Booking Reference',\n rows: [\n { label: 'Booking ID', value: na(cp.bookingId) },\n { label: 'Supplier ref', value: na(cp.supplierBookingId) },\n { label: 'Supplier', value: na(cp.supplierName) },\n { label: 'Cross-seller', value: isCrossSeller ? 'Yes' : 'No' },\n ],\n });\n\n const fmtFee = (fee: number, currency: string): string =>\n fee != null ? `${fee} ${currency ?? 'SAR'}` : '0';\n\n legs.forEach((leg: any) => {\n const title = `Cancellation and Change Policy · ${leg.direction} (${leg.from} → ${leg.to})`;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rows: any[] = [];\n\n (leg.passengerPenalties ?? []).forEach((pp: any) => {\n const typeLabel = pp.type === 'ADT' ? 'Adult' : pp.type === 'CNN' ? 'Child' : 'Infant';\n const bDep = pp.penalties?.beforeDeparture;\n const aDep = pp.penalties?.afterDeparture;\n const bRefund = bDep?.refund;\n const bExchange = bDep?.exchange;\n const aRefund = aDep?.refund;\n const aExchange = aDep?.exchange;\n\n rows.push(\n {\n label: `${typeLabel} · Before dep.`,\n value: [\n bRefund?.isActionable ? `Refund: ${fmtFee(bRefund.fee, bRefund.currency)}` : 'No refund',\n bExchange?.isActionable ? `Exchange: ${fmtFee(bExchange.fee, bExchange.currency)}` : 'No exchange',\n ].join(' · '),\n valueClass: bRefund?.isActionable || bExchange?.isActionable ? 'neutral' : 'negative',\n },\n {\n label: `${typeLabel} · After dep.`,\n value: [\n aRefund?.isActionable ? `Refund: ${fmtFee(aRefund.fee, aRefund.currency)}` : 'No refund',\n aExchange?.isActionable ? `Exchange: ${fmtFee(aExchange.fee, aExchange.currency)}` : 'No exchange',\n ].join(' · '),\n valueClass: aRefund?.isActionable || aExchange?.isActionable ? 'neutral' : 'negative',\n },\n );\n });\n\n sections.push({ title, rows });\n });\n\n return {\n title: `${cp.supplierName ?? 'Cancellation'} Policy`,\n subtitle: isCrossSeller ? 'Cross-seller booking · contact supplier for refund' : `Booking ${cp.bookingId ?? ''}`,\n sections,\n callout: isCrossSeller\n ? { type: 'info', message: 'Cross-seller booking — refund is processed by the partner and may take additional time.' }\n : undefined,\n };\n },\n },\n\n // ── Flight Status ─────────────────────────────────────────────────────────\n {\n key: 'flight_status',\n type: 'flight',\n hidden: true,\n label: 'Flight Status',\n subtitle: 'Live · Delays',\n icon: 'pi pi-chart-bar',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legs: any[] = d?.leg_info ?? [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const airlines: any[] = d?.airline_info ?? [];\n const origin = legs[0]?.LegDepartureAirportCode;\n const dest = legs[legs.length - 1]?.LegArrivalAirportCode;\n\n return {\n title: origin ? `${origin} → ${dest}` : 'Flight Status',\n subtitle: `${legs.length} leg${legs.length !== 1 ? 's' : ''} · Scheduled times from booking`,\n sections: legs.map((l, li) => {\n const dir = l.LegDirectionality ?? '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const segs: any[] = airlines[li]?.Segments ?? [];\n return {\n title: `${dirIcon(dir)} ${dir || `Leg ${li + 1}`} · ${l.LegDepartureAirportCode} → ${l.LegArrivalAirportCode}`,\n rows: [\n { label: 'Departure', value: fmtDate(l.LegDepartureDateTime) },\n { label: 'Arrival', value: fmtDate(l.LegArrivalDateTime) },\n { label: 'Airline(s)', value: na(l.LegAirlinesNames?.join(', ')) },\n { label: 'Cabin', value: na(l.LegCabins?.[0]?.Name) },\n { label: 'Fare brand', value: na(l.fareBrand?.name) },\n ...segs.map((s: any, si: number) => ({\n label: `Flight ${si + 1}`,\n value: `${s.AirlineCode}${s.FlightNumber} · ${s.DepartureAirportCode} → ${s.ArrivalAirportCode}`,\n })),\n ],\n };\n }),\n callout: { type: 'info', message: 'Live status not available — check the airline app or airport boards for real-time updates.' },\n };\n },\n },\n\n // ── Wi-Fi & Extras ────────────────────────────────────────────────────────\n {\n key: 'wifi',\n type: 'flight',\n hidden: true,\n label: 'Wi-Fi & Extras',\n subtitle: 'Onboard services',\n icon: 'pi pi-info-circle',\n apiField: 'booking_info',\n formatter: (data) => {\n const d = bi(data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legs: any[] = d?.leg_info ?? [];\n const addOns = d?.baggage?.add_on_baggage ?? [];\n\n return {\n title: 'Onboard Extras',\n subtitle: `${legs.length} leg${legs.length !== 1 ? 's' : ''}`,\n sections: [\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...legs.map((l: any, li: number) => {\n const dir = l.LegDirectionality ?? '';\n return {\n title: `${dirIcon(dir)} ${dir || `Leg ${li + 1}`} · ${l.LegDepartureAirportCode} → ${l.LegArrivalAirportCode}`,\n rows: [\n { label: 'Cabin', value: na(l.LegCabins?.[0]?.Name) },\n { label: 'Fare brand', value: na(l.fareBrand?.name) },\n { label: 'Airline(s)', value: na(l.LegAirlinesNames?.join(', ')) },\n ],\n };\n }),\n ...(addOns.length > 0 ? [{\n title: 'Add-on Baggage',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rows: addOns.map((a: any, i: number) => ({\n label: `Add-on ${i + 1}`,\n value: [a.weight, a.unit, a.route].filter(Boolean).join(' · ') || 'See booking details',\n })),\n }] : []),\n ],\n callout: { type: 'info', message: 'Detailed onboard amenities depend on the operating airline and fare class.' },\n };\n },\n },\n];\n","import { ActionConfig } from '../models/action.types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst na = (v: any) => v ?? 'Not available';\n\nexport const HOTEL_ACTIONS: ActionConfig[] = [\n { key: 'booking_info', type: 'hotel', label: 'Booking Overview', subtitle: 'Summary · Status', icon: 'pi pi-file',\n apiField: 'booking_info',\n formatter: (data) => ({ title: `Booking ${na(data?.booking_info?.reference)}`, subtitle: `Created ${na(data?.booking_info?.created_at)}`,\n points: [{ label: 'Status', value: na(data?.booking_info?.status) }, { label: 'Total paid', value: na(data?.booking_info?.total) }, { label: 'Source', value: na(data?.booking_info?.source) }, { label: 'Currency', value: na(data?.booking_info?.currency) }] }) },\n { key: 'room_information', type: 'hotel', label: 'Room Information', subtitle: 'Type · Beds · View', icon: 'pi pi-home',\n apiField: 'room_information',\n formatter: (data) => ({ title: na(data?.room_information?.type), subtitle: na(data?.room_information?.description),\n points: [{ label: 'Room type', value: na(data?.room_information?.type) }, { label: 'Beds', value: na(data?.room_information?.beds) }, { label: 'View', value: na(data?.room_information?.view) }, { label: 'Floor', value: na(data?.room_information?.floor) }, { label: 'Size', value: na(data?.room_information?.size) }] }) },\n { key: 'packages', type: 'hotel', label: 'Room Packages', subtitle: 'Rooms · Board Basis · Price', icon: 'pi pi-box',\n apiField: 'packages',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n formatter: (data) => {\n const packages: any[] = data?.packages ?? data?.room_packages ?? [];\n const totalPackages = packages.length;\n const refundableCount = packages.filter((p: any) => p?.is_refundable || p?.isRefundable || p?.refundable).length;\n return {\n title: `${totalPackages} Package${totalPackages !== 1 ? 's' : ''}`,\n subtitle: `${refundableCount} refundable · ${totalPackages - refundableCount} non-refundable`,\n points: packages.length > 0 ? packages.flatMap((pkg: any, index: number) => [\n { label: `Package ${index + 1}`, value: na(pkg?.package_name || pkg?.packageName || pkg?.room_type) },\n { label: 'Board basis', value: na(pkg?.board_basis || pkg?.boardBasis || pkg?.board_type) },\n { label: 'Price', value: na(pkg?.room_amount || pkg?.roomAmount || pkg?.amount) },\n { label: 'Refundable', value: (pkg?.is_refundable || pkg?.isRefundable || pkg?.refundable) ? 'Yes' : 'No' },\n { label: 'Status', value: (pkg?.is_cancelled || pkg?.isCancelled || pkg?.cancelled) ? 'Cancelled' : 'Active' }\n ]) : [{ label: 'Packages', value: 'Not available' }]\n };\n }\n },\n { key: 'checkin_checkout', type: 'hotel', label: 'Check-in / Check-out', subtitle: 'Dates · Times', icon: 'pi pi-calendar',\n apiField: 'checkin_checkout',\n formatter: (data) => ({ title: `${na(data?.checkin_checkout?.checkin_date)} → ${na(data?.checkin_checkout?.checkout_date)}`, subtitle: 'Stay dates and times',\n points: [{ label: 'Check-in date', value: na(data?.checkin_checkout?.checkin_date) }, { label: 'Check-in time', value: na(data?.checkin_checkout?.checkin_time) }, { label: 'Check-out date', value: na(data?.checkin_checkout?.checkout_date) }, { label: 'Check-out time', value: na(data?.checkin_checkout?.checkout_time) }, { label: 'Nights', value: na(data?.checkin_checkout?.nights) }] }) },\n { key: 'hotel_information', type: 'hotel', label: 'Hotel Information', subtitle: 'Name · Stars · Contact', icon: 'pi pi-building',\n apiField: 'hotel_information',\n formatter: (data) => ({ title: na(data?.hotel_information?.name), subtitle: `${na(data?.hotel_information?.stars)}★ · ${na(data?.hotel_information?.city)}`,\n points: [{ label: 'Hotel', value: na(data?.hotel_information?.name) }, { label: 'Stars', value: na(data?.hotel_information?.stars) }, { label: 'Phone', value: na(data?.hotel_information?.phone) }, { label: 'Email', value: na(data?.hotel_information?.email) }, { label: 'Website', value: na(data?.hotel_information?.website) }] }) },\n { key: 'location_info', type: 'hotel', label: 'Location Info', subtitle: 'Address · Map', icon: 'pi pi-map-marker',\n apiField: 'location_info',\n formatter: (data) => ({ title: na(data?.location_info?.address), subtitle: na(data?.location_info?.city),\n points: [{ label: 'Address', value: na(data?.location_info?.address) }, { label: 'City', value: na(data?.location_info?.city) }, { label: 'Country', value: na(data?.location_info?.country) }, { label: 'Zip code', value: na(data?.location_info?.zip) }, { label: 'Landmark', value: na(data?.location_info?.landmark) }] }) },\n { key: 'hotel_amenities', type: 'hotel', label: 'Hotel Amenities', subtitle: 'Pool · Gym · Wi-Fi', icon: 'pi pi-star',\n apiField: 'hotel_amenities',\n formatter: (data) => { const amenities: string[] = data?.hotel_amenities?.list ?? []; return { title: 'Amenities', subtitle: `${amenities.length} amenities available`, points: amenities.length > 0 ? amenities.map((a) => ({ label: '✓', value: a })) : [{ label: 'Amenities', value: 'Not available' }] }; } },\n { key: 'nearby_places', type: 'hotel', label: 'Nearby Places', subtitle: 'Airport · Attractions', icon: 'pi pi-compass',\n apiField: 'nearby_places',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n formatter: (data) => { const places: any[] = data?.nearby_places?.places ?? []; return { title: 'Nearby Places', points: places.length > 0 ? places.flatMap((p: any) => [{ label: na(p?.type), value: `${na(p?.name)} (${na(p?.distance)})` }]) : [{ label: 'Places', value: 'Not available' }] }; } },\n { key: 'experiences', type: 'hotel', label: 'Experiences', subtitle: 'Tours · Activities', icon: 'pi pi-star-fill',\n apiField: 'experiences',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n formatter: (data) => { const items: any[] = data?.experiences?.list ?? []; return { title: 'Available Experiences', points: items.length > 0 ? items.map((e: any) => ({ label: na(e?.name), value: na(e?.price) })) : [{ label: 'Experiences', value: 'Not available' }] }; } },\n { key: 'payment_status', type: 'hotel', label: 'Payment Status', subtitle: 'Charges · Receipt', icon: 'pi pi-credit-card',\n apiField: 'payment_status',\n formatter: (data) => ({ title: 'Payment Details', subtitle: na(data?.payment_status?.method),\n points: [{ label: 'Status', value: na(data?.payment_status?.status) }, { label: 'Amount paid', value: na(data?.payment_status?.amount) }, { label: 'Currency', value: na(data?.payment_status?.currency) }, { label: 'Transaction', value: na(data?.payment_status?.transaction_id) }, { label: 'Date', value: na(data?.payment_status?.date) }] }) },\n { key: 'wallet', type: 'hotel', label: 'Wallet & Credits', subtitle: 'Balance · Cashback', icon: 'pi pi-wallet',\n apiField: 'wallet',\n formatter: (data) => ({ title: 'Wallet Summary',\n points: [{ label: 'Balance', value: na(data?.wallet?.balance) }, { label: 'Cashback', value: na(data?.wallet?.cashback) }, { label: 'Promo credit', value: na(data?.wallet?.promo_credit) }, { label: 'Last updated', value: na(data?.wallet?.updated_at) }] }) },\n { key: 'cancellation_policy', type: 'hotel', label: 'Cancellation Policy', subtitle: 'Fees · Deadline', icon: 'pi pi-ban',\n apiField: 'cancellation_policy',\n formatter: (data) => ({ title: 'Cancellation Rules', subtitle: data?.cancellation_policy?.refundable ? 'Refundable' : 'Non-refundable',\n points: [{ label: 'Refundable', value: data?.cancellation_policy?.refundable ? 'Yes' : 'No' }, { label: 'Cancel fee', value: na(data?.cancellation_policy?.fee) }, { label: 'Deadline', value: na(data?.cancellation_policy?.deadline) }, { label: 'Policy', value: na(data?.cancellation_policy?.description) }],\n callout: { type: 'warning', message: data?.cancellation_policy?.warning ?? 'Always verify cancellation terms with the hotel.' } }) },\n { key: 'breakfast', type: 'hotel', label: 'Meals & Breakfast', subtitle: 'Board basis', icon: 'pi pi-list',\n apiField: 'meals',\n formatter: (data) => ({ title: na(data?.meals?.board_basis), subtitle: 'Meal inclusions',\n points: [{ label: 'Board basis', value: na(data?.meals?.board_basis) }, { label: 'Breakfast', value: na(data?.meals?.breakfast) }, { label: 'Lunch', value: na(data?.meals?.lunch) }, { label: 'Dinner', value: na(data?.meals?.dinner) }] }) },\n];\n","import { IBookingPackage } from '../components/hotel-cancel/interfaces/i-almatar-hotel-auto-cancellation.interface';\n\nexport type ProductType = 'flight' | 'hotel';\n\nexport type BookingStatus = 'idle' | 'loading' | 'success' | 'error';\n\nexport interface BookingResponse {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any;\n elapsedMs: number;\n}\n\nexport interface IHotelBookingData {\n // Hotel Information\n hotelId?: string | number;\n bookingId?: string | number;\n hotelName?: string;\n coverImage?: string;\n\n // Check-in/Check-out dates\n dateFrom?: string;\n dateTo?: string;\n from?: { _i?: string }; // Alternative date format\n to?: { _i?: string }; // Alternative date format\n\n // Room/Package Information\n packages?: IBookingPackage[];\n rooms?: number;\n\n // Duration\n numberOfNights?: number;\n nightNumber?: number;\n\n // Times\n checkInTime?: string;\n checkOutTime?: string;\n\n // Pricing\n price?: number;\n\n // Preserve raw data for accessing booking_info (notes, history, etc.)\n data?: any;\n}\n\n/**\n * Maps raw API response to IHotelBookingData interface\n * This function handles the actual API response format from the booking endpoint\n */\nexport function mapToHotelBookingData(apiResponse: any): IHotelBookingData | null {\n if (!apiResponse) {\n return null;\n }\n\n // The actual API structure has hotel info in data.hotel[0]\n const data = apiResponse.data || apiResponse;\n const hotelData = data.hotel?.[0];\n\n if (!hotelData) {\n return null;\n }\n\n // Calculate number of nights from check-in and check-out dates\n const calculateNights = (checkIn: string, checkOut: string): number => {\n if (!checkIn || !checkOut) return 0;\n const start = new Date(checkIn);\n const end = new Date(checkOut);\n const diffTime = Math.abs(end.getTime() - start.getTime());\n return Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n };\n\n const numberOfNights = calculateNights(hotelData.checkIn, hotelData.checkOut);\n\n // Map roomPackages to IBookingPackage format\n const packages: IBookingPackage[] = (hotelData.roomPackages || []).map((pkg: any) => ({\n id: pkg._id,\n rooms: (pkg.rooms || []).map((room: any) => ({\n roomId: room._id,\n roomName: room.roomName || room.class || '',\n roomType: room.type || room.class || '',\n roomView: room.roomView || room.viewType || '',\n roomBasis: room.basis || '',\n bedType: room.bedType || '',\n adultsNum: room.adultNum,\n childrenNum: room.childrenNum,\n passengers: room.passengers,\n })),\n cancellationPolicies: pkg.payLaterCancellationPolicies || [],\n isRefundable: pkg.isRefundable || false,\n refundableUntil: pkg.refundableUntil || '',\n refundability: pkg.refundability || pkg.isRefundable,\n cancellationPoliciesRemarks: pkg.cancellationPoliciesRemarks,\n isCancelled: pkg.isCancelled,\n supplier: pkg.supplier?.name || pkg.supplierName,\n }));\n\n return {\n // Hotel Information\n hotelId: hotelData.hotelId,\n bookingId: data._id,\n hotelName: hotelData.hotelName,\n coverImage: hotelData.hotelMainImage,\n\n // Check-in/Check-out dates\n dateFrom: hotelData.checkIn,\n dateTo: hotelData.checkOut,\n from: hotelData.checkIn ? { _i: hotelData.checkIn } : undefined,\n to: hotelData.checkOut ? { _i: hotelData.checkOut } : undefined,\n\n // Room/Package Information\n packages: packages,\n rooms: hotelData.roomPackages?.length || packages.length,\n\n // Duration\n numberOfNights: numberOfNights,\n nightNumber: numberOfNights,\n\n // Times\n checkInTime: hotelData.checkInTime,\n checkOutTime: hotelData.checkOutTime,\n\n // Pricing\n price: hotelData.customerPrice?.amountToBeCollected || hotelData.customerPrice?.amountWithMarkeup,\n\n // Preserve raw data for accessing booking_info (notes, history, etc.)\n data: apiResponse,\n };\n}\n","import { Component, input, output, model } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ProductType } from '../../models/booking.types';\n\ninterface ProductOption { label: string; value: ProductType; disabled?: boolean; }\n\n@Component({\n selector: 'app-sbd-booking-input',\n standalone: true,\n imports: [FormsModule, SelectButtonModule, InputTextModule, ButtonModule, TooltipModule],\n templateUrl: './booking-input.component.html',\n styleUrl: './booking-input.component.scss',\n})\nexport class SbdBookingInputComponent {\n loading = input(false);\n product = model<ProductType>('flight');\n bookingId = model('');\n lookup = output<void>();\n\n readonly productOptions: ProductOption[] = [\n { label: '✈ Flight', value: 'flight' },\n { label: '🏨 Hotel', value: 'hotel' },\n ];\n\n readonly demoIds = [\n { label: 'Demo Flight: ALM-20481', value: 'ALM-20481' },\n { label: 'Demo Hotel: ALM-HTL-9921', value: 'ALM-HTL-9921' },\n ];\n\n fillDemo(id: string): void {\n const product: ProductType = id.includes('HTL') ? 'hotel' : 'flight';\n this.product.set(product);\n this.bookingId.set(id);\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') this.lookup.emit();\n }\n}\n","<div class=\"sbd-booking-input\">\n <p-selectButton\n [(ngModel)]=\"product\"\n [options]=\"productOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n optionDisabled=\"disabled\">\n <ng-template pTemplate=\"item\" let-item>\n <span\n [pTooltip]=\"item.disabled ? 'Coming soon' : null\"\n tooltipPosition=\"bottom\"\n style=\"pointer-events: auto; display: inline-block;\">\n {{ item.label }}\n </span>\n </ng-template>\n </p-selectButton>\n <div class=\"sbd-booking-input__row\">\n <div class=\"sbd-booking-input__field-wrap\">\n <i class=\"pi pi-search sbd-booking-input__icon\"></i>\n <input pInputText class=\"sbd-booking-input__field\" placeholder=\"Enter Booking ID\"\n [(ngModel)]=\"bookingId\" (keydown)=\"onKeydown($event)\" autocomplete=\"off\" spellcheck=\"false\" />\n </div>\n <button pButton label=\"Lookup →\" [disabled]=\"!bookingId().trim()\" (click)=\"lookup.emit()\" class=\"sbd-booking-input__btn\"></button>\n </div>\n</div>\n","import { Component, input, output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n selector: 'app-sbd-workflow-actions',\n standalone: true,\n imports: [ButtonModule, TooltipModule],\n templateUrl: './workflow-actions.component.html',\n styleUrl: './workflow-actions.component.scss',\n})\nexport class SbdWorkflowActionsComponent {\n bookingId = input.required<string>();\n showReissue = input(false);\n cancelBooking = output<void>();\n reissue = output<void>();\n}\n","<div class=\"sbd-workflow-actions\">\n <button pButton label=\"Cancel Booking\" icon=\"pi pi-times-circle\"\n class=\"p-button-danger p-button-outlined p-button-sm\"\n (click)=\"cancelBooking.emit()\">\n </button>\n\n @if (showReissue()) {\n <button pButton label=\"Reissue Booking\" icon=\"pi pi-refresh\"\n class=\"p-button-outlined p-button-sm\"\n (click)=\"reissue.emit()\">\n </button>\n }\n\n <button pButton label=\"Send Ticket\" icon=\"pi pi-send\"\n class=\"p-button-outlined p-button-sm p-button-secondary\"\n [disabled]=\"true\"\n pTooltip=\"Coming soon\" tooltipPosition=\"bottom\">\n </button>\n\n <button pButton label=\"Flight Status\" icon=\"pi pi-chart-bar\"\n class=\"p-button-outlined p-button-sm p-button-secondary\"\n [disabled]=\"true\"\n pTooltip=\"Coming soon\" tooltipPosition=\"bottom\">\n </button>\n\n <button pButton label=\"Select Seat\" icon=\"pi pi-th-large\"\n class=\"p-button-outlined p-button-sm p-button-secondary\"\n [disabled]=\"true\"\n pTooltip=\"Coming soon\" tooltipPosition=\"bottom\">\n </button>\n\n <button pButton label=\"Add Baggage\" icon=\"pi pi-briefcase\"\n class=\"p-button-outlined p-button-sm p-button-secondary\"\n [disabled]=\"true\"\n pTooltip=\"Coming soon\" tooltipPosition=\"bottom\">\n </button>\n\n <button pButton label=\"Add Service\" icon=\"pi pi-plus-circle\"\n class=\"p-button-outlined p-button-sm p-button-secondary\"\n [disabled]=\"true\"\n pTooltip=\"Coming soon\" tooltipPosition=\"bottom\">\n </button>\n</div>\n","import { Component, input, output } from '@angular/core';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ActionConfig } from '../../models/action.types';\n\n@Component({\n selector: 'app-sbd-action-card',\n standalone: true,\n imports: [TooltipModule],\n templateUrl: './action-card.component.html',\n styleUrl: './action-card.component.scss',\n})\nexport class SbdActionCardComponent {\n action = input.required<ActionConfig>();\n active = input(false);\n loading = input(false);\n selected = output<string>();\n}\n","<button class=\"sbd-action-card\" [class.sbd-action-card--active]=\"active()\"\n [class.sbd-action-card--loading]=\"loading()\" [pTooltip]=\"action().subtitle\"\n tooltipPosition=\"top\" (click)=\"selected.emit(action().key)\" type=\"button\">\n @if (active()) { <span class=\"sbd-action-card__dot\"></span> }\n <div class=\"sbd-action-card__icon-tile\">\n <i [class]=\"action().icon\"></i>\n </div>\n <div class=\"sbd-action-card__body\">\n <span class=\"sbd-action-card__label\">{{ action().label }}</span>\n <span class=\"sbd-action-card__sub\">{{ action().subtitle }}</span>\n </div>\n</button>\n","import { Component, input, output } from '@angular/core';\nimport { SbdActionCardComponent } from '../action-card/action-card.component';\nimport { ActionConfig } from '../../models/action.types';\n\n@Component({\n selector: 'app-sbd-action-grid',\n standalone: true,\n imports: [SbdActionCardComponent],\n templateUrl: './action-grid.component.html',\n styleUrl: './action-grid.component.scss',\n})\nexport class SbdActionGridComponent {\n actions = input.required<ActionConfig[]>();\n activeKey = input<string | null>(null);\n loadingKey = input<string | null>(null);\n actionSelected = output<string>();\n}\n","<div class=\"sbd-action-grid\">\n <div class=\"sbd-action-grid__header\">\n <h3 class=\"sbd-action-grid__title\">Booking Details</h3>\n </div>\n <div class=\"sbd-action-grid__grid\">\n @for (action of actions(); track action.key) {\n <app-sbd-action-card [action]=\"action\" [active]=\"activeKey() === action.key\"\n [loading]=\"loadingKey() === action.key\" (selected)=\"actionSelected.emit($event)\" />\n }\n </div>\n</div>\n","import { Component, input, output, inject, effect, signal, computed } from '@angular/core';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { DialogModule } from 'primeng/dialog';\nimport { ButtonModule } from 'primeng/button';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { SbdBookingService } from '../../services/booking.service';\nimport { SbdToastService } from '../../services/toast.service';\n\ntype LegSelection = 'onward' | 'return' | 'both';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype LegDetails = any;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RefundData = any;\n\nconst DEDUCTION_DEFS = [\n { key: 'totalPenaltyPoints', label: 'Airline Cancellation Fee', badge: '' },\n { key: 'handlingFee', label: 'Handling Fee', badge: '' },\n { key: 'totalNonRefundableServiceCharge', label: 'Service Charge', badge: '' },\n { key: 'totalAncillaryRefundAmount', label: 'Ancillary Fee', badge: '' },\n { key: 'totalGiftAmount', label: 'Add on Fee', badge: '' },\n // `totalLoyaltyPoints` (points spent at booking time, now forfeited) is\n // intentionally not listed here — it's already surfaced under its own\n // program name (e.g. \"Qitaf\") in the \"Total Paid\" breakdown, so listing it\n // again here would double up the same amount under two different sections.\n];\n\nconst REFUND_DEFS = [\n { key: 'totalCardRefundAmount', label: 'Refund Amount' },\n { key: 'totalCreditRefundAmount', label: 'Credit Shell Refund' },\n { key: 'walletRefundAmount', label: 'Almatar Wallet' },\n { key: 'totalLoyaltyPointsRefundAmount', label: 'Loyalty Points Refund' },\n];\n\n/** Labels for `paymentMethodCustomerUsed` gateway codes returned by the backend. */\nconst PAYMENT_GATEWAY_LABELS: Record<string, string> = {\n CH: 'Card',\n HP: 'Hyperpay',\n MF: 'My Fatoora',\n WT: 'Wire Transfer',\n STC: 'STC',\n TM: 'Tamara',\n TB: 'Tabby',\n RAJHI: 'Al Rajhi Mokafaa',\n PPB: 'Customer Balance',\n PP: 'Postpay',\n TAMAM: 'Tamam',\n QITAF: 'Qitaf',\n MIS: 'MIS Pay',\n MATAR: 'Almatar Pay',\n CB: 'Company Balance',\n ANB: 'ANB',\n AMWAL: 'Amwal',\n WALA: 'Wala',\n YGG: 'YGG',\n};\n\n/** Gateway codes that refund to an installment plan rather than the original card. */\nconst INSTALLMENT_GATEWAY_CODES = ['TM', 'TB'];\n\n/** Gateway codes that refund to a loyalty-program account rather than the original card. */\nconst LOYALTY_GATEWAY_CODES = ['RAJHI', 'QITAF', 'STC', 'WALA'];\n\n/**\n * Internal payment-processor/gateway names, never customer-recognizable\n * brands — must not be surfaced verbatim (e.g. a card refund processed\n * through Hyperpay must read as \"Card\"/\"Original Payment Method\", never\n * \"Hyperpay\"). Callers fall back to a generic label whenever the normalized\n * lookup returns ''.\n */\nconst INTERNAL_GATEWAY_CODES = ['HP', 'MF', 'WT', 'PPB', 'PP', 'TAMAM'];\n\n/**\n * Result/confirmation-screen-only override: these gateways process card\n * payments through Mada — shown specifically as \"Mada Card\" instead of\n * falling back to the generic \"Original Payment Method\" label used\n * everywhere else `INTERNAL_GATEWAY_CODES` applies.\n */\nconst MADA_GATEWAY_CODES = ['HP', 'CH'];\n\nconst CREDIT_SHELL_SUFFIX = 'It can be used only for future booking on the airline website.';\n\nconst GIFT_HINT = 'Please note: If you cancel either leg of your round-trip booking, the add-on/gift service will be cancelled automatically.';\n\n@Component({\n selector: 'app-sbd-cancel-dialog',\n standalone: true,\n imports: [DialogModule, ButtonModule, SkeletonModule, NgTemplateOutlet, NgClass],\n templateUrl: './cancel-dialog.component.html',\n styleUrl: './cancel-dialog.component.scss',\n})\nexport class SbdCancelDialogComponent {\n private bookingService = inject(SbdBookingService);\n private toast = inject(SbdToastService);\n\n visible = input(false);\n bookingId = input('');\n product = input<'flight' | 'hotel'>('flight');\n pnrInfo = input<{ pnr?: string; LegDirectionality?: string }[]>([]);\n /** Same `booking_info` payload the dashboard already fetches (getBooking(..., 'booking_info')) — reused here to render real route/time details on the select-leg cards, instead of a second API call. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n bookingInfo = input<any>(null);\n closed = output<void>();\n confirmed = output<LegSelection>();\n\n /** Per-leg route/time details, mirroring app-sbd-flight-itinerary-card's mapping of booking_info.leg_info. */\n itineraryLegs = computed(() => {\n const bi = this.bookingInfo()?.data?.booking_info;\n if (!bi) return [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (bi.leg_info ?? []).map((leg: any, i: number) => ({\n direction: leg.LegDirectionality as string,\n airlineName: (leg.LegAirlinesNames ?? []).join(', '),\n cabin: leg.LegCabins?.[0]?.Name ?? '',\n from: leg.LegDepartureAirportCode as string,\n to: leg.LegArrivalAirportCode as string,\n depTime: leg.LegDepartureDateTime as string,\n arrTime: leg.LegArrivalDateTime as string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stops: (leg.Stops ?? []) as any[],\n totalMinutes: bi.duration?.legs?.[i]?.Segments\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ?.reduce((sum: number, s: any) => sum + (s.SegmentElapsedTimeMinutes ?? 0), 0) ?? null,\n operatedBy: leg.supplierName ? [leg.supplierName as string] : [],\n }));\n });\n\n /**\n * The return leg is matched by an explicit 'Return' direction; the onward\n * leg is whatever's left (some bookings don't tag the outbound leg with an\n * explicit 'Departure' value), falling back to the first entry.\n */\n itineraryLeg(kind: 'onward' | 'return') {\n const legs = this.itineraryLegs();\n if (!legs.length) return null;\n const returnLeg = legs.find((l: { direction: string }) => (l.direction ?? '').toLowerCase() === 'return') ?? null;\n if (kind === 'return') return returnLeg;\n return (\n legs.find((l: { direction: string }) => (l.direction ?? '').toLowerCase() === 'departure') ??\n legs.find((l) => l !== returnLeg) ??\n legs[0] ??\n null\n );\n }\n\n fmtTime(dt: string): string {\n if (!dt) return '—';\n try { return new Date(dt).toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' }); }\n catch { return dt; }\n }\n\n fmtShortDate(dt: string): string {\n if (!dt) return '—';\n try { return new Date(dt).toLocaleDateString('en-GB', { weekday: 'short', day: '2-digit', month: 'short' }); }\n catch { return dt; }\n }\n\n fmtMins(mins: number | null): string {\n if (mins == null) return '';\n return `${Math.floor(mins / 60)}h ${mins % 60}m`;\n }\n\n refundData = signal<RefundData | null>(null);\n cancelResult = signal<RefundData | null>(null);\n loading = signal(false);\n cancelling = signal(false);\n confirming = signal(false);\n /**\n * 'select-leg' shown once the refund preview resolves, for round-trip\n * bookings the backend hasn't already restricted to a single leg — mirrors\n * almatar-b2c's select-leg screen. Skipped straight to 'details' otherwise.\n */\n step = signal<'loading' | 'select-leg' | 'details'>('loading');\n /** Per-leg inclusion (checkbox) and expand/collapse state — round-trip only. */\n onwardChecked = signal(true);\n returnChecked = signal(true);\n onwardExpanded = signal(true);\n returnExpanded = signal(true);\n selectedSource = signal<string>('');\n cancelHint = signal<string>('');\n paidSummaryExpanded = signal(false);\n preferredRefundMethod = signal<'wallet' | 'originalPaymentMethod' | 'split'>('originalPaymentMethod');\n\n private readonly CANCEL_HINTS = [\n 'Loading your data...',\n 'Fetching Sabre data...',\n 'Fetching ATC data...',\n 'Calculating refund amount...',\n 'We are almost done, please wait...',\n ];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private hintTimer: any = null;\n\n hasOnward = computed(() => !!this.refundData()?.legInfo?.onward);\n hasReturn = computed(() => !!this.refundData()?.legInfo?.return);\n isRoundTrip = computed(() => this.hasOnward() && this.hasReturn());\n\n /** Which leg(s) the backend allows cancelling, from the refund preview response. */\n legDirectionality = computed<'ONWARD' | 'RETURN' | 'BOTH' | undefined>(\n () => this.refundData()?.legDirectionality,\n );\n\n /**\n * Whether to render the round-trip \"two leg cards\" UI. Only when the\n * backend explicitly allows cancelling both legs — otherwise (ONWARD-only /\n * RETURN-only) show a single card for that leg, same as a one-way booking.\n */\n showRoundTripLegCards = computed(\n () => this.isRoundTrip() && (this.legDirectionality() ?? 'BOTH') === 'BOTH',\n );\n\n /** Derived from the per-leg checkboxes — 'both' unless exactly one is unchecked. */\n selectedLeg = computed<LegSelection>(() => {\n if (!this.isRoundTrip()) return 'both';\n const dir = this.legDirectionality();\n if (dir === 'ONWARD') return 'onward';\n if (dir === 'RETURN') return 'return';\n const onward = this.onwardChecked();\n const ret = this.returnChecked();\n if (onward && ret) return 'both';\n return onward ? 'onward' : 'return';\n });\n\n // Returns the sourceBreakdown for the currently selected leg (or root for \"both\")\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n activeSourceBreakdown = computed((): Record<string, any> | null => {\n const sel = this.selectedLeg();\n const root = this.refundData();\n if (!root) return null;\n // A leg-scoped view (single leg, or both legs summed) must not fall back\n // to root.sourceBreakdown — its totals are for the whole/original\n // itinerary, not scoped to the leg(s) actually shown, and applying it\n // would clobber the correctly leg-scoped totals computed in\n // `currentData()`.\n if (sel === 'onward') return root.legInfo?.onward?.sourceBreakdown ?? null;\n if (sel === 'return') return root.legInfo?.return?.sourceBreakdown ?? null;\n if (root.legInfo?.onward && root.legInfo?.return) return null;\n return root.sourceBreakdown ?? null;\n });\n\n availableSources = computed((): string[] =>\n Object.keys(this.activeSourceBreakdown() ?? {})\n );\n\n currentData = computed<RefundData | null>(() => {\n const root = this.refundData();\n if (!root) return null;\n const sel = this.selectedLeg();\n if (sel === 'onward' && root.legInfo?.onward)\n return this.buildLegData(root, root.legInfo.onward, 'onward');\n if (sel === 'return' && root.legInfo?.return)\n return this.buildLegData(root, root.legInfo.return, 'return');\n // Payment/refund figures come from `legInfo`, never root (root isn't\n // reliably scoped to whichever leg(s) ended up selected) — combine both\n // legs when both are in play, otherwise use whichever one exists.\n const onward = root.legInfo?.onward;\n const ret = root.legInfo?.return;\n if (onward && ret) return this.buildCombinedLegData(root, onward, ret);\n if (onward && !ret) return this.buildLegData(root, onward, 'onward');\n if (ret && !onward) return this.buildLegData(root, ret, 'return');\n return root;\n });\n\n // currentData with source-specific penalty/refund/refundability overrides applied\n adjustedData = computed<RefundData | null>(() => {\n const base = this.currentData();\n if (!base) return null;\n return this.applySourceOverride(base, this.activeSourceBreakdown());\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private applySourceOverride(base: RefundData, breakdown: Record<string, any> | null): RefundData {\n const sel = this.selectedSource();\n if (!sel || !breakdown || !breakdown[sel]) return this.reconcileSoleDestination(base);\n const src = breakdown[sel];\n const sourceRefundable = src.isRefundable !== false; // default true if not set\n if (!sourceRefundable) {\n // Source cannot process refund — zero out financial fields\n return this.reconcileSoleDestination({\n ...base,\n isRefundable: false,\n totalPenaltyPoints: 0,\n totalSupplierPenaltyPoints: 0,\n totalCancellationFee: 0,\n totalRefundAmount: 0,\n totalCardRefundAmount: 0,\n handlingFee: 0,\n });\n }\n // Prefer the source's own walletRefundAmount/totalCardRefundAmount when\n // the API provides them (they're already net of each other for this\n // source) — only fall back to deriving cardRefund when the API doesn't.\n const newTotal = Number(src.totalRefundAmount || 0);\n const walletRefund =\n src.walletRefundAmount !== undefined\n ? Number(src.walletRefundAmount || 0)\n : Number(base.walletRefundAmount || 0);\n const cardRefund =\n src.totalCardRefundAmount !== undefined\n ? Number(src.totalCardRefundAmount || 0)\n : Math.max(\n 0,\n newTotal -\n Number(base.totalCreditRefundAmount || 0) -\n walletRefund -\n Number(base.totalLoyaltyPointsRefundAmount || 0),\n );\n return this.reconcileSoleDestination({\n ...base,\n isRefundable: true,\n totalPenaltyPoints: Number(src.totalSupplierPenaltyPoints || 0),\n totalSupplierPenaltyPoints: Number(src.totalSupplierPenaltyPoints || 0),\n totalCancellationFee: Number(src.totalCancellationFee || 0),\n totalRefundAmount: newTotal,\n walletRefundAmount: walletRefund,\n totalCardRefundAmount: cardRefund,\n handlingFee: Number(src.handlingFee || 0),\n });\n }\n\n /**\n * When exactly one of the four refund-destination fields (wallet / card /\n * credit / loyalty) is non-zero, the backend has occasionally sent that\n * field as a pre-deduction value that disagrees with the declared total\n * (e.g. wallet = total + cancellation fee) — there's no ambiguity about\n * *where* the money goes, only a stale number in that one field, so trust\n * the declared total and correct the sole destination to match rather\n * than surfacing a false discrepancy.\n */\n private reconcileSoleDestination(d: RefundData): RefundData {\n if (!d?.isRefundable) return d;\n const wallet = Number(d.walletRefundAmount ?? 0);\n const card = Number(d.totalCardRefundAmount ?? 0);\n const credit = Number(d.totalCreditRefundAmount ?? 0);\n const loyalty = Number(d.totalLoyaltyPointsRefundAmount ?? 0);\n // A forfeited-points destination (e.g. Qitaf points funded separately\n // from the card refund) also counts as a real destination here — without\n // this, a legitimately split card+loyalty-points refund (e.g. 918 card +\n // 50 Qitaf points = 968 total) looks like a single stale \"card\" field to\n // this heuristic, which then force-overwrites the correct 918 with the\n // full 968 total and silently erases the split.\n const forfeitedLoyalty = this.forfeitedLoyaltyPointsFallback(d);\n const nonZero = [wallet, card, credit, loyalty, forfeitedLoyalty].filter((v) => v > 0);\n if (nonZero.length !== 1) return d;\n const total = Number(d.totalRefundAmountBeforeCeil ?? d.totalRefundAmount ?? 0);\n if (wallet > 0 && Math.abs(wallet - total) >= 0.01) return { ...d, walletRefundAmount: total };\n if (card > 0 && Math.abs(card - total) >= 0.01) return { ...d, totalCardRefundAmount: total };\n if (credit > 0 && Math.abs(credit - total) >= 0.01) return { ...d, totalCreditRefundAmount: total };\n if (loyalty > 0 && Math.abs(loyalty - total) >= 0.01) return { ...d, totalLoyaltyPointsRefundAmount: total };\n return d;\n }\n\n /**\n * Per-leg refund view (independent of the checkbox inclusion state) — used\n * to render both legs' own breakdown cards simultaneously.\n */\n legAdjustedData(legType: 'onward' | 'return'): RefundData | null {\n const root = this.refundData();\n const leg = root?.legInfo?.[legType];\n if (!root || !leg) return null;\n const base = this.buildLegData(root, leg, legType);\n return this.applySourceOverride(base, leg.sourceBreakdown ?? null);\n }\n\n /** Deduction rows for a single leg's card. */\n legDeductions(legType: 'onward' | 'return') {\n return this.deductionRows(this.legAdjustedData(legType));\n }\n\n /**\n * Refundable pool (\"Fare\") for a leg — that leg's own paid amount\n * (`totalSupplierBookingAmount`). `totalRefundAmount + totalCancellationFee`\n * isn't reliable: `totalCancellationFee` doesn't include every deduction\n * (e.g. `handlingFee`), which produced a Fare that didn't reconcile with\n * Total Refund + the shown deductions.\n */\n legRefundPool(legType: 'onward' | 'return'): number {\n const d = this.legAdjustedData(legType);\n if (!d) return 0;\n return Number(d.totalSupplierBookingAmount || 0);\n }\n\n /** True once a leg's own departure time has passed. */\n legAlreadyFlown(legType: 'onward' | 'return'): boolean {\n const depTime = this.itineraryLeg(legType)?.depTime;\n if (!depTime) return false;\n const t = new Date(depTime).getTime();\n return !Number.isNaN(t) && t < Date.now();\n }\n\n /**\n * Non-CrossSeller airlines require the whole round-trip/multicity\n * itinerary to be cancelled together — a leg can't be excluded on its own\n * unless it has already flown (which naturally degrades to a one-way\n * cancellation of just the remaining leg). Set when an uncheck attempt was\n * blocked for this reason, so the leg's checkbox can be frozen (locked)\n * and the note shown.\n */\n forcedLegType = signal<'onward' | 'return' | null>(null);\n\n /**\n * Toggle a leg's inclusion. A non-refundable leg can't be checked, and the\n * last checked leg can't be unchecked. Used on both the select-leg screen\n * and the round-trip leg cards.\n */\n toggleLeg(legType: 'onward' | 'return') {\n const refundable = legType === 'onward' ? this.onwardRefundable() : this.returnRefundable();\n if (!refundable) return;\n const self = legType === 'onward' ? this.onwardChecked : this.returnChecked;\n const other = legType === 'onward' ? this.returnChecked : this.onwardChecked;\n if (self() && !other()) return;\n\n const isTurningOff = self();\n if (\n isTurningOff &&\n this.isRoundTrip() &&\n !this.isCrossSeller() &&\n !this.legAlreadyFlown(legType)\n ) {\n // Airline doesn't allow cancelling this leg on its own — block the\n // uncheck, keep it checked+frozen, and surface the note.\n this.forcedLegType.set(legType);\n return;\n }\n this.forcedLegType.set(null);\n self.set(!self());\n // A leg may carry its own source list — re-resolve the selection.\n const breakdown = this.activeSourceBreakdown() ?? {};\n const sources = Object.keys(breakdown);\n if (sources.length && !breakdown[this.selectedSource()]) {\n this.selectedSource.set(sources[0]);\n }\n }\n\n /** Toggle a leg card's expanded/collapsed state. */\n toggleLegExpanded(legType: 'onward' | 'return') {\n const sig = legType === 'onward' ? this.onwardExpanded : this.returnExpanded;\n sig.set(!sig());\n }\n\n sourceNonRefundableHint = computed((): string => {\n const sel = this.selectedSource();\n if (!sel) return '';\n const src = (this.activeSourceBreakdown() ?? {})[sel];\n if (!src || src.isRefundable !== false) return '';\n return `Cancellation via ${sel} is not eligible for a refund. Please select a different source.`;\n });\n\n deductions = computed(() => this.deductionRows(this.adjustedData()));\n\n /**\n * Itemized refundable rows (\"Fare\" + named refundable add-ons/ancillaries)\n * from `refundBreakdown.refundable`. Empty when the backend hasn't sent a\n * breakdown yet — callers fall back to the single aggregate Fare row.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refundableBreakdownRows(d: any): { label: string; value: number }[] {\n const b = d?.refundBreakdown?.refundable;\n if (!b) return [];\n // Fare always shows from refundBreakdown.refundable.fare, even when 0 —\n // never falls back to originalAmount.\n const rows: { label: string; value: number }[] = [{ label: 'Fare', value: Number(b.fare ?? 0) }];\n [...(b.addOns ?? []), ...(b.ancillaries ?? [])]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .filter((item: any) => Number(item.amount) > 0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .forEach((item: any) => rows.push({ label: item.name, value: Number(item.amount) }));\n return rows;\n }\n\n /** Named refundable add-ons/ancillaries only (excludes Fare) — drives the \"processed separately\" note. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private refundableAddonItems(d: any): any[] {\n // Only `addOns` need manual Customer Service processing — `ancillaries`\n // (baggage, seat, auto check-in, …) are already itemized/refunded\n // automatically as part of the total, no separate note needed for them.\n const b = d?.refundBreakdown?.refundable;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (b?.addOns ?? []).filter((item: any) => Number(item.amount) > 0);\n }\n\n /** Whether to show the \"add-on refund processed separately by Customer Service\" note. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n hasRefundableAddonNote(d: any): boolean {\n return this.refundableAddonItems(d).length > 0;\n }\n\n /**\n * Deduction rows for the \"Not Refunded\" section. When an itemized\n * breakdown is present, its named add-ons/ancillaries replace the\n * aggregate `totalAncillaryRefundAmount`/`totalGiftAmount` rows (same\n * money, named instead of lumped); the other generic rows (cancellation\n * fee, handling fee, service charge) are unaffected.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private deductionRows(d: any): { label: string; value: number; badge: string }[] {\n if (!d) return [];\n const b = d.refundBreakdown?.nonRefundable;\n if (!b) {\n return DEDUCTION_DEFS\n .filter(def => Number(d[def.key]) > 0)\n .map(def => ({ label: def.label, value: Number(d[def.key]), badge: def.badge }));\n }\n const itemRows = [...(b.addOns ?? []), ...(b.ancillaries ?? [])]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .filter((item: any) => Number(item.amount) > 0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map((item: any) => ({ label: item.name, value: Number(item.amount), badge: '' }));\n const aggregateRows = DEDUCTION_DEFS\n .filter(def => def.key !== 'totalAncillaryRefundAmount' && def.key !== 'totalGiftAmount')\n .filter(def => Number(d[def.key]) > 0)\n .map(def => ({ label: def.label, value: Number(d[def.key]), badge: def.badge }));\n return [...itemRows, ...aggregateRows];\n }\n\n refunds = computed(() => {\n const d = this.adjustedData();\n if (!d) return [];\n const isLoyalty = this.isLoyaltyMethod();\n const paymentLabel = this.customerPaymentLabel();\n const rows = REFUND_DEFS\n .filter(def => Number(d[def.key]) > 0)\n .map(def => ({\n // Wallet row always reads \"Almatar Wallet\" (def.label) — the loyalty\n // program that funded it gets its own dedicated row below via\n // `forfeitedLoyaltyPointsFallback`, so the two stay visually\n // distinct instead of merging into one label.\n // Card row: card/loyalty stay distinct — don't relabel the card\n // portion with the loyalty program name too, and never surface an\n // internal processor name (empty `paymentLabel` falls back to the\n // generic def.label, e.g. \"Refund Amount\").\n label:\n def.key === 'totalCardRefundAmount' && !isLoyalty && paymentLabel\n ? `${def.label} ${paymentLabel}`\n : def.label,\n value: Number(d[def.key]),\n }));\n const forfeitedLoyalty = this.forfeitedLoyaltyPointsFallback(d);\n if (forfeitedLoyalty > 0) {\n rows.push({ label: this.walletOrLoyaltyLabel(d), value: forfeitedLoyalty });\n }\n return rows;\n });\n\n creditShellNote = computed((): string => {\n // Golden Guarantee overrides credit-shell messaging entirely — the\n // dedicated success notice (`goldenGuaranteeNote`) is shown instead.\n if (this.hasGoldenGuaranteeGift()) return '';\n const d = this.currentData();\n if (!d) return '';\n const legInfo = d.legInfo ?? {};\n const hasO = !!legInfo.onward;\n const hasR = !!legInfo.return;\n const oShell = legInfo.onward?.isCreditShell === true;\n const rShell = legInfo.return?.isCreditShell === true;\n const isShell =\n (hasO && hasR && oShell && rShell) ||\n (hasO && !hasR && oShell) ||\n (!hasO && hasR && rShell) ||\n (hasO && hasR && (oShell || rShell));\n if (!isShell) return '';\n const amount = this.fmt(Number(this.adjustedData()?.totalRefundAmount ?? d.totalRefundAmount ?? 0));\n const pnr = this.resolvePnr();\n const pnrText = pnr ? `the same PNR (${pnr})` : 'the same PNR';\n return `The refund of ${amount} will be issued as airline credit under ${pnrText}. ${CREDIT_SHELL_SUFFIX}`;\n });\n\n // Resolve the PNR for the currently selected leg from the booking's pnr_info list.\n private resolvePnr(): string {\n const list = this.pnrInfo() ?? [];\n if (!list.length) return '';\n const sel = this.selectedLeg();\n const byDir = (dir: string) => list.find(p => p.LegDirectionality === dir)?.pnr;\n if (sel === 'return') return byDir('Return') ?? list[0]?.pnr ?? '';\n if (sel === 'onward') return byDir('Departure') ?? list[0]?.pnr ?? '';\n return byDir('Departure') ?? list[0]?.pnr ?? '';\n }\n\n /**\n * Booking includes a Golden Guarantee gift (\"Cancel for any reason\") —\n * overrides all credit-shell handling below, since a Golden Guarantee\n * cancellation always refunds 100% through the standard payment method\n * rather than the airline credit shell. May be carried on either the\n * preview (`refundData`) or the confirm (`cancelResult`) response — both\n * share the same shape, and either one may set it independently of the\n * other.\n */\n hasGoldenGuaranteeGift = computed((): boolean =>\n this.refundData()?.hasGoldenGuaranteeGift === true ||\n this.cancelResult()?.hasGoldenGuaranteeGift === true ||\n this.hasGoldenGuaranteeAddOn(),\n );\n\n /**\n * Fallback for environments whose refund response has no `hasGoldenGuaranteeGift`\n * flag: scan every itemized add-on/ancillary/gift the refund preview exposes\n * (root + per-leg, refundable + non-refundable) for a golden-guarantee\n * category/type/name match.\n */\n private hasGoldenGuaranteeAddOn = computed((): boolean => {\n const root = this.refundData();\n if (!root) return false;\n\n const GG_CATEGORY = 'golden_guarantee';\n const GG_NAME_RX = /goldens*guarantee|cancels*fors*anys*reason/i;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const isGoldenGuarantee = (item: any): boolean => {\n if (!item) return false;\n const category = String(item.category ?? item.giftCategory ?? item.type ?? item.giftType ?? '')\n .toLowerCase()\n .replace(/[s-]+/g, '_');\n if (category === GG_CATEGORY) return true;\n return GG_NAME_RX.test(String(item.name ?? item.title ?? ''));\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakdownItems = (node: any): any[] => {\n const b = node?.refundBreakdown;\n if (!b) return [];\n return [\n ...(b.refundable?.addOns ?? []),\n ...(b.refundable?.ancillaries ?? []),\n ...(b.nonRefundable?.addOns ?? []),\n ...(b.nonRefundable?.ancillaries ?? []),\n ];\n };\n\n const candidates = [\n ...breakdownItems(root),\n ...breakdownItems(root.legInfo?.onward),\n ...breakdownItems(root.legInfo?.return),\n ...(root.addOns ?? []),\n ...(root.gifts ?? []),\n ...(root.legInfo?.onward?.addOns ?? []),\n ...(root.legInfo?.onward?.gifts ?? []),\n ...(root.legInfo?.return?.addOns ?? []),\n ...(root.legInfo?.return?.gifts ?? []),\n ];\n\n return candidates.some(isGoldenGuarantee);\n });\n\n // Whether the refund is a credit-shell refund (whole booking or either leg).\n // Such refunds can only return to the airline credit shell, so the\n // refund-method picker is replaced with a single read-only credit notice.\n // A Golden Guarantee gift overrides this to `false` — that portion needs an\n // actual destination choice, so the booking falls back to the standard\n // refund-method flow despite being flagged credit-shell.\n isCreditShell = computed((): boolean => {\n if (this.hasGoldenGuaranteeGift()) return false;\n const d = this.refundData();\n return (\n d?.isCreditShell === true ||\n d?.legInfo?.onward?.isCreditShell === true ||\n d?.legInfo?.return?.isCreditShell === true\n );\n });\n\n /**\n * Refundable ancillaries (baggage, seats, …) that carry their own\n * `isCreditShell` flag, independent of the booking-level flag — rendered\n * as individual cards on the credit-shell refund-method screen so each\n * one can show either the credit-shell card style or the normal wallet\n * card style (both include the same nested credit-shell note when true).\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n creditShellAncillaryItems = computed((): any[] =>\n (this.adjustedData()?.refundBreakdown?.refundable?.ancillaries ?? [])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .filter((item: any) => Number(item.amount) > 0),\n );\n\n // Airline that issues the credit shell, for the \"<supplier> website credit\" card.\n creditShellSupplierName = computed((): string => {\n const d = this.refundData();\n return (\n d?.legInfo?.onward?.supplierName ??\n d?.legInfo?.return?.supplierName ??\n d?.supplierName ??\n d?.appliedSource ??\n ''\n );\n });\n\n // Header title reflecting the refund type for the active selection.\n refundTypeLabel = computed((): string => {\n if (!this.refundData()?.isRefundable) return 'Refund Details';\n return this.creditShellNote() ? 'Credit Shell Refund' : 'Refund Details';\n });\n\n currency = computed((): string => this.refundData()?.currency ?? 'SAR');\n\n // Self-consistency check between the paid amount, deductions and the system refund.\n // Surfaced to the agent so mismatched/over-deducted refunds can be caught before confirming.\n discrepancyNote = computed((): string => {\n const d = this.adjustedData();\n if (!d || !d.isRefundable) return '';\n const paid = Number(d.originalAmount || 0);\n const deduction = Number(d.totalCancellationFee || 0);\n const refund = Number(d.totalRefundAmount || 0);\n const issues: string[] = [];\n if (deduction > paid + 0.01)\n issues.push(`Total deduction (${this.fmt(deduction)}) exceeds the paid amount (${this.fmt(paid)}).`);\n if (Math.abs((paid - deduction) - refund) > 0.01)\n issues.push(`Computed refund (${this.fmt(paid - deduction)}) doesn't match the system refund (${this.fmt(refund)}).`);\n return issues.join(' ');\n });\n\n /** Real per-booking CrossSeller flag from the refund preview — CrossSeller suppliers allow cancelling either leg independently. */\n isCrossSeller = computed(() => this.refundData()?.isCrossSeller === true);\n\n // Non-CrossSeller round trips are one itinerary sold as a single fare —\n // both legs share the same refundability, sourced from root, even when\n // the backend's legInfo entry for a leg is missing or inconsistent.\n // CrossSeller legs are independently sellable, so each leg's own field\n // still governs there.\n onwardRefundable = computed(() => {\n if (!this.hasOnward()) return false;\n return this.isCrossSeller()\n ? this.refundData()?.legInfo?.onward?.isRefundable === true\n : this.refundData()?.isRefundable === true;\n });\n returnRefundable = computed(() => {\n if (!this.hasReturn()) return false;\n return this.isCrossSeller()\n ? this.refundData()?.legInfo?.return?.isRefundable === true\n : this.refundData()?.isRefundable === true;\n });\n isMixed = computed(() => this.isRoundTrip() && this.onwardRefundable() !== this.returnRefundable());\n\n /** Both legs present and BOTH non-refundable — nothing can be refunded for this booking. */\n allLegsNonRefundable = computed(\n () => this.isRoundTrip() && !this.onwardRefundable() && !this.returnRefundable(),\n );\n\n mixedHint = computed((): string => {\n // Only relevant when agent is about to cancel both legs together —\n // individual leg tabs already show their own non-refundable notice.\n if (!this.isMixed() || this.selectedLeg() !== 'both') return '';\n if (!this.onwardRefundable()) return '⚠️ Onward leg is not eligible for refund. Please contact customer service if you want to cancel it.';\n if (!this.returnRefundable()) return '⚠️ Return leg is not eligible for refund. Please contact customer service if you want to cancel it.';\n return '';\n });\n\n giftHint = computed((): string => {\n const root = this.refundData();\n if (!root || !this.isRoundTrip()) return '';\n const hasGift = Number(root.totalGiftAmount || 0) > 0 ||\n Number(root.legInfo?.onward?.totalGiftAmount || 0) > 0 ||\n Number(root.legInfo?.return?.totalGiftAmount || 0) > 0;\n return hasGift ? GIFT_HINT : '';\n });\n\n selectionHint = computed((): string => {\n if (!this.isRoundTrip()) return '';\n const map: Record<LegSelection, string> = {\n onward: 'You are about to cancel: Onward leg only',\n return: 'You are about to cancel: Return leg only',\n both: 'You are about to cancel: Both legs',\n };\n return map[this.selectedLeg()];\n });\n\n confirmDeductions = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const d: any = this.cancelResult();\n if (!d) return [];\n return DEDUCTION_DEFS.filter(def => Number(d[def.key]) > 0).map(def => ({ label: def.label, value: Number(d[def.key]) }));\n });\n\n confirmRefunds = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const d: any = this.cancelResult();\n if (!d) return [];\n const code = this.normalizeGatewayCode(d.paymentMethodCustomerUsed);\n const isLoyalty = LOYALTY_GATEWAY_CODES.includes(code);\n const isMada = this.confirmIsMadaMethod();\n const paymentLabel = code && !INTERNAL_GATEWAY_CODES.includes(code) ? PAYMENT_GATEWAY_LABELS[code] : '';\n const rows: {\n key: string;\n label: string;\n value: number;\n subRows?: { label: string; value: number }[];\n hasLoyaltyNote?: boolean;\n }[] = [];\n const { wallet, forfeitedLoyalty } = this.correctedConfirmWalletAndLoyalty(d);\n // Golden Guarantee overrides credit-shell handling on the result screen\n // too — whatever landed as a credit-shell amount folds into the normal\n // original-payment-method row instead of getting its own \"airline\n // credit\" card, so the confirmation reads like an ordinary Sabre/Amadeus\n // refund.\n const goldenGuaranteeOverride = this.hasGoldenGuaranteeGift();\n // Credit-shell row goes first — matches the design (airline credit above\n // the wallet row) — before the card and wallet rows below.\n if (!goldenGuaranteeOverride) {\n const credit = Number(d.totalCreditRefundAmount ?? 0);\n if (credit > 0) {\n const supplier = d.appliedSource || this.creditShellSupplierName();\n rows.push({\n key: 'totalCreditRefundAmount',\n label: supplier ? `${supplier} website credit` : 'Credit Shell Refund',\n value: credit,\n });\n }\n }\n const cardAmount =\n Number(d.totalCardRefundAmount ?? 0) +\n (goldenGuaranteeOverride ? Number(d.totalCreditRefundAmount ?? 0) : 0);\n if (cardAmount > 0) {\n rows.push({\n key: 'totalCardRefundAmount',\n label: isMada\n ? 'Mada Card'\n : !isLoyalty && paymentLabel\n ? `Refund Amount ${paymentLabel}`\n : 'Refund Amount',\n value: cardAmount,\n });\n }\n if (wallet > 0 && forfeitedLoyalty > 0) {\n // Wallet cash + a loyalty program's points both landed in the wallet —\n // shown as one combined card with the two sources broken out as named\n // sub-rows, rather than two separate top-level cards.\n rows.push({\n key: 'walletRefundAmount',\n label: 'Almatar Wallet',\n value: wallet + forfeitedLoyalty,\n subRows: [\n { label: 'Almatar wallet points', value: wallet },\n { label: `${this.walletOrLoyaltyLabel(d)} points`, value: forfeitedLoyalty },\n ],\n hasLoyaltyNote: true,\n });\n } else if (wallet > 0) {\n rows.push({ key: 'walletRefundAmount', label: 'Almatar Wallet', value: wallet });\n } else if (forfeitedLoyalty > 0) {\n // Loyalty-only — no wallet cash involved, still lands as permanent\n // wallet points, so it keeps the wallet-style card + note.\n rows.push({\n key: 'totalLoyaltyPoints',\n label: this.walletOrLoyaltyLabel(d),\n value: forfeitedLoyalty,\n hasLoyaltyNote: true,\n });\n }\n REFUND_DEFS\n .filter((def) =>\n def.key !== 'walletRefundAmount' &&\n def.key !== 'totalCardRefundAmount' &&\n def.key !== 'totalCreditRefundAmount' &&\n Number(d[def.key]) > 0,\n )\n .forEach((def) => {\n rows.push({ key: def.key, label: def.label, value: Number(d[def.key]) });\n });\n return rows;\n });\n\n /** Rows that land in the wallet — plain wallet, wallet+loyalty combined, or loyalty-only — share the wallet icon/layout on the result screen. */\n isWalletDestinationRow(r: { key: string }): boolean {\n return r.key === 'walletRefundAmount' || r.key === 'totalLoyaltyPoints';\n }\n\n /**\n * The result screen's \"issued as an Airline Credit Shell\" note. Golden\n * Guarantee overrides this to '' — the confirmation renders like a\n * standard Sabre/Amadeus refund instead (see `confirmRefunds`' folding\n * of any credit-shell amount into the normal payment-method row).\n */\n confirmCreditShellNote = computed((): string => {\n if (this.hasGoldenGuaranteeGift()) return '';\n const d = this.cancelResult();\n if (!d) return '';\n const legInfo = d.legInfo ?? {};\n const hasO = !!legInfo.onward;\n const hasR = !!legInfo.return;\n const oShell = legInfo.onward?.isCreditShell === true;\n const rShell = legInfo.return?.isCreditShell === true;\n const topShell = d.isCreditShell === true;\n if ((hasO && hasR && oShell && rShell) || (hasO && !hasR && oShell) || (!hasO && hasR && rShell) || topShell)\n return 'The refund has been issued as an Airline Credit Shell and can be used for future bookings on the airline website.';\n if (hasO && hasR) {\n if (oShell) return 'The refund for the onward flight has been issued as an Airline Credit Shell.';\n if (rShell) return 'The refund for the return flight has been issued as an Airline Credit Shell.';\n }\n return '';\n });\n\n fmtResult(value: number): string {\n const cur = this.cancelResult()?.currency ?? this.refundData()?.currency ?? 'SAR';\n return `${Number(value || 0).toLocaleString('en-SA', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} ${cur}`;\n }\n\n /**\n * The customer-facing total (ceiled) must match the pre-rounding total the\n * refund is actually computed from — i.e. `totalRefundAmount` must be\n * `totalRefundAmountBeforeCeil` rounded up to a whole currency unit (e.g.\n * 1454.5 → 1455). A mismatch here means the supplier response itself is\n * internally inconsistent and must block confirmation.\n */\n refundReconciles = computed((): boolean => {\n const d = this.adjustedData();\n if (!d || !d.isRefundable) return true;\n const beforeCeil = Number(d.totalRefundAmountBeforeCeil ?? d.totalRefundAmount ?? 0);\n const total = Number(d.totalRefundAmount ?? beforeCeil);\n return Math.abs(Math.ceil(beforeCeil) - total) < 1;\n });\n\n canConfirm = computed(() => {\n const d = this.adjustedData();\n return !!d?.isRefundable && this.refundReconciles() && !this.cancelling();\n });\n\n /**\n * `totalLoyaltyPoints` is normally the forfeited-at-booking points count\n * (no refund destination of its own). But when the backend never\n * populates `totalLoyaltyPointsRefundAmount` for a `loyaltyPaymentType`\n * booking, this is the only signal that a loyalty program was involved,\n * so it doubles as a split-refund row (alongside Card/Wallet) rather than\n * disappearing from the refund breakdown entirely. Always shown as its\n * own row under the program name (e.g. \"Wala\") — never merged into the\n * generic Wallet row, even when `walletRefundAmount` is also non-zero.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private forfeitedLoyaltyPointsFallback(d: any): number {\n if (!d?.loyaltyPaymentType) return 0;\n if (Number(d.totalLoyaltyPointsRefundAmount ?? 0) > 0) return 0;\n return Number(d.totalLoyaltyPoints ?? 0);\n }\n\n /**\n * Some `/confirm` responses for a single-leg (non-cross-seller) booking\n * put `walletRefundAmount`/`totalLoyaltyPoints` on the wrong side at the\n * root — e.g. root reads `walletRefundAmount: 40, totalLoyaltyPoints: 0`\n * while the single leg (which should mirror root exactly here) reads\n * `walletRefundAmount: 0, totalLoyaltyPoints: 40`. Detected narrowly: root\n * shows no forfeited loyalty despite `loyaltyPaymentType` being set, the\n * root wallet amount exactly equals the leg's loyalty points, and the\n * leg's own wallet amount disagrees — in that specific case the leg's\n * values are trusted instead, since with only one leg they're unambiguous.\n *\n * A second, more common shape: root doesn't swap at all, it folds the\n * points straight into `walletRefundAmount` as one opaque lump sum (e.g.\n * root wallet 340 = the leg's own cash wallet 300 + the leg's forfeited\n * loyalty points 40). Split that back into the two parts the leg already\n * tells us about too, so the result screen can show a combined wallet card\n * with the program named instead of one unexplained total.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private correctedConfirmWalletAndLoyalty(d: any): { wallet: number; forfeitedLoyalty: number } {\n const rootWallet = Number(d.walletRefundAmount ?? 0);\n const forfeitedFromRoot = this.forfeitedLoyaltyPointsFallback(d);\n if (forfeitedFromRoot > 0 || !d.loyaltyPaymentType) {\n return { wallet: rootWallet, forfeitedLoyalty: forfeitedFromRoot };\n }\n const onward = d.legInfo?.onward;\n const ret = d.legInfo?.return;\n const leg = onward && !ret ? onward : ret && !onward ? ret : null;\n if (!leg) return { wallet: rootWallet, forfeitedLoyalty: 0 };\n const legLoyalty = Number(leg.totalLoyaltyPoints ?? 0);\n const legWallet = Number(leg.walletRefundAmount ?? 0);\n // Full swap: root reads the leg's loyalty amount where its wallet should be.\n if (\n legLoyalty > 0 &&\n rootWallet === legLoyalty &&\n legWallet !== rootWallet &&\n Number(d.totalLoyaltyPointsRefundAmount ?? 0) === 0\n ) {\n return { wallet: legWallet, forfeitedLoyalty: legLoyalty };\n }\n // Lump sum: root wallet = leg's cash wallet + leg's forfeited loyalty.\n if (\n legLoyalty > 0 &&\n legWallet > 0 &&\n Math.abs(rootWallet - (legWallet + legLoyalty)) < 1 &&\n Number(d.totalLoyaltyPointsRefundAmount ?? 0) === 0\n ) {\n return { wallet: legWallet, forfeitedLoyalty: legLoyalty };\n }\n // Newer `/confirm` responses drop the loyalty portion from both root and\n // leg totals — `walletRefundAmount` arrives as one opaque lump that's the\n // cash-wallet portion (`totalWalletAmount`) plus a loyalty-program amount.\n // When `loyaltyPaymentType` is set, the lump exceeds the cash-wallet\n // portion, and it's a genuine card+wallet split (not a \"send everything to\n // the wallet\" refund), the difference is that loyalty amount.\n const cashWallet = Number(d.totalWalletAmount ?? 0);\n const impliedLoyalty = rootWallet - cashWallet;\n if (\n impliedLoyalty > 0.01 &&\n cashWallet > 0 &&\n Number(d.totalCardRefundAmount ?? 0) > 0 &&\n Number(d.totalLoyaltyPointsRefundAmount ?? 0) === 0\n ) {\n return { wallet: cashWallet, forfeitedLoyalty: impliedLoyalty };\n }\n // The whole wallet refund is the loyalty-program balance — no cash-wallet\n // portion (`totalWalletAmount` 0) and no card portion, but\n // `loyaltyPaymentType` is set. Attribute all of it to the program so the\n // popup names it (e.g. \"Wala\") with the permanent-points note.\n if (\n cashWallet === 0 &&\n rootWallet > 0 &&\n Number(d.totalCardRefundAmount ?? 0) === 0 &&\n Number(d.totalLoyaltyPointsRefundAmount ?? 0) === 0\n ) {\n return { wallet: 0, forfeitedLoyalty: rootWallet };\n }\n return { wallet: rootWallet, forfeitedLoyalty: 0 };\n }\n\n /** How many of {wallet, card, loyalty} the refund is actually split across. */\n private splitPartsCount = computed(() => {\n const d = this.adjustedData();\n if (!d) return 0;\n return [\n d.walletRefundAmount,\n d.totalCardRefundAmount,\n d.totalLoyaltyPointsRefundAmount,\n this.forfeitedLoyaltyPointsFallback(d),\n ].filter((v) => Number(v ?? 0) > 0).length;\n });\n\n /**\n * A portion of the refund is forced to the wallet (e.g. loyalty points used)\n * — in that case offer a \"Split Refund\" option instead of a pure\n * original-payment-method option, since the whole amount can't go to card.\n */\n hasSplitRefund = computed(\n () => Number(this.adjustedData()?.totalRefundAmount ?? 0) > 0 && this.splitPartsCount() >= 2,\n );\n\n /**\n * Wallet covers the whole refund (no card or loyalty portion at all) — show\n * the wallet option alone rather than a \"split\" with empty other sides.\n */\n isWalletOnlyRefund = computed(() => {\n const d = this.adjustedData();\n return (\n Number(d?.walletRefundAmount ?? 0) > 0 &&\n Number(d?.totalCardRefundAmount ?? 0) === 0 &&\n Number(d?.totalLoyaltyPointsRefundAmount ?? 0) === 0 &&\n this.forfeitedLoyaltyPointsFallback(d) === 0\n );\n });\n\n /**\n * The entire refund is forfeited loyalty points (e.g. Wala) landing back as\n * wallet balance — no cash-wallet, card, credit or real\n * loyalty-points-refund portion at all. Without this the picker falls\n * through to the \"Original Payment Method\" card and mislabels the\n * destination as the original gateway (e.g. \"Tabby\"), even though\n * `totalCardRefundAmount` is 0 and nothing goes back to that card.\n */\n isLoyaltyOnlyRefund = computed(() => {\n const d = this.adjustedData();\n return (\n this.forfeitedLoyaltyPointsFallback(d) > 0 &&\n Number(d?.walletRefundAmount ?? 0) === 0 &&\n Number(d?.totalCardRefundAmount ?? 0) === 0 &&\n Number(d?.totalCreditRefundAmount ?? 0) === 0 &&\n Number(d?.totalLoyaltyPointsRefundAmount ?? 0) === 0\n );\n });\n\n /** A real cash-wallet portion is part of the refund (distinct from forfeited loyalty points landing in the wallet). */\n hasCashWalletRefund = computed(\n () => Number(this.adjustedData()?.walletRefundAmount ?? 0) > 0,\n );\n\n /**\n * Wallet card's title — normally \"Almatar Wallet\", but the loyalty program\n * name (Wala, Qitaf, …) when the whole refund is that program's forfeited\n * balance landing back in the wallet.\n */\n walletCardLabel = computed(() =>\n this.isLoyaltyOnlyRefund()\n ? this.walletOrLoyaltyLabel(this.adjustedData()) || 'Almatar Wallet'\n : 'Almatar Wallet',\n );\n\n /**\n * Part of the refund came from converting external loyalty points into\n * wallet funds — surfaced as a note under the wallet destination so the\n * agent knows those points land as permanent wallet balance, not cash.\n */\n hasLoyaltyPointsRefund = computed(\n () => Number(this.adjustedData()?.totalLoyaltyPoints ?? 0) > 0,\n );\n\n /**\n * The booking is refundable but nets to 0.00 after deductions — a\n * dedicated NIL Refund state, distinct from \"not refundable\": no refund\n * method to choose between, just confirmation that nothing is owed back.\n */\n isNilRefund = computed((): boolean => {\n const d = this.adjustedData();\n return !!d?.isRefundable && Number(d.totalRefundAmount ?? 0) === 0;\n });\n\n /** Same as `isNilRefund`, scoped to the confirmed cancellation result — drives the result screen's title. */\n confirmIsNilRefund = computed((): boolean => {\n const d = this.cancelResult();\n return !!d?.isRefundable && Number(d.totalRefundAmount ?? 0) === 0;\n });\n\n /** Whether the customer may send the whole refund to their Almatar Wallet. */\n isFullWalletRefundAllowed = computed(() => !!this.adjustedData()?.isFullWalletRefundAllowed);\n\n /** Whether the customer paid via an installment gateway (Tamara, Tabby, …). */\n isInstallmentMethod = computed(() =>\n INSTALLMENT_GATEWAY_CODES.includes(\n this.normalizeGatewayCode(this.adjustedData()?.paymentMethodCustomerUsed),\n ),\n );\n\n /** Whether the customer paid via a loyalty-program gateway (Al Rajhi Mokafaa, …). */\n isLoyaltyMethod = computed(() =>\n LOYALTY_GATEWAY_CODES.includes(\n this.normalizeGatewayCode(this.adjustedData()?.paymentMethodCustomerUsed),\n ),\n );\n\n /** Any gateway that refunds somewhere other than a plain card — used for the wallet-style icon. */\n isSpecialGatewayMethod = computed(() => this.isInstallmentMethod() || this.isLoyaltyMethod());\n\n /**\n * Card-refund settlement-timeline badge — Tabby and Tamara each have their\n * own processing window, distinct from a plain card's generic bank policy.\n */\n cardBadgeText = computed(() => {\n const code = this.normalizeGatewayCode(this.adjustedData()?.paymentMethodCustomerUsed);\n if (code === 'TB') return 'From 5-7 business days';\n if (code === 'TM') return 'Up to 10 business days';\n if (this.isLoyaltyMethod()) return 'Loyalty Program Policy';\n return 'Up to 15 business days, bank policy';\n });\n\n /** Same as `cardBadgeText`, scoped to the confirmed cancellation result. */\n confirmCardBadgeText = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const d: any = this.cancelResult();\n const code = this.normalizeGatewayCode(d?.paymentMethodCustomerUsed);\n if (code === 'TB') return 'From 5-7 business days';\n if (code === 'TM') return 'Up to 10 business days';\n if (LOYALTY_GATEWAY_CODES.includes(code)) return 'Loyalty Program Policy';\n return 'Up to 15 business days, bank policy';\n });\n\n /**\n * Per-method breakdown of the \"Total paid\" amount. The backend doesn't\n * (yet) expose a dedicated original-payment breakdown, so the known\n * refund-destination fields (card / wallet / loyalty) are used as a proxy\n * for how the booking was originally paid, and whatever's left over after\n * those (e.g. a non-refundable leg/fee that never shows up in any refund\n * field) is folded into the primary payment method — so the rows always\n * add up to the full `originalAmount` shown above them, instead of only\n * covering the refundable portion.\n */\n paidBreakdownRows = computed((): { label: string; value: number }[] => {\n const d = this.adjustedData();\n if (!d) return [];\n // Card and loyalty stay distinct labels (same categorization as\n // `refunds`) so a gateway like Al Rajhi Mokafaa doesn't swallow an\n // actual separate card portion under one label.\n const cardLabel =\n (!this.isLoyaltyMethod() && this.customerPaymentLabel()) || 'Original Payment Method';\n // The wallet destination row always reads \"Almatar Wallet\" — unlike\n // `refunds`/`confirmRefunds`, this row never swaps to the loyalty\n // program name, since `forfeitedLoyaltyLabel` below is that program's\n // own dedicated row and the two must stay visually distinct here.\n const walletLabel = 'Almatar Wallet';\n const forfeitedLoyaltyLabel = this.walletOrLoyaltyLabel(d) || 'Loyalty Points';\n const loyaltyLabel = this.customerPaymentLabel() || 'Loyalty Points Refund';\n const amounts = new Map<string, number>();\n const add = (label: string, value: number) => {\n if (value <= 0) return;\n amounts.set(label, (amounts.get(label) ?? 0) + value);\n };\n add(cardLabel, Number(d.totalCardRefundAmount ?? 0));\n // This row shows how much of the *original* payment went through the\n // wallet — `totalWalletAmount`, not `walletRefundAmount` (a refund\n // destination amount that can differ, e.g. only part of the wallet\n // payment is refundable after deductions).\n add(walletLabel, Number(d.totalWalletAmount ?? 0));\n add(loyaltyLabel, Number(d.totalLoyaltyPointsRefundAmount ?? 0));\n // `totalLoyaltyPoints` is the portion of the *original* payment made with\n // loyalty points (now forfeited/deducted, not refunded) — distinct from\n // `totalLoyaltyPointsRefundAmount` above and from `walletRefundAmount`\n // (an unrelated refund-destination amount). Always shown as its own row\n // under the program name (e.g. \"Qitaf\"/\"Wala\") rather than merged into\n // the generic Wallet row or silently folded into the leftover remainder.\n add(forfeitedLoyaltyLabel, Number(d.totalLoyaltyPoints ?? 0));\n\n const total = Number(d.originalAmount ?? 0);\n const known = [...amounts.values()].reduce((a, b) => a + b, 0);\n const remainder = total - known;\n if (remainder > 0.01) {\n // Unaccounted leftover (e.g. a non-refundable portion) is folded into\n // the primary/default payment channel rather than a fabricated 4th row.\n add(cardLabel, remainder);\n }\n return [...amounts.entries()].map(([label, value]) => ({ label, value }));\n });\n\n /** The \"Total paid\" row always expands — there's always at least one method to show. */\n hasPaidBreakdown = computed(() => this.paidBreakdownRows().length > 0);\n\n togglePaidSummary() {\n this.paidSummaryExpanded.set(!this.paidSummaryExpanded());\n }\n\n /**\n * The backend has sent `paymentMethodCustomerUsed` as both a short code\n * (`\"CH\"`) and a full gateway name (`\"Card\"`) at different times — match\n * either, case-insensitively, against the known codes/labels rather than\n * assuming one format.\n */\n private normalizeGatewayCode(raw?: string | null): string {\n if (!raw) return '';\n const needle = raw.trim().toLowerCase();\n const codes = Object.keys(PAYMENT_GATEWAY_LABELS);\n const byCode = codes.find((code) => code.toLowerCase() === needle);\n if (byCode) return byCode;\n return codes.find((code) => PAYMENT_GATEWAY_LABELS[code].toLowerCase() === needle) ?? '';\n }\n\n /**\n * Display label for `paymentMethodCustomerUsed`, or '' if unknown/internal.\n * Never surfaces an internal processor name (e.g. Hyperpay) to the agent —\n * callers fall back to a generic \"Original Payment Method\" label whenever\n * this returns ''.\n */\n customerPaymentLabel = computed(() => {\n const code = this.normalizeGatewayCode(this.adjustedData()?.paymentMethodCustomerUsed);\n if (code && INTERNAL_GATEWAY_CODES.includes(code)) return '';\n return code ? PAYMENT_GATEWAY_LABELS[code] : '';\n });\n\n /** Whether the confirmed cancellation's card refund settles via Mada. */\n isMadaMethod = computed(() => {\n const code = this.normalizeGatewayCode(this.adjustedData()?.paymentMethodCustomerUsed);\n return !!code && MADA_GATEWAY_CODES.includes(code);\n });\n\n /**\n * Label for the standalone \"Original Payment Method\" option card (shown\n * when the whole refund goes to one destination). Mada wins over\n * everything else, reading \"Mada Card\" instead of the generic gateway\n * name or the \"Original Payment Method\" fallback.\n */\n originalPaymentLabel = computed(() => {\n if (this.isMadaMethod()) return 'Mada Card';\n return this.customerPaymentLabel() || 'Original Payment Method';\n });\n\n /** Same as `isMadaMethod`, scoped to the confirmed cancellation result. */\n confirmIsMadaMethod = computed(() => {\n const code = this.normalizeGatewayCode(this.cancelResult()?.paymentMethodCustomerUsed);\n return !!code && MADA_GATEWAY_CODES.includes(code);\n });\n\n /**\n * Split-refund destination rows — up to four: Almatar Wallet (generic\n * label), the original payment method (card/installment gateway), a\n * separate loyalty-points-refund row when the backend sends one, and a\n * dedicated loyalty-program row (Wala, Qitaf, …) for forfeited points\n * (`forfeitedLoyaltyPointsFallback`) — kept distinct from the Wallet row\n * even when both are non-zero.\n */\n splitRefundRows = computed(() => {\n const d = this.adjustedData();\n if (!d) return [];\n const rows: { label: string; value: number; instant: boolean; isLoyalty: boolean; badgeText: string; isMada?: boolean }[] = [];\n const wallet = Number(d.walletRefundAmount ?? 0);\n if (wallet > 0) {\n rows.push({ label: 'Almatar Wallet', value: wallet, instant: true, isLoyalty: false, badgeText: 'Instant' });\n }\n const card = Number(d.totalCardRefundAmount ?? 0);\n if (card > 0) {\n const badgeText = this.cardBadgeText();\n rows.push({\n label: this.isMadaMethod()\n ? 'Mada Card'\n : (!this.isLoyaltyMethod() && this.customerPaymentLabel()) || 'Original Payment Method',\n value: card,\n instant: false,\n isLoyalty: false,\n badgeText,\n isMada: this.isMadaMethod(),\n });\n }\n const loyalty = Number(d.totalLoyaltyPointsRefundAmount ?? 0);\n if (loyalty > 0) {\n rows.push({\n label: this.customerPaymentLabel() || 'Loyalty Points Refund',\n value: loyalty,\n instant: true,\n isLoyalty: true,\n badgeText: 'Instant',\n });\n }\n const forfeitedLoyalty = this.forfeitedLoyaltyPointsFallback(d);\n if (forfeitedLoyalty > 0) {\n rows.push({\n label: this.walletOrLoyaltyLabel(d) || 'Loyalty Points',\n value: forfeitedLoyalty,\n instant: true,\n isLoyalty: true,\n badgeText: 'Instant',\n });\n }\n return rows;\n });\n\n /**\n * Wallet-row label for a loyalty-program redemption — `loyaltyPaymentType`\n * (e.g. Wala, Qitaf) names the program that redeemed into the wallet\n * balance and applies regardless of `paymentMethodCustomerUsed`; the\n * backend can report an unrelated original payment gateway (e.g. Tabby)\n * alongside a wallet portion that's actually a loyalty redemption.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walletOrLoyaltyLabel(d: any): string {\n const loyalty = d?.loyaltyPaymentType ?? '';\n return PAYMENT_GATEWAY_LABELS[loyalty] ?? '';\n }\n\n constructor() {\n effect(() => {\n if (this.visible() && this.bookingId()) {\n this.loadRefund();\n } else {\n this.stopHints();\n this.refundData.set(null);\n this.cancelResult.set(null);\n this.onwardChecked.set(true);\n this.returnChecked.set(true);\n this.forcedLegType.set(null);\n this.onwardExpanded.set(true);\n this.returnExpanded.set(true);\n this.selectedSource.set('');\n this.preferredRefundMethod.set('originalPaymentMethod');\n this.confirming.set(false);\n this.cancelling.set(false);\n this.step.set('loading');\n }\n }, { allowSignalWrites: true });\n }\n\n private loadRefund(): void {\n this.loading.set(true);\n this.startHints();\n this.bookingService.getRefundDetails(this.bookingId(), this.product()).subscribe({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n next: (raw: any) => {\n let data = raw?.data ?? raw;\n\n this.stopHints();\n this.refundData.set(data);\n // Auto-select source: prefer appliedSource, otherwise pick first available\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakdown: Record<string, any> = data?.sourceBreakdown ?? {};\n const sources = Object.keys(breakdown);\n if (sources.length > 0) {\n const applied = data?.appliedSource;\n this.selectedSource.set(applied && breakdown[applied] ? applied : sources[0]);\n }\n this.loading.set(false);\n // Only show the leg picker for a genuine round-trip the backend hasn't\n // already restricted to a single leg — otherwise go straight to details.\n if (this.showRoundTripLegCards()) {\n // Pre-check whichever legs are actually refundable, matching the\n // consumer app's \"non-refundable legs can't be selected\" behavior.\n this.onwardChecked.set(this.onwardRefundable());\n this.returnChecked.set(this.returnRefundable());\n this.step.set('select-leg');\n } else {\n this.step.set('details');\n }\n },\n error: () => { this.stopHints(); this.loading.set(false); this.toast.error('Could not load refund details.'); },\n });\n }\n\n /**\n * Both legs in play — sum each leg's own figures instead of trusting root\n * (root isn't reliably scoped to the picked alternatives, e.g. rounding\n * can drift between leg totals and the combined root total).\n */\n private buildCombinedLegData(root: RefundData, onward: LegDetails, ret: LegDetails): RefundData {\n const onwardData = this.buildLegData(root, onward, 'onward');\n const returnData = this.buildLegData(root, ret, 'return');\n const sum = (key: string) => Number(onwardData[key] || 0) + Number(returnData[key] || 0);\n return {\n ...root,\n isRefundable: onward.isRefundable === true && ret.isRefundable === true,\n totalRefundAmount: sum('totalRefundAmount'),\n totalRefundAmountBeforeCeil: sum('totalRefundAmountBeforeCeil'),\n totalCardRefundAmount: sum('totalCardRefundAmount'),\n totalCreditRefundAmount: sum('totalCreditRefundAmount'),\n totalNonRefundableServiceCharge: sum('totalNonRefundableServiceCharge'),\n totalCouponAmount: sum('totalCouponAmount'),\n walletRefundAmount: sum('walletRefundAmount'),\n totalPenaltyPoints: sum('totalPenaltyPoints'),\n totalSupplierPenaltyPoints: sum('totalSupplierPenaltyPoints'),\n totalLoyaltyPoints: sum('totalLoyaltyPoints'),\n totalGiftAmount: sum('totalGiftAmount'),\n totalAncillaryRefundAmount: sum('totalAncillaryRefundAmount'),\n totalLoyaltyPointsRefundAmount: sum('totalLoyaltyPointsRefundAmount'),\n totalCancellationFee: sum('totalCancellationFee'),\n totalSupplierBookingAmount: sum('totalSupplierBookingAmount'),\n originalAmount: Number(root.originalAmount || 0),\n refundBreakdown: this.mergeBreakdowns(onwardData.refundBreakdown, returnData.refundBreakdown),\n legInfo: { onward, return: ret },\n };\n }\n\n /** Combine two legs' itemized breakdowns for the \"both legs\" combined view. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private mergeBreakdowns(a: any, b: any): any {\n if (!a && !b) return undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mergeSide = (sa: any, sb: any) => ({\n fare: Number(sa?.fare || 0) + Number(sb?.fare || 0) || undefined,\n addOns: [...(sa?.addOns ?? []), ...(sb?.addOns ?? [])],\n ancillaries: [...(sa?.ancillaries ?? []), ...(sb?.ancillaries ?? [])],\n serviceFee: Number(sa?.serviceFee || 0) + Number(sb?.serviceFee || 0) || undefined,\n handlingFee: Number(sa?.handlingFee || 0) + Number(sb?.handlingFee || 0) || undefined,\n cancellationPenalty:\n Number(sa?.cancellationPenalty || 0) + Number(sb?.cancellationPenalty || 0) || undefined,\n });\n return {\n refundable: mergeSide(a?.refundable, b?.refundable),\n nonRefundable: mergeSide(a?.nonRefundable, b?.nonRefundable),\n };\n }\n\n private buildLegData(root: RefundData, leg: LegDetails, legType: 'onward' | 'return'): RefundData {\n // When this leg has no sibling in `legInfo` (a genuine one-way booking,\n // or a narrowed CrossSeller selection where the API only ever sent the\n // one leg), root necessarily describes this same single leg — so a\n // destination total the leg's own object left at 0 can safely fall back\n // to root's figure instead of silently zeroing out a real refund\n // destination. With a sibling leg present, root aggregates both legs and\n // is not trustworthy per-leg, so the leg's own value (even 0) wins.\n const hasSiblingLeg =\n legType === 'onward' ? !!root.legInfo?.return : !!root.legInfo?.onward;\n const fallback = (value: number | undefined, rootValue: number | undefined) =>\n Number(value || (hasSiblingLeg ? 0 : rootValue) || 0);\n\n const isCreditShell = leg.isCreditShell === true;\n const legRefund = Number(leg.totalRefundAmount ?? 0);\n const cardRefund = isCreditShell ? 0 : fallback(leg.totalCardRefundAmount, root.totalCardRefundAmount);\n const creditRefund = isCreditShell ? legRefund : fallback(leg.totalCreditRefundAmount, root.totalCreditRefundAmount);\n // The backend sometimes omits `isRefundable` on a single-leg booking's\n // leg object entirely (not `false`, just absent) while the root/source\n // breakdown both say the booking is refundable — trust the root flag\n // rather than defaulting a missing field to \"not eligible for a refund\".\n const legIsRefundable =\n leg.isRefundable === undefined ? root.isRefundable === true : leg.isRefundable === true;\n return {\n ...root,\n isRefundable: legIsRefundable,\n totalRefundAmount: legRefund,\n // Pre-rounding total — the backend ceils `totalRefundAmount` to a whole\n // currency unit, so wallet+card+credit+loyalty legitimately fall a few\n // cents short of it; reconciliation must compare against this instead.\n totalRefundAmountBeforeCeil: Number(leg.totalRefundAmountBeforeCeil ?? leg.totalRefundAmount ?? 0),\n totalCardRefundAmount: cardRefund,\n totalCreditRefundAmount: creditRefund,\n totalNonRefundableServiceCharge: Number(leg.totalNonRefundableServiceCharge || 0),\n totalCouponAmount: Number(leg.totalCouponAmount || 0),\n walletRefundAmount: fallback(leg.walletRefundAmount, root.walletRefundAmount),\n totalPenaltyPoints: Number(leg.totalPenaltyPoints || 0),\n totalSupplierPenaltyPoints: Number(leg.totalSupplierPenaltyPoints || 0),\n totalLoyaltyPoints: Number(leg.totalLoyaltyPoints || 0),\n totalGiftAmount: Number(leg.totalGiftAmount || 0),\n totalAncillaryRefundAmount: Number(leg.totalAncillaryRefundAmount || 0),\n totalLoyaltyPointsRefundAmount: fallback(leg.totalLoyaltyPointsRefundAmount, root.totalLoyaltyPointsRefundAmount),\n totalCancellationFee: Number(leg.totalCancellationFee ?? leg.totalPenaltyPoints ?? 0),\n totalSupplierBookingAmount: Number(leg.totalSupplierBookingAmount || 0),\n originalAmount: Number(root.originalAmount || 0),\n // Leg-scoped breakdown wins when the backend sends one; a single-leg\n // booking may only carry it at the root instead.\n refundBreakdown: leg.refundBreakdown ?? root.refundBreakdown,\n legInfo: legType === 'onward' ? { onward: leg } : { return: leg },\n };\n }\n\n startHints(): void {\n let i = 0;\n this.cancelHint.set(this.CANCEL_HINTS[0]);\n this.hintTimer = setInterval(() => {\n if (i < this.CANCEL_HINTS.length - 1) {\n i++;\n this.cancelHint.set(this.CANCEL_HINTS[i]);\n } else {\n clearInterval(this.hintTimer);\n this.hintTimer = null;\n }\n }, 1800);\n }\n\n stopHints(): void {\n if (this.hintTimer) { clearInterval(this.hintTimer); this.hintTimer = null; }\n this.cancelHint.set('');\n }\n\n fmt(value: number, currency?: string): string {\n const cur = currency ?? this.refundData()?.currency ?? 'SAR';\n return `${this.fmtNum(value)} ${cur}`;\n }\n\n // Plain formatted number without a currency suffix (used by the calc divider / formula box).\n fmtNum(value: number): string {\n return Number(value || 0).toLocaleString('en-SA', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n }\n\n fmtNeg(value: number, currency?: string): string {\n const n = Number(value || 0);\n const str = this.fmt(n, currency);\n return n > 0 ? `− ${str}` : str;\n }\n\n fmtNegResult(value: number): string {\n const n = Number(value || 0);\n const str = this.fmtResult(n);\n return n > 0 ? `− ${str}` : str;\n }\n\n // Entry point from the details screen: always goes to the refund-method\n // step. For credit-shell refunds that step shows a single read-only credit\n // notice instead of a picker, since the refund can only go to the shell —\n // but the agent still sees it before confirming, same as the standard flow.\n requestCancel(): void {\n // NIL refund: nothing to refund at all — skip the refund-method popup\n // and cancel directly.\n if (this.isNilRefund()) {\n this.confirm();\n } else {\n this.confirming.set(true);\n }\n }\n\n confirm(): void {\n const sel = this.selectedLeg();\n\n // Build legInfo array: omit when cancelling both (backend treats absence as both)\n const legInfo: string[] | undefined =\n sel === 'onward' ? ['onward'] :\n sel === 'return' ? ['return'] :\n undefined; // both legs — omit the field\n\n const source = this.selectedSource() || undefined;\n const preferredRefundMethod = this.preferredRefundMethod();\n const splitAmounts =\n preferredRefundMethod === 'split'\n ? {\n walletRefundAmount: Number(this.adjustedData()?.walletRefundAmount ?? 0),\n totalCardRefundAmount: Number(this.adjustedData()?.totalCardRefundAmount ?? 0),\n }\n : undefined;\n this.confirming.set(false);\n this.stopHints();\n this.cancelling.set(true);\n this.bookingService.confirmCancel(this.bookingId(), this.product(), legInfo, source, preferredRefundMethod, splitAmounts).subscribe({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n next: (raw: any) => {\n this.stopHints();\n this.cancelling.set(false);\n this.cancelResult.set(raw?.data ?? raw);\n this.confirmed.emit(sel);\n },\n error: () => {\n this.stopHints();\n this.cancelling.set(false);\n this.toast.error('Cancellation failed. Please try again.');\n },\n });\n }\n}\n","<p-dialog [visible]=\"visible()\" (visibleChange)=\"$event ? null : closed.emit()\"\n [modal]=\"true\" [blockScroll]=\"true\" [draggable]=\"false\" [resizable]=\"false\"\n [showHeader]=\"false\" [style]=\"{ width: '560px', padding: '0' }\" styleClass=\"sbd-cancel-dialog-wrapper\">\n\n <div class=\"sbd-cancel\">\n\n <!-- Loading refund details — shows cycling hints -->\n @if (loading()) {\n <div class=\"sbd-cancel__are-you-sure\">\n <button type=\"button\" class=\"sbd-cancel__close-btn sbd-cancel__close-btn--floating\" (click)=\"closed.emit()\" aria-label=\"Close\">\n <i class=\"pi pi-times\"></i>\n </button>\n <div class=\"sbd-cancel__ays-icon\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n </div>\n @for (h of [cancelHint()]; track h) {\n <div class=\"sbd-cancel__ays-hint\">{{ h }}</div>\n }\n <div class=\"sbd-cancel__ays-dots\">\n <span></span><span></span><span></span>\n </div>\n </div>\n }\n\n <!-- Select leg — shown once the refund preview has fully loaded, before the\n refund breakdown, for round-trip bookings the backend hasn't already\n restricted to a single leg. Same card design as almatar-b2c's\n select-leg screen (checkbox overlay, refundable badge, disclaimer). -->\n @else if (step() === 'select-leg') {\n <div class=\"sbd-cancel__method-header\">\n <button type=\"button\" class=\"sbd-cancel__method-close\" (click)=\"closed.emit()\" aria-label=\"Close\">\n <i class=\"pi pi-times\"></i>\n </button>\n <div class=\"sbd-cancel__method-header-text\">\n <h3 class=\"sbd-cancel__method-title\">Select Leg to Cancel</h3>\n <span class=\"sbd-cancel__method-sub\">Booking ID #{{ bookingId() }}</span>\n </div>\n </div>\n\n <div class=\"sbd-cancel__select-leg-body\">\n @if (forcedLegType(); as forced) {\n <div class=\"sbd-cancel__single-leg-note\">\n <i class=\"pi pi-info-circle\"></i>\n <span>This airline doesn't allow cancelling a single flight — {{ itineraryLeg(forced)?.from }} to {{ itineraryLeg(forced)?.to }} will be included automatically.</span>\n </div>\n }\n @if (allLegsNonRefundable()) {\n <div class=\"sbd-cancel__all-non-refundable-note\">\n <i class=\"pi pi-exclamation-triangle\"></i>\n <span>Sorry, we're unable to provide a refund for this booking, as both flights are non-refundable based on airline rules.</span>\n </div>\n }\n <!-- Onward -->\n <div class=\"sbd-cancel__leg-select-card\"\n [ngClass]=\"{\n 'sbd-cancel__leg-select-card--selected': onwardChecked() && onwardRefundable(),\n 'sbd-cancel__leg-select-card--disabled': !onwardRefundable(),\n 'sbd-cancel__leg-select-card--frozen': forcedLegType() === 'onward'\n }\">\n @if (forcedLegType() !== 'onward') {\n <label class=\"sbd-cancel__leg-select-checkbox\">\n <input type=\"checkbox\" [checked]=\"onwardChecked()\" [disabled]=\"!onwardRefundable()\"\n (change)=\"toggleLeg('onward')\" />\n <span class=\"sbd-cancel__leg-select-icon\"><i class=\"pi pi-check\"></i></span>\n </label>\n } @else {\n <i class=\"pi pi-lock sbd-cancel__leg-select-lock\"></i>\n }\n <div class=\"sbd-cancel__leg-select-content\">\n @if (itineraryLeg('onward'); as leg) {\n <div class=\"sbd-cancel__leg-select-top\">\n <div>\n <span class=\"sbd-cancel__leg-select-name\">{{ leg.from }} to {{ leg.to }}</span>\n <div class=\"sbd-cancel__leg-select-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline\"\n [ngClass]=\"onwardRefundable() && forcedLegType() !== 'onward' ? 'sbd-cancel__badge--green' : 'sbd-cancel__badge--muted'\">\n {{ onwardRefundable() ? 'Refundable' : 'Non-Refundable' }}\n </span>\n </div>\n <div class=\"sbd-cancel__leg-select-times\">\n <span class=\"sbd-cancel__leg-select-time\">{{ fmtTime(leg.depTime) }}</span>\n <span class=\"sbd-cancel__leg-select-line\">\n <span class=\"sbd-cancel__leg-select-line-stops\">{{ leg.stops.length > 0 ? (leg.stops.length + ' stop' + (leg.stops.length > 1 ? 's' : '')) : 'Direct' }}</span>\n @if (fmtMins(leg.totalMinutes)) { <span class=\"sbd-cancel__leg-select-line-dur\">{{ fmtMins(leg.totalMinutes) }}</span> }\n <i class=\"pi pi-arrow-right sbd-cancel__leg-select-line-arrow\"></i>\n </span>\n <span class=\"sbd-cancel__leg-select-time\">{{ fmtTime(leg.arrTime) }}</span>\n </div>\n @if (leg.airlineName || leg.cabin) {\n <span class=\"sbd-cancel__leg-select-airline\">\n {{ leg.airlineName }}{{ leg.airlineName && leg.cabin ? ' · ' : '' }}{{ leg.cabin }}\n </span>\n }\n <div class=\"sbd-cancel__leg-select-footer\">\n @if (leg.operatedBy.length) {\n <span class=\"sbd-cancel__leg-select-operated-by\">Operated by {{ leg.operatedBy.join(', ') }}</span>\n }\n <!-- <i class=\"pi pi-chevron-down sbd-cancel__leg-select-chevron\"></i> -->\n </div>\n } @else {\n <div class=\"sbd-cancel__leg-select-top\">\n <span class=\"sbd-cancel__leg-select-name\">Onward</span>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline\"\n [ngClass]=\"onwardRefundable() && forcedLegType() !== 'onward' ? 'sbd-cancel__badge--green' : 'sbd-cancel__badge--muted'\">\n {{ onwardRefundable() ? 'Refundable' : 'Non-Refundable' }}\n </span>\n </div>\n }\n @if (!onwardRefundable()) {\n <div class=\"sbd-cancel__leg-select-notice\">\n <i class=\"pi pi-info-circle\"></i>\n <span>This flight type doesn't allow refunds on cancellation, based on the airline's fare rules.</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Return -->\n <div class=\"sbd-cancel__leg-select-card\"\n [ngClass]=\"{\n 'sbd-cancel__leg-select-card--selected': returnChecked() && returnRefundable(),\n 'sbd-cancel__leg-select-card--disabled': !returnRefundable(),\n 'sbd-cancel__leg-select-card--frozen': forcedLegType() === 'return'\n }\">\n @if (forcedLegType() !== 'return') {\n <label class=\"sbd-cancel__leg-select-checkbox\">\n <input type=\"checkbox\" [checked]=\"returnChecked()\" [disabled]=\"!returnRefundable()\"\n (change)=\"toggleLeg('return')\" />\n <span class=\"sbd-cancel__leg-select-icon\"><i class=\"pi pi-check\"></i></span>\n </label>\n } @else {\n <i class=\"pi pi-lock sbd-cancel__leg-select-lock\"></i>\n }\n <div class=\"sbd-cancel__leg-select-content\">\n @if (itineraryLeg('return'); as leg) {\n <div class=\"sbd-cancel__leg-select-top\">\n <div>\n <span class=\"sbd-cancel__leg-select-name\">{{ leg.from }} to {{ leg.to }}</span>\n <div class=\"sbd-cancel__leg-select-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline\"\n [ngClass]=\"returnRefundable() && forcedLegType() !== 'return' ? 'sbd-cancel__badge--green' : 'sbd-cancel__badge--muted'\">\n {{ returnRefundable() ? 'Refundable' : 'Non-Refundable' }}\n </span>\n </div>\n <div class=\"sbd-cancel__leg-select-times\">\n <span class=\"sbd-cancel__leg-select-time\">{{ fmtTime(leg.depTime) }}</span>\n <span class=\"sbd-cancel__leg-select-line\">\n <span class=\"sbd-cancel__leg-select-line-stops\">{{ leg.stops.length > 0 ? (leg.stops.length + ' stop' + (leg.stops.length > 1 ? 's' : '')) : 'Direct' }}</span>\n @if (fmtMins(leg.totalMinutes)) { <span class=\"sbd-cancel__leg-select-line-dur\">{{ fmtMins(leg.totalMinutes) }}</span> }\n <i class=\"pi pi-arrow-right sbd-cancel__leg-select-line-arrow\"></i>\n </span>\n <span class=\"sbd-cancel__leg-select-time\">{{ fmtTime(leg.arrTime) }}</span>\n </div>\n @if (leg.airlineName || leg.cabin) {\n <span class=\"sbd-cancel__leg-select-airline\">\n {{ leg.airlineName }}{{ leg.airlineName && leg.cabin ? ' · ' : '' }}{{ leg.cabin }}\n </span>\n }\n <div class=\"sbd-cancel__leg-select-footer\">\n @if (leg.operatedBy.length) {\n <span class=\"sbd-cancel__leg-select-operated-by\">Operated by {{ leg.operatedBy.join(', ') }}</span>\n }\n <!-- <i class=\"pi pi-chevron-down sbd-cancel__leg-select-chevron\"></i> -->\n </div>\n } @else {\n <div class=\"sbd-cancel__leg-select-top\">\n <span class=\"sbd-cancel__leg-select-name\">Return</span>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline\"\n [ngClass]=\"returnRefundable() && forcedLegType() !== 'return' ? 'sbd-cancel__badge--green' : 'sbd-cancel__badge--muted'\">\n {{ returnRefundable() ? 'Refundable' : 'Non-Refundable' }}\n </span>\n </div>\n }\n @if (!returnRefundable()) {\n <div class=\"sbd-cancel__leg-select-notice\">\n <i class=\"pi pi-info-circle\"></i>\n <span>This flight type doesn't allow refunds on cancellation, based on the airline's fare rules.</span>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (!allLegsNonRefundable() && !onwardChecked() && !returnChecked()) {\n <div class=\"sbd-cancel__leg-select-hint\">Select at least one flight to continue</div>\n }\n\n <div class=\"sbd-cancel__footer\">\n <button pButton\n styleClass=\"sbd-cancel__btn-primary\"\n label=\"Continue\"\n [disabled]=\"allLegsNonRefundable() || (!onwardChecked() && !returnChecked())\"\n (click)=\"step.set('details')\"></button>\n </div>\n }\n\n <!-- Refund method — replaces the old are-you-sure + radio picker.\n Stays mounted (dimmed) behind the result overlay once confirmed. -->\n @else if (confirming() || cancelResult()) {\n <div class=\"sbd-cancel__method-header\">\n <button type=\"button\" class=\"sbd-cancel__method-close\" (click)=\"confirming.set(false)\" aria-label=\"Close\">\n <i class=\"pi pi-times\"></i>\n </button>\n <div class=\"sbd-cancel__method-header-text\">\n <h3 class=\"sbd-cancel__method-title\">Refund Method</h3>\n <span class=\"sbd-cancel__method-sub\">Booking ID #{{ bookingId() }}</span>\n </div>\n </div>\n\n <div class=\"sbd-cancel__method-body\">\n <div class=\"sbd-cancel__method-amount\">\n <span>You will get back</span>\n <strong>{{ fmt(adjustedData()?.totalRefundAmount) }}</strong>\n </div>\n\n @if (isCreditShell()) {\n <!-- Credit-shell refunds have exactly one destination — the airline\n credit shell — so show it as a read-only card, not a picker. -->\n <div class=\"sbd-cancel__method-option sbd-cancel__method-option--active\">\n <span class=\"sbd-cancel__method-icon\"><i class=\"pi pi-wallet\"></i></span>\n <span class=\"sbd-cancel__method-body-text\">\n <span class=\"sbd-cancel__method-name\">{{ creditShellSupplierName() }} website credit</span>\n <span class=\"sbd-cancel__method-desc\">Your refund will be issued instantly by {{ creditShellSupplierName() }}.</span>\n <span class=\"sbd-cancel__method-badge sbd-cancel__method-badge--instant\">\n <svg width=\"12\" height=\"9\" viewBox=\"0 0 12 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n Instant\n </span>\n </span>\n </div>\n\n <div class=\"sbd-cancel__notice sbd-cancel__notice--credit\">\n <i class=\"pi pi-info-circle\"></i>\n <span>\n Your refund will be issued as airline credit under the same PNR.\n It can be used only for future booking on {{ creditShellSupplierName() }} website.\n </span>\n </div>\n\n <!-- Refundable ancillaries (baggage, seats, …) can independently be\n flagged credit-shell or not — each renders as its own card,\n matching either the credit-shell style above or the normal\n wallet style, both with the same nested note when credit-shell. -->\n @for (item of creditShellAncillaryItems(); track item.name) {\n <div class=\"sbd-cancel__method-option sbd-cancel__method-option--active\">\n <span class=\"sbd-cancel__method-icon\"><i class=\"pi pi-wallet\"></i></span>\n <span class=\"sbd-cancel__method-body-text\">\n <span class=\"sbd-cancel__method-name\">\n {{ item.isCreditShell ? (creditShellSupplierName() + ' website credit') : 'Almatar Wallet' }}\n — {{ item.name }}\n </span>\n <span class=\"sbd-cancel__method-desc\">\n @if (item.isCreditShell) {\n Your refund will be issued instantly by {{ creditShellSupplierName() }}.\n } @else {\n Usable for future bookings\n }\n </span>\n <span class=\"sbd-cancel__method-badge sbd-cancel__method-badge--instant\">\n <svg width=\"12\" height=\"9\" viewBox=\"0 0 12 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n Instant\n </span>\n @if (item.isCreditShell) {\n <span class=\"sbd-cancel__notice sbd-cancel__notice--info\">\n <i class=\"pi pi-info-circle\"></i>\n <span>Your refund will be issued as airline credit under the same PNR. It can be used only for future booking on {{ creditShellSupplierName() }} website.</span>\n </span>\n }\n </span>\n <strong>{{ fmt(item.amount) }}</strong>\n </div>\n }\n } @else {\n\n @if (isFullWalletRefundAllowed() || isWalletOnlyRefund() || isLoyaltyOnlyRefund()) {\n <button type=\"button\" class=\"sbd-cancel__method-option\"\n [ngClass]=\"{ 'sbd-cancel__method-option--active': preferredRefundMethod() === 'wallet' }\"\n (click)=\"preferredRefundMethod.set('wallet')\">\n <span class=\"sbd-cancel__method-icon\"><i class=\"pi pi-wallet\"></i></span>\n <span class=\"sbd-cancel__method-body-text\">\n <span class=\"sbd-cancel__method-name\">{{ walletCardLabel() }}</span>\n <span class=\"sbd-cancel__method-desc\">Usable for future bookings</span>\n <span class=\"sbd-cancel__method-badge sbd-cancel__method-badge--instant\">\n <svg width=\"12\" height=\"9\" viewBox=\"0 0 12 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n Instant Refund\n </span>\n @if (hasLoyaltyPointsRefund() && !hasCashWalletRefund()) {\n <span class=\"sbd-cancel__notice sbd-cancel__notice--info\">\n <i class=\"pi pi-info-circle\"></i>\n <span>External loyalty points are refunded to your almatar Wallet as permanent points and ready to use in your next booking.</span>\n </span>\n }\n </span>\n <span class=\"sbd-cancel__method-radio\"></span>\n </button>\n }\n\n <!-- Original payment method — replaced with a \"Split Refund\" card whenever\n part of the refund is forced to the wallet (e.g. loyalty points used),\n since the total can't go 100% to the original payment method.\n Name/desc/badge/icon become gateway-specific for installment (Tamara,\n Tabby) and loyalty (Al Rajhi Mokafaa) payment methods. -->\n @if (!hasSplitRefund() && !isWalletOnlyRefund() && !isLoyaltyOnlyRefund()) {\n <button type=\"button\" class=\"sbd-cancel__method-option\"\n [ngClass]=\"{ 'sbd-cancel__method-option--active': preferredRefundMethod() === 'originalPaymentMethod' }\"\n (click)=\"preferredRefundMethod.set('originalPaymentMethod')\">\n <span class=\"sbd-cancel__method-icon\">\n <i class=\"pi\" [ngClass]=\"isSpecialGatewayMethod() ? 'pi-wallet' : 'pi-credit-card'\"></i>\n </span>\n <span class=\"sbd-cancel__method-body-text\">\n <span class=\"sbd-cancel__method-name\">{{ originalPaymentLabel() }}</span>\n <span class=\"sbd-cancel__method-desc\">\n @if (isInstallmentMethod()) {\n Returned to your {{ customerPaymentLabel() }} installment plan\n } @else if (isLoyaltyMethod()) {\n Refunded to your {{ customerPaymentLabel() }} account\n } @else {\n Returned to your original payment method\n }\n </span>\n <span class=\"sbd-cancel__method-badge\" [ngClass]=\"isLoyaltyMethod() ? 'sbd-cancel__method-badge--loyalty' : 'sbd-cancel__method-badge--days'\">\n @if (!isLoyaltyMethod()) {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.30078 6.50195C3.20312 6.50195 3.12174 6.4694 3.05664 6.4043C2.99154 6.33919 2.95898 6.25781 2.95898 6.16016C2.95898 6.06576 2.99154 5.986 3.05664 5.9209C3.12174 5.85579 3.20312 5.82324 3.30078 5.82324H5.5127V2.86914C5.5127 2.77474 5.54525 2.69499 5.61035 2.62988C5.67546 2.56478 5.75521 2.53223 5.84961 2.53223C5.94727 2.53223 6.02865 2.56478 6.09375 2.62988C6.15885 2.69499 6.19141 2.77474 6.19141 2.86914V6.16016C6.19141 6.25781 6.15885 6.33919 6.09375 6.4043C6.02865 6.4694 5.94727 6.50195 5.84961 6.50195H3.30078ZM5.85449 10.9551C5.16764 10.9551 4.52311 10.8249 3.9209 10.5645C3.31868 10.3073 2.78971 9.95085 2.33398 9.49512C1.87826 9.03939 1.52018 8.51042 1.25977 7.9082C1.0026 7.30599 0.874023 6.66146 0.874023 5.97461C0.874023 5.28776 1.0026 4.64323 1.25977 4.04102C1.52018 3.4388 1.87826 2.90983 2.33398 2.4541C2.78971 1.99512 3.31868 1.63704 3.9209 1.37988C4.52311 1.12272 5.16764 0.994141 5.85449 0.994141C6.54134 0.994141 7.18587 1.12272 7.78809 1.37988C8.3903 1.63704 8.91927 1.99512 9.375 2.4541C9.83073 2.90983 10.1872 3.4388 10.4443 4.04102C10.7048 4.64323 10.835 5.28776 10.835 5.97461C10.835 6.66146 10.7048 7.30599 10.4443 7.9082C10.1872 8.51042 9.83073 9.03939 9.375 9.49512C8.91927 9.95085 8.3903 10.3073 7.78809 10.5645C7.18587 10.8249 6.54134 10.9551 5.85449 10.9551ZM5.85449 10.125C6.42741 10.125 6.96452 10.0176 7.46582 9.80273C7.96712 9.58789 8.4082 9.29004 8.78906 8.90918C9.16992 8.52832 9.46777 8.08724 9.68262 7.58594C9.89746 7.08464 10.0049 6.54753 10.0049 5.97461C10.0049 5.40169 9.89746 4.86458 9.68262 4.36328C9.46777 3.85872 9.16992 3.41764 8.78906 3.04004C8.4082 2.65918 7.96712 2.36133 7.46582 2.14648C6.96452 1.93164 6.42741 1.82422 5.85449 1.82422C5.28158 1.82422 4.74447 1.93164 4.24316 2.14648C3.74186 2.36133 3.30078 2.65918 2.91992 3.04004C2.53906 3.41764 2.24121 3.85872 2.02637 4.36328C1.81152 4.86458 1.7041 5.40169 1.7041 5.97461C1.7041 6.54753 1.81152 7.08464 2.02637 7.58594C2.24121 8.08724 2.53906 8.52832 2.91992 8.90918C3.30078 9.29004 3.74186 9.58789 4.24316 9.80273C4.74447 10.0176 5.28158 10.125 5.85449 10.125Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n } @else {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"#0B54C2\" stroke-width=\"1.2\" />\n <path d=\"M6 5.5v3M6 3.9v.01\" stroke=\"#0B54C2\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n </svg>\n }\n {{ cardBadgeText() }}\n </span>\n </span>\n <span class=\"sbd-cancel__option-end\">\n @if (isMadaMethod()) {\n <span class=\"sbd-cancel__mada-logo\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"madaLogo\"></ng-container>\n </span>\n }\n <span class=\"sbd-cancel__method-radio\"></span>\n </span>\n </button>\n }\n\n <!-- Split Refund -->\n @if (hasSplitRefund()) {\n <button type=\"button\" class=\"sbd-cancel__method-option sbd-cancel__method-option--split\"\n [ngClass]=\"{ 'sbd-cancel__method-option--active': preferredRefundMethod() === 'split' }\"\n (click)=\"preferredRefundMethod.set('split')\">\n <span class=\"sbd-cancel__method-icon\"><i class=\"pi pi-wallet\"></i></span>\n <span class=\"sbd-cancel__method-body-text\">\n <span class=\"sbd-cancel__method-name\">Split Refund</span>\n <span class=\"sbd-cancel__method-desc\">Returned to your original payment method</span>\n </span>\n <strong class=\"sbd-cancel__method-split-total\">{{ fmt(adjustedData()?.totalRefundAmount) }}</strong>\n <span class=\"sbd-cancel__method-radio\"></span>\n\n <span class=\"sbd-cancel__method-split-breakdown\">\n @for (row of splitRefundRows(); track row.label) {\n <span class=\"sbd-cancel__method-split-row\">\n <span class=\"sbd-cancel__method-split-label\">\n {{ row.label }}\n @if (row.isMada) {\n <span class=\"sbd-cancel__mada-logo\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"madaLogo\"></ng-container>\n </span>\n }\n </span>\n <strong>{{ fmt(row.value) }}</strong>\n </span>\n <span class=\"sbd-cancel__method-badge\"\n [ngClass]=\"row.instant ? 'sbd-cancel__method-badge--instant' : (isLoyaltyMethod() ? 'sbd-cancel__method-badge--loyalty' : 'sbd-cancel__method-badge--days')\">\n {{ row.badgeText }}\n </span>\n @if (row.isLoyalty) {\n <span class=\"sbd-cancel__notice sbd-cancel__notice--info\">\n <i class=\"pi pi-info-circle\"></i>\n <span>External loyalty points are refunded to your almatar Wallet as permanent points and ready to use in your next booking.</span>\n </span>\n }\n }\n </span>\n </button>\n }\n }\n </div>\n\n <div class=\"sbd-cancel__footer\">\n <button pButton\n styleClass=\"sbd-cancel__btn-danger-pill\"\n [label]=\"cancelling() ? 'Cancelling...' : 'Confirm Cancellation'\"\n [disabled]=\"cancelling()\" (click)=\"confirm()\"></button>\n </div>\n }\n\n <!-- Main card -->\n @else if (refundData() && step() === 'details') {\n <!-- Card header -->\n <div class=\"sbd-cancel__header sbd-cancel__header--stack\">\n <div class=\"sbd-cancel__header-titles\">\n <span class=\"sbd-cancel__header-title\">Cancel Booking Request</span>\n <span class=\"sbd-cancel__header-sub\">#{{ refundData()?.bookingId ?? bookingId() }}</span>\n </div>\n <button type=\"button\" class=\"sbd-cancel__close-btn\" (click)=\"closed.emit()\" aria-label=\"Close\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"sbd-cancel__body\">\n\n <!-- Non-refundable -->\n @if (!refundData()?.isRefundable) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-exclamation-triangle\"></i>\n <div>\n <strong>This booking is not eligible for a refund.</strong>\n @if (refundData()?.cause) {\n <p>{{ refundData()?.cause }}</p>\n } @else {\n <p>Please escalate to the relevant team for manual handling.</p>\n }\n </div>\n </div>\n }\n\n <!-- Refundable flow -->\n @else {\n\n <!-- Top summary: paid / get back -->\n <div class=\"sbd-cancel__summary\">\n <div class=\"sbd-cancel__summary-row\"\n [ngClass]=\"{ 'sbd-cancel__summary-row--toggle': hasPaidBreakdown() && !!adjustedData()?.totalWalletAmount }\"\n (click)=\"hasPaidBreakdown() && !!adjustedData()?.totalWalletAmount && togglePaidSummary()\">\n <span class=\"sbd-cancel__summary-label\"><i class=\"pi pi-wallet\"></i> Total paid</span>\n <span class=\"sbd-cancel__summary-value\">\n <strong>{{ fmt(adjustedData()?.originalAmount) }}</strong>\n @if (hasPaidBreakdown() && !!adjustedData()?.totalWalletAmount) {\n <button type=\"button\" class=\"sbd-cancel__leg-chevron\"\n [ngClass]=\"{ 'sbd-cancel__leg-chevron--collapsed': !paidSummaryExpanded() }\"\n aria-label=\"Toggle paid breakdown\">\n <i class=\"pi pi-chevron-up\"></i>\n </button>\n }\n </span>\n </div>\n\n @if (hasPaidBreakdown() && paidSummaryExpanded() && !!adjustedData()?.totalWalletAmount) {\n <div class=\"sbd-cancel__summary-breakdown\">\n @for (row of paidBreakdownRows(); track row.label) {\n @if (row.label === 'Almatar Wallet') {\n <div class=\"sbd-cancel__summary-breakdown-row\">\n <span>{{ row.label }}</span>\n <span>{{ fmt(row.value) }}</span>\n </div>\n }\n }\n </div>\n }\n\n <div class=\"sbd-cancel__summary-row sbd-cancel__summary-row--refund\">\n <span class=\"sbd-cancel__summary-label\"><i class=\"pi pi-dollar\"></i> You will get back</span>\n <strong>{{ fmt(adjustedData()?.totalRefundAmount) }}</strong>\n </div>\n </div>\n\n <!-- Golden Guarantee gift — overrides credit-shell messaging below -->\n @if (hasGoldenGuaranteeGift()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--success\">\n <i class=\"pi pi-shield\"></i>\n <span>You're covered by Cancel for any reason service, you'll get 100% refund, minus any applicable fees. See the breakdown below.</span>\n </div>\n }\n\n <!-- One-way (or a round-trip restricted to a single leg): single card -->\n @if (!showRoundTripLegCards()) {\n <!-- Source selector (multiple suppliers) -->\n @if (availableSources().length > 1) {\n <div class=\"sbd-cancel__source-selector\">\n <span class=\"sbd-cancel__source-label\">Cancel via</span>\n @for (src of availableSources(); track src) {\n <button class=\"sbd-cancel__source-chip\"\n [ngClass]=\"{\n 'sbd-cancel__source-chip--active': selectedSource() === src,\n 'sbd-cancel__source-chip--no-refund': activeSourceBreakdown()?.[src]?.isRefundable === false\n }\"\n (click)=\"selectedSource.set(src)\">\n {{ src }}\n @if (activeSourceBreakdown()?.[src]?.isRefundable === false) {\n <i class=\"pi pi-ban\" style=\"font-size:10px; margin-left:4px;\"></i>\n }\n </button>\n }\n </div>\n @if (sourceNonRefundableHint()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-ban\"></i>\n <span>{{ sourceNonRefundableHint() }}</span>\n </div>\n }\n }\n\n <!-- Not refundable -->\n @if (!currentData()?.isRefundable) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-ban\"></i>\n <div>\n <strong>This leg is not eligible for a refund.</strong>\n <p>Please escalate to the relevant team for manual handling.</p>\n </div>\n </div>\n } @else {\n <div class=\"sbd-cancel__section-title\">Refund Details</div>\n\n <div class=\"sbd-cancel__refund-card\">\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline sbd-cancel__badge--green\">Refundable</span>\n\n @if (refundableBreakdownRows(adjustedData()).length) {\n @for (r of refundableBreakdownRows(adjustedData()); track r.label) {\n <div class=\"sbd-cancel__refund-card-row\">\n <span>{{ r.label }}</span>\n <strong>{{ fmt(r.value) }}</strong>\n </div>\n }\n } @else {\n <div class=\"sbd-cancel__refund-card-row\">\n <span>Fare</span>\n <strong>{{ fmt(adjustedData()?.originalAmount) }}</strong>\n </div>\n }\n\n <!-- hide addon note new CR from CX -->\n <!-- @if (hasRefundableAddonNote(adjustedData())) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--neutral\">\n <i class=\"pi pi-info-circle\"></i>\n <span>Your add-on service/s refund will be processed separately by our Customer Service team shortly.</span>\n </div>\n } -->\n\n <!-- Deductions -->\n @if (deductions().length) {\n <div class=\"sbd-cancel__refund-card-divider\"></div>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline sbd-cancel__badge--muted\">Not Refunded - Deductions</span>\n @for (d of deductions(); track d.label) {\n <div class=\"sbd-cancel__refund-card-line\">\n <span>\n {{ d.label }}\n @if (d.badge) { <span class=\"sbd-cancel__tag\">{{ d.badge }}</span> }\n </span>\n <span class=\"sbd-cancel__refund-card-line--neg\">{{ fmtNeg(d.value) }}</span>\n </div>\n }\n }\n\n <div class=\"sbd-cancel__refund-card-divider sbd-cancel__refund-card-divider--dashed\"></div>\n <div class=\"sbd-cancel__refund-card-total\">\n <span>Total Refund</span>\n <strong>{{ fmt(adjustedData()?.totalRefundAmount) }}</strong>\n </div>\n </div>\n\n <!-- Credit shell -->\n @if (creditShellNote()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--credit\">\n <i class=\"pi pi-wallet\"></i>\n <span>ℹ️ {{ creditShellNote() }}</span>\n </div>\n }\n }\n }\n\n <!-- Round trip: one collapsible card per leg (only when both legs are cancellable) -->\n @if (showRoundTripLegCards()) {\n <!-- Gift hint -->\n @if (giftHint()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--tip\">\n <i class=\"pi pi-info-circle\"></i>\n <span>{{ giftHint() }}</span>\n </div>\n }\n\n <!-- Mixed hint -->\n @if (mixedHint()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-exclamation-triangle\"></i>\n <span>{{ mixedHint() }}</span>\n </div>\n }\n\n <!-- Source selector (multiple suppliers) -->\n @if (availableSources().length > 1) {\n <div class=\"sbd-cancel__source-selector\">\n <span class=\"sbd-cancel__source-label\">Cancel via</span>\n @for (src of availableSources(); track src) {\n <button class=\"sbd-cancel__source-chip\"\n [ngClass]=\"{\n 'sbd-cancel__source-chip--active': selectedSource() === src,\n 'sbd-cancel__source-chip--no-refund': activeSourceBreakdown()?.[src]?.isRefundable === false\n }\"\n (click)=\"selectedSource.set(src)\">\n {{ src }}\n @if (activeSourceBreakdown()?.[src]?.isRefundable === false) {\n <i class=\"pi pi-ban\" style=\"font-size:10px; margin-left:4px;\"></i>\n }\n </button>\n }\n </div>\n @if (sourceNonRefundableHint()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-ban\"></i>\n <span>{{ sourceNonRefundableHint() }}</span>\n </div>\n }\n }\n\n <!-- Onward leg card -->\n @if (onwardChecked()) {\n <div class=\"sbd-cancel__leg-card\">\n <div class=\"sbd-cancel__leg-card-header\" (click)=\"toggleLegExpanded('onward')\">\n <span class=\"sbd-cancel__leg-checkbox\">Onward</span>\n <button type=\"button\" class=\"sbd-cancel__leg-chevron\"\n [ngClass]=\"{ 'sbd-cancel__leg-chevron--collapsed': !onwardExpanded() }\"\n aria-label=\"Toggle\">\n <i class=\"pi pi-chevron-up\"></i>\n </button>\n </div>\n\n @if (onwardExpanded()) {\n <div class=\"sbd-cancel__leg-card-body\">\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline\"\n [ngClass]=\"legAdjustedData('onward')?.isRefundable ? 'sbd-cancel__badge--green' : 'sbd-cancel__badge--red'\">\n {{ legAdjustedData('onward')?.isRefundable ? 'Refundable' : 'Non-Refundable' }}\n </span>\n\n @if (legAdjustedData('onward')?.isRefundable) {\n @if (refundableBreakdownRows(legAdjustedData('onward')).length) {\n @for (r of refundableBreakdownRows(legAdjustedData('onward')); track r.label) {\n <div class=\"sbd-cancel__refund-card-row\">\n <span>{{ r.label }}</span>\n <strong>{{ fmt(r.value) }}</strong>\n </div>\n }\n } @else {\n <div class=\"sbd-cancel__refund-card-row\">\n <span>Fare</span>\n <strong>{{ fmt(legRefundPool('onward')) }}</strong>\n </div>\n }\n\n <!-- hide addon note new CR from CX -->\n <!-- @if (hasRefundableAddonNote(legAdjustedData('onward'))) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--neutral\">\n <i class=\"pi pi-info-circle\"></i>\n <span>Your add-on service/s refund will be processed separately by our Customer Service team shortly.</span>\n </div>\n } -->\n\n @if (legDeductions('onward').length && !isCreditShell()) {\n <div class=\"sbd-cancel__refund-card-divider\"></div>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline sbd-cancel__badge--muted\">Not Refunded - Deductions</span>\n @for (d of legDeductions('onward'); track d.label) {\n <div class=\"sbd-cancel__refund-card-line\">\n <span>\n {{ d.label }}\n @if (d.badge) { <span class=\"sbd-cancel__tag\">{{ d.badge }}</span> }\n </span>\n <span class=\"sbd-cancel__refund-card-line--neg\">{{ fmtNeg(d.value) }}</span>\n </div>\n }\n }\n\n <div class=\"sbd-cancel__refund-card-divider sbd-cancel__refund-card-divider--dashed\"></div>\n <div class=\"sbd-cancel__refund-card-total\">\n <span>Departure Total Refund</span>\n <strong>{{ fmt(legAdjustedData('onward')?.totalRefundAmount) }}</strong>\n </div>\n\n @if (refundData()?.legInfo?.onward?.isCreditShell && !hasGoldenGuaranteeGift()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--credit\">\n <i class=\"pi pi-wallet\"></i>\n <span>ℹ️ The refund for the onward flight has been issued as an Airline Credit Shell.</span>\n </div>\n }\n } @else {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-ban\"></i>\n <span>This leg is not eligible for a refund.</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Return leg card -->\n @if (returnChecked()) {\n <div class=\"sbd-cancel__leg-card\">\n <div class=\"sbd-cancel__leg-card-header\" (click)=\"toggleLegExpanded('return')\">\n <span class=\"sbd-cancel__leg-checkbox\">Return</span>\n <button type=\"button\" class=\"sbd-cancel__leg-chevron\"\n [ngClass]=\"{ 'sbd-cancel__leg-chevron--collapsed': !returnExpanded() }\"\n aria-label=\"Toggle\">\n <i class=\"pi pi-chevron-up\"></i>\n </button>\n </div>\n\n @if (returnExpanded()) {\n <div class=\"sbd-cancel__leg-card-body\">\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline\"\n [ngClass]=\"legAdjustedData('return')?.isRefundable ? 'sbd-cancel__badge--green' : 'sbd-cancel__badge--red'\">\n {{ legAdjustedData('return')?.isRefundable ? 'Refundable' : 'Non-Refundable' }}\n </span>\n\n @if (legAdjustedData('return')?.isRefundable) {\n @if (refundableBreakdownRows(legAdjustedData('return')).length) {\n @for (r of refundableBreakdownRows(legAdjustedData('return')); track r.label) {\n <div class=\"sbd-cancel__refund-card-row\">\n <span>{{ r.label }}</span>\n <strong>{{ fmt(r.value) }}</strong>\n </div>\n }\n } @else {\n <div class=\"sbd-cancel__refund-card-row\">\n <span>Fare</span>\n <strong>{{ fmt(legRefundPool('return')) }}</strong>\n </div>\n }\n\n <!-- hide addon note new CR from CX -->\n <!-- @if (hasRefundableAddonNote(legAdjustedData('return'))) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--neutral\">\n <i class=\"pi pi-info-circle\"></i>\n <span>Your add-on service/s refund will be processed separately by our Customer Service team shortly.</span>\n </div>\n } -->\n\n @if (legDeductions('return').length && !isCreditShell()) {\n <div class=\"sbd-cancel__refund-card-divider\"></div>\n <span class=\"sbd-cancel__badge sbd-cancel__badge--outline sbd-cancel__badge--muted\">Not Refunded - Deductions</span>\n @for (d of legDeductions('return'); track d.label) {\n <div class=\"sbd-cancel__refund-card-line\">\n <span>\n {{ d.label }}\n @if (d.badge) { <span class=\"sbd-cancel__tag\">{{ d.badge }}</span> }\n </span>\n <span class=\"sbd-cancel__refund-card-line--neg\">{{ fmtNeg(d.value) }}</span>\n </div>\n }\n }\n\n <div class=\"sbd-cancel__refund-card-divider sbd-cancel__refund-card-divider--dashed\"></div>\n <div class=\"sbd-cancel__refund-card-total\">\n <span>Return Total Refund</span>\n <strong>{{ fmt(legAdjustedData('return')?.totalRefundAmount) }}</strong>\n </div>\n\n @if (refundData()?.legInfo?.return?.isCreditShell && !hasGoldenGuaranteeGift()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--credit\">\n <i class=\"pi pi-wallet\"></i>\n <span>ℹ️ The refund for the return flight has been issued as an Airline Credit Shell.</span>\n </div>\n }\n } @else {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--warning\">\n <i class=\"pi pi-ban\"></i>\n <span>This leg is not eligible for a refund.</span>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n\n <!-- Instant refund notice -->\n @if (currentData()?.isRefundable) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--shield\">\n <i class=\"pi pi-shield\"></i>\n <span>\n @if (isNilRefund()) {\n We're sorry, as per airline policy, no refund applies because the cancellation fees equal or exceed your refundable fare amount.\n } @else {\n @if (isWalletOnlyRefund() || isLoyaltyOnlyRefund()) {\n Your refund is instant to the customer's almatar Wallet.\n } @else {\n Your refund is instant from our side, your bank may take up to 15 business days to reflect it.\n }\n }\n @if (!isNilRefund() && !isCreditShell()) {\n <strong>You can select refund option in the next step</strong>\n }\n </span>\n </div>\n }\n }\n\n </div>\n\n <!-- Footer -->\n <div class=\"sbd-cancel__footer\">\n @if (refundData()?.isRefundable) {\n <button pButton label=\"Keep booking\" styleClass=\"p-button-outlined p-button-secondary sbd-cancel__btn-keep\" (click)=\"closed.emit()\"></button>\n @if (currentData()?.isRefundable) {\n <button pButton\n styleClass=\"sbd-cancel__btn-primary\"\n [label]=\"isCreditShell() ? 'Continue Cancellation' : 'Select refund option'\"\n [disabled]=\"!canConfirm()\" (click)=\"requestCancel()\"></button>\n }\n } @else {\n <button pButton label=\"Close\" styleClass=\"p-button-outlined p-button-secondary\" (click)=\"closed.emit()\"></button>\n }\n </div>\n }\n\n <!-- ── Result overlay: floating modal over the dimmed refund-method screen (scoped to this dialog, not the whole viewport) ── -->\n @if (cancelResult()) {\n <div class=\"sbd-cancel__result-overlay\">\n <div class=\"sbd-cancel__result-backdrop\"></div>\n <div class=\"sbd-cancel__result-modal\">\n <div class=\"sbd-cancel__result-hero\">\n <span class=\"sbd-cancel__result-icon sbd-cancel__result-icon--green\">\n <i class=\"pi pi-check\"></i>\n </span>\n <h3 class=\"sbd-cancel__result-title\">{{ confirmIsNilRefund() ? 'Cancel Confirmed' : 'Refund Confirmed' }}</h3>\n </div>\n\n @for (r of confirmRefunds(); track r.label) {\n <div class=\"sbd-cancel__result-row\">\n <span class=\"sbd-cancel__method-icon\">\n <i class=\"pi\" [ngClass]=\"isWalletDestinationRow(r) ? 'pi-wallet' : 'pi-credit-card'\"></i>\n </span>\n <span class=\"sbd-cancel__result-body-text\">\n <span class=\"sbd-cancel__method-name\">{{ r.label }}</span>\n @if (r.subRows?.length) {\n <span class=\"sbd-cancel__result-sub-rows\">\n @for (sub of r.subRows; track sub.label) {\n <span class=\"sbd-cancel__result-sub-row\">\n <span>{{ sub.label }}</span>\n <strong>{{ fmtResult(sub.value) }}</strong>\n </span>\n }\n </span>\n }\n <span class=\"sbd-cancel__method-badge\"\n [ngClass]=\"isWalletDestinationRow(r) ? 'sbd-cancel__method-badge--instant' : 'sbd-cancel__method-badge--days'\">\n {{ isWalletDestinationRow(r) ? 'Ready Now' : (r.key === 'totalCardRefundAmount' ? confirmCardBadgeText() : 'Up to 15 business days, bank policy') }}\n </span>\n @if (r.hasLoyaltyNote) {\n <span class=\"sbd-cancel__notice sbd-cancel__notice--info\">\n <i class=\"pi pi-info-circle\"></i>\n <span>External loyalty points are refunded to your almatar Wallet as permanent points and ready to use in your next booking.</span>\n </span>\n }\n </span>\n <strong class=\"sbd-cancel__result-amount\">{{ fmtResult(r.value) }}</strong>\n </div>\n }\n\n @if (confirmCreditShellNote()) {\n <div class=\"sbd-cancel__notice sbd-cancel__notice--credit\">\n <i class=\"pi pi-wallet\"></i>\n <span>ℹ️ {{ confirmCreditShellNote() }}</span>\n </div>\n }\n\n <button pButton styleClass=\"sbd-cancel__btn-primary sbd-cancel__result-done\" label=\"Close\" (click)=\"closed.emit()\"></button>\n </div>\n </div>\n }\n\n </div>\n\n</p-dialog>\n\n<ng-template #madaLogo>\n <svg width=\"43\" height=\"15\" viewBox=\"0 0 43 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_sbd_mada)\">\n <path d=\"M18.1894 8.6543H0V14.9933H18.1894V8.6543Z\" fill=\"#84B740\" />\n <path d=\"M18.1894 0H0V6.34463H18.1894V0Z\" fill=\"#259BD6\" />\n <path\n d=\"M36.3779 13.7034L36.2969 13.7203C36.016 13.7768 35.9134 13.7994 35.7082 13.7994C35.233 13.7994 34.6713 13.5452 34.6713 12.3475C34.6713 11.7316 34.7685 10.9124 35.6542 10.9124H35.6596C35.8108 10.9237 35.9836 10.9407 36.3077 11.0424L36.3779 11.065V13.7034ZM36.5237 7.73164L36.3779 7.75989V9.97458L36.2483 9.93503L36.2105 9.92373C36.0647 9.87853 35.7298 9.77684 35.4058 9.77684C33.6344 9.77684 33.2617 11.178 33.2617 12.3531C33.2617 13.9633 34.1258 14.8898 35.6326 14.8898C36.2699 14.8898 36.7397 14.822 37.215 14.6582C37.6524 14.5113 37.8091 14.3023 37.8091 13.8559V7.5C37.3878 7.5791 36.9504 7.65819 36.5237 7.73164Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M41.651 13.7385L41.5754 13.7611L41.3053 13.8345C41.0515 13.9023 40.8247 13.9419 40.6519 13.9419C40.236 13.9419 39.9876 13.7272 39.9876 13.36C39.9876 13.1227 40.0902 12.7215 40.7707 12.7215H41.651V13.7385ZM41.0299 9.74414C40.4844 9.74414 39.9228 9.84584 39.2261 10.0718L38.7724 10.2131L38.9236 11.2865L39.3665 11.134C39.831 10.9758 40.4088 10.8741 40.8409 10.8741C41.0353 10.8741 41.6294 10.8741 41.6294 11.5464V11.8402H40.8031C39.2963 11.8402 38.5996 12.343 38.5996 13.4221C38.5996 14.343 39.2423 14.8967 40.3224 14.8967C40.6573 14.8967 41.1217 14.8289 41.5214 14.7272L41.543 14.7215L41.5646 14.7272L41.6996 14.7498C42.1208 14.8289 42.5583 14.908 42.9849 14.9927V11.4673C42.9849 10.3261 42.3261 9.74414 41.0299 9.74414Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M31.1527 13.7385L31.0771 13.7611L30.807 13.8345C30.5532 13.9023 30.3318 13.9419 30.1536 13.9419C29.7377 13.9419 29.4893 13.7272 29.4893 13.36C29.4893 13.1227 29.5919 12.7215 30.267 12.7215H31.1473L31.1527 13.7385ZM30.537 9.74414C29.9861 9.74414 29.4299 9.84584 28.7332 10.0718L28.2795 10.2131L28.4308 11.2865L28.8736 11.134C29.3381 10.9758 29.9159 10.8741 30.348 10.8741C30.5424 10.8741 31.1365 10.8741 31.1365 11.5464V11.8402H30.3102C28.8034 11.8402 28.1013 12.343 28.1013 13.4221C28.1013 14.343 28.744 14.8967 29.8295 14.8967C30.1644 14.8967 30.6288 14.8289 31.0285 14.7272L31.0501 14.7215L31.0717 14.7272L31.2013 14.7498C31.6279 14.8289 32.06 14.908 32.4866 14.9984V11.473C32.492 10.3204 31.8332 9.74414 30.537 9.74414Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M25.4701 9.7576C24.7842 9.7576 24.2172 9.99489 24.0065 10.0966L23.9525 10.1248L23.9039 10.0853C23.6123 9.86495 23.1856 9.75195 22.5916 9.75195C22.0677 9.75195 21.5762 9.83105 21.0416 9.99489C20.5825 10.1418 20.4043 10.3734 20.4043 10.8085V14.8367H21.8409V11.1135L21.9111 11.0909C22.2027 10.9892 22.3755 10.9723 22.543 10.9723C22.9588 10.9723 23.1694 11.2039 23.1694 11.6559V14.8423H24.5844V11.5938C24.5844 11.4017 24.5466 11.2887 24.5412 11.2661L24.4926 11.17L24.5898 11.1248C24.8058 11.0231 25.0435 10.9723 25.2919 10.9723C25.5781 10.9723 25.9184 11.0909 25.9184 11.6559V14.8423H27.3279V11.509C27.3279 10.3282 26.7231 9.7576 25.4701 9.7576Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M40.5866 4.13559C40.3759 4.13559 40.0249 4.113 39.7495 4.0565L39.6684 4.03955V1.86441C39.6684 1.68362 39.636 1.57062 39.6306 1.55367L39.5874 1.46328L39.6793 1.42373C39.7009 1.41243 39.7225 1.40678 39.7495 1.39548L39.7657 1.38418C39.7981 1.37288 39.8305 1.36158 39.8629 1.35028C39.8791 1.34463 39.8899 1.33898 39.9007 1.33898C40.2193 1.24859 40.511 1.25989 40.6406 1.24859H40.646C41.5263 1.24859 41.6289 2.0678 41.6289 2.68362C41.6235 3.88136 41.0564 4.13559 40.5866 4.13559ZM40.5812 0C40.5704 0 40.5542 0 40.5434 0C39.7171 0 38.8692 0.237288 38.5667 0.700565C38.4047 0.926554 38.3129 1.20904 38.3075 1.54237V3.78531C38.3075 3.9774 38.2697 4.05085 38.2643 4.0678L38.2157 4.16384H35.6072V2.60452H35.6018C35.5694 0.960452 34.6404 0.0564972 33.2957 0.0564972H33.1391H31.9833C31.9293 0.457627 31.8861 0.740113 31.8321 1.14124H33.1391C33.8249 1.14124 34.1868 1.75141 34.1868 2.68927V4.25989L34.095 4.20904C34.0788 4.20339 33.9654 4.16384 33.7871 4.16384H31.5297C31.4865 4.46328 31.4325 4.85311 31.373 5.24294H38.3129C38.5505 5.19209 38.8259 5.14689 39.0636 5.10735C39.4146 5.28814 40.0681 5.38418 40.5164 5.38418C42.0231 5.38418 43.0007 4.32768 43.0007 2.70057C42.9953 1.0904 42.0501 0.0338983 40.5812 0Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M28.4189 5.90821H28.4837C29.9905 5.90821 30.6925 5.38844 30.6925 4.10595C30.6925 3.18505 30.0499 2.45059 28.9697 2.45059H27.5818C27.1659 2.45059 26.9175 2.202 26.9175 1.78392C26.9175 1.50143 27.0201 1.15115 27.7006 1.15115H30.7357C30.8006 0.738723 30.833 0.478836 30.8924 0.0664062H27.7384C26.2694 0.0664062 25.5295 0.710474 25.5295 1.78392C25.5295 2.84607 26.1722 3.39974 27.2523 3.39974H28.6403C29.0561 3.39974 29.3046 3.74437 29.3046 4.10595C29.3046 4.34324 29.202 4.83477 28.5269 4.83477H28.2947L23.8499 4.82347H23.0398C22.3539 4.82347 21.8733 4.41669 21.8733 3.47319V2.82347C21.8733 1.84042 22.2459 1.23025 23.0398 1.23025H24.3576C24.417 0.812169 24.4548 0.546632 24.5088 0.151152H22.867H22.7104C21.3656 0.151152 20.4367 1.09466 20.4043 2.73872V2.80087V3.47319C20.4367 5.11725 21.3656 5.90256 22.7104 5.90256H22.867H24.0227L26.4314 5.90821H27.868H28.4189Z\"\n fill=\"#747583\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_sbd_mada\">\n <rect width=\"43\" height=\"15\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n</ng-template>\n","// Environment configuration stub\n\nexport const environments = {\n production: false,\n apiUrl: '',\n baseUrl: '',\n isTenant: false,\n brandName: 'almatar',\n // Add other environment properties as needed\n};\n","export enum brandEnum {\n almatar = 'almatar',\n rehlat = 'rehlat',\n tajawal = 'tajawal'\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { ICurrency } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SharedService {\n getAppLanguage(): string {\n return 'en';\n }\n\n getCurrentLanguage(): string {\n return 'en';\n }\n\n getDirection(): 'ltr' | 'rtl' {\n return 'ltr';\n }\n\n getBaseCurrency(): Observable<ICurrency> {\n return of({\n code: 'SAR',\n name: 'Saudi Riyal',\n symbol: 'SAR',\n rate: 1\n });\n }\n\n getInAppView(): boolean {\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n@Injectable()\nexport class AsideBackButtonService {\n showBackButton$ = new BehaviorSubject<boolean>(false);\n backClicked$ = new Subject<void>();\n\n show(): void {\n this.showBackButton$.next(true);\n }\n\n hide(): void {\n this.showBackButton$.next(false);\n }\n\n emitBack(): void {\n this.backClicked$.next();\n }\n}\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { DialogModule } from 'primeng/dialog';\nimport { SharedService } from '../../shared/services/shared.service';\nimport { AsideBackButtonService } from './aside-back-button.service';\nimport { environments } from '../../shared/environments/environment';\nimport { brandEnum } from '../../shared/enums/brand-enums.enum';\n\n@Component({\n selector: 'almatar-aside',\n standalone: true,\n imports: [CommonModule, DialogModule],\n templateUrl: './aside.component.html',\n styleUrls: ['./aside.component.scss'],\n})\nexport class AsideComponent implements OnInit, OnDestroy {\n @Input() asideTitle = '';\n @Input() showHeader = true;\n @Input() headerTemplate!: TemplateRef<any>;\n /**\n * Opt-in white header (instead of the default purple/lavender) — only\n * takes effect on the Almatar brand, so other tenants/brands sharing this\n * component keep their existing header regardless of this input.\n */\n @Input() whiteHeader = false;\n @Input() showAside = false;\n /** Opt-in desktop width override (e.g. `'600px'`) — defaults to 490px, or 580px with the white header. */\n @Input() width = '';\n @Input() modal = false;\n @Input() closable = true;\n @Input() transitionOptions = '150ms cubic-bezier(0, 0, 0.2, 1)';\n /**\n * When true, the dialog's own close (the X, Esc) does NOT hide the aside; it only emits\n * {@link closeRequested}, so the host can ask for confirmation and close the aside itself.\n */\n @Input() interceptClose = false;\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onClose: EventEmitter<any> = new EventEmitter<any>();\n @Output() closeRequested = new EventEmitter<void>();\n isInAppView = this.shared.getInAppView();\n selectedLang!: string;\n showBackButton = false;\n\n get backIconClass(): string {\n // Conventional back-arrow direction: points left in LTR, right in RTL.\n return this.selectedLang === 'ar'\n ? 'pi pi-arrow-right'\n : 'pi pi-arrow-left';\n }\n\n get isWhiteHeader(): boolean {\n return this.whiteHeader && environments.brandName === brandEnum.almatar;\n }\n\n constructor(\n private shared: SharedService,\n @Inject(DOCUMENT) private document: Document,\n @Optional() private backButtonService: AsideBackButtonService,\n ) {}\n\n ngOnInit(): void {\n this.selectedLang = this.shared.getAppLanguage();\n if (this.backButtonService) {\n this.backButtonService.showBackButton$.subscribe((show) => {\n this.showBackButton = show;\n });\n }\n }\n\n /** Replaces the two-way `[(visible)]` so a host can veto the dialog's own close. */\n onVisibleChange(visible: boolean): void {\n if (!visible && this.interceptClose) {\n this.closeRequested.emit();\n return;\n }\n this.showAside = visible;\n }\n\n onCloseModal() {\n this.onClose.emit();\n this.document.body.style.overflow = '';\n }\n\n // The back arrow lives in the header's leading content (via the\n // `pTemplate=\"header\"` slot), entirely separate from PrimeNG's own close\n // button — so it never touches the dialog's `visible` state, and the X\n // close button keeps working (and stays visible) exactly as before.\n onBackIconClick(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n this.backButtonService?.emitBack();\n }\n\n onDialogShow() {\n this.document.body.style.overflow = 'hidden';\n }\n\n ngOnDestroy(): void {\n this.document.body.style.overflow = '';\n }\n}\n","<!-- A side panel built on `p-dialog` with `position=\"right\"`, not on PrimeNG's sidebar/drawer: `p-dialog` exists with\n the same name in PrimeNG 14 (the backoffice) and 20 (Helix), while `primeng/sidebar` was removed in 20 and\n `primeng/drawer` does not exist in 14.\n `position=\"right\"` is intentional for both directions: the flex positioning is writing-direction aware, so\n under dir=\"rtl\" (Arabic) it mirrors to the visual left on its own. Passing \"left\" for Arabic double-flips it\n back to the right. -->\n<p-dialog\n class=\"almatar_aside\"\n [ngClass]=\"{ 'almatar_aside--white-header': isWhiteHeader }\"\n position=\"right\"\n [visible]=\"showAside\"\n (visibleChange)=\"onVisibleChange($event)\"\n (onShow)=\"onDialogShow()\"\n (onHide)=\"onCloseModal()\"\n [modal]=\"modal\"\n [closable]=\"closable && !isInAppView\"\n [showHeader]=\"showHeader\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: width || (isWhiteHeader ? '580px' : '490px') }\"\n [transitionOptions]=\"transitionOptions\"\n>\n @if (showHeader) {\n @if (showBackButton) {\n <!-- Rendered into the header's leading content, alongside (not instead of) the dialog's own close (X)\n button, so both are visible together and the X keeps its normal close behavior untouched. -->\n <ng-template pTemplate=\"header\">\n <!-- One flex group, not two separate header children: the header's `justify-content: space-between`\n would otherwise spread the arrow and the title apart. -->\n <div class=\"almatar-aside__back-header\">\n <i\n class=\"almatar-aside__back-icon\"\n [class]=\"backIconClass\"\n (click)=\"onBackIconClick($event)\"\n ></i>\n <span class=\"almatar-aside__title\">{{ asideTitle }}</span>\n </div>\n </ng-template>\n } @else if (headerTemplate) {\n <ng-template pTemplate=\"header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ng-template>\n } @else {\n <ng-template pTemplate=\"header\">\n <span class=\"almatar-aside__title\">{{ asideTitle }}</span>\n </ng-template>\n }\n }\n\n <ng-content></ng-content>\n</p-dialog>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'manage-booking-failed-modal',\n standalone: true,\n imports: [CommonModule, ButtonModule],\n template: `\n <div class=\"modal-overlay\" *ngIf=\"visible\" (click)=\"close()\">\n <div class=\"modal-content\" (click)=\"$event.stopPropagation()\">\n <h3>Operation Failed</h3>\n <p>{{ message || 'An error occurred. Please try again.' }}</p>\n <button pButton type=\"button\" label=\"Close\" (click)=\"close()\"></button>\n </div>\n </div>\n `,\n styles: [`\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2000;\n }\n\n .modal-content {\n background: white;\n padding: 2rem;\n border-radius: 8px;\n max-width: 400px;\n width: 90%;\n }\n\n h3 {\n margin-top: 0;\n color: #d32f2f;\n }\n\n p {\n margin: 1rem 0;\n }\n `]\n})\nexport class ManageBookingFailedModalComponent {\n @Input() visible = false;\n @Input() message = '';\n\n @Output() visibleChange = new EventEmitter<boolean>();\n\n close(): void {\n this.visible = false;\n this.visibleChange.emit(false);\n }\n}\n","import { NgModule, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'app-loader',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"loader-container\" *ngIf=\"loading\">\n <div class=\"spinner\"></div>\n <p *ngIf=\"message\">{{ message }}</p>\n </div>\n `,\n styles: [`\n .loader-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 2rem;\n }\n\n .spinner {\n border: 4px solid #f3f3f3;\n border-top: 4px solid #3498db;\n border-radius: 50%;\n width: 40px;\n height: 40px;\n animation: spin 1s linear infinite;\n }\n\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n\n p {\n margin-top: 1rem;\n color: #666;\n }\n `]\n})\nexport class LoaderComponent {\n @Input() loading = false;\n @Input() message = '';\n}\n\n@NgModule({\n imports: [CommonModule, LoaderComponent],\n exports: [LoaderComponent]\n})\nexport class LoaderModule {}\n","import { Injectable, signal } from '@angular/core';\nimport { Observable, of, BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HotelManageBookingService {\n private activeAsideTab = signal<string>('details');\n selectedHotelBooking = new BehaviorSubject<any>(null);\n\n getActiveAsideTab(): string {\n return this.activeAsideTab();\n }\n\n setActiveAsideTab(tab: string): void {\n this.activeAsideTab.set(tab);\n }\n\n getBookingDetails(bookingId: string): Observable<any> {\n return of(null);\n }\n}\n","export enum AlmatarHotelAutoCancellationStepEnum {\n selectRooms = 'select_rooms',\n refundSummary = 'refund_summary',\n refundMethod = 'refund_method',\n}\n","import { Injectable, signal, computed } from '@angular/core';\nimport { AlmatarHotelAutoCancellationStepEnum } from '../enums/almatar-hotel-auto-cancellation-step.enum';\nimport {\n IAlmatarHotelAutoCancellationRoom,\n IAlmatarHotelAutoCancellationHotelInfo,\n IAlmatarHotelAutoCancellationRefundSummary,\n} from '../interfaces/i-almatar-hotel-auto-cancellation.interface';\n\n@Injectable()\nexport class AlmatarHotelAutoCancellationService {\n readonly currentStep = signal<AlmatarHotelAutoCancellationStepEnum>(\n AlmatarHotelAutoCancellationStepEnum.selectRooms,\n );\n\n readonly selectedRooms = signal<IAlmatarHotelAutoCancellationRoom[]>([]);\n readonly hotelInfo = signal<IAlmatarHotelAutoCancellationHotelInfo | null>(\n null,\n );\n\n readonly refundSummary =\n signal<IAlmatarHotelAutoCancellationRefundSummary | null>(null);\n\n readonly selectedRoomsCount = computed(\n () => this.selectedRooms().filter((room) => room.isSelected).length,\n );\n\n readonly hasSelectedRooms = computed(() => this.selectedRoomsCount() > 0);\n\n readonly totalRefundAmount = computed(() => {\n const summary = this.refundSummary();\n return summary?.totalRefund ?? 0;\n });\n\n setCurrentStep(step: AlmatarHotelAutoCancellationStepEnum): void {\n this.currentStep.set(step);\n }\n\n setSelectedRooms(rooms: IAlmatarHotelAutoCancellationRoom[]): void {\n this.selectedRooms.set(rooms);\n }\n\n setHotelInfo(info: IAlmatarHotelAutoCancellationHotelInfo): void {\n this.hotelInfo.set(info);\n }\n\n setRefundSummary(summary: IAlmatarHotelAutoCancellationRefundSummary): void {\n this.refundSummary.set(summary);\n }\n\n toggleRoomSelection(packageId: string): void {\n this.selectedRooms.update((rooms) =>\n rooms.map((room) =>\n room.packageId === packageId\n ? { ...room, isSelected: !room.isSelected }\n : room,\n ),\n );\n }\n\n calculateRefundSummary(\n rooms: IAlmatarHotelAutoCancellationRoom[],\n totalPaid: number,\n ): IAlmatarHotelAutoCancellationRefundSummary {\n const selected = rooms.filter((room) => room.isSelected);\n const totalRefund = selected.reduce(\n (sum, room) => sum + room.refundAmount,\n 0,\n );\n\n return {\n totalPaid,\n totalRefund,\n rooms: selected,\n };\n }\n\n reset(): void {\n this.currentStep.set(AlmatarHotelAutoCancellationStepEnum.selectRooms);\n this.selectedRooms.set([]);\n this.hotelInfo.set(null);\n this.refundSummary.set(null);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpContext } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\ntype HttpOptions = {\n headers?: any;\n context?: HttpContext;\n observe?: 'body';\n params?: any;\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n private http = inject(HttpClient);\n\n get<T>(url: string | { url?: string; endpoint?: string; [key: string]: any }, options?: HttpOptions): Observable<T> {\n const requestUrl = typeof url === 'string' ? url : (url.url || url.endpoint);\n return this.http.get<T>(requestUrl!, options) as Observable<T>;\n }\n\n post<T>(url: string | { url?: string; endpoint?: string; [key: string]: any }, body?: any, options?: HttpOptions): Observable<T> {\n if (typeof url === 'object') {\n // Handle object-style API calls\n const { url: urlProp, endpoint, ...requestBody } = url;\n const requestUrl = urlProp || endpoint;\n return this.http.post<T>(requestUrl!, requestBody, body) as Observable<T>;\n }\n return this.http.post<T>(url, body, options) as Observable<T>;\n }\n\n put<T>(url: string | { url?: string; endpoint?: string; [key: string]: any }, body?: any, options?: HttpOptions): Observable<T> {\n const requestUrl = typeof url === 'string' ? url : (url.url || url.endpoint);\n return this.http.put<T>(requestUrl!, body, options) as Observable<T>;\n }\n\n delete<T>(url: string | { url?: string; endpoint?: string; [key: string]: any }, options?: HttpOptions): Observable<T> {\n const requestUrl = typeof url === 'string' ? url : (url.url || url.endpoint);\n return this.http.delete<T>(requestUrl!, options) as Observable<T>;\n }\n\n patch<T>(url: string | { url?: string; endpoint?: string; [key: string]: any }, body?: any, options?: HttpOptions): Observable<T> {\n const requestUrl = typeof url === 'string' ? url : (url.url || url.endpoint);\n return this.http.patch<T>(requestUrl!, body, options) as Observable<T>;\n }\n}\n","export enum AlmatarHotelAutoCancellationEndpointsEnum {\n getRefundDetails = '/api/v1/fcr/refund/backoffice/details',\n processAutoCancellation = '/api/v1/fcr/refund/backoffice',\n uploadAttachment = '/api/v1/fcr/refund/backoffice/upload-attachment',\n nusukGetRefundDetails = 'api/v1/nusuk/fcr/refund/details',\n nusukProcessAutoCancellation = 'api/v1/nusuk/fcr/refund',\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WebengageTrackingService {\n addEvent(eventName: string | Record<string, unknown>, eventData?: any): void {\n // Stub implementation - does nothing in library context\n if (typeof eventName === 'string') {\n console.log('WebengageTracking:', eventName, eventData);\n } else {\n console.log('WebengageTracking:', eventName);\n }\n }\n\n setUserAttribute(attributeName: string, attributeValue: any): void {\n console.log('WebengageTracking setUserAttribute:', attributeName, attributeValue);\n }\n}\n\nexport function resolveMyTripsViewedEntrySourceFromQueryParams(params: any): string {\n return params?.source || 'unknown';\n}\n","import { Injectable, inject, signal, computed } from '@angular/core';\nimport { Observable, map, catchError, throwError, of } from 'rxjs';\nimport { ApiService } from '../../../shared/services/api.service';\nimport { SBD_CONFIG } from '../../../config/dashboard.config';\nimport { ActivatedRoute } from '@angular/router';\nimport { environments } from '../../../shared/environments/environment';\nimport { HotelManageBookingService } from '../../shared/services/hotel-manage-booking/hotel-manage-booking.service';\nimport { AlmatarHotelAutoCancellationEndpointsEnum } from '../enums/almatar-hotel-auto-cancellation-endpoints.enum';\nimport {\n IAlmatarHotelAutoCancellationRoom,\n IAlmatarHotelAutoCancellationRefundSummary,\n IAlmatarHotelAutoCancellationRefundPackage,\n IRefundDetailsApiResponse,\n IRefundDetailsData\n} from '../interfaces/i-almatar-hotel-auto-cancellation.interface';\nimport { resolveMyTripsViewedEntrySourceFromQueryParams } from '../../../shared/services/webengage-tracking.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface IRefundDetailsRequest {\n bookingId: string;\n product: 'hotels';\n packageIds: string[];\n}\n\nexport interface IProcessCancellationRequest {\n bookingId: string;\n product: 'hotels';\n packageIds: string[];\n preferredPaymentMethod?: string;\n}\n\nexport interface IProcessNonRefundableCancellationRequest {\n bookingId: string;\n product: 'hotels';\n packageIds: string[];\n preferredPaymentMethod: string;\n processedMode: 'auto';\n language: string;\n attachmentUrl: string;\n}\n\nexport interface IAutoCancellationProcessResponse {\n status: number;\n data: {\n error: string;\n message: string;\n bookingId: number;\n preferredPaymentMethod: string;\n isWhatsApp?: boolean;\n cancel: {\n status: string;\n packageIds: string[];\n };\n refund: {\n status: string;\n bookingStatus: string;\n amount: number;\n currency: string;\n breakdown: {\n wallet: number;\n mokafa: number;\n qitaf: number;\n card: number;\n tabby: number;\n tamara: number;\n };\n };\n };\n errors: any;\n}\n\ninterface IEntrySourceDeviceBrand {\n entrySource: string;\n device: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AlmatarHotelAutoCancellationEndpointsService {\n private readonly api = inject(ApiService);\n private readonly apiBase = inject(SBD_CONFIG).apiBase;\n private readonly route = inject(ActivatedRoute);\n private readonly hotelManageBookingService = inject(\n HotelManageBookingService\n );\n\n private readonly _almatarBookingId = signal<string>('');\n private readonly _confirmationNumber = signal<string>('');\n private readonly _isNusukFlow = signal<boolean>(\n environments.isTenant || false\n );\n\n private readonly _selectedPackageIds = signal<string[]>([]);\n\n readonly almatarBookingId = computed(() => this._almatarBookingId());\n readonly confirmationNumber = computed(() => this._confirmationNumber());\n readonly isNusukFlow = computed(() => this._isNusukFlow());\n\n constructor() {\n this.initializeBookingData();\n }\n\n private initializeBookingData(): void {\n this.hotelManageBookingService.selectedHotelBooking\n .pipe(takeUntilDestroyed())\n .subscribe((selectedHotelBooking: any) => {\n // console.log('Selected Hotel Booking:', selectedHotelBooking);\n if (selectedHotelBooking) {\n this._almatarBookingId.set(selectedHotelBooking.bookingId || '');\n this._confirmationNumber.set(selectedHotelBooking.bookingId || '');\n }\n });\n }\n\n /**\n * Full URL of an endpoint from the enum. The enum paths start with `/api/`, which is the default `apiBase`; a host\n * that serves the API somewhere else (Helix: its own API origin) sets `apiBase`, so that part is swapped for it.\n */\n resolveEndpoint(path: string): string {\n return `${this.apiBase.replace(/\\/+$/, '')}/${path.replace(/^\\/?api\\//, '')}`;\n }\n\n getRefundDetails(\n packageIds: string[] = []\n ): Observable<IRefundDetailsApiResponse> {\n const endpoint = this.resolveEndpoint(\n AlmatarHotelAutoCancellationEndpointsEnum.getRefundDetails\n );\n\n const payload: IRefundDetailsRequest = {\n bookingId: `${\n this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||\n ''\n }`,\n product: 'hotels',\n packageIds: [...new Set(packageIds)] // Ensure unique package IDs\n };\n\n // return of({\n // data: {\n // bookingId: 144368,\n // currency: 'SAR',\n // status: 'Partially refunded',\n // message: 'Refund details calculated successfully',\n // flags: {\n // refundable: true,\n // partial: false,\n // goldenGift: false\n // },\n // selection: {\n // packageIds: ['f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95']\n // },\n // totals: {\n // paid: 6866,\n // beforeCoupon: 6865.61,\n // roomsBooked: 4,\n // coupon: 0,\n // gifts: 0,\n // serviceFee: 0,\n // wallet: 0,\n // card: 0,\n // tabby: 0,\n // tamara: 220,\n // mokafa: 0,\n // qitaf: 0,\n // wala: 0,\n // hassad: 0,\n // anb: 0,\n // ygg: 0\n // },\n // previous: [\n // {\n // packageId: '5eb33d59-2607-4057-9d26-4f7be745f67f',\n // roomName: 'Standard Room',\n // cancelledAt: '2026-09-02T13:42:54.848Z',\n // amount: 2990.79,\n // fee: 0,\n // refunded: 2990.79\n // }\n // ],\n // current: {\n // rooms: [\n // {\n // packageId: 'f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95',\n // roomId: '0229e622-a89a-469d-adb8-8615deb971ca',\n // roomName: 'Scene Room Twin',\n // basis: 'Room only RO',\n // pax: {\n // adults: 2,\n // children: 0,\n // total: 2\n // },\n // nights: 4,\n // amount: 1887.61,\n // fee: 0,\n // serviceFee: 50,\n // refund: 1887.61,\n // refundable: true,\n // route: 'AUTO'\n // },\n // {\n // packageId: 'f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95',\n // roomId: 'b8aed26e-d91a-4234-ae37-94b2c6232dbd',\n // roomName: 'Scene Room Twin',\n // basis: 'Room only RO',\n // pax: {\n // adults: 2,\n // children: 0,\n // total: 2\n // },\n // nights: 4,\n // amount: 1887.6,\n // fee: 0,\n // serviceFee: 50,\n // refund: 1887.6,\n // refundable: true,\n // route: 'AUTO'\n // }\n // ],\n // amount: 3775.21,\n // fee: 0,\n // surcharge: 0,\n // refund: 3775.21\n // },\n // payout: {\n // alreadyRefunded: 2990.79,\n // current: 1600,\n // afterThis: 6766,\n // feesTotal: 0,\n // wallet: 0,\n // card: 0,\n // tabby: 0,\n // tamara: 200,\n // amwal: 0,\n // mis: 0,\n // bnplManual: 0,\n // loyaltyToWallet: 600,\n // note: null\n // },\n // summaries: [\n // {\n // code: 'CARD',\n // label: 'Card',\n // paid: 6866,\n // refund: 3775.21,\n // refundable: true,\n // gateway: 'CH'\n // },\n // {\n // code: 'SERVICE_FEE',\n // label: 'Service Fee',\n // paid: 100,\n // refund: 0,\n // refundable: false\n // }\n // ],\n // gifts: []\n // },\n // status: 200,\n // errors: null\n // });\n\n return this.api\n .post<IRefundDetailsApiResponse>({\n endpoint,\n ...payload\n })\n .pipe(\n catchError((error) =>\n this.handleError(error, 'Failed to get refund details')\n )\n );\n }\n\n mapApiResponseToRooms(\n data: IRefundDetailsData\n ): IAlmatarHotelAutoCancellationRoom[] {\n return this.getAllRooms(data);\n }\n\n mapApiResponseToRefundSummary(\n data: IRefundDetailsData\n ): IAlmatarHotelAutoCancellationRefundSummary {\n return {\n totalPaid: data.totals?.paid || 0,\n totalRefund: data.current?.refund || data.current?.refund || 0,\n totalFees: data.current?.fee || 0,\n rooms: this.getAllRooms(data),\n packages: this.getAllPackages(data),\n summaries: data.summaries,\n payout: data.payout,\n totals: data.totals,\n // Additional breakdown fields\n coupon: data.totals?.coupon || 0,\n giftsTotal: data.totals?.gifts || 0,\n giftsDetails: data.gifts || [],\n serviceFee: data.totals?.serviceFee || 0,\n surcharge: data.current?.surcharge || 0,\n goldenGift: data.flags?.goldenGift || false,\n previousRooms: data.previous || []\n };\n }\n\n getAllPackages(\n data: IRefundDetailsData\n ): IAlmatarHotelAutoCancellationRefundPackage[] {\n const packages: IAlmatarHotelAutoCancellationRefundPackage[] = [];\n const packageMap = new Map<\n string,\n IAlmatarHotelAutoCancellationRefundPackage\n >();\n\n // Process previous (cancelled) rooms - group by packageId\n if (data.previous?.length) {\n data.previous.forEach((room: any) => {\n const existingPkg = packageMap.get(room.packageId);\n if (existingPkg) {\n existingPkg.rooms.push({\n roomId: room.roomId || room.packageId,\n roomName: room.roomName,\n basis: room.basis,\n nights: room.nights\n });\n existingPkg.amount += room.amount || 0;\n existingPkg.fee += room.fee || 0;\n existingPkg.refund += room.refunded || 0;\n } else {\n packageMap.set(room.packageId, {\n packageId: room.packageId,\n packageName: room.roomName,\n rooms: [\n {\n roomId: room.roomId || room.packageId,\n roomName: room.roomName,\n basis: room.basis,\n nights: room.nights\n }\n ],\n amount: room.amount || 0,\n fee: room.fee || 0,\n serviceFee: 0,\n refund: room.refunded || 0,\n refundable: false,\n cancelledBefore: true,\n cancellationDate: room.cancelledAt\n });\n }\n });\n }\n\n // Process current rooms - group by packageId\n if (data.current?.rooms?.length) {\n data.current.rooms.forEach((room: any) => {\n const existingPkg = packageMap.get(room.packageId);\n if (existingPkg && !existingPkg.cancelledBefore) {\n existingPkg.rooms.push({\n roomId: room.roomId || room.packageId,\n roomName: room.roomName,\n basis: room.basis,\n nights: room.nights,\n pax: room.pax,\n adults: room.pax?.adults,\n children: room.pax?.children\n });\n existingPkg.amount += room.amount || 0;\n existingPkg.fee += room.fee || 0;\n existingPkg.serviceFee += room.serviceFee || 0;\n existingPkg.refund += room.refund || 0;\n } else {\n packageMap.set(room.packageId, {\n packageId: room.packageId,\n packageName: room.roomName,\n rooms: [\n {\n roomId: room.roomId || room.packageId,\n roomName: room.roomName,\n basis: room.basis,\n nights: room.nights,\n pax: room.pax,\n adults: room.pax?.adults,\n children: room.pax?.children\n }\n ],\n amount: room.amount || 0,\n fee: room.fee || 0,\n serviceFee: room.serviceFee || 0,\n refund: room.refund || 0,\n refundable: room.refundable,\n route: room.route,\n cancelledBefore: false,\n cancellationDate: new Date().toISOString()\n });\n }\n });\n }\n\n packageMap.forEach((pkg) => packages.push(pkg));\n return packages;\n }\n\n getAllRooms(data: IRefundDetailsData): IAlmatarHotelAutoCancellationRoom[] {\n const allRooms: IAlmatarHotelAutoCancellationRoom[] = [];\n\n if (data.previous?.length) {\n data.previous.forEach((room) => {\n allRooms.push({\n packageId: room.packageId,\n roomId: room?.roomId,\n roomName: room.roomName,\n isRefundable: false,\n isSelected: false,\n cancelledBefore: true,\n roomAmount: room.amount,\n cancellationFee: room.fee,\n refundAmount: room.refunded,\n currentCancellation: false,\n cancellationDate: room.cancelledAt,\n nights: room.nights ?? 1\n });\n });\n }\n\n if (data.current?.rooms?.length) {\n data.current.rooms.forEach((room) => {\n allRooms.push({\n packageId: room.packageId,\n roomId: room?.roomId,\n roomName: room.roomName,\n isRefundable: room.refundable,\n isSelected: false,\n roomAmount: room.amount,\n cancellationFee: room.fee,\n cancelledBefore: false,\n refundAmount: room.refund,\n route: room.route,\n currentCancellation: true,\n cancellationDate: `${new Date()}`,\n nights: room.nights ?? 1\n });\n });\n }\n\n return allRooms;\n }\n\n processAutoCancellation(\n packageIds: string[],\n refundOption = 'originalPaymentMethod'\n ): Observable<IAutoCancellationProcessResponse> {\n const endpoint = this.resolveEndpoint(\n AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation\n );\n\n const uniquePackageIds = [...new Set(packageIds)]; // Ensure unique package IDs\n const payload: IProcessCancellationRequest = {\n bookingId: `${\n this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||\n ''\n }`,\n product: 'hotels',\n packageIds: uniquePackageIds,\n preferredPaymentMethod: refundOption\n };\n\n this._selectedPackageIds.set(uniquePackageIds);\n\n return of({\n data: {\n error: '1',\n message:\n 'Cancel requested — supplier cancellation failed; ticket created',\n bookingId: 144368,\n preferredPaymentMethod: 'wallet',\n cancel: {\n status: 'failed',\n packageIds: ['f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95'],\n },\n refund: {\n status: 'skipped',\n bookingStatus: 'Cancelled',\n amount: 1050,\n currency: 'SAR',\n breakdown: {\n wallet: 0,\n mokafa: 0,\n qitaf: 0,\n card: 200,\n tabby: 0,\n tamara: 0,\n },\n },\n },\n status: 200,\n errors: null,\n });\n\n return this.api\n .post<IAutoCancellationProcessResponse>({\n endpoint,\n ...payload\n })\n .pipe(\n map((response) => {\n this._selectedPackageIds.set([]);\n return response;\n }),\n catchError((error) =>\n this.handleError(error, 'Failed to process cancellation')\n )\n );\n }\n\n processNonRefundableCancellation(\n packageId: string,\n attachmentUrl: string,\n language = 'en'\n ): Observable<IAutoCancellationProcessResponse> {\n const endpoint = this.resolveEndpoint(\n AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation\n );\n\n const payload: IProcessNonRefundableCancellationRequest = {\n bookingId: `${\n this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||\n ''\n }`,\n product: 'hotels',\n packageIds: [packageId],\n preferredPaymentMethod: 'originalPaymentMethod',\n processedMode: 'auto',\n language,\n attachmentUrl\n };\n\n return this.api\n .post<IAutoCancellationProcessResponse>({\n endpoint,\n ...payload\n })\n .pipe(\n catchError((error) =>\n this.handleError(\n error,\n 'Failed to process non-refundable cancellation'\n )\n )\n );\n }\n\n calculateLocalRefundSummary(\n rooms: IAlmatarHotelAutoCancellationRoom[]\n ): IAlmatarHotelAutoCancellationRefundSummary {\n const selectedRooms = rooms.filter((room) => room.isSelected);\n const totalPaid = rooms.reduce((sum, room) => sum + room.roomAmount, 0);\n const totalRefund = selectedRooms.reduce(\n (sum, room) => sum + room.refundAmount,\n 0\n );\n\n return {\n totalPaid,\n totalRefund,\n rooms: selectedRooms.map((room) => ({\n ...room,\n currentCancellation: true,\n cancellationDate: new Date().toISOString()\n }))\n };\n }\n\n getSelectedPackageIds(): string[] {\n return this._selectedPackageIds();\n }\n\n clearSelectedPackageIds(): void {\n this._selectedPackageIds.set([]);\n }\n\n private getEntrySourceDeviceBrand(): IEntrySourceDeviceBrand {\n return {\n entrySource: this.getEntrySource(),\n device: this.getDevice()\n };\n }\n\n private getEntrySource(): string {\n return resolveMyTripsViewedEntrySourceFromQueryParams(\n this.route.snapshot.queryParams as Record<string, unknown>\n );\n }\n\n private getDevice(): string {\n let device = 'web';\n if (this.route.snapshot.queryParams['mobileAuth']) {\n device = this.route.snapshot.queryParams['device'] || 'mobile';\n }\n localStorage.setItem('deviceType', device);\n return device;\n }\n\n private handleError(error: any, message: string): Observable<never> {\n // console.log(message, error);\n const errorMessage =\n error?.error?.message || error?.message || message;\n return throwError(() => new Error(errorMessage));\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n// Translation module removed - using English only\nimport {\n IAlmatarHotelAutoCancellationPackage,\n IAlmatarHotelAutoCancellationPackageRoom,\n} from '../../../../interfaces/i-almatar-hotel-auto-cancellation.interface';\n\ninterface IGroupedPackageRoom {\n key: string;\n bedTypeOrRoomType: string;\n roomBasis: string;\n count: number;\n rooms: IAlmatarHotelAutoCancellationPackageRoom[];\n}\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation-refundable-room',\n standalone: true,\n imports: [CommonModule],\n templateUrl:\n './almatar-hotel-auto-cancellation-refundable-room.component.html',\n styleUrls: [\n './almatar-hotel-auto-cancellation-refundable-room.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlmatarHotelAutoCancellationRefundableRoomComponent {\n readonly package = input.required<IAlmatarHotelAutoCancellationPackage>();\n readonly hideCheckbox = input<boolean>(false);\n\n readonly togglePackage = output<string>();\n\n readonly groupedRooms = computed<IGroupedPackageRoom[]>(() => {\n const rooms = this.package()?.rooms || [];\n const groupMap = new Map<string, IGroupedPackageRoom>();\n\n for (const room of rooms) {\n // const bedTypeOrRoomType = rawBedType || rawRoomType || room.roomName || '';\n const bedTypeOrRoomType = room?.roomName;\n const roomBasis = room.roomBasis || '';\n const key = `${bedTypeOrRoomType}|||${roomBasis}`;\n\n if (groupMap.has(key)) {\n const group = groupMap.get(key)!;\n group.count++;\n group.rooms.push(room);\n } else {\n groupMap.set(key, {\n key,\n bedTypeOrRoomType,\n roomBasis,\n count: 1,\n rooms: [room],\n });\n }\n }\n\n return Array.from(groupMap.values());\n });\n\n onTogglePackage(): void {\n if (this.hideCheckbox()) {\n return;\n }\n this.togglePackage.emit(this.package()?.packageId);\n }\n}\n","<div\n class=\"package-item\"\n [class.package-item--selected]=\"package().isSelected\"\n (click)=\"onTogglePackage()\"\n>\n <div class=\"package-item__header\">\n @if (!hideCheckbox()) {\n <div\n class=\"package-item__checkbox\"\n [class.package-item__checkbox--checked]=\"package().isSelected\"\n (click)=\"$event.stopPropagation(); onTogglePackage()\"\n >\n <svg\n class=\"package-item__checkbox-icon\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2 7L5.5 10.5L12 3.5\"\n stroke=\"white\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n }\n\n <div class=\"package-item__content\">\n <div class=\"package-item__info\">\n <h4 class=\"package-item__name\">{{ package().packageName }}</h4>\n @if (package().boardBasis) {\n <span class=\"package-item__board-basis\">{{\n package().boardBasis\n }}</span>\n }\n </div>\n\n <span\n class=\"package-item__refund-badge package-item__refund-badge--refundable\"\n >\n REFUNDABLE\n </span>\n </div>\n </div>\n\n @if (groupedRooms().length) {\n <div class=\"package-item__rooms\">\n @for (group of groupedRooms(); track i; let i = $index) {\n <div class=\"package-item__room\">\n <h5 class=\"package-item__room-name\">\n @if (group.count > 1) {\n {{ group.count }}x\n @if (group.bedTypeOrRoomType) {\n {{ group.bedTypeOrRoomType }}\n }\n } @else {\n Room\n {{ i + 1 }}\n @if (group.bedTypeOrRoomType) {\n <span class=\"package-item__separator\">•</span>\n {{ group.bedTypeOrRoomType }}\n }\n }\n </h5>\n @if (group.roomBasis) {\n <span class=\"package-item__room-basis\">{{ group.roomBasis }}</span>\n }\n </div>\n }\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\n\n/**\n * Simple translation service that provides English translations\n * without requiring ngx-translate\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslationService {\n private currentLanguage = 'en';\n\n private translations: { [key: string]: string } = {\n // Wallet and refund\n 'manage-booking.smart-cancel.result.wallet-points-label': 'Wallet Points',\n 'manage-booking.smart-cancel.result.your-wallet': 'Your Wallet',\n 'manage-booking.smart-cancel.result.ready-now': 'Ready Now',\n 'manage-booking.smart-cancel.refund-method.original': 'Original Payment Method',\n 'manage-booking.smart-cancel.refund-method.days-badge': '5-7 business days',\n 'manage-booking.smart-cancel.refund-method.installment-badge-tabby': '3-5 business days',\n 'manage-booking.smart-cancel.refund-method.installment-badge-tamara': '7-10 business days',\n 'manage-booking.smart-cancel.refund-method.loyalty-badge': 'Instant',\n 'manage-booking.smart-cancel.result.mada-card': 'Mada Card',\n 'manage-booking.smart-cancel.refund-method.wallet': 'Almatar Wallet',\n 'manage-booking.smart-cancel.refunds.loyalty': 'Loyalty Points',\n\n // Refund method descriptions\n 'manage-booking.smart-cancel.refund-method.installment-desc': 'Refund to {{method}}',\n 'manage-booking.smart-cancel.refund-method.loyalty-desc': 'Refund to {{method}}',\n 'manage-booking.smart-cancel.refund-method.original-desc': 'Refund to {{method}}',\n\n // Hotel cancellation policy\n 'HOTEL.cancellation-policy': 'Cancellation Policy',\n\n // Refund method selector\n 'manage-booking.smart-cancel.refund-method.title': 'Select Refund Method',\n };\n\n getCurrentLanguage(): string {\n return this.currentLanguage;\n }\n\n setLanguage(lang: string): void {\n this.currentLanguage = lang;\n }\n\n instant(key: string, params?: { [key: string]: string }): string {\n let translation = this.translations[key] || key;\n\n // Replace {{param}} placeholders\n if (params) {\n Object.keys(params).forEach(param => {\n translation = translation.replace(`{{${param}}}`, params[param]);\n });\n }\n\n return translation;\n }\n\n get currentLang(): string {\n return this.currentLanguage;\n }\n}\n","import { NgModule, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'almatar-icon',\n standalone: true,\n imports: [CommonModule],\n template: `\n <i [class]=\"'pi pi-' + name\" [style.font-size.px]=\"size\"></i>\n `,\n styles: [`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n `]\n})\nexport class AlmatarIconComponent {\n @Input() name = '';\n @Input() size = 16;\n}\n\n@NgModule({\n imports: [CommonModule, AlmatarIconComponent],\n exports: [AlmatarIconComponent]\n})\nexport class AlmatarIconModule {}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n signal,\n inject,\n DestroyRef,\n effect,\n computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslationService } from '../../../../../../shared/services/translation.service';\nimport { HttpClient, HttpEventType, HttpRequest } from '@angular/common/http';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n IAlmatarHotelAutoCancellationPackage,\n IAlmatarHotelAutoCancellationHotelInfo,\n IAlmatarHotelAutoCancellationPackageRoom,\n} from '../../../../interfaces/i-almatar-hotel-auto-cancellation.interface';\nimport { AlmatarIconModule } from '../../../../../../shared/modules/almatar-icon/almatar-icon.module';\nimport { AlmatarHotelAutoCancellationEndpointsEnum } from '../../../../enums/almatar-hotel-auto-cancellation-endpoints.enum';\nimport { AlmatarHotelAutoCancellationEndpointsService } from '../../../../services/almatar-hotel-auto-cancellation-endpoints.service';\nimport { DialogService } from 'primeng/dynamicdialog';\n\ninterface IGroupedPackageRoom {\n key: string;\n bedTypeOrRoomType: string;\n roomBasis: string;\n count: number;\n rooms: IAlmatarHotelAutoCancellationPackageRoom[];\n}\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation-non-refundable-room',\n standalone: true,\n imports: [CommonModule, AlmatarIconModule],\n providers: [DialogService],\n templateUrl:\n './almatar-hotel-auto-cancellation-non-refundable-room.component.html',\n styleUrls: [\n './almatar-hotel-auto-cancellation-non-refundable-room.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlmatarHotelAutoCancellationNonRefundableRoomComponent {\n private readonly http = inject(HttpClient);\n private readonly destroyRef = inject(DestroyRef);\n private readonly endpointsService = inject(\n AlmatarHotelAutoCancellationEndpointsService,\n );\n\n private readonly translateService = inject(TranslationService);\n private readonly dialogService = inject(DialogService);\n\n readonly package = input.required<IAlmatarHotelAutoCancellationPackage>();\n readonly allPackages = input<IAlmatarHotelAutoCancellationPackage[]>([]);\n readonly hotelInfo = input<IAlmatarHotelAutoCancellationHotelInfo | null>(\n null,\n );\n\n // constructor(){effect(() => {\n // console.log(this.package())\n // })}\n\n readonly hotelId = input<string | number>('');\n readonly currencyCode = input<string>('SAR');\n readonly allPackagesNonRefundable = input<boolean>(false);\n\n private readonly useLocalCancellationPolicies = true;\n\n readonly closeModal = output<void>();\n readonly nonRefundableSubmitSuccess = output<string>();\n\n readonly uploadedFile = signal<File | null>(null);\n readonly uploadedFileUrl = signal<string | null>(null);\n readonly filePicked = signal<File | null>(null);\n readonly uploadSuccess = signal<boolean>(false);\n readonly uploadProgress = signal<number>(0);\n readonly isUploading = signal<boolean>(false);\n readonly isSubmitting = signal<boolean>(false);\n readonly submitSuccess = signal<boolean>(false);\n readonly submitError = signal<string | null>(null);\n\n readonly groupedRooms = computed<IGroupedPackageRoom[]>(() => {\n const rooms = this.package()?.rooms || [];\n const groupMap = new Map<string, IGroupedPackageRoom>();\n\n for (const room of rooms) {\n // const bedTypeOrRoomType = room.bedType || room.roomType || '';\n const bedTypeOrRoomType = room?.roomName;\n const roomBasis = room.roomBasis || '';\n const key = `${bedTypeOrRoomType}|||${roomBasis}`;\n\n if (groupMap.has(key)) {\n const group = groupMap.get(key)!;\n group.count++;\n group.rooms.push(room);\n } else {\n groupMap.set(key, {\n key,\n bedTypeOrRoomType,\n roomBasis,\n count: 1,\n rooms: [room],\n });\n }\n }\n\n return Array.from(groupMap.values());\n });\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n const file = input.files[0];\n this.filePicked.set(file);\n this.uploadFile(file);\n }\n }\n\n private uploadFile(file: File): void {\n this.isUploading.set(true);\n this.uploadProgress.set(0);\n this.uploadSuccess.set(false);\n this.uploadedFileUrl.set(null);\n\n const formData = new FormData();\n formData.append('file', file);\n\n const req = new HttpRequest(\n 'POST',\n this.endpointsService.resolveEndpoint(\n AlmatarHotelAutoCancellationEndpointsEnum.uploadAttachment,\n ),\n formData,\n {\n reportProgress: true,\n responseType: 'json',\n },\n );\n\n this.http\n .request<{ data: { url: string } }>(req)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (event) => {\n if (event.type === HttpEventType.UploadProgress && event.total) {\n const progress = Math.round((100 * event.loaded) / event.total);\n this.uploadProgress.set(progress);\n } else if (event.type === HttpEventType.Response) {\n this.uploadProgress.set(100);\n this.isUploading.set(false);\n this.uploadSuccess.set(true);\n this.uploadedFile.set(file);\n this.uploadedFileUrl.set(event.body?.data?.url ?? null);\n }\n },\n error: () => {\n this.isUploading.set(false);\n this.uploadProgress.set(0);\n this.uploadSuccess.set(false);\n this.filePicked.set(null);\n this.uploadedFileUrl.set(null);\n },\n });\n }\n\n onSubmitRequest(): void {\n const url = this.uploadedFileUrl();\n if (!url) {\n return;\n }\n\n this.isSubmitting.set(true);\n this.submitError.set(null);\n this.submitSuccess.set(false);\n\n const language = 'en';\n\n this.endpointsService\n .processNonRefundableCancellation(this.package().packageId, url, language)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.isSubmitting.set(false);\n this.submitSuccess.set(true);\n this.nonRefundableSubmitSuccess.emit(this.package().packageName);\n },\n error: (error) => {\n this.isSubmitting.set(false);\n this.submitError.set(error?.message || 'Failed to submit request');\n },\n });\n }\n\n onRetry(): void {\n this.submitError.set(null);\n this.onSubmitRequest();\n }\n\n onOpenCancellationPolicy(): void {\n const hotelInfoData = this.hotelInfo();\n const currencyCode = this.currencyCode();\n\n // Use all packages if available, otherwise fall back to current package\n const packagesToShow =\n this.allPackages().length > 0 ? this.allPackages() : [this.package()];\n\n // Transform all packages with their cancellation policies\n const packagesForPopup = packagesToShow.map((pkg) => {\n // Transform cancellation policies to the format expected by mapCancellationPolicies\n const rawCancellationPolicies = (pkg.cancellationPolicies || []).map(\n (policy) => ({\n dateFrom: policy.fromDate,\n dateTo: policy.toDate,\n currencyIsoCode: currencyCode,\n finalPrice: policy.penaltyValue,\n refundabilityType:\n policy.penaltyType === 'FullRefunded'\n ? 'FullRefunded'\n : policy.penaltyType === 'Percentage' ||\n policy.penaltyType === 'Amount'\n ? 'PartialRefunded'\n : 'NonRefunded',\n }),\n );\n\n // Ensure at least one policy exists\n if (rawCancellationPolicies.length === 0) {\n rawCancellationPolicies.push({\n dateFrom: hotelInfoData?.checkIn,\n dateTo: hotelInfoData?.checkOut,\n currencyIsoCode: currencyCode,\n finalPrice: pkg.cancellationFee || 0,\n refundabilityType: pkg.isRefundable ? 'Refundable' : 'NonRefunded',\n });\n }\n\n // Build package data with all required fields\n const remarks =\n (pkg as any)?.cancellationPoliciesRemarks ??\n (pkg as any)?.CancellationPoliciesRemarks;\n return {\n ...pkg,\n cancellationPolicies: rawCancellationPolicies,\n isRefundable: pkg.isRefundable ?? pkg.refundability ?? false,\n refundableUntil: pkg.refundableUntil,\n currency: currencyCode,\n finalPrice: pkg.roomAmount,\n bookingRemarks: remarks,\n cancellationPoliciesRemarks: remarks,\n };\n });\n\n const cartInfo = {\n packages: packagesForPopup,\n fromDate: hotelInfoData?.checkIn,\n date_from: hotelInfoData?.checkIn,\n toDate: hotelInfoData?.checkOut,\n date_to: hotelInfoData?.checkOut,\n almtaarHotelId: this.hotelId(),\n };\n\n const lang = 'en';\n const formatDate =\n lang === 'en'\n ? 'dddd Do of MMMM YYYY - hh:mm A [GMT]'\n : 'dddd , DD MMMM YYYY - hh:mm A [GMT]';\n\n // TODO: Fix import path for CancellationPolicyPopupComponent\n // import('libs/features/src/lib/features/hotels/shared/modules/hotel-booking-information/components/booking-summary/components/cancellation-policy-popup/cancellation-policy.popup.component').then(\n // ({ CancellationPolicyPopupComponent }) => {\n const header = this.translateService.instant(\n 'HOTEL.cancellation-policy',\n );\n console.warn('CancellationPolicyPopupComponent not available - import path needs to be fixed');\n // this.dialogService.open(CancellationPolicyPopupComponent, {\n // header,\n // data: {\n // cartInfo,\n // currentCurrencyObj: {\n // code: currencyCode,\n // currency: currencyCode,\n // },\n // formatDate,\n // hotelDetails: {\n // hotelName: hotelInfoData?.hotelName,\n // paymentOption: null,\n // },\n // },\n // styleClass: 'cancellation-policy-dialog',\n // contentStyle: { overflow: 'auto' },\n // baseZIndex: 10000,\n // maximizable: false,\n // style: { width: '600px', maxWidth: '90%' },\n // });\n //},\n //);\n }\n\n formatFileSize(bytes: number | undefined): string {\n if (!bytes) {\n return '';\n }\n if (bytes < 1024) {\n return `${bytes} B`;\n }\n if (bytes < 1024 * 1024) {\n return `${Math.round(bytes / 1024)} KB`;\n }\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n }\n}\n","<div\n class=\"package-item package-item--non-refundable\"\n>\n <div class=\"package-item__header\">\n <div class=\"package-item__content\">\n <div class=\"package-item__info\">\n <h4 class=\"package-item__name\">{{ package().packageName }}</h4>\n @if (package().boardBasis) {\n <span class=\"package-item__board-basis\">{{\n package().boardBasis\n }}</span>\n }\n </div>\n\n @if (package()?.isCancelled) {\n <span\n class=\"package-item__refund-badge package-item__refund-badge--cancelled\"\n >\n PREVIOUS CANCELLATION\n </span>\n } @else {\n <span\n class=\"package-item__refund-badge package-item__refund-badge--non-refundable\"\n >\n NON-REFUNDABLE\n </span>\n }\n </div>\n </div>\n\n @if (groupedRooms().length) {\n <div class=\"package-item__rooms\">\n @for (group of groupedRooms(); track i; let i = $index) {\n <div class=\"package-item__room\">\n <h5 class=\"package-item__room-name\">\n @if (group.count > 1) {\n {{ group.count }}x\n @if (group.bedTypeOrRoomType) {\n {{ group.bedTypeOrRoomType }}\n }\n } @else {\n Room\n {{ i + 1 }}\n @if (group.bedTypeOrRoomType) {\n <span class=\"package-item__separator\">•</span>\n {{ group.bedTypeOrRoomType }}\n }\n }\n </h5>\n @if (group.roomBasis) {\n <span class=\"package-item__room-basis\">{{\n group.roomBasis\n }}</span>\n }\n </div>\n }\n </div>\n }\n\n @if (!package()?.isCancelled && !allPackagesNonRefundable()) {\n <div class=\"package-item__non-refundable-content\">\n <div class=\"info-message\">\n <almatar-icon [name]=\"'exclamation-circle'\"> </almatar-icon>\n <p\n class=\"info-message__text\"\n (click)=\"$event.preventDefault(); onOpenCancellationPolicy()\"\n [innerHTML]=\"\n 'We can\\'t process automatic cancellation with this room. Check the <a class=&quot;info-message__link&quot;>cancellation policy</a> for details'\n \"\n ></p>\n </div>\n\n @if (uploadSuccess()) {\n <div class=\"upload-success\">\n <span class=\"upload-success__icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.4697 8.20112C13.7626 7.90822 14.2373 7.90822 14.5302 8.20112C14.8231 8.49401 14.8231 8.96877 14.5302 9.26166L7.53022 16.2617C7.23732 16.5546 6.76256 16.5546 6.46967 16.2617L3.46967 13.2617C3.17678 12.9688 3.17678 12.494 3.46967 12.2011C3.74427 11.9265 4.17899 11.909 4.47358 12.1494L4.53022 12.2011L6.99994 14.6708L13.4697 8.20112Z\"\n fill=\"#1B1A1F\"\n />\n <path\n d=\"M19.4697 8.20112C19.7626 7.90822 20.2373 7.90822 20.5302 8.20112C20.8231 8.49401 20.8231 8.96877 20.5302 9.26166L13.5302 16.2617C13.2639 16.5279 12.8415 16.5556 12.5429 16.3261L11.5429 15.5576L11.4843 15.5078C11.2079 15.2468 11.1686 14.8137 11.4052 14.5058C11.6418 14.198 12.0703 14.1245 12.3935 14.3242L12.457 14.3681L12.9345 14.7353L19.4697 8.20112Z\"\n fill=\"#1B1A1F\"\n />\n </svg>\n </span>\n <div class=\"upload-success__info\">\n <p class=\"upload-success__filename\">{{ filePicked()?.name }}</p>\n <p class=\"upload-success__meta\">\n {{ formatFileSize(filePicked()?.size) }} •\n Uploaded\n </p>\n </div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".pdf,.jpg,.jpeg,.png,.doc,.docx\"\n />\n <button\n type=\"button\"\n class=\"upload-success__change-btn\"\n (click)=\"fileInput.click()\"\n >\n Change\n </button>\n </div>\n } @else {\n <div class=\"upload-section\">\n <almatar-icon [name]=\"'arrow-up-on-square'\"></almatar-icon>\n <div style=\"flex: 1\">\n <h5 class=\"upload-section__title\">\n Upload a document to support your request\n </h5>\n <p class=\"upload-section__subtitle\">\n Required to submit and track your request\n </p>\n @if (filePicked() && !uploadSuccess()) {\n <p class=\"upload-section__filename\">\n {{ filePicked()?.name }}\n </p>\n }\n @if (isUploading()) {\n <div class=\"upload-progress\">\n <div class=\"upload-progress__bar\">\n <div\n class=\"upload-progress__fill\"\n [style.width.%]=\"uploadProgress()\"\n ></div>\n </div>\n <span class=\"upload-progress__text\"\n >{{ uploadProgress() }}%</span\n >\n </div>\n }\n </div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".pdf,.jpg,.jpeg,.png,.doc,.docx\"\n />\n <button\n type=\"button\"\n class=\"upload-section__button\"\n [disabled]=\"isUploading()\"\n (click)=\"fileInput.click()\"\n >\n Upload file\n </button>\n </div>\n }\n\n @if (submitError()) {\n <div class=\"submit-result submit-result--error\">\n <almatar-icon [name]=\"'exclamation-circle'\"></almatar-icon>\n <p class=\"submit-result__text\">{{ submitError() }}</p>\n <button\n type=\"button\"\n class=\"submit-result__retry-btn\"\n (click)=\"onRetry()\"\n >\n Try Again\n </button>\n </div>\n } @else if (!submitSuccess()) {\n <button\n type=\"button\"\n class=\"submit-request-btn\"\n [disabled]=\"!uploadSuccess() || isSubmitting()\"\n (click)=\"onSubmitRequest()\"\n >\n @if (isSubmitting()) {\n Submitting...\n } @else {\n Submit my request\n }\n </button>\n }\n </div>\n }\n</div>\n","import {\n Component,\n ChangeDetectionStrategy,\n DestroyRef,\n input,\n output,\n signal,\n computed,\n inject,\n effect,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharedService } from '../../../../shared/services/shared.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport moment from 'moment';\nimport {\n IAlmatarHotelAutoCancellationPackage,\n IAlmatarHotelAutoCancellationHotelInfo,\n} from '../../interfaces/i-almatar-hotel-auto-cancellation.interface';\nimport { AlmatarHotelAutoCancellationRefundableRoomComponent } from './components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component';\nimport { AlmatarHotelAutoCancellationNonRefundableRoomComponent } from './components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component';\nimport { AlmatarHotelAutoCancellationEndpointsService } from '../../services/almatar-hotel-auto-cancellation-endpoints.service';\nimport { AlmatarHotelAutoCancellationService } from '../../services/almatar-hotel-auto-cancellation.service';\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation-select-rooms',\n standalone: true,\n imports: [\n CommonModule,\n AlmatarHotelAutoCancellationRefundableRoomComponent,\n AlmatarHotelAutoCancellationNonRefundableRoomComponent,\n ],\n templateUrl: './almatar-hotel-auto-cancellation-select-rooms.component.html',\n styleUrls: ['./almatar-hotel-auto-cancellation-select-rooms.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlmatarHotelAutoCancellationSelectRoomsComponent {\n private readonly sharedService = inject(SharedService);\n private readonly endpointsService = inject(\n AlmatarHotelAutoCancellationEndpointsService,\n );\n\n private readonly autoCancellationService = inject(\n AlmatarHotelAutoCancellationService,\n );\n\n private readonly destroyRef = inject(DestroyRef);\n\n readonly packages = input.required<IAlmatarHotelAutoCancellationPackage[]>();\n readonly isLoadingRefund = signal(false);\n\n constructor() {\n effect(\n () => {\n // get only un cancelled packages\n const packagesList = this.packages().filter(\n (pkg: any) => !pkg?.isCancelled,\n );\n if (packagesList.length === 1 && !packagesList[0].isSelected) {\n const selectedPackage = { ...packagesList[0], isSelected: true };\n this.localPackages.set([selectedPackage]);\n }\n },\n { allowSignalWrites: true },\n );\n }\n\n readonly hotelInfo =\n input.required<IAlmatarHotelAutoCancellationHotelInfo | null>();\n\n readonly bookingId = input<string | number>('');\n\n readonly hotelId = input<string | number>('');\n\n readonly continueToCancel = output<IAlmatarHotelAutoCancellationPackage[]>();\n readonly closeModal = output<void>();\n readonly nonRefundableSubmitSuccess = output<string>();\n readonly chatWithAgent = output<void>();\n\n readonly currencyCode = input<string>('SAR');\n\n readonly localPackages = signal<IAlmatarHotelAutoCancellationPackage[]>([]);\n\n readonly displayPackages = computed(() => {\n const local = this.localPackages();\n return local.length > 0 ? local : this.packages();\n });\n\n readonly selectedPackagesCount = computed(\n () => this.displayPackages().filter((pkg) => pkg.isSelected).length,\n );\n\n readonly hasSelectedPackages = computed(\n () => this.selectedPackagesCount() > 0,\n );\n\n readonly isSinglePackage = computed(() => this.packages().length === 1);\n\n readonly totalRoomsCount = computed(() =>\n this.packages().reduce((acc, pkg) => acc + (pkg.rooms?.length || 0), 0),\n );\n\n readonly allPackagesNonRefundable = computed(() =>\n this.packages().every((pkg) => !pkg.isRefundable && !pkg.isCancelled),\n );\n\n togglePackage(packageId: string): void {\n const currentPackages = this.displayPackages();\n const updatedPackages = currentPackages.map((pkg) =>\n pkg.packageId === packageId\n ? { ...pkg, isSelected: !pkg.isSelected }\n : pkg,\n );\n this.localPackages.set(updatedPackages);\n }\n\n onContinue(): void {\n if (this.hasSelectedPackages()) {\n const selectedPackages = this.displayPackages().filter(\n (pkg) => pkg.isSelected && !pkg.isCancelled,\n );\n this.continueToCancel.emit(selectedPackages);\n }\n }\n\n onClose(): void {\n this.closeModal.emit();\n }\n\n onChatWithAgent(): void {\n this.chatWithAgent.emit();\n }\n\n onNonRefundableSubmitSuccess(packageName: string): void {\n this.nonRefundableSubmitSuccess.emit(packageName);\n }\n\n formatDate(date: any): {\n day: number;\n month: string;\n year: number;\n dayName: string;\n } {\n const lang = this.sharedService.getAppLanguage();\n const m = moment(date).locale(lang);\n\n return {\n day: m.date(),\n month: m.format('MMMM'),\n year: m.year(),\n dayName: m.format('dddd'),\n };\n }\n}\n","<div class=\"select-rooms\">\n <div class=\"select-rooms__content\">\n @if (hotelInfo(); as hotel) {\n <div class=\"hotel-info-card\">\n <h3 class=\"hotel-info-card__name\">{{ hotel.hotelName }}</h3>\n\n <div class=\"hotel-info-card__content\">\n @if (hotel.hotelImage) {\n <div class=\"hotel-info-card__image\">\n <img [src]=\"hotel.hotelImage\" [alt]=\"hotel.hotelName\" />\n </div>\n }\n\n <div class=\"hotel-info-card__dates\">\n <div class=\"date-box\">\n <span class=\"date-box__label\">CHECK-IN</span>\n <span class=\"date-box__day\">{{\n formatDate(hotel.checkIn).day\n }}</span>\n <span class=\"date-box__month\">{{\n formatDate(hotel.checkIn).month\n }}</span>\n <span class=\"date-box__day-name\">{{\n formatDate(hotel.checkIn).dayName\n }}</span>\n <span class=\"date-box__time\"\n >From\n {{ hotel?.checkInTime }}</span\n >\n </div>\n\n <div class=\"date-box\">\n <span class=\"date-box__label\">CHECK-OUT</span>\n <span class=\"date-box__day\">{{\n formatDate(hotel.checkOut).day\n }}</span>\n <span class=\"date-box__month\">{{\n formatDate(hotel.checkOut).month\n }}</span>\n <span class=\"date-box__day-name\">{{\n formatDate(hotel.checkOut).dayName\n }}</span>\n <span class=\"date-box__time\"\n >Until\n {{ hotel?.checkOutTime }}</span\n >\n </div>\n </div>\n\n <div class=\"hotel-info-card__stats\">\n <div class=\"stat-box\">\n <span class=\"stat-box__label\">Rooms</span>\n <span class=\"stat-box__value\">{{ totalRoomsCount() }}</span>\n </div>\n <div class=\"stat-box\">\n <span class=\"stat-box__label\">NIGHTS</span>\n <span class=\"stat-box__value\">{{ hotel.nights }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n <div class=\"select-rooms__notice select-rooms__notice--default\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n />\n <path\n d=\"M12 11v5.5M12 8v.01\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span>\n Some rooms in each package, share one booking reference, so they will be cancelled together.</span\n >\n </div>\n\n <div class=\"rooms-list\">\n @for (package of displayPackages(); track $index) {\n @if (!package.manualRefundRequest && !package.isCancelled) {\n <almatar-hotel-auto-cancellation-refundable-room\n [package]=\"package\"\n [hideCheckbox]=\"isSinglePackage()\"\n (togglePackage)=\"togglePackage($event)\"\n />\n } @else {\n <almatar-hotel-auto-cancellation-non-refundable-room\n [package]=\"package\"\n [allPackages]=\"displayPackages()\"\n [hotelInfo]=\"hotelInfo()\"\n [hotelId]=\"hotelId()\"\n [currencyCode]=\"currencyCode()\"\n [allPackagesNonRefundable]=\"allPackagesNonRefundable()\"\n (closeModal)=\"onClose()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n />\n }\n }\n </div>\n\n @if (allPackagesNonRefundable()) {\n <div class=\"select-rooms__notice select-rooms__notice--warning\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <!-- warning triangle icon -->\n <path\n d=\"M12 9v4M12 17h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <span>Sorry, we couldn't process your refund right now. Please chat with our Customer Service team for help.</span>\n </div>\n }\n </div>\n\n <div class=\"select-rooms__footer\">\n @if (allPackagesNonRefundable()) {\n <button\n class=\"main_btn main_btn--chat-with-us\"\n type=\"button\"\n (click)=\"onChatWithAgent()\"\n >\n Chat with customer service\n </button>\n } @else {\n @if (!hasSelectedPackages()) {\n <p class=\"select-rooms__hint\">\n Select at least one room to continue\n </p>\n }\n <button\n class=\"main_btn\"\n type=\"button\"\n [disabled]=\"!hasSelectedPackages()\"\n (click)=\"onContinue()\"\n >\n Continue to cancel\n </button>\n }\n </div>\n</div>\n","import { createSelector } from '@ngrx/store';\nimport { ICurrency } from '../../models';\n\n// Stub selector for getCurrentCurrency\nexport const getCurrentCurrency = createSelector(\n () => ({}),\n (): ICurrency => ({\n code: 'SAR',\n name: 'Saudi Riyal',\n symbol: 'SAR',\n rate: 1\n })\n);\n","import { Pipe, PipeTransform, NgModule } from '@angular/core';\n\n@Pipe({\n name: 'exchange',\n standalone: true\n})\nexport class ExchangePipe implements PipeTransform {\n transform(value: number, currency?: string, rate?: number): number {\n if (!rate || rate === 1) {\n return value;\n }\n return value * rate;\n }\n}\n\n@Pipe({\n name: 'exchange_round',\n standalone: true\n})\nexport class ExchangeRoundPipe implements PipeTransform {\n transform(value: number, currency?: string, rate?: number): number {\n if (!rate || rate === 1) {\n return Math.round(value);\n }\n return Math.round(value * rate);\n }\n}\n\n@NgModule({\n imports: [ExchangePipe, ExchangeRoundPipe],\n exports: [ExchangePipe, ExchangeRoundPipe]\n})\nexport class ExchangePipeModule {}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport enum CurrencySizeEnum {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n LG = 'large'\n}\n\n@Component({\n selector: 'currency-code-icon',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span class=\"currency-icon\" [class]=\"'currency-icon--' + size\">\n {{ currencyCode }}\n </span>\n `,\n styles: [`\n .currency-icon {\n display: inline-block;\n font-weight: 600;\n }\n\n .currency-icon--small {\n font-size: 0.75rem;\n }\n\n .currency-icon--medium {\n font-size: 1rem;\n }\n\n .currency-icon--large {\n font-size: 1.25rem;\n }\n `]\n})\nexport class CurrencyCodeIconComponent {\n @Input() currencyCode = 'SAR';\n @Input() size: CurrencySizeEnum = CurrencySizeEnum.MEDIUM;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HotelManageBookingEndpointsService {\n cancelBookingRequest(payload: any): Observable<any> {\n return of(null);\n }\n}\n","export class CancelHotelBookingPayload {\n bookingId?: string;\n roomIds?: string[];\n refundMethod?: string;\n // Add other properties as needed\n\n constructor(data?: Partial<CancelHotelBookingPayload>) {\n Object.assign(this, data);\n }\n}\n","export enum HotelManageBookingAsideTabEnum {\n DETAILS = 'details',\n CANCELLATION = 'cancellation',\n MODIFICATION = 'modification',\n REFUND = 'refund',\n whatsAppAgent = 'whatsAppAgent'\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'confirm-modal',\n standalone: true,\n imports: [CommonModule, ButtonModule],\n template: `\n <div class=\"modal-overlay\" *ngIf=\"visible\" (click)=\"onCancel()\">\n <div class=\"modal-content\" (click)=\"$event.stopPropagation()\">\n <h3>{{ title || 'Confirm' }}</h3>\n <p>{{ message }}</p>\n <div class=\"modal-actions\">\n <button pButton type=\"button\" [label]=\"cancelLabel || 'Cancel'\" class=\"p-button-secondary\" (click)=\"onCancel()\"></button>\n <button pButton type=\"button\" [label]=\"confirmLabel || 'Confirm'\" (click)=\"onConfirm()\"></button>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2000;\n }\n\n .modal-content {\n background: white;\n padding: 2rem;\n border-radius: 8px;\n max-width: 400px;\n width: 90%;\n }\n\n h3 {\n margin-top: 0;\n }\n\n .modal-actions {\n display: flex;\n gap: 1rem;\n justify-content: flex-end;\n margin-top: 1.5rem;\n }\n `]\n})\nexport class ConfirmModalComponent {\n @Input() visible = false;\n @Input() title = '';\n @Input() message = '';\n @Input() confirmLabel = 'Confirm';\n @Input() cancelLabel = 'Cancel';\n\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() confirm = new EventEmitter<void>();\n @Output() cancel = new EventEmitter<void>();\n\n onConfirm(): void {\n this.confirm.emit();\n this.close();\n }\n\n onCancel(): void {\n this.cancel.emit();\n this.close();\n }\n\n private close(): void {\n this.visible = false;\n this.visibleChange.emit(false);\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n DestroyRef,\n OnInit,\n inject,\n input,\n output,\n signal,\n computed,\n effect,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LoaderModule } from '../../../../shared/modules/loader/loader.module';\nimport {\n IAlmatarHotelAutoCancellationRoom,\n IAlmatarHotelAutoCancellationRefundSummary,\n IAlmatarHotelAutoCancellationHotelInfo,\n IAlmatarHotelAutoCancellationRefundPackage,\n IAlmatarHotelAutoCancellationRefundPackageRoom,\n IGift,\n} from '../../interfaces/i-almatar-hotel-auto-cancellation.interface';\nimport { AlmatarHotelAutoCancellationEndpointsService } from '../../services/almatar-hotel-auto-cancellation-endpoints.service';\nimport { AlmatarHotelAutoCancellationService } from '../../services/almatar-hotel-auto-cancellation.service';\nimport { AlmatarIconModule } from '../../../../shared/modules/almatar-icon/almatar-icon.module';\nimport { Store } from '@ngrx/store';\nimport { filter } from 'rxjs/operators';\nimport { getCurrentCurrency } from '../../../../shared/store/selectors/currency.selectors';\nimport { ExchangePipeModule } from '../../../../shared/pipes/exchange.pipe';\nimport { CurrencyCodeIconComponent } from '../../../../shared/components/currency-code-icon/currency-code-icon.component';\nimport { SharedService } from '../../../../shared/services/shared.service';\nimport { TranslationService } from '../../../../shared/services/translation.service';\nimport moment from 'moment';\nimport { HotelManageBookingEndpointsService } from '../../../shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service';\nimport { HotelManageBookingService } from '../../../shared/services/hotel-manage-booking/hotel-manage-booking.service';\nimport { CancelHotelBookingPayload } from '../../../shared/models/cancel-hotel-booking.model';\nimport { HotelManageBookingAsideTabEnum } from '../../../shared/enums/hotel-manage-booking-aside-tab.enum';\nimport { environments } from '../../../../shared/environments/environment';\nimport { ConfirmModalComponent } from '../../../shared/components/confirm-modal/confirm-modal.component';\nimport { ManageBookingFailedModalComponent } from '../../../shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component';\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation-refund-summary',\n standalone: true,\n imports: [\n CommonModule,\n LoaderModule,\n AlmatarIconModule,\n ExchangePipeModule,\n CurrencyCodeIconComponent,\n ConfirmModalComponent,\n ManageBookingFailedModalComponent,\n ],\n templateUrl:\n './almatar-hotel-auto-cancellation-refund-summary.component.html',\n styleUrls: [\n './almatar-hotel-auto-cancellation-refund-summary.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlmatarHotelAutoCancellationRefundSummaryComponent implements OnInit {\n private readonly endpointsService = inject(\n AlmatarHotelAutoCancellationEndpointsService,\n );\n\n private readonly autoCancellationService = inject(\n AlmatarHotelAutoCancellationService,\n );\n\n private readonly store = inject(Store);\n private readonly sharedService = inject(SharedService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly translateService = inject(TranslationService);\n private readonly hotelManageBookingsEndpointsService = inject(\n HotelManageBookingEndpointsService,\n );\n\n private readonly hotelManageBookingService = inject(\n HotelManageBookingService,\n );\n\n constructor(){\n // effect(() => {\n // console.log('Refund Summary Updated:', this.currentCurrency());\n // })\n }\n\n // Currency\n readonly baseCurrencyCode = signal('SAR');\n readonly currentCurrency = signal<any>(null);\n\n readonly paymentMethod = signal<any>(null);\n\n // Language\n readonly currentLang = signal('en');\n\n readonly selectedRooms =\n input.required<IAlmatarHotelAutoCancellationRoom[]>();\n\n readonly bookingId = input<string | number>('');\n\n readonly hotelId = input<string | number>('');\n\n readonly hotelInfo = input<IAlmatarHotelAutoCancellationHotelInfo | null>(\n null,\n );\n\n readonly selectionSkipped = input<boolean>(false);\n\n readonly keepRoom = output<void>();\n readonly selectRefundOption = output<{\n packageIds: string[];\n payout: any;\n totalRefund: number;\n responseData: any;\n }>();\n\n readonly closeModal = output<void>();\n\n readonly isCancelLoading = signal(false);\n\n // Modal state\n readonly showConfirmModalFlag = signal(false);\n readonly showErrorModalFlag = signal(false);\n readonly hotelManageError = signal<string>('');\n\n backArrow = computed(() => {\n return 'arrow-left'; // Always LTR for English\n });\n\n readonly expandedPackageIds = signal<Set<string>>(new Set());\n readonly expandedAmountIds = signal<Set<string>>(new Set());\n readonly isLoading = signal(true);\n readonly refundSummary =\n signal<IAlmatarHotelAutoCancellationRefundSummary | null>(null);\n\n readonly error = signal<string | null>(null);\n readonly responseData = signal<any | null>(null);\n\n readonly rooms = computed(() => this.refundSummary()?.rooms ?? []);\n\n groupRoomsByName(rooms: IAlmatarHotelAutoCancellationRefundPackageRoom[]): {\n roomName: string;\n count: number;\n nights?: number;\n adults?: number;\n children?: number;\n basis?: string;\n }[] {\n const grouped = new Map<\n string,\n {\n count: number;\n nights?: number;\n adults?: number;\n children?: number;\n basis?: string;\n }\n >();\n\n rooms.forEach((room) => {\n const name = room.roomName || 'Room';\n const adults = room.pax?.adults ?? room.adults;\n const children = room.pax?.children ?? room.children;\n if (grouped.has(name)) {\n const existing = grouped.get(name)!;\n existing.count++;\n } else {\n grouped.set(name, {\n count: 1,\n nights: room.nights,\n adults,\n children,\n basis: room.basis,\n });\n }\n });\n\n return Array.from(grouped.entries()).map(([roomName, data]) => ({\n roomName,\n ...data,\n }));\n }\n\n readonly packages = computed(() => this.refundSummary()?.packages ?? []);\n\n readonly allPackagesCancelled = computed(() => {\n const packages = this.packages();\n if (packages.length === 0) return false;\n return packages.every((pkg) => pkg.cancelledBefore === true);\n });\n\n readonly currentRefundRoomsNumber = computed(() => {\n const packages = this.packages();\n return packages\n .filter((pkg) => !pkg.cancelledBefore)\n .reduce((acc, pkg) => acc + (pkg.rooms?.length || 0), 0);\n });\n\n readonly totalPaid = computed(() => this.refundSummary()?.totalPaid ?? 0);\n readonly totalRefund = computed(() => this.refundSummary()?.totalRefund ?? 0);\n readonly alreadyRefunded = computed(\n () => this.payout()?.alreadyRefunded ?? 0,\n );\n\n readonly summaries = computed(() => this.refundSummary()?.summaries ?? []);\n readonly payout = computed(() => this.refundSummary()?.payout ?? null);\n readonly packageIds = computed(() =>\n this.selectedRooms().map((room) => room.packageId),\n );\n\n readonly totalPackagesCount = computed(() =>\n this.packages().reduce((acc, pkg) => acc + (pkg.rooms?.length || 0), 0),\n );\n\n // Additional breakdown fields\n readonly couponAmount = computed(() => this.refundSummary()?.coupon ?? 0);\n readonly giftsTotal = computed(() => this.refundSummary()?.giftsTotal ?? 0);\n readonly giftsDetails = computed(\n () => this.refundSummary()?.giftsDetails ?? [],\n );\n\n readonly giftsHasRefundableEntity = computed(() =>\n this.giftsDetails().some((gift: IGift) => gift.refundable),\n );\n\n readonly serviceFeeAmount = computed(\n () => this.refundSummary()?.serviceFee ?? 0,\n );\n\n readonly surchargeAmount = computed(\n () => this.refundSummary()?.surcharge ?? 0,\n );\n\n readonly isGoldenGift = computed(\n () => this.refundSummary()?.goldenGift ?? false,\n );\n\n readonly payoutNote = computed(() => this.payout()?.note ?? null);\n readonly previousRooms = computed(\n () => this.refundSummary()?.previousRooms ?? [],\n );\n\n // Check if there are any deductions to show\n readonly hasDeductions = computed(\n () =>\n this.couponAmount() > 0 ||\n this.giftsTotal() > 0 ||\n this.serviceFeeAmount() > 0 ||\n this.surchargeAmount() > 0,\n );\n\n ngOnInit(): void {\n this.loadRefundDetails();\n this.initCurrency();\n this.initLanguage();\n }\n\n private initLanguage(): void {\n // Language is fixed to English\n this.currentLang.set('en');\n }\n\n private initCurrency(): void {\n this.store\n .select(getCurrentCurrency)\n .pipe(\n filter((currency) => !!currency),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((currency) => {\n this.currentCurrency.set(currency);\n });\n\n this.sharedService\n .getBaseCurrency()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((currency) => {\n this.baseCurrencyCode.set(currency.code);\n });\n }\n\n loadRefundDetails(): void {\n const packageIds = this.packageIds();\n this.isLoading.set(true);\n this.error.set(null);\n\n this.endpointsService\n .getRefundDetails(packageIds)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.data) {\n const summary = this.endpointsService.mapApiResponseToRefundSummary(\n response.data,\n );\n\n this.responseData.set(response.data);\n\n this.refundSummary.set(summary);\n\n this.paymentMethod.set(\n this.determinePaymentMethod(\n this.refundSummary()?.payout,\n this.refundSummary()?.totals,\n ),\n );\n }\n this.isLoading.set(false);\n },\n error: (err) => {\n // this.calculateLocalRefundSummary();\n this.error.set(err?.message || 'Failed to load refund details');\n this.isLoading.set(false);\n },\n });\n }\n\n private calculateLocalRefundSummary(): void {\n const summary = this.endpointsService.calculateLocalRefundSummary(\n this.selectedRooms().map((room) => ({ ...room, isSelected: true })),\n );\n this.refundSummary.set(summary);\n }\n\n togglePackageExpand(packageId: string): void {\n this.expandedPackageIds.update((current) => {\n const newSet = new Set(current);\n if (newSet.has(packageId)) {\n newSet.delete(packageId);\n } else {\n newSet.add(packageId);\n }\n return newSet;\n });\n }\n\n toggleAmountExpand(packageId: string): void {\n this.expandedAmountIds.update((current) => {\n const newSet = new Set(current);\n if (newSet.has(packageId)) {\n newSet.delete(packageId);\n } else {\n newSet.add(packageId);\n }\n return newSet;\n });\n }\n\n isPackageExpanded(packageId: string): boolean {\n return this.expandedPackageIds().has(packageId);\n }\n\n isAmountExpanded(packageId: string): boolean {\n return this.expandedAmountIds().has(packageId);\n }\n\n onKeepRoom(): void {\n this.keepRoom.emit();\n }\n\n onSelectRefundOption(): void {\n this.selectRefundOption.emit({\n packageIds: this.packageIds(),\n payout: this.payout(),\n totalRefund: this.totalRefund(),\n responseData: this.responseData(),\n });\n }\n\n onClose(): void {\n this.closeModal.emit();\n }\n\n submitData(): void {\n this.onConfirmSend();\n }\n\n onConfirmSend(): void {\n this.isCancelLoading.set(true);\n this.hotelManageBookingsEndpointsService\n .cancelBookingRequest(new CancelHotelBookingPayload())\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (res: any) => {\n this.isCancelLoading.set(false);\n if (environments.isTenant) {\n this.onShowWhatsAppAgent();\n } else {\n if (res?.data?.isWhatsAppRedirect) {\n this.onShowWhatsAppAgent();\n } else {\n this.onShowConfirmModal();\n }\n }\n },\n error: (error: any) => {\n this.isCancelLoading.set(false);\n this.hotelManageError.set(error?.error?.errors?.message || '');\n this.showErrorModalFlag.set(true);\n },\n });\n }\n\n private onShowWhatsAppAgent(): void {\n this.hotelManageBookingService.setActiveAsideTab(\n HotelManageBookingAsideTabEnum.whatsAppAgent,\n );\n this.closeModal.emit();\n }\n\n private onShowConfirmModal(): void {\n this.showConfirmModalFlag.set(true);\n }\n\n closeAllModals(): void {\n this.showConfirmModalFlag.set(false);\n this.showErrorModalFlag.set(false);\n this.closeModal.emit();\n }\n\n formatDate(date: string | undefined): string {\n if (!date) {\n return '';\n }\n const day = moment(date).format('D');\n const month = moment(date).locale('en').format('MMMM');\n const year = moment(date).format('YYYY');\n return `${day} ${month} ${year}`;\n }\n\n private determinePaymentMethod(totals: any, payout: any): string {\n if ((payout?.tabby ?? totals?.tabby ?? 0) > 0) {\n return 'TB'; // Tabby\n }\n if ((payout?.tamara ?? totals?.tamara ?? 0) > 0) {\n return 'TM'; // Tamara\n }\n if ((payout?.card ?? totals?.card ?? 0) > 0) {\n return 'CH'; // Card\n }\n return '';\n }\n}\n","<div class=\"refund-summary\">\n <!-- Header -->\n <!-- <div class=\"refund-summary__header\">\n <button\n type=\"button\"\n class=\"refund-summary__header-btn\"\n (click)=\"onKeepRoom()\"\n aria-label=\"Close\"\n >\n <almatar-icon [name]=\"backArrow()\"></almatar-icon>\n </button>\n\n <div class=\"refund-summary__header-text\">\n <h3 class=\"refund-summary__header-title\">\n Cancel Booking Request\n </h3>\n </div>\n <button\n type=\"button\"\n class=\"refund-summary__header-btn\"\n (click)=\"onClose()\"\n aria-label=\"Close\"\n >\n <almatar-icon [name]=\"'x-mark'\"></almatar-icon>\n </button>\n </div> -->\n\n @if (isLoading()) {\n <div class=\"refund-summary__loader\">\n <almatar-loader></almatar-loader>\n </div>\n } @else if (error()) {\n <div class=\"refund-summary__error\">\n <div class=\"refund-summary__error-card\">\n <div class=\"refund-summary__error-icon-wrapper\">\n <svg\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 8V12M12 16H12.01M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <h4 class=\"refund-summary__error-title\">\n Failed to load refund details. Please try again.\n </h4>\n <button\n class=\"refund-summary__error-btn\"\n type=\"button\"\n (click)=\"loadRefundDetails()\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 4V10H7M23 20V14H17M20.49 9C19.9828 7.56678 19.1209 6.2854 17.9845 5.27542C16.8482 4.26543 15.4745 3.55976 13.9917 3.22426C12.5089 2.88875 10.9652 2.93434 9.50481 3.35677C8.04437 3.77921 6.71475 4.56471 5.64 5.64L1 10M23 14L18.36 18.36C17.2853 19.4353 15.9556 20.2208 14.4952 20.6432C13.0348 21.0657 11.4911 21.1112 10.0083 20.7757C8.52547 20.4402 7.1518 19.7346 6.01547 18.7246C4.87913 17.7146 4.01717 16.4332 3.51 15\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n Try Again\n </button>\n </div>\n </div>\n } @else {\n <div class=\"refund-summary__content\">\n <h3 class=\"refund-summary__title\">\n Refund summary\n </h3>\n\n <div class=\"package-cards\">\n @for (pkg of packages(); track i; let i = $index) {\n <div\n class=\"package-card\"\n [class.package-card--expanded]=\"isPackageExpanded(pkg.packageId)\"\n [class.package-card--cancelled-before]=\"pkg.cancelledBefore\"\n >\n <div\n class=\"package-card__header\"\n (click)=\"togglePackageExpand(pkg.packageId)\"\n >\n <div class=\"package-card__info\">\n <div class=\"package-card__title-row\">\n <h4 class=\"package-card__name\">{{ pkg.packageName }}</h4>\n @if (!pkg.cancelledBefore) {\n <span class=\"package-card__badge\">\n CURRENT CANCELLATION\n </span>\n <!-- <span class=\"package-card__date\">\n Today on\n {{ formatDate(pkg.cancellationDate) }}\n </span> -->\n } @else {\n <span\n class=\"package-card__badge package-card__badge--cancelled\"\n >\n PREVIOUS CANCELLATION\n </span>\n <!-- <span class=\"package-card__date\">\n Cancellation date:\n {{ formatDate(pkg.cancellationDate) }}\n </span> -->\n }\n </div>\n </div>\n <div\n class=\"package-card__expand-icon\"\n [class.rotated]=\"isPackageExpanded(pkg.packageId)\"\n >\n <almatar-icon [name]=\"'chevron-down'\"></almatar-icon>\n </div>\n </div>\n\n <!-- Rooms display -->\n @if (pkg.rooms?.length) {\n <div class=\"package-card__rooms-container\">\n @for (\n group of groupRoomsByName(pkg.rooms);\n track i;\n let i = $index\n ) {\n <div class=\"package-card__room-summary\">\n @if (group.count > 1) {\n <!-- Multiple rooms -->\n {{ group.count }}x {{ group.roomName }}\n } @else {\n <!-- Single room -->\n Room\n\n {{ i + 1 }}\n <span class=\"package-card__separator\">&bull;</span>\n {{ group.roomName }}\n }\n @if (group.nights) {\n <span class=\"package-card__separator\">&bull;</span>\n {{ group.nights }}\n @if (group.nights === 1) {\n night\n } @else {\n nights\n }\n }\n @if (group.adults) {\n <span class=\"package-card__separator\">&bull;</span>\n {{ group.adults }}\n @if (group.adults === 1) {\n Adult\n } @else {\n Adults\n }\n }\n @if (group.children) {\n <span class=\"package-card__separator\">&bull;</span>\n {{ group.children }}\n @if (group.children === 1) {\n Child\n } @else {\n Children\n }\n }\n </div>\n }\n </div>\n }\n\n @if (!pkg.cancelledBefore) {\n <span class=\"package-card__date\">\n Today on\n {{ formatDate(pkg.cancellationDate) }}\n </span>\n } @else {\n <span class=\"package-card__date\">\n Cancellation date:\n {{ formatDate(pkg.cancellationDate) }}\n </span>\n }\n\n <!-- Room Amount Row with expand -->\n\n <!-- Expandable content: Rooms, Date, and Financial breakdown -->\n <div\n class=\"package-card__expandable-content\"\n [class.expanded]=\"isPackageExpanded(pkg.packageId)\"\n >\n <div\n class=\"package-card__row package-card__row--clickable\"\n (click)=\"\n toggleAmountExpand(pkg.packageId); $event.stopPropagation()\n \"\n >\n @if (pkg?.rooms?.length > 1) {\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >Rooms amount</span\n >\n } @else {\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >Room amount</span\n >\n }\n <span class=\"package-card__value package-card__value--regular\">\n @if (\n pkg.fee > 0 || pkg.serviceFee > 0 || surchargeAmount() > 0\n ) {\n <div\n class=\"package-card__expand-icon\"\n [class.rotated]=\"isAmountExpanded(pkg.packageId)\"\n >\n <almatar-icon [name]=\"'chevron-down'\"></almatar-icon>\n </div>\n }\n\n {{\n pkg.amount | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n\n <!-- Expanded content: Cancellation fee and Service fee -->\n <div\n class=\"package-card__expanded-content\"\n [class.expanded]=\"\n isAmountExpanded(pkg.packageId) &&\n (pkg.fee > 0 || pkg.serviceFee > 0)\n \"\n >\n @if (pkg.fee > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">Cancellation fee</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n pkg.fee | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n @if (pkg.serviceFee > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">Service Fee</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n pkg.serviceFee | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n @if (surchargeAmount() > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">\n Surcharge (2.5%)\n </span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n surchargeAmount() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n </div>\n <!-- Add-Ons Refund Section -->\n @if (giftsDetails().length > 0 && i === packages()?.length - 1) {\n <div class=\"addons-refund\">\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >\n Add-Ons Refund\n </span>\n <div class=\"addons-refund__list\">\n @for (gift of giftsDetails(); track $index) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">{{ gift.name }}</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n {{\n gift.toBeRefundedAmount | exchange_round\n }}\n {{ currentCurrency()?.code }}\n <!-- @if (!gift.refundable) {\n <span> - </span>\n } -->\n </span>\n </div>\n }\n </div>\n\n <!-- @if (giftsHasRefundableEntity()) {\n <div class=\"addons-refund__notice\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M10 9V14\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <circle cx=\"10\" cy=\"6.5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n <span class=\"addons-refund__notice-text\">\n Your add-on service/s refund will be processed separately by our Customer Service team shortly.\n </span>\n </div>\n } -->\n </div>\n }\n </div>\n <!-- End expandable content -->\n\n <!-- You will get back row - ALWAYS VISIBLE -->\n <div class=\"package-card__details\">\n @if (pkg.cancelledBefore) {\n <div class=\"package-card__row package-card__row--total\">\n <span class=\"package-card__label package-card__label--dark\">Refunded amount</span>\n <span\n class=\"package-card__value package-card__value--highlight\"\n >\n {{\n pkg.refund | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n } @else {\n <div class=\"package-card__row package-card__row--total\">\n <span class=\"package-card__label package-card__label--dark\">You will get back</span>\n <span\n class=\"package-card__value package-card__value--highlight package-card__value--regular\"\n >\n {{\n pkg.refund | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <hr class=\"seperator\" />\n\n <div class=\"total-summary\">\n <div class=\"total-summary__row\">\n <span class=\"total-summary__label\">Total paid</span>\n <span class=\"total-summary__value\">\n {{\n totalPaid() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n\n @if (alreadyRefunded()) {\n <div class=\"total-summary__row\">\n <span class=\"total-summary__label\">Rooms Refunded</span>\n <span class=\"total-summary__value\">\n {{\n alreadyRefunded() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n <div class=\"total-summary__row total-summary__row--highlight\">\n <div class=\"total-summary__label total-summary__label--highlight\">\n <span>\n You'll get back for\n {{ currentRefundRoomsNumber() }}\n {{\n currentLang() !== 'ar'\n ? currentRefundRoomsNumber() > 1\n ? ('Rooms')\n : ('Room')\n : ''\n }}\n </span>\n </div>\n <span class=\"total-summary__value total-summary__value--highlight\">\n {{\n totalRefund() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n </div>\n\n <div class=\"info-banner\">\n <div class=\"info-banner__icon\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 2L3 5V9C3 13.55 6.24 17.74 10 18.5C13.76 17.74 17 13.55 17 9V5L10 2Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M7 10L9 12L13 8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <div class=\"info-banner__content\">\n @if (paymentMethod() === 'CH') {\n <p class=\"info-banner__text\">\n Your refund is instant from our side, your bank may take up to 15 business days to reflect it.\n </p>\n } @else if (paymentMethod() === 'TB') {\n <p class=\"info-banner__text\">\n Your refund will be processed to Tabby within 3-5 business days.\n </p>\n } @else if (paymentMethod() === 'TM') {\n <p class=\"info-banner__text\">\n Your refund will be processed to Tamara within 7-10 business days.\n </p>\n } @else {\n <p class=\"info-banner__text\">\n Your loyalty points will be refunded instantly to your account.\n </p>\n }\n\n <p class=\"info-banner__subtext\">\n You can select refund option in the next step\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"refund-summary__footer\">\n @if (allPackagesCancelled()) {\n <div class=\"cancelled-status\">\n <div class=\"cancelled-status__icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n />\n <path\n d=\"M9 12L11 14L15 10\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <div class=\"cancelled-status__text\">\n <h4>All Rooms Cancelled</h4>\n <p>All packages in this booking have been cancelled</p>\n </div>\n </div>\n } @else {\n @if (totalRefund()) {\n <button\n class=\"btn btn--secondary\"\n type=\"button\"\n (click)=\"onKeepRoom()\"\n >\n Keep Room\n </button>\n <button\n class=\"btn btn--primary\"\n type=\"button\"\n (click)=\"onSelectRefundOption()\"\n >\n Select refund option\n </button>\n } @else {\n <button\n class=\"btn btn--danger\"\n type=\"button\"\n [disabled]=\"isCancelLoading()\"\n (click)=\"submitData()\"\n >\n @if (isCancelLoading()) {\n <span class=\"btn__spinner\"></span>\n } @else {\n Cancel Booking\n }\n </button>\n }\n }\n </div>\n }\n</div>\n\n<!-- Confirm Modal -->\n@if (showConfirmModalFlag()) {\n <div\n almatar-confirm-modal\n [Message]=\"'Your request has been submitted. Our customer service team will contact you shortly.'\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n<!-- Error Modal -->\n@if (showErrorModalFlag()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n","// Flight refund details interfaces\n\nexport interface IRefundDetailsData {\n bookingId?: string | number;\n refundAmount?: number;\n totalRefundAmount?: number;\n walletRefundAmount?: number;\n totalCardRefundAmount?: number;\n totalLoyaltyPointsRefundAmount?: number;\n totalLoyaltyPoints?: number;\n currency?: string;\n refundMethod?: RefundPreferredMethod | string;\n paymentGateway?: PaymentGatewayCode | LoyaltyPaymentType | string;\n loyaltyPaymentType?: LoyaltyPaymentType | string;\n isFullWalletRefundAllowed?: boolean;\n paymentMethodCustomerUsed?: string;\n isRefundable?: boolean;\n}\n\nexport type RefundPreferredMethod =\n | 'ORIGINAL_PAYMENT_METHOD'\n | 'WALLET'\n | 'wallet'\n | 'originalPaymentMethod'\n | 'BANK_TRANSFER'\n | 'LOYALTY_POINTS';\n\nexport type LoyaltyPaymentType =\n | 'ALMATAR_POINTS'\n | 'ALFURSAN'\n | 'AlRajhiMokafaa'\n | 'Qitaf'\n | 'Wala';\n\nexport enum PaymentGatewayCode {\n MADA = 'MADA',\n VISA = 'VISA',\n MASTERCARD = 'MASTERCARD',\n AMEX = 'AMEX',\n APPLE_PAY = 'APPLE_PAY',\n AlRajhiMokafaa = 'RAJHI',\n Qitaf = 'QITAF',\n Wala = 'WALA',\n Tamara = 'TM',\n Tabby = 'TB',\n Stc = 'STC',\n CH = 'CH',\n HP = 'HP',\n MF = 'MF',\n WT = 'WT',\n TM = 'TM',\n TB = 'TB',\n RAJHI = 'RAJHI',\n STC = 'STC',\n PPB = 'PPB',\n PP = 'PP',\n TAMAM = 'TAMAM',\n QITAF = 'QITAF',\n WALA = 'WALA'\n}\n\n/** Labels for `paymentMethodCustomerUsed` gateway codes returned by the backend. */\nexport const PAYMENT_GATEWAY_LABELS: Record<string, { en: string; ar: string }> = {\n CH: { en: 'Card', ar: 'البطاقة' },\n HP: { en: 'Hyperpay', ar: 'هايبر باي' },\n MF: { en: 'My Fatoora', ar: 'ماي فاتورة' },\n WT: { en: 'Wire Transfer', ar: 'تحويل بنكي' },\n STC: { en: 'STC', ar: 'STC' },\n TM: { en: 'Tamara', ar: 'تمارا' },\n TB: { en: 'Tabby', ar: 'تابي' },\n RAJHI: { en: 'Al Rajhi Mokafaa', ar: 'الراجحي مكافآت' },\n PPB: { en: 'Customer Balance', ar: 'رصيد العميل' },\n PP: { en: 'Postpay', ar: 'بوست باي' },\n TAMAM: { en: 'Tamam', ar: 'تمام' },\n QITAF: { en: 'Qitaf', ar: 'قطاف' },\n MIS: { en: 'MIS Pay', ar: 'MIS Pay' },\n MATAR: { en: 'Almatar Pay', ar: 'المطار باي' },\n CB: { en: 'Company Balance', ar: 'رصيد الشركة' },\n ANB: { en: 'ANB', ar: 'العربي الوطني' },\n AMWAL: { en: 'Amwal', ar: 'أموال' },\n WALA: { en: 'Wala', ar: 'ولاء' },\n YGG: { en: 'YGG', ar: 'YGG' },\n};\n\n/** Gateway codes that refund to an installment plan rather than the original card. */\nexport const INSTALLMENT_GATEWAY_CODES = ['TM', 'TB'];\n\n/** Gateway codes that refund to a loyalty-program account rather than the original card. */\nexport const LOYALTY_GATEWAY_CODES = ['RAJHI', 'QITAF', 'STC', 'WALA'];\n\n/**\n * Internal payment-processor/gateway names, never customer-recognizable\n * brands — must not be surfaced verbatim (e.g. a card refund processed\n * through Hyperpay must read as \"Card\"/\"Original Payment Method\", never\n * \"Hyperpay\"). Callers fall back to a generic label whenever the normalized\n * lookup returns ''.\n */\nexport const INTERNAL_GATEWAY_CODES = ['HP', 'MF', 'WT', 'PPB', 'PP', 'TAMAM'];\n\n/**\n * Result/confirmation-screen-only override: these gateways process card\n * payments through Mada — shown specifically as \"Mada Card\" instead of\n * falling back to the generic \"Original Payment Method\" label used\n * everywhere else `INTERNAL_GATEWAY_CODES` applies.\n */\nexport const MADA_GATEWAY_CODES = ['HP', 'CH'];\n\n/**\n * Normalizes a raw payment gateway code from the backend to a standardized code.\n * Handles both uppercase codes (e.g. 'HP') and labels (e.g. 'Hyperpay').\n */\nexport function normalizePaymentGatewayCode(raw?: string | null): PaymentGatewayCode | '' {\n if (!raw) return '';\n const needle = raw.trim().toLowerCase();\n const codes = Object.keys(PAYMENT_GATEWAY_LABELS);\n const byCode = codes.find((code) => code.toLowerCase() === needle);\n if (byCode) return byCode as PaymentGatewayCode;\n const byLabel = codes.find((code) =>\n PAYMENT_GATEWAY_LABELS[code].en.toLowerCase() === needle ||\n PAYMENT_GATEWAY_LABELS[code].ar.toLowerCase() === needle\n );\n return byLabel ? (byLabel as PaymentGatewayCode) : '';\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n computed,\n input,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslationService } from '../../../../shared/services/translation.service';\nimport { CurrencyCodeIconComponent } from '../../../../shared/components/currency-code-icon/currency-code-icon.component';\nimport { CurrencySizeEnum } from '../../../../shared/components/currency-code-icon/currency-code-icon.component';\nimport { ICurrency } from '../../../../shared/models';\nimport {\n INSTALLMENT_GATEWAY_CODES,\n INTERNAL_GATEWAY_CODES,\n IRefundDetailsData,\n LOYALTY_GATEWAY_CODES,\n MADA_GATEWAY_CODES,\n normalizePaymentGatewayCode,\n PAYMENT_GATEWAY_LABELS,\n PaymentGatewayCode,\n RefundPreferredMethod,\n} from '../../../shared/interfaces/i-flight-refund-details';\n\nexport interface RefundMethodSplitRow {\n label: string;\n value: number;\n instant: boolean;\n isLoyalty: boolean;\n isMada?: boolean;\n}\n\n/**\n * Hotel Refund-method selection screen (\"You will get back … / Wallet / Card /\n * Split Refund\"). Takes the raw refund snapshot (`data`) as its single\n * source of truth and derives every display/eligibility decision from it\n * internally — which options are eligible, the split breakdown, gateway and\n * loyalty-program label resolution — so callers don't need to replicate any\n * of that logic themselves.\n */\n@Component({\n selector: 'almatar-hotel-refund-method-selector',\n standalone: true,\n imports: [CommonModule, CurrencyCodeIconComponent],\n templateUrl: './hotel-refund-method-selector.component.html',\n styleUrls: ['./hotel-refund-method-selector.component.scss'],\n})\nexport class HotelRefundMethodSelectorComponent {\n private _data = signal<IRefundDetailsData | null | undefined>(null);\n @Input() set data(value: IRefundDetailsData | null | undefined) {\n this._data.set(value);\n }\n\n get data(): IRefundDetailsData | null | undefined {\n return this._data();\n }\n\n /** Fallback booking id to display when `data.bookingId` isn't set yet. */\n @Input() bookingId: string | number | null | undefined;\n @Input() currencyObj: ICurrency | null = null;\n @Input() refundMethod: RefundPreferredMethod = 'wallet';\n /** Whether the header's Back button is shown at all — off by default; callers that want it opt in. */\n @Input() showBack = false;\n /** Whether the close button is shown — off by default; callers that want it opt in. */\n readonly showCloseButton = input<boolean>(false);\n /** Whether to show the loyalty points note explaining points are refunded as permanent wallet points. */\n readonly showLoyaltyPointsNote = input<boolean>(false);\n\n /** Left arrow — abandons the cancellation flow entirely (closes the whole manage-booking modal). */\n @Output() closed = new EventEmitter<void>();\n /** Right ✕ — steps back to the Refund Details screen only (mirrors the native dialog close this screen's custom header replaced). */\n @Output() backRequested = new EventEmitter<void>();\n @Output() methodSelected = new EventEmitter<RefundPreferredMethod>();\n\n currencySizeEnum = CurrencySizeEnum.LG;\n private translateService = new TranslationService();\n\n displayBookingId = computed(() => this._data()?.bookingId ?? this.bookingId);\n totalRefundAmount = computed(() => this._data()?.totalRefundAmount);\n walletRefundAmount = computed(() =>\n Number(this._data()?.walletRefundAmount ?? 0),\n );\n\n private gatewayCode = computed(() =>\n normalizePaymentGatewayCode(this._data()?.paymentMethodCustomerUsed),\n );\n\n private isLoyaltyGateway(code: PaymentGatewayCode | '' | undefined): boolean {\n return !!code && LOYALTY_GATEWAY_CODES.includes(code);\n }\n\n /** Whether the customer paid via an installment gateway (Tamara, Tabby, …). */\n isInstallmentMethod = computed(() => {\n const code = this.gatewayCode();\n return !!code && INSTALLMENT_GATEWAY_CODES.includes(code);\n });\n\n /** Whether the customer paid via a loyalty-program gateway (Al Rajhi Mokafaa, …). */\n isLoyaltyMethod = computed(() => this.isLoyaltyGateway(this.gatewayCode()));\n\n /**\n * Whether the payment was 100% loyalty points (no card portion).\n * Used for description/badge when loyaltyPaymentType is set but no gateway code.\n */\n isLoyaltyOnlyPayment = computed(() => {\n const d = this._data();\n return (\n !!d?.loyaltyPaymentType && Number(d?.totalCardRefundAmount ?? 0) === 0\n );\n });\n\n /** Whether to show loyalty-style description/badge (either loyalty gateway OR 100% loyalty payment). */\n showAsLoyalty = computed(\n () => this.isLoyaltyMethod() || this.isLoyaltyOnlyPayment(),\n );\n\n /** Whether the original card was a Mada card — its refund row reads \"Mada Card\" instead of the generic gateway label. */\n isMadaMethod = computed(() => {\n const code = this.gatewayCode();\n return !!code && MADA_GATEWAY_CODES.includes(code);\n });\n\n /** Any gateway that refunds somewhere other than a plain card — used for the wallet-style icon. */\n isSpecialGatewayMethod = computed(\n () => this.isInstallmentMethod() || this.showAsLoyalty(),\n );\n\n /** Settlement-time badge — differs per installment gateway (Tamara settles slower than Tabby). */\n paymentBadgeKey = computed((): string => {\n if (this.isInstallmentMethod()) {\n return this.gatewayCode() === PaymentGatewayCode.Tamara\n ? '7-10 business days'\n : '3-5 business days';\n }\n if (this.showAsLoyalty()) {\n return 'Instant';\n }\n return '5-7 business days';\n });\n\n /**\n * Display label for `paymentMethodCustomerUsed`, localized. `loyaltyPaymentType`\n * (once the backend sends it) wins when present — it names the specific\n * loyalty program (e.g. Al Rajhi vs Qitaf) behind a gateway like STC that\n * doesn't say which one on its own.\n */\n customerPaymentLabel = computed((): string => {\n const d = this._data();\n const gateway = this.gatewayCode();\n // `loyaltyPaymentType` only disambiguates a genuinely ambiguous gateway\n // (STC spans more than one loyalty program) — it must never override an\n // unambiguous gateway like Tamara/Tabby/Card just because the backend\n // happened to also send a `loyaltyPaymentType` value on that booking.\n const code =\n (gateway === PaymentGatewayCode.Stc && d?.loyaltyPaymentType) || gateway;\n if (code && INTERNAL_GATEWAY_CODES.includes(code)) {\n // Never surface an internal processor name (e.g. Hyperpay) to the\n // customer — falls back to a generic \"Card\"/original-payment label.\n return '';\n }\n const entry = code ? PAYMENT_GATEWAY_LABELS[code] : undefined;\n if (!entry) {\n return '';\n }\n return this.translateService.currentLang?.startsWith('ar')\n ? entry.ar\n : entry.en;\n });\n\n /**\n * Label for the standalone \"Original Payment Method\" option card (shown\n * when the whole refund goes to one destination — no separate loyalty\n * row exists here, so unlike `splitRefundRows`, the loyalty program name\n * (e.g. \"Wala\") is still shown when that's what was used). Mada wins over\n * everything else, reading \"Mada Card\" instead of the generic gateway\n * name or the \"Original Payment Method\" fallback.\n */\n originalPaymentLabel = computed((): string => {\n if (this.isMadaMethod()) {\n return 'Mada Card';\n }\n return (\n this.customerPaymentLabel() ||\n this.walletOrLoyaltyLabel(\n this._data(),\n 'Original Payment Method',\n )\n );\n });\n\n /**\n * \"Almatar Wallet\" row label — when the backend names a specific loyalty\n * program via `loyaltyPaymentType` (e.g. Qitaf, Al Rajhi Mokafaa), that\n * program's name replaces the generic \"Almatar Wallet\" label, since the\n * amount is actually a loyalty-program redemption rather than a plain\n * wallet balance.\n */\n private walletOrLoyaltyLabel(\n d: IRefundDetailsData | null | undefined,\n fallbackKey = 'Almatar Wallet',\n ): string {\n const loyalty = d?.loyaltyPaymentType;\n const entry = loyalty ? PAYMENT_GATEWAY_LABELS[loyalty] : undefined;\n if (entry) {\n return this.translateService.currentLang?.startsWith('ar')\n ? entry.ar\n : entry.en;\n }\n return fallbackKey;\n }\n\n // Wallet card's own name always reads \"Almatar Wallet\" — the loyalty\n // program name (e.g. \"Qitaf\") is surfaced via the note below instead of\n // replacing the card's title.\n walletLabel = computed(() => 'Almatar Wallet');\n\n /**\n * Part of the refund came from converting external loyalty points into\n * wallet funds — surfaced as a note under the wallet destination so the\n * customer knows those points land as permanent wallet balance, not cash.\n */\n hasLoyaltyPointsRefund = computed(\n () => Number(this._data()?.totalLoyaltyPoints ?? 0) > 0,\n );\n\n /**\n * `totalLoyaltyPoints` is normally the forfeited-at-booking points count\n * (no refund destination of its own). But when the backend never\n * populates `totalLoyaltyPointsRefundAmount` for a `loyaltyPaymentType`\n * booking, this is the only signal that a loyalty program was involved,\n * so it doubles as a split-refund row (alongside Card) rather than\n * disappearing from the refund breakdown entirely.\n */\n private forfeitedLoyaltyPointsFallback(\n d: IRefundDetailsData | null | undefined,\n ): number {\n if (!d?.loyaltyPaymentType) {\n return 0;\n }\n if (Number(d.totalLoyaltyPointsRefundAmount ?? 0) > 0) {\n return 0;\n }\n return Number(d.totalLoyaltyPoints ?? 0);\n }\n\n /** How many of {wallet, card, loyalty} the refund is actually split across. */\n private splitPartsCount = computed(() => {\n const d = this._data();\n if (!d) {\n return 0;\n }\n return [\n d.walletRefundAmount,\n d.totalCardRefundAmount,\n d.totalLoyaltyPointsRefundAmount,\n this.forfeitedLoyaltyPointsFallback(d),\n ].filter((v) => Number(v ?? 0) > 0).length;\n });\n\n /**\n * A portion of the refund is forced to the wallet (e.g. loyalty points used)\n * — in that case offer a \"Split Refund\" option instead of a pure\n * original-payment-method option, since the whole amount can't go to card.\n */\n hasSplitRefund = computed(\n () =>\n Number(this._data()?.totalRefundAmount ?? 0) > 0 &&\n this.splitPartsCount() >= 2,\n );\n\n /**\n * Wallet covers the whole refund (no card or loyalty portion at all) — show\n * the wallet option alone rather than a \"split\" with empty other sides.\n */\n isWalletOnlyRefund = computed(() => {\n const d = this._data();\n return (\n Number(d?.walletRefundAmount ?? 0) > 0 &&\n Number(d?.totalCardRefundAmount ?? 0) === 0 &&\n Number(d?.totalLoyaltyPointsRefundAmount ?? 0) === 0 &&\n this.forfeitedLoyaltyPointsFallback(d) === 0\n );\n });\n\n showWallet = computed(\n () =>\n !!(this._data()?.isFullWalletRefundAllowed || this.isWalletOnlyRefund()),\n );\n\n showOriginal = computed(\n () => !this.hasSplitRefund() && !this.isWalletOnlyRefund(),\n );\n\n showSplit = computed(() => this.hasSplitRefund());\n\n /**\n * Only one refund-method card is eligible — there's nothing to choose\n * between, so the radio button and active-selection highlight (which imply\n * a choice) are hidden; the single card is used automatically.\n */\n hasSingleOption = computed(\n () =>\n [this.showWallet(), this.showOriginal(), this.showSplit()].filter(Boolean)\n .length === 1,\n );\n\n /**\n * Split-refund destination rows — up to three: Almatar Wallet, the\n * original payment method (card/installment gateway), and a separate\n * loyalty-program row (Al Rajhi Mokafaa, Qitaf, …) when the refund is\n * actually spread across a loyalty balance *and* something else.\n */\n splitRefundRows = computed((): RefundMethodSplitRow[] => {\n const d = this._data();\n if (!d) {\n return [];\n }\n const rows: RefundMethodSplitRow[] = [];\n const wallet = Number(d.walletRefundAmount ?? 0);\n if (wallet > 0) {\n // Always the generic \"Wallet\" row — the loyalty program that funded it\n // (e.g. Wala) gets its own dedicated row below via\n // `forfeitedLoyaltyPointsFallback`, so the two stay visually distinct.\n rows.push({\n label: 'Almatar Wallet',\n value: wallet,\n instant: true,\n isLoyalty: false,\n });\n }\n const card = Number(d.totalCardRefundAmount ?? 0);\n if (card > 0) {\n rows.push({\n // When a separate loyalty row is also shown, this row is purely the\n // card/original-payment-method portion — don't relabel it with the\n // loyalty program name too.\n label: this.isMadaMethod()\n ? 'Mada Card'\n : (!this.isLoyaltyMethod() && this.customerPaymentLabel()) ||\n 'Original Payment Method',\n value: card,\n instant: false,\n isLoyalty: false,\n isMada: this.isMadaMethod(),\n });\n }\n const loyalty = Number(d.totalLoyaltyPointsRefundAmount ?? 0);\n if (loyalty > 0) {\n rows.push({\n // when paying with card and loyalty program all backed as card\n label: this.walletOrLoyaltyLabel(\n d,\n 'Loyalty Points Refund',\n ),\n value: loyalty,\n instant: true,\n isLoyalty: true,\n });\n }\n const forfeitedLoyalty = this.forfeitedLoyaltyPointsFallback(d);\n if (forfeitedLoyalty > 0) {\n rows.push({\n label: this.walletOrLoyaltyLabel(d),\n value: forfeitedLoyalty,\n instant: true,\n isLoyalty: true,\n });\n }\n return rows;\n });\n\n select(method: RefundPreferredMethod) {\n this.methodSelected.emit(method);\n }\n\n close() {\n this.closed.emit();\n }\n\n back() {\n this.backRequested.emit();\n }\n\n /** Format an amount without the currency suffix (for interpolated copy). */\n fmtAmount(value: number | undefined): string {\n return Math.round(Number(value || 0)).toLocaleString(undefined, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n }\n\n /** Get the description for the original payment method */\n getOriginalPaymentDescription(): string {\n const method = this.originalPaymentLabel();\n\n if (this.isInstallmentMethod()) {\n return `Returned to your ${method} installment plan`;\n }\n\n if (this.showAsLoyalty()) {\n return 'Refunded to your Almatar Wallet';\n }\n\n return 'Returned to your original payment method';\n }\n}\n","<div class=\"refund-method-selector\">\n <div class=\"refund-method-selector__header\">\n @if (showBack) {\n <button\n type=\"button\"\n class=\"refund-method-selector__close\"\n (click)=\"back()\"\n aria-label=\"Back\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M19 12H5M12 19l-7-7 7-7\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n }\n <div class=\"refund-method-selector__header-text\">\n <h3 class=\"refund-method-selector__title\">\n Refund Method\n </h3>\n <span class=\"refund-method-selector__sub\"\n >Booking ID #{{\n displayBookingId()\n }}</span\n >\n </div>\n <!-- @if (showCloseButton()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__close\"\n (click)=\"close()\"\n aria-label=\"Close\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 18L18 6M6 6L18 18\"\n stroke=\"#1B1A1F\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n } -->\n </div>\n\n <div class=\"refund-method-selector__amount\">\n <span>You will get back</span>\n <strong>\n {{ fmtAmount(totalRefundAmount()) }}\n </strong>\n </div>\n\n <!-- Wallet option -->\n @if (showWallet()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__option\"\n [class.refund-method-selector__option--active]=\"\n refundMethod === 'wallet' && !hasSingleOption()\n \"\n (click)=\"select('wallet')\"\n >\n <span class=\"refund-method-selector__icon\">\n <svg\n width=\"22\"\n height=\"24\"\n viewBox=\"0 0 22 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_25478_1880)\">\n <path\n d=\"M2.67676 20.8852C1.74902 20.8852 1.04704 20.6533 0.570801 20.1894C0.100749 19.7256 -0.134277 19.0359 -0.134277 18.1206V8.51852C-0.134277 7.77015 0.0265299 7.1764 0.348145 6.73727C0.675944 6.29815 1.18929 5.97344 1.88818 5.76315L13.7817 2.3027C14.4559 2.11097 15.0589 2.06149 15.5908 2.15427C16.1289 2.24704 16.5495 2.49443 16.8525 2.89645C17.1618 3.29229 17.3164 3.85511 17.3164 4.58493V6.25485L15.8042 6.38473V4.45505C15.8042 4.04684 15.6898 3.76543 15.4609 3.61081C15.2321 3.45619 14.895 3.44382 14.4497 3.5737L7.27832 5.55905C7.19173 5.5776 7.15153 5.61471 7.15771 5.67038C7.1639 5.71986 7.20719 5.7446 7.2876 5.7446H17.5947C18.5286 5.7446 19.2275 5.97962 19.6914 6.44968C20.1615 6.91354 20.3965 7.60316 20.3965 8.51852V10.8564H18.8936V8.60202C18.8936 8.15671 18.7791 7.81963 18.5503 7.59079C18.3215 7.36195 17.9937 7.24753 17.5669 7.24753H2.69531C2.26855 7.24753 1.94076 7.36195 1.71191 7.59079C1.48926 7.81963 1.37793 8.15671 1.37793 8.60202V18.0371C1.37793 18.4824 1.48926 18.8164 1.71191 19.039C1.94076 19.2679 2.26855 19.3823 2.69531 19.3823H17.5669C17.9937 19.3823 18.3215 19.2679 18.5503 19.039C18.7791 18.8164 18.8936 18.4824 18.8936 18.0371V15.4394H20.3965V18.1206C20.3965 19.0359 20.1615 19.7256 19.6914 20.1894C19.2275 20.6533 18.5286 20.8852 17.5947 20.8852H2.67676ZM16.769 14.2334C16.5093 14.2334 16.2866 14.1437 16.1011 13.9643C15.9217 13.7788 15.832 13.5561 15.832 13.2964C15.832 13.0366 15.9217 12.817 16.1011 12.6377C16.2866 12.4521 16.5093 12.3593 16.769 12.3593C17.0288 12.3593 17.2484 12.4521 17.4277 12.6377C17.6133 12.817 17.7061 13.0366 17.7061 13.2964C17.7061 13.5561 17.6133 13.7788 17.4277 13.9643C17.2484 14.1437 17.0288 14.2334 16.769 14.2334ZM16.6763 16.2187C15.7424 16.2187 14.9878 15.9775 14.4126 15.4951C13.8374 15.0065 13.5498 14.2767 13.5498 13.3056C13.5498 12.3346 13.8374 11.6079 14.4126 11.1255C14.9878 10.643 15.7424 10.4018 16.6763 10.4018H20.1089C20.6903 10.4018 21.1479 10.5812 21.4819 10.9399C21.8221 11.2986 21.9922 11.7439 21.9922 12.2758V14.3354C21.9922 14.8673 21.8221 15.3157 21.4819 15.6806C21.1479 16.0394 20.6903 16.2187 20.1089 16.2187H16.6763ZM16.769 14.9756H19.7842C20.1058 14.9756 20.347 14.8921 20.5078 14.7251C20.6748 14.5519 20.7583 14.3138 20.7583 14.0107V12.6006C20.7583 12.2975 20.6748 12.0625 20.5078 11.8955C20.347 11.7223 20.1058 11.6357 19.7842 11.6357H16.769C16.1196 11.6357 15.6372 11.7841 15.3218 12.081C15.0125 12.3779 14.8579 12.7861 14.8579 13.3056C14.8579 13.8252 15.0125 14.2334 15.3218 14.5302C15.6372 14.8271 16.1196 14.9756 16.769 14.9756Z\"\n fill=\"black\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_25478_1880\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span class=\"refund-method-selector__body\">\n <span class=\"refund-method-selector__name\">{{ walletLabel() }}</span>\n <span class=\"refund-method-selector__desc\">Usable for future bookings</span>\n <span\n class=\"refund-method-selector__badge refund-method-selector__badge--instant\"\n >\n <svg\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n Instant\n </span>\n </span>\n @if (!hasSingleOption()) {\n <span class=\"refund-method-selector__radio\"></span>\n }\n </button>\n }\n\n <!-- Original Payment Method option -->\n @if (showOriginal()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__option\"\n [class.refund-method-selector__option--active]=\"\n refundMethod === 'originalPaymentMethod' && !hasSingleOption()\n \"\n (click)=\"select('originalPaymentMethod')\"\n >\n <span class=\"refund-method-selector__icon\">\n @if (isSpecialGatewayMethod()) {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M21 12a2.25 2.25 0 0 0-2.25-2.25H15a3 3 0 1 1-6 0H5.25A2.25 2.25 0 0 0 3 12m18 0v6a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 18v-6m18 0V9M3 12V9m18 0a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 9m18 0V6a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 6v3\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n } @else {\n <ng-container *ngTemplateOutlet=\"cardIcon\"></ng-container>\n }\n <ng-template #cardIcon>\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.25 8.25H21.75M2.25 9H21.75M5.25 14.25H11.25M5.25 16.5H8.25M4.5 19.5H19.5C20.0967 19.5 20.669 19.2629 21.091 18.841C21.5129 18.419 21.75 17.8467 21.75 17.25V6.75C21.75 6.15326 21.5129 5.58097 21.091 5.15901C20.669 4.73705 20.0967 4.5 19.5 4.5H4.5C3.90326 4.5 3.33097 4.73705 2.90901 5.15901C2.48705 5.58097 2.25 6.15326 2.25 6.75V17.25C2.25 17.8467 2.48705 18.419 2.90901 18.841C3.33097 19.2629 3.90326 19.5 4.5 19.5Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </ng-template>\n </span>\n <span class=\"refund-method-selector__body\">\n <span class=\"refund-method-selector__name\">{{\n originalPaymentLabel()\n }}</span>\n <span class=\"refund-method-selector__desc\">{{\n getOriginalPaymentDescription()\n }}</span>\n @if (!showAsLoyalty()) {\n <span\n class=\"refund-method-selector__badge\"\n [class.refund-method-selector__badge--days]=\"!showAsLoyalty()\"\n [class.refund-method-selector__badge--loyalty]=\"showAsLoyalty()\"\n >\n @if (!showAsLoyalty()) {\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.30078 6.50195C3.20312 6.50195 3.12174 6.4694 3.05664 6.4043C2.99154 6.33919 2.95898 6.25781 2.95898 6.16016C2.95898 6.06576 2.99154 5.986 3.05664 5.9209C3.12174 5.85579 3.20312 5.82324 3.30078 5.82324H5.5127V2.86914C5.5127 2.77474 5.54525 2.69499 5.61035 2.62988C5.67546 2.56478 5.75521 2.53223 5.84961 2.53223C5.94727 2.53223 6.02865 2.56478 6.09375 2.62988C6.15885 2.69499 6.19141 2.77474 6.19141 2.86914V6.16016C6.19141 6.25781 6.15885 6.33919 6.09375 6.4043C6.02865 6.4694 5.94727 6.50195 5.84961 6.50195H3.30078ZM5.85449 10.9551C5.16764 10.9551 4.52311 10.8249 3.9209 10.5645C3.31868 10.3073 2.78971 9.95085 2.33398 9.49512C1.87826 9.03939 1.52018 8.51042 1.25977 7.9082C1.0026 7.30599 0.874023 6.66146 0.874023 5.97461C0.874023 5.28776 1.0026 4.64323 1.25977 4.04102C1.52018 3.4388 1.87826 2.90983 2.33398 2.4541C2.78971 1.99512 3.31868 1.63704 3.9209 1.37988C4.52311 1.12272 5.16764 0.994141 5.85449 0.994141C6.54134 0.994141 7.18587 1.12272 7.78809 1.37988C8.3903 1.63704 8.91927 1.99512 9.375 2.4541C9.83073 2.90983 10.1872 3.4388 10.4443 4.04102C10.7048 4.64323 10.835 5.28776 10.835 5.97461C10.835 6.66146 10.7048 7.30599 10.4443 7.9082C10.1872 8.51042 9.83073 9.03939 9.375 9.49512C8.91927 9.95085 8.3903 10.3073 7.78809 10.5645C7.18587 10.8249 6.54134 10.9551 5.85449 10.9551ZM5.85449 10.125C6.42741 10.125 6.96452 10.0176 7.46582 9.80273C7.96712 9.58789 8.4082 9.29004 8.78906 8.90918C9.16992 8.52832 9.46777 8.08724 9.68262 7.58594C9.89746 7.08464 10.0049 6.54753 10.0049 5.97461C10.0049 5.40169 9.89746 4.86458 9.68262 4.36328C9.46777 3.85872 9.16992 3.41764 8.78906 3.04004C8.4082 2.65918 7.96712 2.36133 7.46582 2.14648C6.96452 1.93164 6.42741 1.82422 5.85449 1.82422C5.28158 1.82422 4.74447 1.93164 4.24316 2.14648C3.74186 2.36133 3.30078 2.65918 2.91992 3.04004C2.53906 3.41764 2.24121 3.85872 2.02637 4.36328C1.81152 4.86458 1.7041 5.40169 1.7041 5.97461C1.7041 6.54753 1.81152 7.08464 2.02637 7.58594C2.24121 8.08724 2.53906 8.52832 2.91992 8.90918C3.30078 9.29004 3.74186 9.58789 4.24316 9.80273C4.74447 10.0176 5.28158 10.125 5.85449 10.125Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n } @else {\n <ng-container *ngTemplateOutlet=\"loyaltyBadgeIcon\"></ng-container>\n }\n <ng-template #loyaltyBadgeIcon>\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"5\"\n stroke=\"#0B54C2\"\n stroke-width=\"1.2\"\n />\n <path\n d=\"M6 5.5v3M6 3.9v.01\"\n stroke=\"#0B54C2\"\n stroke-width=\"1.2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </ng-template>\n\n {{ paymentBadgeKey() }}\n </span>\n }\n <!-- showing loyalty note for hotels -->\n @if (showLoyaltyPointsNote() && showAsLoyalty()) {\n <div\n class=\"refund-method-selector__notice refund-method-selector__notice--info\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M4.1582 21.1777C3.60482 21.1777 3.12956 21.0605 2.73242 20.8262C2.33529 20.5918 2.0293 20.2728 1.81445 19.8691C1.59961 19.472 1.49219 19.026 1.49219 18.5312C1.49219 18.056 1.61914 17.6003 1.87305 17.1641L9.45117 3.96094C9.69857 3.51823 10.0273 3.1862 10.4375 2.96484C10.8477 2.73698 11.2773 2.62305 11.7266 2.62305C12.1758 2.62305 12.6022 2.73698 13.0059 2.96484C13.416 3.1862 13.748 3.51823 14.002 3.96094L21.5801 17.1641C21.7038 17.3789 21.7982 17.6035 21.8633 17.8379C21.9284 18.0723 21.9609 18.3034 21.9609 18.5312C21.9609 19.026 21.8535 19.472 21.6387 19.8691C21.4238 20.2728 21.1178 20.5918 20.7207 20.8262C20.3236 21.0605 19.8483 21.1777 19.2949 21.1777H4.1582ZM4.16797 19.6445H19.2754C19.6139 19.6445 19.8809 19.5306 20.0762 19.3027C20.278 19.0814 20.3789 18.821 20.3789 18.5215C20.3789 18.3132 20.3268 18.1081 20.2227 17.9062L12.6543 4.70312C12.5501 4.52083 12.4134 4.39062 12.2441 4.3125C12.0814 4.22786 11.9089 4.18555 11.7266 4.18555C11.5443 4.18555 11.3685 4.22786 11.1992 4.3125C11.0299 4.39062 10.8932 4.52083 10.7891 4.70312L3.2207 17.8965C3.16862 18.0007 3.12956 18.1081 3.10352 18.2188C3.08398 18.3294 3.07422 18.4303 3.07422 18.5215C3.07422 18.821 3.17188 19.0814 3.36719 19.3027C3.5625 19.5306 3.82943 19.6445 4.16797 19.6445ZM11.7266 14.5859C11.2253 14.5859 10.9681 14.3288 10.9551 13.8145L10.8281 8.64844C10.8216 8.40104 10.8997 8.19596 11.0625 8.0332C11.2318 7.87044 11.4499 7.78906 11.7168 7.78906C11.9772 7.78906 12.1921 7.8737 12.3613 8.04297C12.5371 8.20573 12.6217 8.41081 12.6152 8.6582L12.4688 13.8145C12.4622 14.3288 12.2148 14.5859 11.7266 14.5859ZM11.7266 17.7598C11.4401 17.7598 11.1927 17.6621 10.9844 17.4668C10.776 17.265 10.6719 17.0241 10.6719 16.7441C10.6719 16.4642 10.776 16.2266 10.9844 16.0312C11.1927 15.8294 11.4401 15.7285 11.7266 15.7285C12.013 15.7285 12.2604 15.8262 12.4688 16.0215C12.6771 16.2168 12.7812 16.4577 12.7812 16.7441C12.7812 17.0306 12.6738 17.2715 12.459 17.4668C12.2507 17.6621 12.0065 17.7598 11.7266 17.7598Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n <span>Loyalty points will be refunded instantly to your account</span>\n </div>\n }\n </span>\n <span class=\"refund-method-selector__option-end\">\n @if (isMadaMethod()) {\n <span class=\"refund-method-selector__mada-logo\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"madaLogo\"></ng-container>\n </span>\n }\n @if (!hasSingleOption()) {\n <span class=\"refund-method-selector__radio\"></span>\n }\n </span>\n </button>\n }\n\n <!-- Split Refund option -->\n @if (showSplit()) {\n <button\n type=\"button\"\n class=\"refund-method-selector__option refund-method-selector__option--split\"\n [class.refund-method-selector__option--active]=\"\n refundMethod === 'split' && !hasSingleOption()\n \"\n (click)=\"select('split')\"\n >\n <span class=\"refund-method-selector__icon\">\n <svg\n width=\"45\"\n height=\"45\"\n viewBox=\"0 0 45 45\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"0.5\"\n y=\"0.5\"\n width=\"44\"\n height=\"44\"\n rx=\"7.5\"\n stroke=\"#D9D9DE\"\n />\n <g clip-path=\"url(#clip0_24079_7906_selector)\">\n <path\n d=\"M28.1621 14.9951C28.1621 14.7998 28.2142 14.6501 28.3184 14.5459C28.429 14.4417 28.5853 14.3896 28.7871 14.3896C28.8783 14.3896 28.9661 14.4059 29.0508 14.4385C29.1419 14.4645 29.2233 14.5068 29.2949 14.5654L32.9863 17.6318C33.1426 17.7686 33.2207 17.9248 33.2207 18.1006C33.2207 18.2764 33.1426 18.4294 32.9863 18.5596L29.2949 21.6162C29.2233 21.6748 29.1419 21.7204 29.0508 21.7529C28.9661 21.7855 28.8783 21.8018 28.7871 21.8018C28.5853 21.8018 28.429 21.7497 28.3184 21.6455C28.2142 21.5348 28.1621 21.3818 28.1621 21.1865V14.9951ZM10.7793 28.2373C10.7793 27.9964 10.8607 27.8011 11.0234 27.6514C11.1927 27.5016 11.4108 27.4268 11.6777 27.4268H13.9531C14.4479 27.4268 14.8841 27.3258 15.2617 27.124C15.6458 26.9222 16.0495 26.5739 16.4727 26.0791L22.3809 19.1748C22.9668 18.4912 23.5332 18.016 24.0801 17.749C24.627 17.4821 25.3073 17.3486 26.1211 17.3486H29.5977C29.8255 17.3486 30.0176 17.43 30.1738 17.5928C30.3366 17.749 30.418 17.9411 30.418 18.1689C30.418 18.3903 30.3366 18.5824 30.1738 18.7451C30.0176 18.9014 29.8255 18.9795 29.5977 18.9795H26.1699C25.8118 18.9795 25.4863 19.0251 25.1934 19.1162C24.9069 19.2008 24.6302 19.3408 24.3633 19.5361C24.1029 19.7314 23.8327 19.9919 23.5527 20.3174L17.6348 27.2217C17.0423 27.9053 16.4727 28.3805 15.9258 28.6475C15.3854 28.9144 14.7116 29.0479 13.9043 29.0479H11.6777C11.4108 29.0479 11.1927 28.973 11.0234 28.8232C10.8607 28.6735 10.7793 28.4782 10.7793 28.2373ZM28.1621 31.4795V25.2881C28.1621 25.0928 28.2142 24.943 28.3184 24.8389C28.429 24.7282 28.5853 24.6729 28.7871 24.6729C28.8783 24.6729 28.9661 24.6891 29.0508 24.7217C29.1419 24.7542 29.2233 24.7998 29.2949 24.8584L32.9863 27.915C33.1426 28.0452 33.2207 28.1982 33.2207 28.374C33.2207 28.5498 33.1426 28.7061 32.9863 28.8428L29.2949 31.9092C29.2233 31.9678 29.1419 32.0101 29.0508 32.0361C28.9661 32.0687 28.8783 32.085 28.7871 32.085C28.5853 32.085 28.429 32.0329 28.3184 31.9287C28.2142 31.8245 28.1621 31.6748 28.1621 31.4795ZM10.7793 18.2373C10.7793 17.9964 10.8607 17.8011 11.0234 17.6514C11.1927 17.5016 11.4108 17.4268 11.6777 17.4268H13.9043C14.7116 17.4268 15.3854 17.5602 15.9258 17.8271C16.4727 18.0941 17.0423 18.5693 17.6348 19.2529L23.5527 26.1572C23.8327 26.4827 24.1029 26.7432 24.3633 26.9385C24.6302 27.1338 24.9069 27.277 25.1934 27.3682C25.4863 27.4528 25.8118 27.4951 26.1699 27.4951H29.5977C29.8255 27.4951 30.0176 27.5765 30.1738 27.7393C30.3366 27.8955 30.418 28.0843 30.418 28.3057C30.418 28.5335 30.3366 28.7288 30.1738 28.8916C30.0176 29.0479 29.8255 29.126 29.5977 29.126H26.1211C25.3073 29.126 24.627 28.9925 24.0801 28.7256C23.5332 28.4587 22.9668 27.9834 22.3809 27.2998L16.4727 20.3955C16.0495 19.9007 15.6458 19.5524 15.2617 19.3506C14.8841 19.1488 14.4479 19.0479 13.9531 19.0479H11.6777C11.4108 19.0479 11.1927 18.973 11.0234 18.8232C10.8607 18.6735 10.7793 18.4782 10.7793 18.2373Z\"\n fill=\"#1B1A1F\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_24079_7906_selector\">\n <rect\n width=\"24\"\n height=\"24\"\n fill=\"white\"\n transform=\"translate(10 11.5)\"\n />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span class=\"refund-method-selector__body\">\n <span class=\"refund-method-selector__name\">Split Refund</span>\n <span class=\"refund-method-selector__desc\">Returned to your original payment method</span>\n </span>\n <strong class=\"refund-method-selector__split-total\">\n {{ fmtAmount(totalRefundAmount()) }}\n </strong>\n @if (!hasSingleOption()) {\n <span class=\"refund-method-selector__radio\"></span>\n }\n\n <span class=\"refund-method-selector__split-breakdown\">\n @for (row of splitRefundRows(); track $index) {\n <span class=\"refund-method-selector__split-row\">\n <span class=\"refund-method-selector__split-label\">\n {{ row.label }}\n @if (row.isMada) {\n <span\n class=\"refund-method-selector__mada-logo\"\n aria-hidden=\"true\"\n >\n <ng-container *ngTemplateOutlet=\"madaLogo\"></ng-container>\n </span>\n }\n </span>\n <strong>\n {{ fmtAmount(row.value) }}\n </strong>\n </span>\n <span\n class=\"refund-method-selector__badge\"\n [class.refund-method-selector__badge--instant]=\"row.instant\"\n [class.refund-method-selector__badge--days]=\"!row.instant\"\n >\n @if (row.instant) {\n <svg\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.31818 0C8.42727 0 9.49093 0.440583 10.2752 1.22483C11.0594 2.00907 11.5 3.07273 11.5 4.18182C11.5 5.2909 11.0594 6.35457 10.2752 7.13881C9.49093 7.92305 8.42727 8.36364 7.31818 8.36364C6.20909 8.36364 5.14543 7.92305 4.36119 7.13881C3.57695 6.35457 3.13636 5.2909 3.13636 4.18182C3.13636 3.07273 3.57695 2.00907 4.36119 1.22483C5.14543 0.440583 6.20909 0 7.31818 0ZM7.31818 1.04545C6.48637 1.04545 5.68862 1.37589 5.10044 1.96407C4.51226 2.55226 4.18182 3.35 4.18182 4.18182C4.18182 5.01363 4.51226 5.81138 5.10044 6.39956C5.68862 6.98774 6.48637 7.31818 7.31818 7.31818C8.15 7.31818 8.94774 6.98774 9.53593 6.39956C10.1241 5.81138 10.4545 5.01363 10.4545 4.18182C10.4545 3.35 10.1241 2.55226 9.53593 1.96407C8.94774 1.37589 8.15 1.04545 7.31818 1.04545ZM6.79545 2.09091H7.57955V4.06682L8.7975 5.28477L8.24341 5.83886L6.79545 4.39091V2.09091ZM0.522727 7.31818C0.384091 7.31818 0.251134 7.26311 0.153103 7.16508C0.0550729 7.06705 0 6.93409 0 6.79545C0 6.65682 0.0550729 6.52386 0.153103 6.42583C0.251134 6.3278 0.384091 6.27273 0.522727 6.27273H2.52477C2.68682 6.64386 2.89591 6.99409 3.13636 7.31818H0.522727ZM1.04545 4.70455C0.906819 4.70455 0.773861 4.64947 0.67583 4.55144C0.5778 4.45341 0.522727 4.32045 0.522727 4.18182C0.522727 4.04318 0.5778 3.91022 0.67583 3.81219C0.773861 3.71416 0.906819 3.65909 1.04545 3.65909H2.11705L2.09091 4.18182L2.11705 4.70455H1.04545ZM1.56818 2.09091C1.42955 2.09091 1.29659 2.03584 1.19856 1.93781C1.10053 1.83978 1.04545 1.70682 1.04545 1.56818C1.04545 1.42955 1.10053 1.29659 1.19856 1.19856C1.29659 1.10053 1.42955 1.04545 1.56818 1.04545H3.13636C2.89591 1.36955 2.68682 1.71977 2.52477 2.09091H1.56818Z\"\n fill=\"#15803C\"\n />\n </svg>\n }\n @if (!row.instant) {\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.30078 6.50195C3.20312 6.50195 3.12174 6.4694 3.05664 6.4043C2.99154 6.33919 2.95898 6.25781 2.95898 6.16016C2.95898 6.06576 2.99154 5.986 3.05664 5.9209C3.12174 5.85579 3.20312 5.82324 3.30078 5.82324H5.5127V2.86914C5.5127 2.77474 5.54525 2.69499 5.61035 2.62988C5.67546 2.56478 5.75521 2.53223 5.84961 2.53223C5.94727 2.53223 6.02865 2.56478 6.09375 2.62988C6.15885 2.69499 6.19141 2.77474 6.19141 2.86914V6.16016C6.19141 6.25781 6.15885 6.33919 6.09375 6.4043C6.02865 6.4694 5.94727 6.50195 5.84961 6.50195H3.30078ZM5.85449 10.9551C5.16764 10.9551 4.52311 10.8249 3.9209 10.5645C3.31868 10.3073 2.78971 9.95085 2.33398 9.49512C1.87826 9.03939 1.52018 8.51042 1.25977 7.9082C1.0026 7.30599 0.874023 6.66146 0.874023 5.97461C0.874023 5.28776 1.0026 4.64323 1.25977 4.04102C1.52018 3.4388 1.87826 2.90983 2.33398 2.4541C2.78971 1.99512 3.31868 1.63704 3.9209 1.37988C4.52311 1.12272 5.16764 0.994141 5.85449 0.994141C6.54134 0.994141 7.18587 1.12272 7.78809 1.37988C8.3903 1.63704 8.91927 1.99512 9.375 2.4541C9.83073 2.90983 10.1872 3.4388 10.4443 4.04102C10.7048 4.64323 10.835 5.28776 10.835 5.97461C10.835 6.66146 10.7048 7.30599 10.4443 7.9082C10.1872 8.51042 9.83073 9.03939 9.375 9.49512C8.91927 9.95085 8.3903 10.3073 7.78809 10.5645C7.18587 10.8249 6.54134 10.9551 5.85449 10.9551ZM5.85449 10.125C6.42741 10.125 6.96452 10.0176 7.46582 9.80273C7.96712 9.58789 8.4082 9.29004 8.78906 8.90918C9.16992 8.52832 9.46777 8.08724 9.68262 7.58594C9.89746 7.08464 10.0049 6.54753 10.0049 5.97461C10.0049 5.40169 9.89746 4.86458 9.68262 4.36328C9.46777 3.85872 9.16992 3.41764 8.78906 3.04004C8.4082 2.65918 7.96712 2.36133 7.46582 2.14648C6.96452 1.93164 6.42741 1.82422 5.85449 1.82422C5.28158 1.82422 4.74447 1.93164 4.24316 2.14648C3.74186 2.36133 3.30078 2.65918 2.91992 3.04004C2.53906 3.41764 2.24121 3.85872 2.02637 4.36328C1.81152 4.86458 1.7041 5.40169 1.7041 5.97461C1.7041 6.54753 1.81152 7.08464 2.02637 7.58594C2.24121 8.08724 2.53906 8.52832 2.91992 8.90918C3.30078 9.29004 3.74186 9.58789 4.24316 9.80273C4.74447 10.0176 5.28158 10.125 5.85449 10.125Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n }\n {{ row.instant ? 'Instant' : paymentBadgeKey() }}\n </span>\n\n @if (row.isLoyalty) {\n <div\n class=\"refund-method-selector__notice refund-method-selector__notice--info\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n />\n <path\n d=\"M12 11v5.5M12 8v.01\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span>Loyalty points will be refunded instantly to your account</span>\n </div>\n }\n }\n </span>\n </button>\n }\n</div>\n\n<ng-template #madaLogo>\n <svg\n width=\"43\"\n height=\"15\"\n viewBox=\"0 0 43 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_rms_mada)\">\n <path d=\"M18.1894 8.6543H0V14.9933H18.1894V8.6543Z\" fill=\"#84B740\" />\n <path d=\"M18.1894 0H0V6.34463H18.1894V0Z\" fill=\"#259BD6\" />\n <path\n d=\"M36.3779 13.7034L36.2969 13.7203C36.016 13.7768 35.9134 13.7994 35.7082 13.7994C35.233 13.7994 34.6713 13.5452 34.6713 12.3475C34.6713 11.7316 34.7685 10.9124 35.6542 10.9124H35.6596C35.8108 10.9237 35.9836 10.9407 36.3077 11.0424L36.3779 11.065V13.7034ZM36.5237 7.73164L36.3779 7.75989V9.97458L36.2483 9.93503L36.2105 9.92373C36.0647 9.87853 35.7298 9.77684 35.4058 9.77684C33.6344 9.77684 33.2617 11.178 33.2617 12.3531C33.2617 13.9633 34.1258 14.8898 35.6326 14.8898C36.2699 14.8898 36.7397 14.822 37.215 14.6582C37.6524 14.5113 37.8091 14.3023 37.8091 13.8559V7.5C37.3878 7.5791 36.9504 7.65819 36.5237 7.73164Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M41.651 13.7385L41.5754 13.7611L41.3053 13.8345C41.0515 13.9023 40.8247 13.9419 40.6519 13.9419C40.236 13.9419 39.9876 13.7272 39.9876 13.36C39.9876 13.1227 40.0902 12.7215 40.7707 12.7215H41.651V13.7385ZM41.0299 9.74414C40.4844 9.74414 39.9228 9.84584 39.2261 10.0718L38.7724 10.2131L38.9236 11.2865L39.3665 11.134C39.831 10.9758 40.4088 10.8741 40.8409 10.8741C41.0353 10.8741 41.6294 10.8741 41.6294 11.5464V11.8402H40.8031C39.2963 11.8402 38.5996 12.343 38.5996 13.4221C38.5996 14.343 39.2423 14.8967 40.3224 14.8967C40.6573 14.8967 41.1217 14.8289 41.5214 14.7272L41.543 14.7215L41.5646 14.7272L41.6996 14.7498C42.1208 14.8289 42.5583 14.908 42.9849 14.9927V11.4673C42.9849 10.3261 42.3261 9.74414 41.0299 9.74414Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M31.1527 13.7385L31.0771 13.7611L30.807 13.8345C30.5532 13.9023 30.3318 13.9419 30.1536 13.9419C29.7377 13.9419 29.4893 13.7272 29.4893 13.36C29.4893 13.1227 29.5919 12.7215 30.267 12.7215H31.1473L31.1527 13.7385ZM30.537 9.74414C29.9861 9.74414 29.4299 9.84584 28.7332 10.0718L28.2795 10.2131L28.4308 11.2865L28.8736 11.134C29.3381 10.9758 29.9159 10.8741 30.348 10.8741C30.5424 10.8741 31.1365 10.8741 31.1365 11.5464V11.8402H30.3102C28.8034 11.8402 28.1013 12.343 28.1013 13.4221C28.1013 14.343 28.744 14.8967 29.8295 14.8967C30.1644 14.8967 30.6288 14.8289 31.0285 14.7272L31.0501 14.7215L31.0717 14.7272L31.2013 14.7498C31.6279 14.8289 32.06 14.908 32.4866 14.9984V11.473C32.492 10.3204 31.8332 9.74414 30.537 9.74414Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M25.4701 9.7576C24.7842 9.7576 24.2172 9.99489 24.0065 10.0966L23.9525 10.1248L23.9039 10.0853C23.6123 9.86495 23.1856 9.75195 22.5916 9.75195C22.0677 9.75195 21.5762 9.83105 21.0416 9.99489C20.5825 10.1418 20.4043 10.3734 20.4043 10.8085V14.8367H21.8409V11.1135L21.9111 11.0909C22.2027 10.9892 22.3755 10.9723 22.543 10.9723C22.9588 10.9723 23.1694 11.2039 23.1694 11.6559V14.8423H24.5844V11.5938C24.5844 11.4017 24.5466 11.2887 24.5412 11.2661L24.4926 11.17L24.5898 11.1248C24.8058 11.0231 25.0435 10.9723 25.2919 10.9723C25.5781 10.9723 25.9184 11.0909 25.9184 11.6559V14.8423H27.3279V11.509C27.3279 10.3282 26.7231 9.7576 25.4701 9.7576Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M40.5866 4.13559C40.3759 4.13559 40.0249 4.113 39.7495 4.0565L39.6684 4.03955V1.86441C39.6684 1.68362 39.636 1.57062 39.6306 1.55367L39.5874 1.46328L39.6793 1.42373C39.7009 1.41243 39.7225 1.40678 39.7495 1.39548L39.7657 1.38418C39.7981 1.37288 39.8305 1.36158 39.8629 1.35028C39.8791 1.34463 39.8899 1.33898 39.9007 1.33898C40.2193 1.24859 40.511 1.25989 40.6406 1.24859H40.646C41.5263 1.24859 41.6289 2.0678 41.6289 2.68362C41.6235 3.88136 41.0564 4.13559 40.5866 4.13559ZM40.5812 0C40.5704 0 40.5542 0 40.5434 0C39.7171 0 38.8692 0.237288 38.5667 0.700565C38.4047 0.926554 38.3129 1.20904 38.3075 1.54237V3.78531C38.3075 3.9774 38.2697 4.05085 38.2643 4.0678L38.2157 4.16384H35.6072V2.60452H35.6018C35.5694 0.960452 34.6404 0.0564972 33.2957 0.0564972H33.1391H31.9833C31.9293 0.457627 31.8861 0.740113 31.8321 1.14124H33.1391C33.8249 1.14124 34.1868 1.75141 34.1868 2.68927V4.25989L34.095 4.20904C34.0788 4.20339 33.9654 4.16384 33.7871 4.16384H31.5297C31.4865 4.46328 31.4325 4.85311 31.373 5.24294H38.3129C38.5505 5.19209 38.8259 5.14689 39.0636 5.10735C39.4146 5.28814 40.0681 5.38418 40.5164 5.38418C42.0231 5.38418 43.0007 4.32768 43.0007 2.70057C42.9953 1.0904 42.0501 0.0338983 40.5812 0Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M28.4189 5.90821H28.4837C29.9905 5.90821 30.6925 5.38844 30.6925 4.10595C30.6925 3.18505 30.0499 2.45059 28.9697 2.45059H27.5818C27.1659 2.45059 26.9175 2.202 26.9175 1.78392C26.9175 1.50143 27.0201 1.15115 27.7006 1.15115H30.7357C30.8006 0.738723 30.833 0.478836 30.8924 0.0664062H27.7384C26.2694 0.0664062 25.5295 0.710474 25.5295 1.78392C25.5295 2.84607 26.1722 3.39974 27.2523 3.39974H28.6403C29.0561 3.39974 29.3046 3.74437 29.3046 4.10595C29.3046 4.34324 29.202 4.83477 28.5269 4.83477H28.2947L23.8499 4.82347H23.0398C22.3539 4.82347 21.8733 4.41669 21.8733 3.47319V2.82347C21.8733 1.84042 22.2459 1.23025 23.0398 1.23025H24.3576C24.417 0.812169 24.4548 0.546632 24.5088 0.151152H22.867H22.7104C21.3656 0.151152 20.4367 1.09466 20.4043 2.73872V2.80087V3.47319C20.4367 5.11725 21.3656 5.90256 22.7104 5.90256H22.867H24.0227L26.4314 5.90821H27.868H28.4189Z\"\n fill=\"#747583\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_rms_mada\">\n <rect width=\"43\" height=\"15\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n</ng-template>\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n ViewChild,\n ElementRef,\n effect,\n OnDestroy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n IRefundDetailsData,\n RefundPreferredMethod,\n} from '../../../shared/interfaces/i-flight-refund-details';\nimport { HotelRefundMethodSelectorComponent } from '../hotel-refund-method-selector/hotel-refund-method-selector.component';\n\ndeclare const lottie: any;\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation-refund-method',\n standalone: true,\n imports: [CommonModule, HotelRefundMethodSelectorComponent],\n templateUrl: './almatar-hotel-auto-cancellation-refund-method.component.html',\n styleUrls: ['./almatar-hotel-auto-cancellation-refund-method.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlmatarHotelAutoCancellationRefundMethodComponent {\n\n readonly refundDetailsData = input.required<IRefundDetailsData | null>();\n readonly currencyObj = input.required<any>();\n readonly refundMethod = input.required<RefundPreferredMethod>();\n readonly bookingId = input.required<string>();\n readonly isCancelling = input<boolean>(false);\n /** Show the selector's back arrow (off for hotel - train's cancel flow turns it on). */\n readonly showBack = input<boolean>(false);\n\n readonly methodSelected = output<RefundPreferredMethod>();\n readonly backRequested = output<void>();\n readonly confirmRequested = output<void>();\n readonly closeModal = output<void>();\n\n private animation: any;\n private lottieLoaded = false;\n\n readonly isNilRefund = computed(() => {\n const data = this.refundDetailsData();\n return Number(data?.totalRefundAmount ?? 0) === 0;\n });\n\n constructor() {\n }\n\n onMethodSelected(method: RefundPreferredMethod): void {\n this.methodSelected.emit(method);\n }\n\n onBack(): void {\n this.backRequested.emit();\n }\n\n onConfirm(): void {\n this.confirmRequested.emit();\n }\n\n onClose(): void {\n this.closeModal.emit();\n }\n}\n","<div class=\"refund-method\">\n <!-- Loading State -->\n @if (isCancelling()) {\n <div class=\"refund-method__loading\">\n <!-- <div class=\"refund-method__lottie-wrapper\">\n <div #lottieContainer class=\"refund-method__lottie\"></div>\n </div> -->\n <h2 class=\"refund-method__loading-title\">\n Processing your cancellation...\n </h2>\n <p class=\"refund-method__loading-subtitle\">\n This may take a moment. Please wait...\n </p>\n </div>\n }\n\n <!-- Main Content -->\n @if (!isCancelling()) {\n <div class=\"refund-method__content\">\n <almatar-hotel-refund-method-selector\n [data]=\"refundDetailsData()\"\n [currencyObj]=\"currencyObj()\"\n [refundMethod]=\"refundMethod()\"\n (methodSelected)=\"onMethodSelected($event)\"\n (backRequested)=\"onBack()\"\n (closed)=\"onClose()\"\n [bookingId]=\"bookingId()\"\n [showCloseButton]=\"true\"\n [showBack]=\"showBack()\"\n [showLoyaltyPointsNote]=\"true\"\n />\n </div>\n\n <div class=\"refund-method__footer\">\n <button class=\"btn btn--danger\" type=\"button\" (click)=\"onConfirm()\">\n {{ isNilRefund() ? 'Cancel Booking' : 'Confirm Cancellation' }}\n </button>\n </div>\n }\n</div>\n","import { Component, input, output, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ResultType = 'success' | 'error' | 'warning';\n\nexport interface ResultOverlayData {\n type: ResultType;\n title: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n showCancel?: boolean;\n icon?: string;\n}\n\n@Component({\n selector: 'app-result-overlay',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './result-overlay.component.html',\n styleUrls: ['./result-overlay.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ResultOverlayComponent {\n readonly data = input.required<ResultOverlayData>();\n readonly show = input(true);\n\n readonly confirm = output<void>();\n readonly cancel = output<void>();\n\n onConfirm(): void {\n this.confirm.emit();\n }\n\n onCancel(): void {\n this.cancel.emit();\n }\n\n getIcon(): string {\n if (this.data().icon) {\n return this.data().icon;\n }\n\n switch (this.data().type) {\n case 'success':\n return 'pi pi-check-circle';\n case 'error':\n return 'pi pi-times-circle';\n case 'warning':\n return 'pi pi-exclamation-triangle';\n default:\n return 'pi pi-info-circle';\n }\n }\n\n getIconClass(): string {\n switch (this.data().type) {\n case 'success':\n return 'icon--success';\n case 'error':\n return 'icon--error';\n case 'warning':\n return 'icon--warning';\n default:\n return 'icon--info';\n }\n }\n}\n","@if (show()) {\n <div class=\"result-overlay\">\n <div class=\"result-overlay__backdrop\" (click)=\"onCancel()\"></div>\n\n <div class=\"result-overlay__content\">\n <div class=\"result-overlay__icon-wrapper\" [ngClass]=\"getIconClass()\">\n <i [class]=\"getIcon()\" class=\"result-overlay__icon\"></i>\n </div>\n\n <h2 class=\"result-overlay__title\">{{ data().title }}</h2>\n\n <p class=\"result-overlay__message\">{{ data().message }}</p>\n\n <div class=\"result-overlay__actions\">\n <button\n type=\"button\"\n class=\"result-overlay__btn result-overlay__btn--primary\"\n (click)=\"onConfirm()\"\n >\n {{ data().confirmText || 'OK' }}\n </button>\n\n @if (data().showCancel) {\n <button\n type=\"button\"\n class=\"result-overlay__btn result-overlay__btn--secondary\"\n (click)=\"onCancel()\"\n >\n {{ data().cancelText || 'Cancel' }}\n </button>\n }\n </div>\n </div>\n </div>\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n inject,\n signal,\n DestroyRef,\n OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslationService } from '../../../../shared/services/translation.service';\nimport { CurrencyCodeIconComponent } from '../../../../shared/components/currency-code-icon/currency-code-icon.component';\nimport { ExchangePipeModule } from '../../../../shared/pipes/exchange.pipe';\nimport { Store } from '@ngrx/store';\nimport { getCurrentCurrency } from '../../../../shared/store/selectors/currency.selectors';\nimport { SharedService } from '../../../../shared/services/shared.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs/operators';\nimport {\n RefundPreferredMethod,\n PAYMENT_GATEWAY_LABELS,\n PaymentGatewayCode,\n} from '../../../shared/interfaces/i-flight-refund-details';\nimport { IAutoCancellationProcessResponse } from '../../services/almatar-hotel-auto-cancellation-endpoints.service';\n\nexport interface LoyaltySubItem {\n label: string;\n value: number;\n}\n\nexport interface RefundResultRow {\n label: string;\n value: number;\n instant: boolean;\n badgeKey: string;\n isWallet?: boolean;\n isMada?: boolean;\n hasLoyaltyNote?: boolean;\n isInstallment?: boolean;\n loyaltySubItems?: LoyaltySubItem[];\n}\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation-result-overlay',\n standalone: true,\n imports: [\n CommonModule,\n CurrencyCodeIconComponent,\n ExchangePipeModule,\n ],\n templateUrl:\n './almatar-hotel-auto-cancellation-result-overlay.component.html',\n styleUrls: [\n './almatar-hotel-auto-cancellation-result-overlay.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlmatarHotelAutoCancellationResultOverlayComponent implements OnInit {\n private readonly translateService = inject(TranslationService);\n private readonly store = inject(Store);\n private readonly sharedService = inject(SharedService);\n private readonly destroyRef = inject(DestroyRef);\n\n // Currency\n readonly baseCurrencyCode = signal('SAR');\n readonly currentCurrency = signal<any>(null);\n\n readonly visible = input<boolean>(false);\n readonly currencyObj = input<any>(null);\n readonly refundMethod = input<RefundPreferredMethod>('wallet');\n readonly apiResponse = input<IAutoCancellationProcessResponse | null>(null);\n\n readonly done = output<void>();\n\n ngOnInit(): void {\n this.initCurrency();\n }\n\n private initCurrency(): void {\n this.store\n .select(getCurrentCurrency)\n .pipe(\n filter((currency) => !!currency),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((currency) => {\n this.currentCurrency.set(currency);\n });\n\n this.sharedService\n .getBaseCurrency()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((currency: { code: string }) => {\n this.baseCurrencyCode.set(currency.code);\n });\n }\n\n readonly isNilRefund = computed(() => {\n const response = this.apiResponse();\n if (response?.data?.refund) {\n return response.data.refund.amount === 0;\n }\n return true;\n });\n\n readonly displayCurrency = computed(() => {\n const response = this.apiResponse();\n if (response?.data?.refund?.currency) {\n return { code: response.data.refund.currency };\n }\n return this.currencyObj();\n });\n\n readonly refundRows = computed((): RefundResultRow[] => {\n const response = this.apiResponse();\n if (!response?.data?.refund?.breakdown) {\n return [];\n }\n return this.buildRowsFromApiResponse(response);\n });\n\n private buildRowsFromApiResponse(\n response: IAutoCancellationProcessResponse,\n ): RefundResultRow[] {\n const rows: RefundResultRow[] = [];\n const breakdown = response.data.refund.breakdown;\n const preferredMethod = response.data.preferredPaymentMethod;\n\n // Collect loyalty programs dynamically\n const loyaltyPrograms = this.getLoyaltyPrograms(breakdown);\n const hasLoyaltyPrograms = loyaltyPrograms.length > 0;\n const loyaltyTotal = loyaltyPrograms.reduce(\n (sum, item) => sum + item.value,\n 0,\n );\n\n // Wallet refund (combined with loyalty programs if any)\n if (breakdown.wallet > 0 || hasLoyaltyPrograms) {\n const walletTotal = breakdown.wallet + loyaltyTotal;\n const loyaltySubItems: LoyaltySubItem[] = [];\n\n // Add wallet points as first sub-item if there are loyalty programs\n if (hasLoyaltyPrograms && breakdown.wallet > 0) {\n loyaltySubItems.push({\n label: this.translateService.instant(\n 'manage-booking.smart-cancel.result.wallet-points-label',\n ),\n value: breakdown.wallet,\n });\n }\n\n // Add all loyalty programs as sub-items\n loyaltySubItems.push(...loyaltyPrograms);\n\n rows.push({\n label: this.translateService.instant(\n 'manage-booking.smart-cancel.result.your-wallet',\n ),\n value: walletTotal,\n instant: true,\n badgeKey: 'Ready Now',\n isWallet: true,\n hasLoyaltyNote: hasLoyaltyPrograms,\n loyaltySubItems:\n loyaltySubItems.length > 1 ? loyaltySubItems : undefined,\n });\n }\n\n // Card refund\n if (breakdown.card > 0) {\n rows.push({\n label: this.translateService.instant(\n 'manage-booking.smart-cancel.refund-method.original',\n ),\n value: breakdown.card,\n instant: false,\n badgeKey: '5-7 business days',\n isWallet: false,\n isInstallment: false,\n });\n }\n\n // Tabby refund\n if (breakdown.tabby > 0) {\n rows.push({\n label: this.getPaymentMethodLabel(PaymentGatewayCode.Tabby) || 'Tabby',\n value: breakdown.tabby,\n instant: false,\n badgeKey: '3-5 business days',\n isWallet: false,\n isInstallment: true,\n });\n }\n\n // Tamara refund\n if (breakdown.tamara > 0) {\n rows.push({\n label:\n this.getPaymentMethodLabel(PaymentGatewayCode.Tamara) || 'Tamara',\n value: breakdown.tamara,\n instant: false,\n badgeKey: '7-10 business days',\n isWallet: false,\n isInstallment: true,\n });\n }\n\n // If no breakdown rows but we have a total amount, show single row\n if (rows.length === 0 && response.data.refund.amount > 0) {\n const isWallet = preferredMethod === 'wallet';\n rows.push({\n label: isWallet\n ? this.translateService.instant(\n 'manage-booking.smart-cancel.result.your-wallet',\n )\n : this.translateService.instant(\n 'manage-booking.smart-cancel.refund-method.original',\n ),\n value: response.data.refund.amount,\n instant: isWallet,\n badgeKey: isWallet\n ? 'Ready Now'\n : '5-7 business days',\n isWallet,\n });\n }\n\n return rows;\n }\n\n private getLoyaltyPrograms(breakdown: {\n wallet: number;\n mokafa: number;\n qitaf: number;\n card: number;\n tabby: number;\n tamara: number;\n }): LoyaltySubItem[] {\n const loyaltyPrograms: LoyaltySubItem[] = [];\n\n // Mokafa (Al Rajhi) points\n if (breakdown.mokafa > 0) {\n loyaltyPrograms.push({\n label: this.getLoyaltyProgramLabel(\n PaymentGatewayCode.AlRajhiMokafaa,\n \"Mokafa'a\",\n ),\n value: breakdown.mokafa,\n });\n }\n\n // Qitaf points\n if (breakdown.qitaf > 0) {\n loyaltyPrograms.push({\n label: this.getLoyaltyProgramLabel(PaymentGatewayCode.Qitaf, 'Qitaf'),\n value: breakdown.qitaf,\n });\n }\n\n // Add more loyalty programs here as needed\n // Example: if (breakdown.newLoyalty > 0) { ... }\n\n return loyaltyPrograms;\n }\n\n private getLoyaltyProgramLabel(\n code: PaymentGatewayCode,\n fallbackName: string,\n ): string {\n const isArabic = this.translateService.currentLang?.startsWith('ar');\n const pointsLabel = isArabic ? 'نقاط' : 'points';\n const gatewayLabel = this.getPaymentMethodLabel(code);\n const programName = gatewayLabel || fallbackName;\n return `${programName} ${pointsLabel}`;\n }\n\n private getPaymentMethodLabel(code: PaymentGatewayCode | undefined): string {\n if (!code) {\n return '';\n }\n const entry = PAYMENT_GATEWAY_LABELS[code];\n if (!entry) {\n return '';\n }\n return this.translateService.currentLang?.startsWith('ar')\n ? entry.ar\n : entry.en;\n }\n\n isWalletRow(row: RefundResultRow): boolean {\n return row.isWallet === true;\n }\n\n fmtAmount(value: number | undefined): string {\n return Number(value || 0).toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n\n onDone(): void {\n this.done.emit();\n }\n}\n","<div class=\"result-overlay\" [class.result-overlay--visible]=\"visible()\">\n <div class=\"result-overlay__backdrop\"></div>\n <div class=\"result-overlay__modal\">\n <div class=\"result-overlay__hero\">\n <span class=\"result-overlay__icon result-overlay__icon--green\">\n <svg\n width=\"114\"\n height=\"114\"\n viewBox=\"0 0 114 114\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"57\" cy=\"57\" r=\"42\" fill=\"#6DE197\" />\n <path\n d=\"M71.417 43.5774C73.169 41.8254 76.0097 41.8254 77.7617 43.5774C79.5134 45.3294 79.5136 48.1702 77.7617 49.9221L55.4248 72.2581C54.5835 73.0992 53.4426 73.5715 52.2529 73.5715C51.0632 73.5715 49.9224 73.0992 49.0811 72.2581L36.3174 59.4944C34.5654 57.7424 34.5654 54.9017 36.3174 53.1497C38.0694 51.3978 40.9102 51.3977 42.6621 53.1497L52.041 62.5286C52.0973 62.5848 52.1734 62.6165 52.2529 62.6165C52.3325 62.6164 52.4086 62.5848 52.4648 62.5286L71.417 43.5774Z\"\n fill=\"url(#paint0_linear_hotel_result)\"\n fill-opacity=\"0.9\"\n stroke=\"url(#paint1_linear_hotel_result)\"\n stroke-width=\"0.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_hotel_result\"\n x1=\"41.6842\"\n y1=\"54.1291\"\n x2=\"111.486\"\n y2=\"62.3784\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stop-color=\"white\" />\n <stop offset=\"1\" stop-color=\"white\" stop-opacity=\"0\" />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_hotel_result\"\n x1=\"42.6803\"\n y1=\"51.352\"\n x2=\"61.1185\"\n y2=\"79.3662\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stop-color=\"white\" />\n <stop offset=\"1\" stop-color=\"white\" stop-opacity=\"0\" />\n </linearGradient>\n </defs>\n </svg>\n </span>\n <h3 class=\"result-overlay__title\">\n {{ isNilRefund() ? 'Cancellation Confirmed' : 'Refund Confirmed' }}\n </h3>\n </div>\n\n @for (row of refundRows(); track $index) {\n <div\n class=\"result-overlay__row\"\n [class.result-overlay__row--with-breakdown]=\"\n row.loyaltySubItems?.length\n \"\n >\n <!-- Wallet Icon -->\n @if (isWalletRow(row)) {\n <span class=\"result-overlay__method-icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 22 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_wallet_result)\">\n <path\n d=\"M2.67627 20.8852C1.74854 20.8852 1.04655 20.6533 0.570312 20.1894C0.10026 19.7256 -0.134766 19.0359 -0.134766 18.1206V8.51852C-0.134766 7.77015 0.0260417 7.1764 0.347656 6.73727C0.675456 6.29815 1.1888 5.97344 1.8877 5.76315L13.7812 2.3027C14.4554 2.11097 15.0584 2.06149 15.5903 2.15427C16.1284 2.24704 16.549 2.49443 16.8521 2.89645C17.1613 3.29229 17.3159 3.85511 17.3159 4.58493V6.25485L15.8037 6.38473V4.45505C15.8037 4.04684 15.6893 3.76543 15.4604 3.61081C15.2316 3.45619 14.8945 3.44382 14.4492 3.5737L7.27783 5.55905C7.19124 5.5776 7.15104 5.61471 7.15723 5.67038C7.16341 5.71986 7.20671 5.7446 7.28711 5.7446H17.5942C18.5282 5.7446 19.2271 5.97962 19.6909 6.44968C20.161 6.91354 20.396 7.60316 20.396 8.51852V10.8564H18.8931V8.60202C18.8931 8.15671 18.7786 7.81963 18.5498 7.59079C18.321 7.36195 17.9932 7.24753 17.5664 7.24753H2.69482C2.26807 7.24753 1.94027 7.36195 1.71143 7.59079C1.48877 7.81963 1.37744 8.15671 1.37744 8.60202V18.0371C1.37744 18.4824 1.48877 18.8164 1.71143 19.039C1.94027 19.2679 2.26807 19.3823 2.69482 19.3823H17.5664C17.9932 19.3823 18.321 19.2679 18.5498 19.039C18.7786 18.8164 18.8931 18.4824 18.8931 18.0371V15.4394H20.396V18.1206C20.396 19.0359 20.161 19.7256 19.6909 20.1894C19.2271 20.6533 18.5282 20.8852 17.5942 20.8852H2.67627ZM16.7686 14.2334C16.5088 14.2334 16.2861 14.1437 16.1006 13.9643C15.9212 13.7788 15.8315 13.5561 15.8315 13.2964C15.8315 13.0366 15.9212 12.817 16.1006 12.6377C16.2861 12.4521 16.5088 12.3593 16.7686 12.3593C17.0283 12.3593 17.2479 12.4521 17.4272 12.6377C17.6128 12.817 17.7056 13.0366 17.7056 13.2964C17.7056 13.5561 17.6128 13.7788 17.4272 13.9643C17.2479 14.1437 17.0283 14.2334 16.7686 14.2334ZM16.6758 16.2187C15.7419 16.2187 14.9873 15.9775 14.4121 15.4951C13.8369 15.0065 13.5493 14.2767 13.5493 13.3056C13.5493 12.3346 13.8369 11.6079 14.4121 11.1255C14.9873 10.643 15.7419 10.4018 16.6758 10.4018H20.1084C20.6898 10.4018 21.1475 10.5812 21.4814 10.9399C21.8216 11.2986 21.9917 11.7439 21.9917 12.2758V14.3354C21.9917 14.8673 21.8216 15.3157 21.4814 15.6806C21.1475 16.0394 20.6898 16.2187 20.1084 16.2187H16.6758ZM16.7686 14.9756H19.7837C20.1053 14.9756 20.3465 14.8921 20.5073 14.7251C20.6743 14.5519 20.7578 14.3138 20.7578 14.0107V12.6006C20.7578 12.2975 20.6743 12.0625 20.5073 11.8955C20.3465 11.7223 20.1053 11.6357 19.7837 11.6357H16.7686C16.1191 11.6357 15.6367 11.7841 15.3213 12.081C15.012 12.3779 14.8574 12.7861 14.8574 13.3056C14.8574 13.8252 15.012 14.2334 15.3213 14.5302C15.6367 14.8271 16.1191 14.9756 16.7686 14.9756Z\"\n fill=\"black\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_wallet_result\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n }\n\n <!-- Card Icon -->\n @if (!isWalletRow(row)) {\n <span class=\"result-overlay__method-icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.25 8.25H21.75M2.25 9H21.75M5.25 14.25H11.25M5.25 16.5H8.25M4.5 19.5H19.5C20.0967 19.5 20.669 19.2629 21.091 18.841C21.5129 18.419 21.75 17.8467 21.75 17.25V6.75C21.75 6.15326 21.5129 5.58097 21.091 5.15901C20.669 4.73705 20.0967 4.5 19.5 4.5H4.5C3.90326 4.5 3.33097 4.73705 2.90901 5.15901C2.48705 5.58097 2.25 6.15326 2.25 6.75V17.25C2.25 17.8467 2.48705 18.419 2.90901 18.841C3.33097 19.2629 3.90326 19.5 4.5 19.5Z\"\n stroke=\"#1B1A1F\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n }\n\n <span class=\"result-overlay__body\">\n <span class=\"result-overlay__method-name\">\n <span class=\"result-overlay__method-block\">\n {{ row.label }}\n\n @if (!isWalletRow(row) && !row?.isInstallment) {\n <span class=\"mada-logo\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"43\"\n height=\"15\"\n viewBox=\"0 0 43 15\"\n fill=\"none\"\n >\n <g clip-path=\"url(#clip0_19158_27303)\">\n <path\n d=\"M18.1894 8.65527H0V14.9943H18.1894V8.65527Z\"\n fill=\"#84B740\"\n />\n <path\n d=\"M18.1894 0H0V6.34463H18.1894V0Z\"\n fill=\"#259BD6\"\n />\n <path\n d=\"M36.3779 13.7034L36.2969 13.7203C36.016 13.7768 35.9134 13.7994 35.7082 13.7994C35.233 13.7994 34.6713 13.5452 34.6713 12.3475C34.6713 11.7316 34.7685 10.9124 35.6542 10.9124H35.6596C35.8108 10.9237 35.9836 10.9407 36.3077 11.0424L36.3779 11.065V13.7034ZM36.5237 7.73164L36.3779 7.75989V9.97458L36.2483 9.93503L36.2105 9.92373C36.0647 9.87853 35.7298 9.77684 35.4058 9.77684C33.6344 9.77684 33.2617 11.178 33.2617 12.3531C33.2617 13.9633 34.1258 14.8898 35.6326 14.8898C36.2699 14.8898 36.7397 14.822 37.215 14.6582C37.6524 14.5113 37.8091 14.3023 37.8091 13.8559V7.5C37.3878 7.5791 36.9504 7.65819 36.5237 7.73164Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M41.651 13.7375L41.5754 13.7601L41.3053 13.8336C41.0515 13.9014 40.8247 13.9409 40.6519 13.9409C40.236 13.9409 39.9876 13.7262 39.9876 13.359C39.9876 13.1217 40.0902 12.7206 40.7707 12.7206H41.651V13.7375ZM41.0299 9.74316C40.4844 9.74316 39.9228 9.84486 39.2261 10.0708L38.7724 10.2121L38.9236 11.2855L39.3665 11.133C39.831 10.9748 40.4088 10.8731 40.8409 10.8731C41.0353 10.8731 41.6294 10.8731 41.6294 11.5454V11.8392H40.8031C39.2963 11.8392 38.5996 12.342 38.5996 13.4211C38.5996 14.342 39.2423 14.8957 40.3224 14.8957C40.6573 14.8957 41.1217 14.8279 41.5214 14.7262L41.543 14.7206L41.5646 14.7262L41.6996 14.7488C42.1208 14.8279 42.5583 14.907 42.9849 14.9918V11.4663C42.9849 10.3251 42.3261 9.74316 41.0299 9.74316Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M31.1529 13.7375L31.0773 13.7601L30.8073 13.8336C30.5535 13.9014 30.332 13.9409 30.1538 13.9409C29.738 13.9409 29.4895 13.7262 29.4895 13.359C29.4895 13.1217 29.5921 12.7206 30.2672 12.7206H31.1475L31.1529 13.7375ZM30.5373 9.74316C29.9864 9.74316 29.4301 9.84486 28.7334 10.0708L28.2798 10.2121L28.431 11.2855L28.8739 11.133C29.3383 10.9748 29.9162 10.8731 30.3482 10.8731C30.5427 10.8731 31.1367 10.8731 31.1367 11.5454V11.8392H30.3104C28.8036 11.8392 28.1016 12.342 28.1016 13.4211C28.1016 14.342 28.7442 14.8957 29.8298 14.8957C30.1646 14.8957 30.6291 14.8279 31.0287 14.7262L31.0503 14.7206L31.0719 14.7262L31.2015 14.7488C31.6282 14.8279 32.0602 14.907 32.4869 14.9974V11.472C32.4923 10.3194 31.8334 9.74316 30.5373 9.74316Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M25.4701 9.7576C24.7842 9.7576 24.2172 9.99489 24.0065 10.0966L23.9525 10.1248L23.9039 10.0853C23.6123 9.86495 23.1856 9.75195 22.5916 9.75195C22.0677 9.75195 21.5762 9.83105 21.0416 9.99489C20.5825 10.1418 20.4043 10.3734 20.4043 10.8085V14.8367H21.8409V11.1135L21.9111 11.0909C22.2027 10.9892 22.3755 10.9723 22.543 10.9723C22.9588 10.9723 23.1694 11.2039 23.1694 11.6559V14.8423H24.5844V11.5938C24.5844 11.4017 24.5466 11.2887 24.5412 11.2661L24.4926 11.17L24.5898 11.1248C24.8058 11.0231 25.0435 10.9723 25.2919 10.9723C25.5781 10.9723 25.9184 11.0909 25.9184 11.6559V14.8423H27.3279V11.509C27.3279 10.3282 26.7231 9.7576 25.4701 9.7576Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M40.5866 4.13559C40.3759 4.13559 40.0249 4.113 39.7495 4.0565L39.6684 4.03955V1.86441C39.6684 1.68362 39.636 1.57062 39.6306 1.55367L39.5874 1.46328L39.6793 1.42373C39.7009 1.41243 39.7225 1.40678 39.7495 1.39548L39.7657 1.38418C39.7981 1.37288 39.8305 1.36158 39.8629 1.35028C39.8791 1.34463 39.8899 1.33898 39.9007 1.33898C40.2193 1.24859 40.511 1.25989 40.6406 1.24859H40.646C41.5263 1.24859 41.6289 2.0678 41.6289 2.68362C41.6235 3.88136 41.0564 4.13559 40.5866 4.13559ZM40.5812 0C40.5704 0 40.5542 0 40.5434 0C39.7171 0 38.8692 0.237288 38.5667 0.700565C38.4047 0.926554 38.3129 1.20904 38.3075 1.54237V3.78531C38.3075 3.9774 38.2697 4.05085 38.2643 4.0678L38.2157 4.16384H35.6072V2.60452H35.6018C35.5694 0.960452 34.6404 0.0564972 33.2957 0.0564972H33.1391H31.9833C31.9293 0.457627 31.8861 0.740113 31.8321 1.14124H33.1391C33.8249 1.14124 34.1868 1.75141 34.1868 2.68927V4.25989L34.095 4.20904C34.0788 4.20339 33.9654 4.16384 33.7871 4.16384H31.5297C31.4865 4.46328 31.4325 4.85311 31.373 5.24294H38.3129C38.5505 5.19209 38.8259 5.14689 39.0636 5.10735C39.4146 5.28814 40.0681 5.38418 40.5164 5.38418C42.0231 5.38418 43.0007 4.32768 43.0007 2.70057C42.9953 1.0904 42.0501 0.0338983 40.5812 0Z\"\n fill=\"#747583\"\n />\n <path\n d=\"M28.4189 5.9087H28.4837C29.9905 5.9087 30.6925 5.38893 30.6925 4.10644C30.6925 3.18554 30.0499 2.45108 28.9697 2.45108H27.5818C27.1659 2.45108 26.9175 2.20249 26.9175 1.78441C26.9175 1.50192 27.0201 1.15164 27.7006 1.15164H30.7357C30.8006 0.739211 30.833 0.479324 30.8924 0.0668945H27.7384C26.2694 0.0668945 25.5295 0.710962 25.5295 1.78441C25.5295 2.84656 26.1722 3.40023 27.2523 3.40023H28.6403C29.0561 3.40023 29.3046 3.74486 29.3046 4.10644C29.3046 4.34373 29.202 4.83526 28.5269 4.83526H28.2947L23.8499 4.82396H23.0398C22.3539 4.82396 21.8733 4.41718 21.8733 3.47367V2.82396C21.8733 1.84091 22.2459 1.23074 23.0398 1.23074H24.3576C24.417 0.812657 24.4548 0.547121 24.5088 0.15164H22.867H22.7104C21.3656 0.15164 20.4367 1.09514 20.4043 2.73921V2.80136V3.47367C20.4367 5.11774 21.3656 5.90305 22.7104 5.90305H22.867H24.0227L26.4314 5.9087H27.868H28.4189Z\"\n fill=\"#747583\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_19158_27303\">\n <rect width=\"43\" height=\"15\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n }\n </span>\n\n <strong class=\"result-overlay__amount\">\n {{\n row.value | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </strong>\n </span>\n\n <!-- Loyalty breakdown sub-items -->\n @if (row.loyaltySubItems?.length) {\n <div class=\"result-overlay__loyalty-breakdown\">\n @for (subItem of row.loyaltySubItems; track $index) {\n <div class=\"result-overlay__loyalty-item\">\n <span class=\"result-overlay__loyalty-label\">{{\n subItem.label\n }}</span>\n <span class=\"result-overlay__loyalty-value\">\n {{\n subItem.value | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n </div>\n }\n\n <span\n class=\"result-overlay__badge\"\n [class.result-overlay__badge--instant]=\"row.instant\"\n [class.result-overlay__badge--days]=\"!row.instant\"\n >\n {{ row.badgeKey }}\n </span>\n\n <!-- Loyalty note -->\n @if (row.hasLoyaltyNote && row.loyaltySubItems?.length) {\n <div class=\"result-overlay__loyalty-note\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M4.1582 21.1777C3.60482 21.1777 3.12956 21.0605 2.73242 20.8262C2.33529 20.5918 2.0293 20.2728 1.81445 19.8691C1.59961 19.472 1.49219 19.026 1.49219 18.5312C1.49219 18.056 1.61914 17.6003 1.87305 17.1641L9.45117 3.96094C9.69857 3.51823 10.0273 3.1862 10.4375 2.96484C10.8477 2.73698 11.2773 2.62305 11.7266 2.62305C12.1758 2.62305 12.6022 2.73698 13.0059 2.96484C13.416 3.1862 13.748 3.51823 14.002 3.96094L21.5801 17.1641C21.7038 17.3789 21.7982 17.6035 21.8633 17.8379C21.9284 18.0723 21.9609 18.3034 21.9609 18.5312C21.9609 19.026 21.8535 19.472 21.6387 19.8691C21.4238 20.2728 21.1178 20.5918 20.7207 20.8262C20.3236 21.0605 19.8483 21.1777 19.2949 21.1777H4.1582ZM4.16797 19.6445H19.2754C19.6139 19.6445 19.8809 19.5306 20.0762 19.3027C20.278 19.0814 20.3789 18.821 20.3789 18.5215C20.3789 18.3132 20.3268 18.1081 20.2227 17.9062L12.6543 4.70312C12.5501 4.52083 12.4134 4.39062 12.2441 4.3125C12.0814 4.22786 11.9089 4.18555 11.7266 4.18555C11.5443 4.18555 11.3685 4.22786 11.1992 4.3125C11.0299 4.39062 10.8932 4.52083 10.7891 4.70312L3.2207 17.8965C3.16862 18.0007 3.12956 18.1081 3.10352 18.2188C3.08398 18.3294 3.07422 18.4303 3.07422 18.5215C3.07422 18.821 3.17188 19.0814 3.36719 19.3027C3.5625 19.5306 3.82943 19.6445 4.16797 19.6445ZM11.7266 14.5859C11.2253 14.5859 10.9681 14.3288 10.9551 13.8145L10.8281 8.64844C10.8216 8.40104 10.8997 8.19596 11.0625 8.0332C11.2318 7.87044 11.4499 7.78906 11.7168 7.78906C11.9772 7.78906 12.1921 7.8737 12.3613 8.04297C12.5371 8.20573 12.6217 8.41081 12.6152 8.6582L12.4688 13.8145C12.4622 14.3288 12.2148 14.5859 11.7266 14.5859ZM11.7266 17.7598C11.4401 17.7598 11.1927 17.6621 10.9844 17.4668C10.776 17.265 10.6719 17.0241 10.6719 16.7441C10.6719 16.4642 10.776 16.2266 10.9844 16.0312C11.1927 15.8294 11.4401 15.7285 11.7266 15.7285C12.013 15.7285 12.2604 15.8262 12.4688 16.0215C12.6771 16.2168 12.7812 16.4577 12.7812 16.7441C12.7812 17.0306 12.6738 17.2715 12.459 17.4668C12.2507 17.6621 12.0065 17.7598 11.7266 17.7598Z\"\n fill=\"#0B54C2\"\n />\n </svg>\n <span>Loyalty points will be refunded instantly to your account</span>\n </div>\n }\n </span>\n </div>\n }\n\n <button\n class=\"btn btn--primary result-overlay__done\"\n type=\"button\"\n (click)=\"onDone()\"\n >\n {{ 'GOT IT!' }}\n </button>\n </div>\n</div>\n","import { AsideComponent } from '../almatar-aside/aside.component';\nimport {\n Component,\n ChangeDetectionStrategy,\n DestroyRef,\n OnDestroy,\n OnInit,\n inject,\n signal,\n computed,\n output,\n input,\n effect\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ManageBookingFailedModalComponent } from '../shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component';\nimport { LoaderModule } from '../../shared/modules/loader/loader.module';\nimport { HotelManageBookingService } from '../shared/services/hotel-manage-booking/hotel-manage-booking.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { AlmatarHotelAutoCancellationStepEnum } from './enums/almatar-hotel-auto-cancellation-step.enum';\nimport { AlmatarHotelAutoCancellationService } from './services/almatar-hotel-auto-cancellation.service';\nimport {\n AlmatarHotelAutoCancellationEndpointsService,\n IAutoCancellationProcessResponse\n} from './services/almatar-hotel-auto-cancellation-endpoints.service';\nimport {\n IAlmatarHotelAutoCancellationRoom,\n IAlmatarHotelAutoCancellationHotelInfo,\n IAlmatarHotelAutoCancellationPackage,\n IBookingPackage\n} from './interfaces/i-almatar-hotel-auto-cancellation.interface';\nimport {\n IRefundDetailsData as IFlightRefundDetailsData,\n RefundPreferredMethod,\n LoyaltyPaymentType\n} from '../shared/interfaces/i-flight-refund-details';\nimport { IHotelBookingData } from '../../models/booking.types';\nimport { AlmatarHotelAutoCancellationSelectRoomsComponent } from './components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component';\nimport { AlmatarHotelAutoCancellationRefundSummaryComponent } from './components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component';\nimport { AlmatarHotelAutoCancellationRefundMethodComponent } from './components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component';\nimport { ResultOverlayComponent, ResultOverlayData } from './components/result-overlay/result-overlay.component';\nimport { AlmatarHotelAutoCancellationResultOverlayComponent } from './components/almatar-hotel-auto-cancellation-result-overlay/almatar-hotel-auto-cancellation-result-overlay.component';\nimport { HotelManageBookingAsideTabEnum } from '../shared/enums/hotel-manage-booking-aside-tab.enum';\nimport { Store } from '@ngrx/store';\nimport { filter } from 'rxjs/operators';\nimport { getCurrentCurrency } from '../../shared/store/selectors/currency.selectors';\nimport { environments } from '../../shared/environments/environment';\nimport { AlmatarIconModule } from '../../shared/modules/almatar-icon/almatar-icon.module';\nimport { SharedService } from '../../shared/services/shared.service';\nimport { loyaltyPointsMethods } from '../../shared/models';\n\n@Component({\n selector: 'almatar-hotel-auto-cancellation',\n standalone: true,\n imports: [\n CommonModule,\n LoaderModule,\n AsideComponent,\n ManageBookingFailedModalComponent,\n AlmatarHotelAutoCancellationSelectRoomsComponent,\n AlmatarHotelAutoCancellationRefundSummaryComponent,\n AlmatarHotelAutoCancellationRefundMethodComponent,\n AlmatarIconModule,\n ResultOverlayComponent,\n AlmatarHotelAutoCancellationResultOverlayComponent\n ],\n providers: [\n AlmatarHotelAutoCancellationService,\n AlmatarHotelAutoCancellationEndpointsService\n ],\n templateUrl: './almatar-hotel-auto-cancellation.component.html',\n styleUrls: ['./almatar-hotel-auto-cancellation.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AlmatarHotelAutoCancellationComponent\n implements OnInit, OnDestroy\n{\n private readonly hotelManageBookingService = inject(\n HotelManageBookingService\n );\n\n readonly autoCancellationService = inject(\n AlmatarHotelAutoCancellationService\n );\n\n HotelManageBookingService = inject(HotelManageBookingService);\n\n private readonly autoCancellationEndpointsService = inject(\n AlmatarHotelAutoCancellationEndpointsService\n );\n\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly destroyRef = inject(DestroyRef);\n private readonly store = inject(Store);\n private readonly sharedService = inject(SharedService);\n\n readonly selectedHotelBooking = input<IHotelBookingData | null>(null);\n\n readonly closed = output<void>();\n readonly cancellationSuccess = output<IAutoCancellationProcessResponse>();\n readonly nonRefundableSubmitSuccess = output<string>();\n readonly chatWithAgent = output<void>();\n\n readonly showConfirmModal = signal(false);\n readonly showErrorModal = signal(false);\n readonly showAside = signal(true);\n readonly isLoading = signal(false);\n readonly isCancelling = signal(false);\n readonly hotelManageError = signal<string>('');\n readonly isNusk = signal(false);\n readonly showResultOverlay = signal(false);\n readonly resultOverlayData = signal<ResultOverlayData | null>(null);\n readonly showDetailedResultOverlay = signal(false);\n readonly cancellationApiResponse = signal<IAutoCancellationProcessResponse | null>(null);\n readonly rooms = signal<IAlmatarHotelAutoCancellationRoom[]>([]);\n readonly packages = signal<IAlmatarHotelAutoCancellationPackage[]>([]);\n readonly hotelInfo = signal<IAlmatarHotelAutoCancellationHotelInfo | null>(\n null\n );\n\n readonly currentCurrency = signal<any>(null);\n readonly refundDetailsData = signal<IFlightRefundDetailsData | null>(null);\n readonly selectedPackageIds = signal<string[]>([]);\n readonly refundMethod = signal<RefundPreferredMethod>('wallet');\n readonly refundResponseData = signal<any>(null);\n\n readonly stepEnum = AlmatarHotelAutoCancellationStepEnum;\n readonly currentStep = computed(() =>\n this.autoCancellationService.currentStep()\n );\n\n readonly isSingleRoom = computed(() => this.rooms().length === 1);\n readonly isSinglePackage = computed(() => this.packages().length === 1);\n\n // Get supplier from booking or first package\n readonly bookingSuppliers = computed(() => {\n const booking = this.selectedHotelBooking();\n if (!booking) return undefined;\n\n // Try to get supplier from booking level first\n if ((booking as any).supplier) {\n return (booking as any).supplier;\n }\n\n // Otherwise get from first package\n const packages = this.packages();\n return packages.length > 0 ? packages[0].supplier : undefined;\n });\n\n // Computed totals for adults, children, infants from booking packages\n readonly totalAdults = computed(() => {\n const booking = this.selectedHotelBooking();\n if (!booking?.packages) {\n return 0;\n }\n return booking.packages.reduce((total: number, pkg: any) => {\n const rooms = pkg.rooms || [];\n return (\n total +\n rooms.reduce((sum: number, room: any) => sum + (room.adultsNum || 0), 0)\n );\n }, 0);\n });\n\n readonly totalChildren = computed(() => {\n const booking = this.selectedHotelBooking();\n if (!booking?.packages) {\n return 0;\n }\n return booking.packages.reduce((total: number, pkg: any) => {\n const rooms = pkg.rooms || [];\n return (\n total +\n rooms.reduce(\n (sum: number, room: any) => sum + (room.childrenNum || 0),\n 0\n )\n );\n }, 0);\n });\n\n readonly totalInfants = computed(() => {\n const booking = this.selectedHotelBooking();\n if (!booking?.packages) {\n return 0;\n }\n return booking.packages.reduce((total: number, pkg: any) => {\n const rooms = pkg.rooms || [];\n return (\n total +\n rooms.reduce(\n (sum: number, room: any) => sum + (room.infantsNum || 0),\n 0\n )\n );\n }, 0);\n });\n\n readonly asideTitle = computed(() => {\n const step = this.currentStep();\n switch (step) {\n case AlmatarHotelAutoCancellationStepEnum.selectRooms:\n return this.isSinglePackage() ? 'Confirm Cancellation' : 'Select Rooms';\n case AlmatarHotelAutoCancellationStepEnum.refundSummary:\n return 'Cancel Booking Request';\n case AlmatarHotelAutoCancellationStepEnum.refundMethod:\n return 'Select Refund Method';\n default:\n return 'Cancel Booking';\n }\n });\n\n constructor() {\n effect(() => {\n this.HotelManageBookingService.selectedHotelBooking.next(\n this.selectedHotelBooking()\n );\n // console.log('selectedHotelBooking', this.selectedHotelBooking());\n // console.log('refundDetailsData', this.refundDetailsData());\n });\n }\n\n get closeIconName(): string {\n const lang = this.sharedService.getAppLanguage();\n return lang === 'ar' ? 'arrow-left' : 'arrow-right';\n }\n\n ngOnInit(): void {\n this.initializeQueryParams();\n this.loadBookingDataFromPackages();\n this.initCurrency();\n }\n\n private initCurrency(): void {\n this.store\n .select(getCurrentCurrency)\n .pipe(\n filter((currency) => !!currency),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((currency) => {\n this.currentCurrency.set(currency);\n });\n }\n\n ngOnDestroy(): void {\n this.autoCancellationService.reset();\n this.autoCancellationEndpointsService.clearSelectedPackageIds();\n }\n\n private initializeQueryParams(): void {\n this.activatedRoute.queryParams\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((params) => {\n if (params['skipCheck']) {\n this.isNusk.set(true);\n }\n });\n }\n\n private loadBookingDataFromPackages(): void {\n this.isLoading.set(true);\n const booking = this.selectedHotelBooking();\n\n if (booking) {\n this.processBookingData(booking);\n } else {\n this.hotelManageBookingService.selectedHotelBooking\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((serviceBooking) => {\n if (serviceBooking) {\n this.processBookingData(serviceBooking);\n }\n this.isLoading.set(false);\n });\n }\n }\n\n private processBookingData(booking: IHotelBookingData): void {\n const hotelInfoData: IAlmatarHotelAutoCancellationHotelInfo = {\n hotelName: booking.hotelName || '',\n hotelImage: booking.coverImage || '',\n checkIn: booking.dateFrom || booking?.from?._i,\n checkOut: booking.dateTo || booking?.to?._i,\n totalRooms: booking.packages?.length || booking.rooms || 1,\n nights:\n booking.numberOfNights ||\n booking.nightNumber ||\n this.calculateNights(booking.dateFrom, booking.dateTo),\n checkInTime: booking.checkInTime?.split(' ')[0],\n checkOutTime: booking.checkOutTime?.split(' ')[0]\n };\n this.hotelInfo.set(hotelInfoData);\n this.autoCancellationService.setHotelInfo(hotelInfoData);\n\n // Map to both rooms (for backward compatibility) and packages (new structure)\n const mappedRooms = this.mapPackagesToRooms(booking);\n this.rooms.set(mappedRooms);\n\n const mappedPackages = this.mapBookingToPackages(booking);\n this.packages.set(mappedPackages);\n\n this.autoCancellationService.setSelectedRooms(mappedRooms);\n\n this.isLoading.set(false);\n }\n\n private mapPackagesToRooms(\n booking: any\n ): IAlmatarHotelAutoCancellationRoom[] {\n const nights =\n booking.numberOfNights ||\n booking.nightNumber ||\n this.calculateNights(booking.from, booking.to);\n const packages: IBookingPackage[] = booking.packages || [];\n\n return packages.flatMap((pkg: IBookingPackage, pkgIndex: number) => {\n const rooms = pkg.rooms || [];\n return rooms.map((room: any, roomIndex: number) => ({\n packageId: pkg.id || String(pkgIndex + 1),\n roomId: room?.roomId || `${pkg.id}-${roomIndex}`,\n roomName: room?.roomName || `Room ${roomIndex + 1}`,\n roomType: room?.roomType || 'Standard Room',\n mealPlan: room?.roomBasis || '',\n isRefundable: pkg.isRefundable !== false,\n isCancelled: pkg.isCancelled,\n manualRefundRequest: !pkg.isRefundable,\n isSelected: false,\n nights: this.hotelInfo()?.nights || nights,\n roomAmount: 0,\n cancellationFee: 0,\n refundAmount: 0,\n bedType: room?.bedType || '',\n roomView: room?.roomView || '',\n roomBasis: room?.roomBasis || '',\n refundability: pkg.isRefundable,\n refundableUntil: pkg.refundableUntil || '',\n adultsNum: room?.adultsNum || 0,\n childrenNum: room?.childrenNum || 0,\n passengerName: room?.passengers?.name || ''\n }));\n });\n }\n\n private mapBookingToPackages(\n booking: any\n ): IAlmatarHotelAutoCancellationPackage[] {\n const bookingPackages: IBookingPackage[] = booking.packages || [];\n\n return bookingPackages.map((pkg: IBookingPackage, pkgIndex: number) => {\n const rooms = pkg.rooms || [];\n const firstRoom = rooms[0];\n\n return {\n packageId: pkg.id || String(pkgIndex + 1),\n packageName: firstRoom?.roomName || `Package ${pkgIndex + 1}`,\n boardBasis: firstRoom?.roomBasis || '',\n isRefundable: pkg.isRefundable !== false,\n isSelected: false,\n isCancelled: pkg.isCancelled,\n refundability: pkg.isRefundable,\n refundableUntil: pkg.refundableUntil || '',\n rooms: rooms.map((room: any, roomIndex: number) => ({\n roomId: room?.roomId || `${pkg.id}-${roomIndex}`,\n roomName: room?.roomName || `Room ${roomIndex + 1}`,\n roomType: room?.roomType || 'Standard Room',\n bedType: room?.bedType || '',\n roomBasis: room?.roomBasis || ''\n })),\n roomAmount: 0,\n cancellationFee: 0,\n refundAmount: 0,\n manualRefundRequest: !pkg.isRefundable,\n cancelledBefore: false,\n cancellationPolicies: pkg.cancellationPolicies || [],\n CancellationPoliciesRemarks: pkg.cancellationPoliciesRemarks,\n supplier: pkg.supplier\n };\n });\n }\n\n private calculateNights(from: any, to: any): number {\n if (!from || !to) {\n return 1;\n }\n if (from.diff && typeof from.diff === 'function') {\n return to.diff(from, 'days') || 1;\n }\n const fromDate = new Date(from);\n const toDate = new Date(to);\n const diffTime = Math.abs(toDate.getTime() - fromDate.getTime());\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n return diffDays || 1;\n }\n\n onContinueToCancel(\n selectedPackages: IAlmatarHotelAutoCancellationPackage[]\n ): void {\n // Convert packages to rooms format for backward compatibility with the service\n const selectedRooms: IAlmatarHotelAutoCancellationRoom[] =\n selectedPackages.flatMap((pkg) =>\n pkg.rooms.map((room) => ({\n packageId: pkg.packageId,\n roomId: room.roomId,\n roomName: room.roomName,\n roomType: room.roomType,\n mealPlan: room.roomBasis,\n isRefundable: pkg.isRefundable,\n isCancelled: pkg.isCancelled,\n isSelected: pkg.isSelected,\n nights: 0,\n roomAmount: pkg.roomAmount,\n cancellationFee: pkg.cancellationFee,\n refundAmount: pkg.refundAmount,\n bedType: room.bedType,\n roomBasis: room.roomBasis,\n refundability: pkg.refundability,\n refundableUntil: pkg.refundableUntil,\n cancelledBefore: pkg.cancelledBefore,\n manualRefundRequest: pkg.manualRefundRequest\n }))\n );\n\n this.autoCancellationService.setSelectedRooms(selectedRooms);\n this.autoCancellationService.setCurrentStep(\n AlmatarHotelAutoCancellationStepEnum.refundSummary\n );\n }\n\n onKeepRoom(): void {\n this.autoCancellationService.setCurrentStep(\n AlmatarHotelAutoCancellationStepEnum.selectRooms\n );\n }\n\n onSelectRefundOption(data: {\n packageIds: string[];\n payout: any;\n totalRefund: number;\n responseData: any;\n }): void {\n // Check if tenant - redirect to WhatsApp for tenant bookings\n if (environments.isTenant) {\n this.hotelManageBookingService.setActiveAsideTab(\n HotelManageBookingAsideTabEnum.whatsAppAgent\n );\n this.showAside.set(false);\n return;\n }\n\n // console.log('Refund option selected:', data);\n\n this.selectedPackageIds.set(data.packageIds);\n this.refundResponseData.set(data.responseData);\n\n const response = data?.responseData;\n const payout = response?.payout || data.payout;\n const totals = response?.totals;\n\n // const walletRefund = payout?.wallet || payout?.loyaltyToWallet;\n const walletRefund = payout?.wallet;\n\n const cardRefund = payout?.card ?? 0;\n const tabbyRefund = payout?.tabby ?? payout?.tabby ?? 0;\n const tamaraRefund = payout?.tamara ?? payout?.tamara ?? 0;\n\n // Check if full wallet refund is allowed based on payout breakdown\n // Wallet refund is allowed if there's no card/tabby/tamara portion\n const hasNonWalletRefund = tabbyRefund > 0 || tamaraRefund > 0;\n const totalRefundAmount = payout?.current ?? data.totalRefund;\n const isFullWalletAllowed =\n (!hasNonWalletRefund && walletRefund > 0) || cardRefund > 0;\n\n const loyaltyPointsValue =\n payout?.loyaltyToWallet ||\n totals?.wala ||\n totals?.qitaf ||\n totals?.mokafa ||\n totals?.hassad ||\n totals?.ygg;\n\n // Build refund details data for the method selector\n this.refundDetailsData.set({\n totalRefundAmount,\n walletRefundAmount: payout?.wallet,\n totalCardRefundAmount: cardRefund + tabbyRefund + tamaraRefund,\n isFullWalletRefundAllowed: isFullWalletAllowed,\n currency: response?.currency,\n isRefundable: response?.flags?.refundable,\n totalLoyaltyPointsRefundAmount: loyaltyPointsValue,\n // Pass payment method info for proper labeling\n paymentMethodCustomerUsed: this.determinePaymentMethod(totals, payout),\n // Additional fields for proper loyalty program labeling and split refund display\n loyaltyPaymentType: this.determineLoyaltyType(totals, payout),\n totalLoyaltyPoints: loyaltyPointsValue,\n bookingId: this.selectedHotelBooking()?.bookingId\n });\n\n console.log('Refund details data set:', this.refundDetailsData());\n\n // Default to wallet if allowed, otherwise originalPaymentMethod\n if (isFullWalletAllowed && walletRefund > 0) {\n this.refundMethod.set('wallet');\n } else {\n this.refundMethod.set('originalPaymentMethod');\n }\n this.autoCancellationService.setCurrentStep(\n AlmatarHotelAutoCancellationStepEnum.refundMethod\n );\n }\n\n /**\n * Determines the payment method label based on totals/payout breakdown.\n * Returns the appropriate gateway code for proper labeling.\n */\n /**\n * Determines the card/installment payment method for the card row label.\n * Loyalty programs are handled separately by determineLoyaltyType().\n */\n private determinePaymentMethod(totals: any, payout: any): string {\n if ((payout?.tabby ?? totals?.tabby ?? 0) > 0) {\n return 'TB'; // Tabby\n }\n if ((payout?.tamara ?? totals?.tamara ?? 0) > 0) {\n return 'TM'; // Tamara\n }\n if ((payout?.card ?? totals?.card ?? 0) > 0) {\n return 'CH'; // Card\n }\n return '';\n }\n\n /**\n * Determines the loyalty payment type for proper labeling in split refund rows.\n * Returns the loyalty program code (e.g., 'QITAF', 'RAJHI') if applicable.\n */\n private determineLoyaltyType(\n totals: any,\n payout: any\n ): LoyaltyPaymentType | undefined {\n if ((totals?.mokafa ?? 0) > 0) {\n return 'AlRajhiMokafaa';\n }\n if ((totals?.qitaf ?? 0) > 0) {\n return 'Qitaf';\n }\n if ((totals?.wala ?? 0) > 0) {\n return 'Wala';\n }\n if (\n (payout?.loyaltyToWallet ?? 0) > 0 ||\n (payout?.loyaltyPoints ?? 0) > 0\n ) {\n // Check if we have a specific loyalty type from the response\n const loyaltyType = totals?.loyaltyType as LoyaltyPaymentType | undefined;\n if (\n loyaltyType &&\n [\n 'AlRajhiMokafaa',\n 'Qitaf',\n 'Wala',\n 'ALFURSAN',\n 'ALMATAR_POINTS'\n ].includes(loyaltyType)\n ) {\n return loyaltyType;\n }\n }\n return undefined;\n }\n\n onMethodSelected(method: RefundPreferredMethod): void {\n this.refundMethod.set(method);\n }\n\n onBackFromRefundMethod(): void {\n this.autoCancellationService.setCurrentStep(\n AlmatarHotelAutoCancellationStepEnum.refundSummary\n );\n }\n\n onGoBack(): void {\n const step = this.currentStep();\n switch (step) {\n case AlmatarHotelAutoCancellationStepEnum.refundSummary:\n this.autoCancellationService.setCurrentStep(\n AlmatarHotelAutoCancellationStepEnum.selectRooms\n );\n break;\n case AlmatarHotelAutoCancellationStepEnum.refundMethod:\n this.autoCancellationService.setCurrentStep(\n AlmatarHotelAutoCancellationStepEnum.refundSummary\n );\n break;\n default:\n // For selectRooms or other steps, do nothing (close modal)\n break;\n }\n }\n\n canGoBack(): boolean {\n const step = this.currentStep();\n return (\n step === AlmatarHotelAutoCancellationStepEnum.refundSummary ||\n step === AlmatarHotelAutoCancellationStepEnum.refundMethod\n );\n }\n\n confirmCancellation(): void {\n this.isCancelling.set(true);\n\n this.autoCancellationEndpointsService\n .processAutoCancellation(this.selectedPackageIds(), this.refundMethod())\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n this.isCancelling.set(false);\n this.showAside.set(false);\n\n // Check if tenant - redirect to WhatsApp\n if (environments.isTenant || response?.data?.isWhatsApp) {\n this.hotelManageBookingService.setActiveAsideTab(\n HotelManageBookingAsideTabEnum.whatsAppAgent\n );\n return;\n }\n\n // Store API response and show detailed result overlay\n this.cancellationApiResponse.set(response);\n this.showDetailedResultOverlay.set(true);\n\n // Also emit for parent component if needed\n this.cancellationSuccess.emit(response);\n },\n error: (error) => {\n this.isCancelling.set(false);\n this.showAside.set(false);\n\n // Extract error message from various possible structures\n let errorMessage = 'We encountered an issue processing your cancellation. Please try again or contact support.';\n\n console.error('Cancellation error:', error);\n\n if (error?.error?.message) {\n errorMessage = error.error.message;\n } else if (error?.error?.errors && Array.isArray(error.error.errors) && error.error.errors.length > 0) {\n errorMessage = error.error.errors[0];\n } else if (error?.message) {\n errorMessage = error.message;\n } else if (typeof error === 'string') {\n errorMessage = error;\n }\n\n // Show error overlay\n this.resultOverlayData.set({\n type: 'error',\n title: 'Cancellation Failed',\n message: errorMessage,\n confirmText: 'Close'\n });\n this.showResultOverlay.set(true);\n }\n });\n }\n\n onCloseModal(): void {\n this.closed.emit();\n }\n\n onNonRefundableSubmitSuccess(packageName: string): void {\n this.showAside.set(false);\n\n // Show success overlay for non-refundable request\n this.resultOverlayData.set({\n type: 'success',\n title: 'Request Submitted!',\n message: `Your cancellation request for ${packageName} has been submitted successfully. Our team will review your request and contact you shortly.`,\n confirmText: 'Done'\n });\n this.showResultOverlay.set(true);\n\n // Also emit for parent component if needed\n this.nonRefundableSubmitSuccess.emit(packageName);\n }\n\n onChatWithAgent(): void {\n this.showAside.set(false);\n this.chatWithAgent.emit();\n }\n\n closeAllModals(): void {\n this.showConfirmModal.set(false);\n this.showErrorModal.set(false);\n this.showAside.set(false);\n this.closed.emit();\n }\n\n onResultOverlayConfirm(): void {\n this.showResultOverlay.set(false);\n this.resultOverlayData.set(null);\n this.closed.emit();\n }\n\n onResultOverlayCancel(): void {\n this.showResultOverlay.set(false);\n this.resultOverlayData.set(null);\n }\n\n onDetailedResultOverlayDone(): void {\n this.showDetailedResultOverlay.set(false);\n this.cancellationApiResponse.set(null);\n this.closed.emit();\n }\n}\n","@if (showAside()) {\n <almatar-aside\n\n class=\"auto_cancellation_wrapper\"\n [asideTitle]=\"asideTitle()\"\n [showAside]=\"showAside()\"\n [whiteHeader]=\"true\"\n [showHeader]=\"false\"\n (onClose)=\"onCloseModal()\"\n >\n <!-- Custom Header with 60px height -->\n <div class=\"auto_cancellation__header\">\n @if (canGoBack()) {\n <button class=\"auto_cancellation__header-back\" (click)=\"onGoBack()\" type=\"button\">\n <i class=\"pi pi-arrow-left\"></i>\n </button>\n }\n <div class=\"auto_cancellation__header-content\">\n @if (currentStep() === stepEnum.selectRooms) {\n <h2 class=\"auto_cancellation__header-title\">\n @if (isSinglePackage()) {\n Cancel Rooms\n } @else {\n Select Rooms\n }\n </h2>\n <p class=\"auto_cancellation__header-subtitle\">\n @if (isSinglePackage()) {\n Review and confirm your cancellation\n } @else {\n Choose which room(s) you'd like to cancel\n }\n </p>\n } @else if (currentStep() === stepEnum.refundSummary) {\n <h2 class=\"auto_cancellation__header-title\">Cancel Booking Request</h2>\n <p class=\"auto_cancellation__header-subtitle\">Review your refund summary and proceed</p>\n } @else if (currentStep() === stepEnum.refundMethod) {\n <h2 class=\"auto_cancellation__header-title\">Select Refund Method</h2>\n <p class=\"auto_cancellation__header-subtitle\">Choose how you'd like to receive your refund</p>\n } @else {\n <h2 class=\"auto_cancellation__header-title\">{{ asideTitle() }}</h2>\n <p class=\"auto_cancellation__header-subtitle\">Complete your booking cancellation</p>\n }\n </div>\n <button class=\"auto_cancellation__header-close\" (click)=\"onCloseModal()\" type=\"button\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"auto_cancellation__component\" [class.isNusk]=\"isNusk()\">\n @if (isLoading()) {\n <div class=\"auto_cancellation__loading\">\n <app-loader></app-loader>\n </div>\n }\n\n @if (currentStep() === stepEnum.selectRooms && !isLoading()) {\n <almatar-hotel-auto-cancellation-select-rooms\n [packages]=\"packages()\"\n [hotelInfo]=\"hotelInfo()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.hotelId\"\n [currencyCode]=\"selectedHotelBooking()?.currencyCode || 'SAR'\"\n (continueToCancel)=\"onContinueToCancel($event)\"\n (closeModal)=\"onCloseModal()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n (chatWithAgent)=\"onChatWithAgent()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundSummary && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary\n [selectedRooms]=\"autoCancellationService.selectedRooms()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.id || selectedHotelBooking()?.hpk\"\n [hotelInfo]=\"hotelInfo()\"\n [selectionSkipped]=\"packages().length <= 1\"\n (keepRoom)=\"onKeepRoom()\"\n (selectRefundOption)=\"onSelectRefundOption($event)\"\n (closeModal)=\"onCloseModal()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundMethod && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-method\n [refundDetailsData]=\"refundDetailsData()\"\n [currencyObj]=\"currentCurrency()\"\n [refundMethod]=\"refundMethod()\"\n [isCancelling]=\"isCancelling()\"\n (methodSelected)=\"onMethodSelected($event)\"\n (backRequested)=\"onBackFromRefundMethod()\"\n (confirmRequested)=\"confirmCancellation()\"\n (closeModal)=\"onCloseModal()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n />\n }\n </div>\n </almatar-aside>\n}\n\n@if (showErrorModal()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n@if (showResultOverlay() && resultOverlayData()) {\n <app-result-overlay\n [data]=\"resultOverlayData()!\"\n [show]=\"showResultOverlay()\"\n (confirm)=\"onResultOverlayConfirm()\"\n (cancel)=\"onResultOverlayCancel()\"\n />\n}\n\n@if (showDetailedResultOverlay() && cancellationApiResponse()) {\n <almatar-hotel-auto-cancellation-result-overlay\n [visible]=\"showDetailedResultOverlay()\"\n [currencyObj]=\"currentCurrency()\"\n [refundMethod]=\"refundMethod()\"\n [apiResponse]=\"cancellationApiResponse()\"\n (done)=\"onDetailedResultOverlayDone()\"\n />\n}\n","import { Component, computed, input } from '@angular/core';\nimport { UpperCasePipe, LowerCasePipe } from '@angular/common';\nimport { TagModule } from 'primeng/tag';\nimport { ProductType } from '../../models/booking.types';\n\n@Component({\n selector: 'app-sbd-flight-itinerary-card',\n standalone: true,\n imports: [TagModule, UpperCasePipe, LowerCasePipe],\n templateUrl: './flight-itinerary-card.component.html',\n styleUrl: './flight-itinerary-card.component.scss',\n})\nexport class SbdFlightItineraryCardComponent {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = input<any>(null);\n product = input.required<ProductType>();\n verified = input(false);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private bi = computed(() => this.data()?.data?.booking_info);\n\n legs = computed(() => {\n const d = this.bi();\n if (!d) return [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (d.leg_info ?? []).map((leg: any, i: number) => ({\n direction: leg.LegDirectionality as string,\n airlineName: (leg.LegAirlinesNames ?? []).join(', '),\n cabin: leg.LegCabins?.[0]?.Name ?? '',\n fareBrand: leg.fareBrand?.name ?? '',\n from: leg.LegDepartureAirportCode as string,\n to: leg.LegArrivalAirportCode as string,\n depTime: leg.LegDepartureDateTime as string,\n arrTime: leg.LegArrivalDateTime as string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stops: (leg.Stops ?? []) as any[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n segments: (d.airline_info?.[i]?.Segments ?? []) as any[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n durationSegments: (d.duration?.legs?.[i]?.Segments ?? []) as any[],\n }));\n });\n\n passengers = computed(() =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.bi()?.passenger_info?.passengers ?? []) as any[]\n );\n\n payment = computed(() => this.bi()?.payment_status);\n\n readonly typeLabel: Record<string, string> = { ADT: 'Adult', CNN: 'Child', INF: 'Infant' };\n\n fmtTime(dt: string): string {\n if (!dt) return '—';\n try { return new Date(dt).toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' }); }\n catch { return dt; }\n }\n\n fmtShortDate(dt: string): string {\n if (!dt) return '—';\n try { return new Date(dt).toLocaleDateString('en-GB', { day: '2-digit', month: 'short' }); }\n catch { return dt; }\n }\n\n fmtMins(mins: number): string {\n if (mins == null) return '—';\n return `${Math.floor(mins / 60)}h ${mins % 60}m`;\n }\n}\n","<div class=\"fic\">\n @if (product() === 'flight') {\n\n <!-- ── Verified pill ──────────────────────────── -->\n @if (verified()) {\n <div class=\"fic__verified-bar\">\n <span class=\"fic__verified-pill\">\n <i class=\"pi pi-verified\"></i> Verified with Airlines\n </span>\n </div>\n }\n\n <!-- ── Legs ─────────────────────────────────── -->\n @for (leg of legs(); track leg.direction + $index; let li = $index) {\n <div class=\"fic__leg\" [class.fic__leg--return]=\"leg.direction === 'Return'\">\n\n <!-- Leg header -->\n <div class=\"fic__leg-header\">\n <div class=\"fic__leg-direction\">\n <i class=\"pi\" [class.pi-arrow-right]=\"leg.direction !== 'Return'\" [class.pi-arrow-left]=\"leg.direction === 'Return'\"></i>\n <span>{{ leg.direction }}</span>\n </div>\n <div class=\"fic__leg-chips\">\n @if (leg.cabin) {\n <span class=\"fic__chip fic__chip--cabin\">{{ leg.cabin }}</span>\n }\n @if (leg.fareBrand) {\n <span class=\"fic__chip fic__chip--fare\">{{ leg.fareBrand }}</span>\n }\n </div>\n </div>\n\n <!-- Airline row -->\n @if (leg.airlineName) {\n <div class=\"fic__airline\">\n <i class=\"pi pi-send\"></i>\n <span>{{ leg.airlineName }}</span>\n </div>\n }\n\n <!-- Route timeline -->\n <div class=\"fic__route\">\n\n <!-- Origin -->\n <div class=\"fic__airport\">\n <div class=\"fic__airport-code\">{{ leg.from }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.depTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n\n <!-- Segments + stops -->\n <div class=\"fic__timeline\">\n\n <!-- Top row: all labels -->\n <div class=\"fic__tl-top\">\n @for (seg of leg.durationSegments; track seg.DepartureAirportCode; let si = $index) {\n <div class=\"fic__tl-seg\">\n <span class=\"fic__tl-flt\">{{ leg.segments[si]?.AirlineCode }}{{ leg.segments[si]?.FlightNumber }}</span>\n <span class=\"fic__tl-dur\">{{ fmtMins(seg.SegmentElapsedTimeMinutes) }}</span>\n </div>\n @if (si < leg.stops.length) {\n <div class=\"fic__tl-stop\">\n <span class=\"fic__stop-dot\"></span>\n <span class=\"fic__stop-code\">{{ leg.stops[si].StopAirport }}</span>\n <span class=\"fic__stop-sep\">·</span>\n <span class=\"fic__stop-dur\">{{ fmtMins(leg.stops[si].LayoverDuration) }}</span>\n </div>\n }\n }\n </div>\n\n <!-- Bottom row: single continuous line + one arrow -->\n <div class=\"fic__tl-track\">\n <div class=\"fic__tl-line\"></div>\n <i class=\"pi pi-send fic__tl-plane\"></i>\n </div>\n\n </div>\n\n <!-- Destination -->\n <div class=\"fic__airport fic__airport--right\">\n <div class=\"fic__airport-code\">{{ leg.to }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.arrTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.arrTime) }}</div>\n </div>\n\n </div>\n </div>\n }\n\n <!-- ── Passengers ─────────────────────────── -->\n @if (passengers().length > 0) {\n <div class=\"fic__section\">\n <div class=\"fic__section-label\">\n <i class=\"pi pi-users\"></i> Passengers\n <span class=\"fic__section-count\">{{ passengers().length }}</span>\n </div>\n <div class=\"fic__pax-list\">\n @for (p of passengers(); track p.passengerId) {\n <div class=\"fic__pax\">\n <div class=\"fic__pax-top\">\n <span class=\"fic__pax-badge fic__pax-badge--{{ p.type | lowercase }}\">{{ typeLabel[p.type] ?? p.type }}</span>\n <span class=\"fic__pax-name\">{{ p.name?.prefix }} {{ p.name?.givenName }} {{ p.name?.surName }}</span>\n </div>\n <div class=\"fic__pax-bottom\">\n @if (p.identity?.number) {\n <span class=\"fic__pax-doc\"><i class=\"pi pi-id-card\"></i> {{ p.identity?.number }}</span>\n }\n @if (p.email) {\n <span class=\"fic__pax-email\">{{ p.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ── Payment ────────────────────────────── -->\n @if (payment()) {\n <div class=\"fic__payment\">\n <div class=\"fic__payment-main\">\n <i class=\"pi pi-credit-card fic__payment-icon\"></i>\n <span class=\"fic__payment-amount\">{{ payment()?.amount }} {{ payment()?.currency }}</span>\n <span class=\"fic__payment-status\" [class.fic__payment-status--ok]=\"payment()?.status?.key === 'SUCCESS'\">\n <i class=\"pi\" [class.pi-check-circle]=\"payment()?.status?.key === 'SUCCESS'\" [class.pi-clock]=\"payment()?.status?.key !== 'SUCCESS'\"></i>\n {{ payment()?.status?.name }}\n </span>\n </div>\n @if (payment()?.method || payment()?.date) {\n <div class=\"fic__payment-sub\">\n @if (payment()?.method) { <span>{{ payment()?.method }}</span> }\n @if (payment()?.method && payment()?.date) { <span class=\"fic__dot\">·</span> }\n @if (payment()?.date) { <span>{{ payment()?.date }}</span> }\n </div>\n }\n </div>\n }\n\n\n }\n</div>\n","import { Component, computed, input } from '@angular/core';\nimport { UpperCasePipe, LowerCasePipe } from '@angular/common';\nimport { TagModule } from 'primeng/tag';\n\n@Component({\n selector: 'app-sbd-hotel-itinerary-card',\n standalone: true,\n imports: [TagModule, UpperCasePipe, LowerCasePipe],\n templateUrl: './hotel-itinerary-card.component.html',\n styleUrl: './hotel-itinerary-card.component.scss',\n})\nexport class SbdHotelItineraryCardComponent {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = input<any>(null);\n verified = input(false);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private bi = computed(() => this.data()?.data?.booking_info);\n\n hotelInfo = computed(() => this.data()?.data?.hotel_information);\n checkinCheckout = computed(() => this.data()?.data?.checkin_checkout);\n roomInfo = computed(() => this.data()?.data?.room_information);\n\n passengers = computed(() =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.bi()?.passenger_info?.passengers ?? []) as any[]\n );\n\n payment = computed(() => this.bi()?.payment_status);\n\n readonly typeLabel: Record<string, string> = { ADT: 'Adult', CNN: 'Child', INF: 'Infant' };\n\n fmtTime(dt: string): string {\n if (!dt) return '—';\n try { return new Date(dt).toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' }); }\n catch { return dt; }\n }\n\n fmtShortDate(dt: string): string {\n if (!dt) return '—';\n try { return new Date(dt).toLocaleDateString('en-GB', { day: '2-digit', month: 'short' }); }\n catch { return dt; }\n }\n}\n","<div class=\"hic\">\n\n <!-- ── Hotel Information ─────────────────────── -->\n @if (hotelInfo()) {\n <div class=\"hic__hotel-header\">\n <div class=\"hic__hotel-name\">{{ hotelInfo()?.hotel_name }}</div>\n @if (hotelInfo()?.star_rating) {\n <div class=\"hic__hotel-rating\">\n @for (star of [].constructor(hotelInfo()?.star_rating); track $index) {\n <i class=\"pi pi-star-fill\"></i>\n }\n </div>\n }\n @if (hotelInfo()?.address) {\n <div class=\"hic__hotel-address\">\n <i class=\"pi pi-map-marker\"></i>\n {{ hotelInfo()?.address }}\n </div>\n }\n </div>\n }\n\n <!-- ── Check-in / Check-out ─────────────────── -->\n @if (checkinCheckout()) {\n <div class=\"hic__hotel-dates\">\n <div class=\"hic__hotel-date\">\n <div class=\"hic__hotel-date-label\">\n <i class=\"pi pi-sign-in\"></i> Check-in\n </div>\n <div class=\"hic__hotel-date-value\">{{ fmtShortDate(checkinCheckout()?.check_in) }}</div>\n <div class=\"hic__hotel-date-time\">{{ fmtTime(checkinCheckout()?.check_in) }}</div>\n </div>\n <div class=\"hic__hotel-date-separator\">\n <i class=\"pi pi-arrow-right\"></i>\n @if (checkinCheckout()?.nights) {\n <span class=\"hic__hotel-nights\">{{ checkinCheckout()?.nights }} night{{ checkinCheckout()?.nights > 1 ? 's' : '' }}</span>\n }\n </div>\n <div class=\"hic__hotel-date\">\n <div class=\"hic__hotel-date-label\">\n <i class=\"pi pi-sign-out\"></i> Check-out\n </div>\n <div class=\"hic__hotel-date-value\">{{ fmtShortDate(checkinCheckout()?.check_out) }}</div>\n <div class=\"hic__hotel-date-time\">{{ fmtTime(checkinCheckout()?.check_out) }}</div>\n </div>\n </div>\n }\n\n <!-- ── Room Information ─────────────────────── -->\n @if (roomInfo()) {\n <div class=\"hic__section\">\n <div class=\"hic__section-label\">\n <i class=\"pi pi-building\"></i> Room Details\n </div>\n <div class=\"hic__hotel-room\">\n @if (roomInfo()?.room_type) {\n <div class=\"hic__hotel-room-type\">{{ roomInfo()?.room_type }}</div>\n }\n @if (roomInfo()?.board_type) {\n <div class=\"hic__hotel-room-board\">\n <i class=\"pi pi-shopping-bag\"></i> {{ roomInfo()?.board_type }}\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ── Guests ─────────────────────────── -->\n @if (passengers().length > 0) {\n <div class=\"hic__section\">\n <div class=\"hic__section-label\">\n <i class=\"pi pi-users\"></i> Guests\n <span class=\"hic__section-count\">{{ passengers().length }}</span>\n </div>\n <div class=\"hic__pax-list\">\n @for (p of passengers(); track p.passengerId) {\n <div class=\"hic__pax\">\n <div class=\"hic__pax-top\">\n <span class=\"hic__pax-badge hic__pax-badge--{{ p.type | lowercase }}\">{{ typeLabel[p.type] ?? p.type }}</span>\n <span class=\"hic__pax-name\">{{ p.name?.prefix }} {{ p.name?.givenName }} {{ p.name?.surName }}</span>\n </div>\n <div class=\"hic__pax-bottom\">\n @if (p.identity?.number) {\n <span class=\"hic__pax-doc\"><i class=\"pi pi-id-card\"></i> {{ p.identity?.number }}</span>\n }\n @if (p.email) {\n <span class=\"hic__pax-email\">{{ p.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ── Payment ────────────────────────────── -->\n @if (payment()) {\n <div class=\"hic__payment\">\n <div class=\"hic__payment-main\">\n <i class=\"pi pi-credit-card hic__payment-icon\"></i>\n <span class=\"hic__payment-amount\">{{ payment()?.amount }} {{ payment()?.currency }}</span>\n <span class=\"hic__payment-status\" [class.hic__payment-status--ok]=\"payment()?.status?.key === 'SUCCESS'\">\n <i class=\"pi\" [class.pi-check-circle]=\"payment()?.status?.key === 'SUCCESS'\" [class.pi-clock]=\"payment()?.status?.key !== 'SUCCESS'\"></i>\n {{ payment()?.status?.name }}\n </span>\n </div>\n @if (payment()?.method || payment()?.date) {\n <div class=\"hic__payment-sub\">\n @if (payment()?.method) { <span>{{ payment()?.method }}</span> }\n @if (payment()?.method && payment()?.date) { <span class=\"hic__dot\">·</span> }\n @if (payment()?.date) { <span>{{ payment()?.date }}</span> }\n </div>\n }\n </div>\n }\n\n</div>\n","import { Component, computed, input, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { InputTextModule } from 'primeng/inputtext';\n\ntype EntryType = 'date' | 'duration' | 'bool' | 'number' | 'text';\n\ninterface FlatEntry {\n path: string;\n key: string;\n rawValue: string;\n displayValue: string;\n type: EntryType;\n}\n\n@Component({\n selector: 'app-sbd-data-search',\n standalone: true,\n imports: [FormsModule, InputTextModule],\n templateUrl: './data-search.component.html',\n styleUrl: './data-search.component.scss',\n})\nexport class SbdDataSearchComponent {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = input<any>(null);\n query = signal('');\n\n private allEntries = computed((): FlatEntry[] => {\n const d = this.data()?.data?.booking_info;\n if (!d) return [];\n return this.flatten(d);\n });\n\n results = computed((): FlatEntry[] => {\n const q = this.query().trim().toLowerCase();\n if (q.length < 2) return [];\n return this.allEntries()\n .filter(e =>\n e.key.toLowerCase().includes(q) ||\n e.rawValue.toLowerCase().includes(q) ||\n e.displayValue.toLowerCase().includes(q)\n )\n .slice(0, 50);\n });\n\n totalCount = computed((): number => {\n const q = this.query().trim().toLowerCase();\n if (q.length < 2) return 0;\n return this.allEntries().filter(e =>\n e.key.toLowerCase().includes(q) ||\n e.rawValue.toLowerCase().includes(q) ||\n e.displayValue.toLowerCase().includes(q)\n ).length;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private flatten(obj: any, pathParts: string[] = []): FlatEntry[] {\n if (obj === null || obj === undefined) return [];\n if (typeof obj !== 'object') {\n const raw = String(obj);\n const key = pathParts[pathParts.length - 1] ?? '';\n const { display, type } = this.formatEntry(key, raw);\n return [{ path: pathParts.slice(0, -1).join(' › '), key, rawValue: raw, displayValue: display, type }];\n }\n if (Array.isArray(obj)) {\n return obj.flatMap((item, i) => this.flatten(item, [...pathParts, `[${i}]`]));\n }\n return Object.entries(obj).flatMap(([k, v]) => this.flatten(v, [...pathParts, k]));\n }\n\n private formatEntry(key: string, raw: string): { display: string; type: EntryType } {\n if (/minutes|duration/i.test(key)) {\n const n = Number(raw);\n if (!isNaN(n) && raw !== '') {\n return { display: `${Math.floor(n / 60)}h ${n % 60}m`, type: 'duration' };\n }\n }\n if (/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/.test(raw)) {\n try {\n return { display: new Date(raw).toLocaleString('en-GB', { day: '2-digit', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit' }), type: 'date' };\n } catch { /* fall through */ }\n }\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(raw)) {\n try {\n return { display: new Date(raw + 'T00:00:00').toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' }), type: 'date' };\n } catch { /* fall through */ }\n }\n if (raw === 'true' || raw === 'false') return { display: raw, type: 'bool' };\n if (raw !== '' && !isNaN(Number(raw))) return { display: raw, type: 'number' };\n return { display: raw, type: 'text' };\n }\n}\n","<div class=\"sbd-data-search\">\n <div class=\"sbd-data-search__input-wrap\">\n <i class=\"pi pi-search sbd-data-search__icon\"></i>\n <input pInputText class=\"sbd-data-search__input\"\n placeholder=\"Search any field or value from this booking…\"\n [ngModel]=\"query()\" (ngModelChange)=\"query.set($event)\" />\n @if (query().length >= 2) {\n <span class=\"sbd-data-search__count\">{{ totalCount() }} match{{ totalCount() !== 1 ? 'es' : '' }}</span>\n }\n </div>\n\n @if (query().length >= 2 && results().length > 0) {\n <div class=\"sbd-data-search__results\">\n @for (entry of results(); track entry.path + entry.key) {\n <div class=\"sbd-data-search__result\">\n <div class=\"sbd-data-search__result-left\">\n <div class=\"sbd-data-search__result-path\">\n @if (entry.path) { <span class=\"sbd-data-search__result-pathtext\">{{ entry.path }} ›</span> }\n <span class=\"sbd-data-search__result-key\">{{ entry.key }}</span>\n </div>\n </div>\n <div class=\"sbd-data-search__result-right\">\n <span class=\"sbd-data-search__type-badge sbd-data-search__type-badge--{{ entry.type }}\">{{ entry.type }}</span>\n <span class=\"sbd-data-search__result-value\">{{ entry.displayValue }}</span>\n </div>\n </div>\n }\n @if (totalCount() > 50) {\n <div class=\"sbd-data-search__more\">+{{ totalCount() - 50 }} more — refine your search</div>\n }\n </div>\n }\n\n @if (query().length >= 2 && results().length === 0) {\n <div class=\"sbd-data-search__empty\">\n <i class=\"pi pi-inbox\"></i> No fields or values match \"{{ query() }}\"\n </div>\n }\n</div>\n","export const AR_LABELS: Record<string, string> = {\n 'PNR': 'رقم الحجز',\n 'Booking ID': 'معرف الحجز',\n 'Supplier ref': 'مرجع المورد',\n 'Supplier': 'المورد',\n 'Cross-seller': 'حجز متقاطع',\n 'Departure': 'المغادرة',\n 'Arrival': 'الوصول',\n 'Duration': 'المدة',\n 'Direction': 'الاتجاه',\n 'Departure time': 'وقت المغادرة',\n 'Arrival time': 'وقت الوصول',\n 'Stops': 'التوقفات',\n 'Journey duration': 'مدة الرحلة',\n 'Airline(s)': 'شركة الطيران',\n 'Flight no.': 'رقم الرحلة',\n 'Flight': 'الرحلة',\n 'IATA code': 'رمز IATA',\n 'Aircraft': 'نوع الطائرة',\n 'Operating code': 'رمز التشغيل',\n 'Route': 'المسار',\n 'Cabin': 'درجة المقصورة',\n 'Fare brand': 'نوع التعرفة',\n 'Fare desc.': 'وصف التعرفة',\n 'Departure airport': 'مطار المغادرة',\n 'Dep. terminal': 'صالة المغادرة',\n 'Arrival airport': 'مطار الوصول',\n 'Arr. terminal': 'صالة الوصول',\n 'Type': 'النوع',\n 'Gender': 'الجنس',\n 'Date of birth': 'تاريخ الميلاد',\n 'Passport': 'جواز السفر',\n 'Nationality': 'الجنسية',\n 'Passport exp.': 'انتهاء الجواز',\n 'Issue country': 'بلد الإصدار',\n 'Doc type': 'نوع الوثيقة',\n 'Email': 'البريد الإلكتروني',\n 'Phone': 'الهاتف',\n 'Total': 'الإجمالي',\n 'Adults (ADT)': 'بالغون',\n 'Children (CNN)': 'أطفال',\n 'Infants (INF)': 'رضع',\n 'Status': 'الحالة',\n 'Amount': 'المبلغ',\n 'Paid amount': 'المبلغ المدفوع',\n 'Payment method': 'طريقة الدفع',\n 'Date': 'التاريخ',\n 'Currency': 'العملة',\n 'Transaction ref': 'مرجع المعاملة',\n 'Amount paid': 'المبلغ المدفوع',\n 'Source': 'المصدر',\n 'Total paid': 'إجمالي المدفوع',\n 'Adult · Cabin': 'بالغ · حقيبة مقصورة',\n 'Adult · Checked': 'بالغ · حقيبة مسجلة',\n 'Child · Cabin': 'طفل · حقيبة مقصورة',\n 'Child · Checked': 'طفل · حقيبة مسجلة',\n 'Infant · Cabin': 'رضيع · حقيبة مقصورة',\n 'Infant · Checked': 'رضيع · حقيبة مسجلة',\n 'Checked': 'حقيبة مسجلة',\n 'Original amount': 'المبلغ الأصلي',\n 'Cancellation fee': 'رسوم الإلغاء',\n 'Total refund': 'إجمالي الاسترداد',\n 'Refundable': 'قابل للاسترداد',\n 'Cancel fee': 'رسوم الإلغاء',\n 'Deadline': 'الموعد النهائي',\n 'Policy': 'السياسة',\n 'Penalty': 'الغرامة',\n 'Non-refundable charge': 'رسوم غير قابلة للاسترداد',\n 'Non-refundable ancillary': 'خدمات إضافية غير قابلة للاسترداد',\n 'Gift deduction': 'خصم الهدية',\n 'Coupon deduction': 'خصم القسيمة',\n 'Loyalty deduction': 'خصم نقاط الولاء',\n 'Card refund': 'استرداد البطاقة',\n 'Credit refund': 'استرداد الرصيد',\n 'Wallet refund': 'استرداد المحفظة',\n 'Loyalty points refund': 'استرداد نقاط الولاء',\n 'Leg total refund': 'إجمالي استرداد هذا الاتجاه',\n 'Room type': 'نوع الغرفة',\n 'Beds': 'الأسرّة',\n 'View': 'الإطلالة',\n 'Floor': 'الطابق',\n 'Size': 'المساحة',\n 'Check-in date': 'تاريخ الوصول',\n 'Check-in time': 'وقت الوصول',\n 'Check-out date': 'تاريخ المغادرة',\n 'Check-out time': 'وقت المغادرة',\n 'Nights': 'عدد الليالي',\n 'Hotel': 'الفندق',\n 'Stars': 'النجوم',\n 'Address': 'العنوان',\n 'City': 'المدينة',\n 'Country': 'الدولة',\n 'Zip code': 'الرمز البريدي',\n 'Landmark': 'معلم قريب',\n 'Balance': 'الرصيد',\n 'Cashback': 'كاش باك',\n 'Promo credit': 'رصيد ترويجي',\n 'Last updated': 'آخر تحديث',\n 'Board basis': 'أساس الإقامة',\n 'Breakfast': 'الإفطار',\n 'Lunch': 'الغداء',\n 'Dinner': 'العشاء',\n};\n\nexport const AR_SECTION_TITLES: Record<string, string> = {\n 'Booking Reference': 'مرجع الحجز',\n 'Payment': 'الدفع',\n 'Summary': 'ملخص',\n 'Transaction': 'المعاملة',\n 'References': 'المراجع',\n 'Total': 'الإجمالي',\n 'Info': 'معلومات',\n 'Status': 'الحالة',\n 'Add-on Baggage': 'أمتعة إضافية',\n 'Change History': 'سجل التغييرات',\n};\n","import { Component, input, output, inject } from '@angular/core';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { ButtonModule } from 'primeng/button';\nimport { ResultContent } from '../../models/action.types';\nimport { SbdToastService } from '../../services/toast.service';\n\n@Component({\n selector: 'app-sbd-result-panel',\n standalone: true,\n imports: [SkeletonModule, ButtonModule],\n templateUrl: './result-panel.component.html',\n styleUrl: './result-panel.component.scss',\n animations: [\n trigger('fadeInUp', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(8px)' }),\n animate('200ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n ]),\n ],\n})\nexport class SbdResultPanelComponent {\n private toast = inject(SbdToastService);\n\n actionLabel = input('');\n elapsedMs = input(0);\n status = input<'idle' | 'loading' | 'success' | 'error'>('idle');\n result = input<ResultContent | null>(null);\n\n feedbackGiven = output<'up' | 'down'>();\n\n get elapsedSeconds(): string { return (this.elapsedMs() / 1000).toFixed(2); }\n\n copy(): void {\n const r = this.result();\n if (!r) return;\n const lines = [r.title, r.subtitle ?? '', '', ...r.points.map(p => `${p.label}: ${p.value}`), r.callout ? `\\nNote: ${r.callout.message}` : ''].filter(Boolean);\n navigator.clipboard.writeText(lines.join('\\n')).then(() => this.toast.success('Copied to clipboard'));\n }\n}\n","<div class=\"sbd-result-panel\">\n @if (status() === 'loading') {\n <div class=\"sbd-result-panel__loading\">\n <div class=\"sbd-result-panel__loading-header\">\n <p-skeleton width=\"200px\" height=\"18px\" /><p-skeleton width=\"80px\" height=\"18px\" />\n </div>\n <p-skeleton width=\"60%\" height=\"28px\" styleClass=\"mt-3 mb-2\" />\n <p-skeleton width=\"40%\" height=\"16px\" styleClass=\"mb-4\" />\n <div class=\"sbd-result-panel__loading-points\">\n @for (i of [1,2,3,4]; track i) {\n <div class=\"sbd-result-panel__loading-row\">\n <p-skeleton width=\"100px\" height=\"13px\" /><p-skeleton width=\"160px\" height=\"13px\" />\n </div>\n }\n </div>\n </div>\n }\n @if (status() === 'success' && result()) {\n <div @fadeInUp>\n <div class=\"sbd-result-panel__header\">\n <div class=\"sbd-result-panel__header-left\">\n <i class=\"pi pi-check-circle sbd-result-panel__check-icon\"></i>\n <span class=\"sbd-result-panel__header-label\">Result · {{ actionLabel() }}</span>\n </div>\n <span class=\"sbd-result-panel__elapsed\">Found in {{ elapsedSeconds }}s</span>\n </div>\n <div class=\"sbd-result-panel__body\">\n <h2 class=\"sbd-result-panel__title\">{{ result()!.title }}</h2>\n @if (result()!.subtitle) { <p class=\"sbd-result-panel__subtitle\">{{ result()!.subtitle }}</p> }\n\n <!-- Sectioned layout (refund breakdown etc.) -->\n @if (result()!.sections?.length) {\n <div class=\"sbd-result-panel__sections\">\n @for (section of result()!.sections!; track section.title) {\n <div class=\"sbd-result-panel__section\">\n <div class=\"sbd-result-panel__section-title\">{{ section.title }}</div>\n @for (row of section.rows; track row.label) {\n @if (row.value) {\n <div class=\"sbd-result-panel__section-row\">\n <span class=\"sbd-result-panel__section-row-label\">{{ row.label }}</span>\n <span class=\"sbd-result-panel__section-row-value sbd-result-panel__section-row-value--{{ row.valueClass ?? 'neutral' }}\">{{ row.value }}</span>\n </div>\n } @else {\n <div class=\"sbd-result-panel__section-divider\">{{ row.label }}</div>\n }\n }\n </div>\n }\n </div>\n }\n\n <!-- Flat points layout (all other actions) -->\n @else if (result()!.points?.length) {\n <ul class=\"sbd-result-panel__points\">\n @for (point of result()!.points!; track point.label) {\n <li class=\"sbd-result-panel__point\">\n <span class=\"sbd-result-panel__point-label\">{{ point.label }}</span>\n <span class=\"sbd-result-panel__point-value\">{{ point.value }}</span>\n </li>\n }\n </ul>\n }\n\n @if (result()!.callout) {\n <div class=\"sbd-result-panel__callout sbd-result-panel__callout--{{ result()!.callout!.type }}\">\n <i class=\"pi pi-info-circle\"></i><span>{{ result()!.callout!.message }}</span>\n </div>\n }\n </div>\n <div class=\"sbd-result-panel__footer\">\n <div class=\"sbd-result-panel__feedback\">\n <span class=\"sbd-result-panel__feedback-label\">Helpful?</span>\n <button class=\"sbd-result-panel__feedback-btn sbd-result-panel__feedback-btn--up\" (click)=\"feedbackGiven.emit('up')\">\n <i class=\"pi pi-thumbs-up\"></i>\n </button>\n <button class=\"sbd-result-panel__feedback-btn sbd-result-panel__feedback-btn--down\" (click)=\"feedbackGiven.emit('down')\">\n <i class=\"pi pi-thumbs-down\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n @if (status() === 'error') {\n <div class=\"sbd-result-panel__error\" @fadeInUp>\n <i class=\"pi pi-exclamation-triangle\"></i><span>Could not load this information. Please try again.</span>\n </div>\n }\n @if (status() === 'idle') {\n <div class=\"sbd-result-panel__idle\">\n <i class=\"pi pi-arrow-up-left\"></i><span>Select an action above to see results here</span>\n </div>\n }\n</div>\n","import { Component, input, output, inject, signal, computed, effect } from '@angular/core';\nimport { DialogModule } from 'primeng/dialog';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nimport { ActionConfig, ResultContent } from '../../models/action.types';\nimport { AR_LABELS, AR_SECTION_TITLES } from '../../config/labels.ar';\nimport { ProductType } from '../../models/booking.types';\nimport { SbdBookingService } from '../../services/booking.service';\nimport { SbdToastService } from '../../services/toast.service';\nimport { SbdResultPanelComponent } from '../result-panel/result-panel.component';\n\n@Component({\n selector: 'app-sbd-action-dialog',\n standalone: true,\n imports: [DialogModule, ButtonModule, FormsModule, NgSelectModule, SbdResultPanelComponent],\n templateUrl: './action-dialog.component.html',\n styleUrl: './action-dialog.component.scss',\n})\nexport class SbdActionDialogComponent {\n private bookingService = inject(SbdBookingService);\n private toast = inject(SbdToastService);\n\n visible = input(false);\n bookingId = input('');\n product = input<ProductType>('flight');\n actions = input<ActionConfig[]>([]);\n initialKey = input<string | null>(null);\n // Pre-fetched booking data from the parent — avoids a redundant API call\n // when the action's apiField is already satisfied by the initial lookup.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n preloadedData = input<any | null>(null);\n closed = output<void>();\n\n selectedAction = signal<ActionConfig | null>(null);\n actionStatus = signal<'idle' | 'loading' | 'success' | 'error'>('idle');\n actionData = signal<unknown>(null);\n elapsedMs = signal(0);\n copying = signal(false);\n\n resultContent = computed<ResultContent | null>(() => {\n const a = this.selectedAction();\n const d = this.actionData();\n return a && d ? a.formatter(d) : null;\n });\n\n constructor() {\n effect(() => {\n if (this.visible()) {\n const key = this.initialKey();\n const action = key ? this.actions().find(a => a.key === key) ?? null : null;\n if (action) {\n this.onActionSelect(action);\n }\n } else {\n this.selectedAction.set(null);\n this.actionStatus.set('idle');\n this.actionData.set(null);\n this.elapsedMs.set(0);\n }\n }, { allowSignalWrites: true });\n }\n\n copyResult(mode: 'en' | 'ar' | 'both'): void {\n const enResult = this.resultContent();\n const action = this.selectedAction();\n if (!enResult || !action) return;\n\n if (mode === 'en') {\n const text = this.buildBilingualText(enResult, null);\n navigator.clipboard.writeText(text).then(() => this.toast.success('Copied EN'));\n return;\n }\n\n this.copying.set(true);\n\n const arData$ = action.apiField === '$refund_details'\n ? this.bookingService.getRefundDetails(this.bookingId(), this.product(), 'ar').pipe(\n map((data: unknown) => data), catchError(() => of(null)),\n )\n : this.bookingService.getBooking(this.bookingId(), this.product(), action.apiField, 'ar').pipe(\n map(({ data }) => data), catchError(() => of(null)),\n );\n\n arData$.subscribe(arRaw => {\n const arResult = arRaw ? action.formatter(arRaw) : null;\n const text = mode === 'ar'\n ? this.buildBilingualText(null, arResult)\n : this.buildBilingualText(enResult, arResult);\n const msg = mode === 'ar' ? 'Copied AR' : 'Copied EN + AR';\n navigator.clipboard.writeText(text)\n .then(() => this.toast.success(msg))\n .catch(() => this.toast.success('Copied to clipboard'))\n .finally(() => this.copying.set(false));\n });\n }\n\n private buildBilingualText(en: ResultContent | null, ar: ResultContent | null): string {\n const LTR = '‎';\n const RTL = '‏';\n const divider = `${LTR}${'─'.repeat(40)}`;\n\n const formatEn = (r: ResultContent): string[] => {\n const lines: string[] = [`${LTR}${r.title}`];\n if (r.subtitle) lines.push(`${LTR}${r.subtitle}`);\n lines.push('');\n if (r.sections?.length) {\n for (const s of r.sections) {\n lines.push(`${LTR}── ${s.title} ──`);\n for (const row of s.rows) {\n lines.push(row.value ? `${LTR}${row.label}: ${row.value}` : `${LTR}· ${row.label}`);\n }\n lines.push('');\n }\n } else if (r.points?.length) {\n for (const p of r.points) lines.push(`${LTR}${p.label}: ${p.value}`);\n }\n if (r.callout) lines.push(`${LTR}Note: ${r.callout.message}`);\n return lines;\n };\n\n const formatAr = (r: ResultContent): string[] => {\n const tl = (label: string) => AR_LABELS[label] ?? label;\n const ts = (title: string) => AR_SECTION_TITLES[title] ?? title;\n const lines: string[] = [`${RTL}${r.title}`];\n if (r.subtitle) lines.push(`${RTL}${r.subtitle}`);\n lines.push('');\n if (r.sections?.length) {\n for (const s of r.sections) {\n lines.push(`${RTL}── ${ts(s.title)} ──`);\n for (const row of s.rows) {\n lines.push(row.value ? `${RTL}${tl(row.label)}: ${row.value}` : `${RTL}· ${tl(row.label)}`);\n }\n lines.push('');\n }\n } else if (r.points?.length) {\n for (const p of r.points) lines.push(`${RTL}${tl(p.label)}: ${p.value}`);\n }\n if (r.callout) lines.push(`${RTL}ملاحظة: ${r.callout.message}`);\n return lines;\n };\n\n if (!en && ar) return formatAr(ar).join('\\r\\n');\n if (en && !ar) return formatEn(en).join('\\r\\n');\n return [...formatEn(en!), '', divider, '', ...formatAr(ar!)].join('\\r\\n');\n }\n\n onActionSelect(action: ActionConfig | null): void {\n if (!action) return;\n this.selectedAction.set(action);\n this.actionStatus.set('loading');\n this.actionData.set(null);\n\n // Use pre-fetched data when available and the action doesn't need its own\n // endpoint (i.e. not the special $refund_details POST).\n const cached = this.preloadedData();\n if (action.apiField !== '$refund_details' && cached) {\n this.actionData.set(cached);\n this.elapsedMs.set(0);\n this.actionStatus.set('success');\n return;\n }\n\n const start = performance.now();\n\n const source$ = action.apiField === '$refund_details'\n ? this.bookingService.getRefundDetails(this.bookingId(), this.product()).pipe(\n map((data: unknown) => ({ data, elapsedMs: performance.now() - start }))\n )\n : this.bookingService.getBooking(this.bookingId(), this.product(), action.apiField);\n\n source$.subscribe({\n next: ({ data, elapsedMs }) => {\n this.actionData.set(data);\n this.elapsedMs.set(elapsedMs);\n this.actionStatus.set('success');\n },\n error: () => {\n this.actionStatus.set('error');\n },\n });\n }\n}\n","<p-dialog\n [visible]=\"visible()\"\n (visibleChange)=\"$event ? null : closed.emit()\"\n [modal]=\"true\"\n [blockScroll]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '720px', maxHeight: '90vh' }\"\n styleClass=\"sbd-action-dialog-wrapper\"\n header=\"Browse Actions\">\n\n <div class=\"sad\">\n\n <!-- ng-select dropdown -->\n <div class=\"sad__picker\">\n <ng-select\n [items]=\"actions()\"\n [ngModel]=\"selectedAction()\"\n (change)=\"onActionSelect($event)\"\n [searchable]=\"true\"\n [clearable]=\"false\"\n bindLabel=\"label\"\n placeholder=\"Search actions...\"\n class=\"sad__select\">\n\n <!-- Selected value display -->\n <ng-template ng-label-tmp let-item=\"item\">\n <div class=\"sad__option\">\n <i class=\"{{ item.icon }} sad__option-icon\"></i>\n <div class=\"sad__option-text\">\n <span class=\"sad__option-label\">{{ item.label }}</span>\n <span class=\"sad__option-sub\">{{ item.subtitle }}</span>\n </div>\n </div>\n </ng-template>\n\n <!-- Dropdown list item -->\n <ng-template ng-option-tmp let-item=\"item\" let-search=\"searchTerm\">\n <div class=\"sad__option\">\n <i class=\"{{ item.icon }} sad__option-icon\"></i>\n <div class=\"sad__option-text\">\n <span class=\"sad__option-label\">{{ item.label }}</span>\n <span class=\"sad__option-sub\">{{ item.subtitle }}</span>\n </div>\n </div>\n </ng-template>\n\n </ng-select>\n </div>\n\n <!-- Result area -->\n <div class=\"sad__result\">\n <app-sbd-result-panel\n [actionLabel]=\"selectedAction()?.label ?? ''\"\n [elapsedMs]=\"elapsedMs()\"\n [status]=\"actionStatus()\"\n [result]=\"resultContent()\"\n />\n </div>\n\n </div>\n\n <ng-template pTemplate=\"footer\">\n <button pButton label=\"Copy EN\" icon=\"pi pi-copy\"\n class=\"p-button-outlined p-button-sm\"\n [disabled]=\"actionStatus() !== 'success' || copying()\"\n (click)=\"copyResult('en')\">\n </button>\n <button pButton label=\"Copy AR\" icon=\"pi pi-copy\"\n class=\"p-button-outlined p-button-sm\"\n [disabled]=\"actionStatus() !== 'success' || copying()\"\n (click)=\"copyResult('ar')\">\n </button>\n <button pButton label=\"Copy EN + AR\"\n [icon]=\"copying() ? 'pi pi-spin pi-spinner' : 'pi pi-copy'\"\n class=\"p-button-outlined p-button-sm\"\n [disabled]=\"actionStatus() !== 'success' || copying()\"\n (click)=\"copyResult('both')\">\n </button>\n <button pButton label=\"Close\" icon=\"pi pi-times\" class=\"p-button-outlined p-button-secondary p-button-sm\" (click)=\"closed.emit()\"></button>\n </ng-template>\n\n</p-dialog>\n","import { Component, input, output, inject, signal, effect } from '@angular/core';\nimport { DialogModule } from 'primeng/dialog';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\n\nimport { SbdBookingService } from '../../services/booking.service';\nimport { SbdToastService } from '../../services/toast.service';\nimport { ProductType } from '../../models/booking.types';\n\ntype NoteAction = 'GENERAL' | 'FEEDBACK' | 'REMARK';\n\n@Component({\n selector: 'app-sbd-add-note-dialog',\n standalone: true,\n imports: [DialogModule, ButtonModule, FormsModule, NgSelectModule],\n templateUrl: './add-note-dialog.component.html',\n styleUrl: './add-note-dialog.component.scss',\n})\nexport class SbdAddNoteDialogComponent {\n private bookingService = inject(SbdBookingService);\n private toast = inject(SbdToastService);\n\n visible = input(false);\n bookingId = input('');\n product = input<ProductType>('flight');\n closed = output<void>();\n\n message = signal('');\n action = signal<NoteAction>('GENERAL');\n submitting = signal(false);\n\n readonly actionOptions: { label: string; value: NoteAction; icon: string }[] = [\n { label: 'General', value: 'GENERAL', icon: 'pi pi-comment' },\n { label: 'Feedback', value: 'FEEDBACK', icon: 'pi pi-thumbs-up' },\n { label: 'Remark', value: 'REMARK', icon: 'pi pi-exclamation-circle' },\n ];\n\n constructor() {\n effect(() => {\n if (!this.visible()) this.reset();\n }, { allowSignalWrites: true });\n }\n\n submit(): void {\n const msg = this.message().trim();\n if (!msg) return;\n\n this.submitting.set(true);\n this.bookingService.addNote(this.bookingId(), this.product(), msg, this.action()).subscribe({\n next: () => {\n this.toast.success('Note added successfully');\n this.closed.emit();\n },\n error: () => {\n this.toast.error('Failed to add note. Please try again.');\n this.submitting.set(false);\n },\n });\n }\n\n private reset(): void {\n this.message.set('');\n this.action.set('GENERAL');\n this.submitting.set(false);\n }\n}\n","<p-dialog\n [visible]=\"visible()\"\n (visibleChange)=\"$event ? null : closed.emit()\"\n [modal]=\"true\"\n [blockScroll]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '480px' }\"\n styleClass=\"sbd-add-note-dialog-wrapper\"\n header=\"Add Note\">\n\n <div class=\"and\">\n\n <!-- Note type -->\n <div class=\"and__field\">\n <label class=\"and__label\">Note type</label>\n <div class=\"and__type-group\">\n @for (opt of actionOptions; track opt.value) {\n <button\n type=\"button\"\n class=\"and__type-btn\"\n [class.and__type-btn--active]=\"action() === opt.value\"\n (click)=\"action.set(opt.value)\">\n <i class=\"{{ opt.icon }}\"></i>\n {{ opt.label }}\n </button>\n }\n </div>\n </div>\n\n <!-- Message -->\n <div class=\"and__field\">\n <label class=\"and__label\">\n Message\n <span class=\"and__char-count\">{{ message().length }} / 1000</span>\n </label>\n <textarea\n class=\"and__textarea\"\n [ngModel]=\"message()\"\n (ngModelChange)=\"message.set($event)\"\n placeholder=\"Write your note here...\"\n rows=\"6\"\n maxlength=\"1000\"\n [disabled]=\"submitting()\">\n </textarea>\n </div>\n\n </div>\n\n <ng-template pTemplate=\"footer\">\n <button pButton label=\"Cancel\" icon=\"pi pi-times\"\n class=\"p-button-outlined p-button-secondary p-button-sm\"\n [disabled]=\"submitting()\"\n (click)=\"closed.emit()\">\n </button>\n <button pButton label=\"Submit Note\"\n [icon]=\"submitting() ? 'pi pi-spin pi-spinner' : 'pi pi-check'\"\n class=\"p-button-sm sbd-note-submit\"\n [disabled]=\"!message().trim() || submitting()\"\n (click)=\"submit()\">\n </button>\n </ng-template>\n\n</p-dialog>\n","import {\n ReissueAirport,\n ReissueBookingContext,\n ReissueLeg,\n ReissueLegChange,\n ReissueSelection,\n ReissueTripType,\n} from '../models/reissue.types';\n\n/**\n * Port of the web's `FlightManageBookingService.navigateToOnlineBooking()`\n * (almatar-consumer-apps) — builds the query params of\n * `/flights/manage-booking/list`, where the web continues the reissue\n * (search -> view-price -> choose-flight -> payment).\n * Keep the param names/values identical to the web.\n */\n\nexport const REISSUE_WEB_PATH = '/flights/manage-booking/list/';\n\n/** Same strings as the web's `FlightManageBookingAsideTabEnum`. */\nconst SERVICE_NAME = {\n change_date: 'change-travel-date-time',\n change_route: 'change-flight-route',\n} as const;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Raw = any;\n\n// ── date helpers ────────────────────────────────────────────────────────────\n\n/** `moment.utc(str).valueOf()` — strings without a timezone are read as UTC. */\nfunction utcMs(value: string): number {\n const hasTz = /[zZ]$|[+-]\\d{2}:?\\d{2}$/.test(value);\n return new Date(hasTz ? value : `${value}Z`).getTime();\n}\n\n/** Web's `getAbsoluteDate(date)` -> `YYYY-MM-DD` of the date part. */\nfunction dateOnly(value: string): string {\n return value.slice(0, 10);\n}\n\n/** Web's `getAbsoluteDate(date, true)` -> UTC midnight of that calendar day. */\nfunction absoluteMs(value: string): number {\n const [y, m, d] = dateOnly(value).split('-').map(Number);\n return Date.UTC(y, m - 1, d);\n}\n\nfunction capitalize(value: string): string {\n return value ? value.charAt(0).toUpperCase() + value.slice(1).toLowerCase() : value;\n}\n\n// ── booking_info -> context ─────────────────────────────────────────────────\n\nfunction inferTripType(bi: Raw, legs: ReissueLeg[]): ReissueTripType {\n const explicit = bi?.IteneraryTripType;\n if (explicit === 'OneWay' || explicit === 'RoundTrip' || explicit === 'MultiCity') return explicit;\n if (legs.length <= 1) return 'OneWay';\n if (legs.length === 2 && legs[1].direction === 'Return') return 'RoundTrip';\n return 'MultiCity';\n}\n\nfunction countPassengers(bi: Raw, type: string): number {\n const list: Raw[] = bi?.passenger_info?.passengers ?? [];\n return list.filter(p => p?.type === type).length;\n}\n\n/**\n * Normalizes the dashboard's `booking_info` (from `/v1/fcr/booking/information`)\n * into what the URL builder needs. Reads defensively: any field missing in the\n * BO response falls back to an empty value.\n */\nexport function buildReissueBookingContext(bookingData: Raw, bookingId: string): ReissueBookingContext | null {\n const bi = bookingData?.data?.booking_info;\n const legsRaw: Raw[] = bi?.leg_info ?? [];\n if (!legsRaw.length) return null;\n\n const airline: Raw[] = bi?.airline_info ?? [];\n const legs: ReissueLeg[] = legsRaw.map((l, i) => {\n const segs: Raw[] = airline[i]?.Segments ?? [];\n const first = segs[0] ?? {};\n const last = segs[segs.length - 1] ?? first;\n // Some bookings come back with a sparse `leg_info` — fall back to the\n // first/last segment (airline_info, then duration/terminal) for the route and times.\n const durSegs: Raw[] = bi?.duration?.legs?.[i]?.Segments ?? [];\n const termSegs: Raw[] = bi?.terminal?.[i]?.Segments ?? [];\n const firstAny: Raw = { ...(termSegs[0] ?? {}), ...(durSegs[0] ?? {}), ...first };\n const lastAny: Raw = {\n ...(termSegs[termSegs.length - 1] ?? {}),\n ...(durSegs[durSegs.length - 1] ?? {}),\n ...last,\n };\n const originCode: string = l.LegDepartureAirportCode ?? firstAny.DepartureAirportCode ?? firstAny.SegmentDepartureAirportCode ?? '';\n const destinationCode: string = l.LegArrivalAirportCode ?? lastAny.ArrivalAirportCode ?? lastAny.SegmentArrivalAirportCode ?? '';\n return {\n // No id in the response -> a positional placeholder so the dialog still works.\n legId: l.LegID ?? l.legId ?? l.LegId ?? `leg-${i}`,\n direction: l.LegDirectionality ?? '',\n originCode,\n originName: l.LegDepartureAirportName ?? firstAny.DepartureAirportName ?? '',\n originCityName: l.LegDepartureCityName ?? firstAny.SegmentDepartureCityName ?? firstAny.DepartureAirportName ?? originCode,\n originCountryName: l.LegDepartureCountryName ?? firstAny.SegmentDepartureCountryName ?? '',\n destinationCode,\n destinationName: l.LegArrivalAirportName ?? lastAny.ArrivalAirportName ?? '',\n destinationCityName: l.LegArrivalCityName ?? lastAny.SegmentArrivalCityName ?? lastAny.ArrivalAirportName ?? destinationCode,\n destinationCountryName: l.LegArrivalCountryName ?? lastAny.SegmentArrivalCountryName ?? '',\n departure:\n l.LegDepartureDateTime ?? firstAny.DepartureDateTime ?? firstAny.SegmentDepartureDateTime ?? firstAny.DepartureTime ?? '',\n arrival:\n l.LegArrivalDateTime ?? lastAny.ArrivalDateTime ?? lastAny.SegmentArrivalDateTime ?? lastAny.ArrivalTime ?? '',\n airline: (l.LegAirlinesNames ?? [])[0] ?? first.AirlineName ?? '',\n stops: (l.Stops ?? []).length,\n flightNo: first.AirlineCode ? `${first.AirlineCode}${first.FlightNumber ?? ''}` : '',\n };\n });\n\n const firstLegRaw = legsRaw[0];\n const firstSeg: Raw = airline[0]?.Segments?.[0] ?? {};\n return {\n bookingId: String(bookingId),\n tripType: inferTripType(bi, legs),\n legs,\n adults: countPassengers(bi, 'ADT'),\n children: countPassengers(bi, 'CNN'),\n infants: countPassengers(bi, 'INF'),\n // The BO response may carry no cabin at all (sparse bookings) — default so the web search still gets a class.\n cabinName: firstLegRaw.LegCabins?.[0]?.Name ?? 'Economy',\n cabinCode: firstLegRaw.LegCabins?.[0]?.Code ?? 'Y',\n currency: bi?.currency ?? bi?.payment_status?.currency ?? '',\n airlineCode: firstSeg.AirlineCode ?? '',\n flightNumber: String(firstSeg.FlightNumber ?? ''),\n airlineName: (firstLegRaw.LegAirlinesNames ?? [])[0] ?? firstSeg.AirlineName ?? '',\n totalStops: (firstLegRaw.Stops ?? []).length,\n };\n}\n\n// ── URL builder ─────────────────────────────────────────────────────────────\n\nfunction airportCityLabel(name: string, country: string, code: string): string {\n return `${name || code}${country ? ', ' + country : ''}(${code})`;\n}\n\nfunction otherLegOf(ctx: ReissueBookingContext, legId: string) {\n const other = ctx.legs.find(l => l.legId !== legId);\n return other\n ? {\n legId: other.legId,\n departDateTime: other.departure,\n destinationCode: other.destinationCode,\n originCode: other.originCode,\n isReturn: other.direction === 'Return',\n }\n : undefined;\n}\n\nexport function buildReissueSearchParams(\n rawCtx: ReissueBookingContext,\n selection: ReissueSelection,\n postBookingId: string,\n): Record<string, string> {\n // The BO booking information may carry no leg dates at all. Without an original date the\n // web's `departure` / `return` / `updatingLegs` would be NaN, so fall back to the date the\n // agent picked (or today) — only affects sparse bookings; real ones have `LegDepartureDateTime`.\n const fallbackDate = `${selection.legs.find(c => c.departDate)?.departDate ?? new Date().toLocaleDateString('en-CA')}T00:00:00`;\n const ctx: ReissueBookingContext = {\n ...rawCtx,\n legs: rawCtx.legs.map(l => (l.departure ? l : { ...l, departure: fallbackDate })),\n };\n const isDate = selection.service === 'change_date';\n const leg0 = ctx.legs[0];\n const changes = selection.legs;\n const legOf = (c: ReissueLegChange) => ctx.legs.find(l => l.legId === c.legId) ?? leg0;\n\n // `config.legs` in the web.\n const legsPayload = changes.map(c => {\n const orig = legOf(c);\n if (isDate) {\n return {\n legId: c.legId,\n ...(ctx.tripType === 'MultiCity' ? { touched: true } : {}),\n departDateTime: dateOnly(c.departDate ?? orig.departure),\n destinationCode: orig.destinationCode,\n originCode: orig.originCode,\n };\n }\n return {\n legId: c.legId,\n originCode: c.origin?.id ?? orig.originCode,\n originCityName: c.origin?.city_name || c.origin?.name || orig.originCityName,\n destinationCode: c.destination?.id ?? orig.destinationCode,\n destinationCityName: c.destination?.city_name || c.destination?.name || orig.destinationCityName,\n departDateTime: orig.departure,\n };\n });\n\n // `routeConfig` in the web.\n const first = changes[0];\n const routeOrigin: ReissueAirport | undefined = !isDate ? first?.origin : undefined;\n const routeDest: ReissueAirport | undefined = !isDate ? first?.destination : undefined;\n const routeDeparture = isDate ? `${dateOnly(changes[0].departDate ?? leg0.departure)}T00:00:00` : undefined;\n const routeReturn =\n isDate && changes.length > 1\n ? `${dateOnly(changes[1].departDate ?? ctx.legs[1]?.departure ?? '')}T00:00:00`\n : undefined;\n\n const origin = routeOrigin?.id ?? leg0.originCode;\n const destination = routeDest?.id ?? leg0.destinationCode;\n const className = ctx.cabinName.toUpperCase().includes('ECONOMY')\n ? capitalize(ctx.cabinName.replace(/\\s+/g, ''))\n : ctx.cabinName;\n\n const params: Record<string, unknown> = {\n flightSearchId: ctx.bookingId,\n category: 'flights',\n id: `${ctx.airlineCode}-${ctx.flightNumber}`,\n origin,\n originCity: routeOrigin\n ? routeOrigin.name || `${routeOrigin.city_name}, ${routeOrigin.country_name}`\n : airportCityLabel(leg0.originName, leg0.originCountryName, leg0.originCode),\n originCityName: routeOrigin?.city_name ?? leg0.originCityName,\n originCountryName: routeOrigin?.country_name ?? leg0.originCountryName,\n destinationCityName: routeDest?.city_name ?? leg0.destinationCityName,\n destinationCity: routeDest\n ? routeDest.name || `${routeDest.city_name}, ${routeDest.country_name}`\n : airportCityLabel(leg0.destinationName, leg0.destinationCountryName, leg0.destinationCode),\n destinationCountryName: routeDest?.country_name ?? leg0.destinationCountryName,\n destination,\n departureFlightAirlines: ctx.airlineName,\n adult: ctx.adults,\n child: ctx.children,\n lapinfant: ctx.infants,\n class: className,\n className: ctx.cabinCode,\n departure: utcMs(routeDeparture ?? leg0.departure),\n infantonchair: 0,\n originType: routeOrigin?.type ?? 'city',\n destinationType: routeDest?.type ?? 'city',\n isDirect: 'false',\n serviceName: SERVICE_NAME[selection.service],\n currency: ctx.currency,\n classType: ctx.cabinCode,\n connection: ctx.tripType,\n directFlights: ctx.totalStops === 0,\n flexibleDates: false,\n legs: JSON.stringify(legsPayload),\n // Lets the results page show an \"UPDATING NOW\" banner per changed leg.\n updatingLegs: JSON.stringify(\n changes.map(c => {\n const o = legOf(c);\n return {\n legId: o.legId,\n direction: o.direction,\n originCode: o.originCode,\n destinationCode: o.destinationCode,\n originCityName: o.originCityName,\n destinationCityName: o.destinationCityName,\n originalDeparture: utcMs(o.departure),\n };\n }),\n ),\n };\n\n if (ctx.tripType === 'RoundTrip') {\n const secondLeg = ctx.legs[1];\n params['return'] = routeReturn\n ? utcMs(routeReturn)\n : secondLeg\n ? utcMs(secondLeg.departure) // the web parses this one in the customer's timezone; read as UTC here so it doesn't depend on the agent's timezone\n : utcMs(String((legsPayload[0] as Raw).departDateTime));\n\n if (changes.length === 1) {\n const other = otherLegOf(ctx, changes[0].legId);\n if (isDate && other && !other.isReturn) {\n params['departure'] = utcMs(other.departDateTime);\n params['return'] = utcMs(String((legsPayload[0] as Raw).departDateTime));\n }\n if (other) params['extraLeg'] = JSON.stringify(other);\n }\n }\n\n if (ctx.tripType === 'MultiCity') {\n let cities: Raw[];\n if (isDate) {\n const changedDate = new Map(changes.map(c => [c.legId, c.departDate]));\n cities = ctx.legs.map(l => ({\n departure: absoluteMs(changedDate.get(l.legId) || l.departure),\n destination: l.destinationCode,\n destinationType: l.destinationCode,\n origin: l.originCode,\n originType: l.originCode,\n destinationCity: l.destinationCityName,\n destinationCityName: l.destinationCityName,\n destinationName: l.destinationCityName,\n destinationCountryName: l.destinationCountryName,\n originCity: l.originCityName,\n originCityName: l.originCityName,\n originName: l.originCityName,\n originCountryName: l.originCountryName,\n }));\n } else {\n cities = changes.map(c => {\n const o = legOf(c);\n const from = c.origin;\n const to = c.destination;\n return {\n departure: utcMs(o.departure),\n destination: to?.id ?? o.destinationCode,\n destinationType: to?.type ?? o.destinationCode,\n origin: from?.id ?? o.originCode,\n originType: from?.id ?? o.originCode,\n destinationCity: to?.name ?? o.destinationCityName,\n destinationCityName: to?.name ?? o.destinationCityName,\n destinationName: to?.name ?? o.destinationCityName,\n destinationCountryName: to?.country_name ?? o.destinationCountryName,\n originCity: from?.name ?? o.originCityName,\n originCityName: from?.name ?? o.originCityName,\n originName: from?.name ?? o.originCityName,\n originCountryName: from?.country_name ?? o.originCountryName,\n };\n });\n }\n params['departure'] = cities[0].departure;\n params['cities'] = JSON.stringify(cities);\n }\n\n params['bookingId'] = ctx.bookingId;\n params['postBookingId'] = postBookingId;\n\n return Object.fromEntries(\n Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => [k, String(v)]),\n );\n}\n\nexport function buildReissueSearchUrl(\n webBaseUrl: string,\n ctx: ReissueBookingContext,\n selection: ReissueSelection,\n postBookingId: string,\n): string {\n const qs = new URLSearchParams(buildReissueSearchParams(ctx, selection, postBookingId));\n return `${webBaseUrl.replace(/\\/+$/, '')}${REISSUE_WEB_PATH}?${qs.toString()}`;\n}\n\n/**\n * Adds the host's auth parameters (for example its token) to the web link: in the query string, or in the `#fragment`\n * (which browsers do not send to servers or in the Referer). Empty values are skipped.\n */\nexport function appendAuthParams(url: string, params: Record<string, string>, where: 'query' | 'hash' = 'query'): string {\n const entries = Object.entries(params ?? {}).filter(([, value]) => !!value);\n if (!entries.length) return url;\n const target = new URL(url);\n if (where === 'hash') {\n const hash = new URLSearchParams(target.hash.replace(/^#/, ''));\n entries.forEach(([name, value]) => hash.set(name, value));\n target.hash = hash.toString();\n } else {\n entries.forEach(([name, value]) => target.searchParams.set(name, value));\n }\n return target.toString();\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { SBD_CONFIG } from '../config/dashboard.config';\nimport {\n ReissueAirport,\n ReissueAvailabilityResponse,\n ReissueBookingContext,\n ReissueChooseFlightRequest,\n ReissueChooseFlightResponse,\n ReissuePaymentLink,\n ReissueUpgradeOptionsResponse,\n} from '../models/reissue.types';\n\n/**\n * Query params the web always sends on `create-post-booking` (`getEntrySourceDeviceBrand()`): where the flow started\n * and on which device. Same defaults as the web; ask the backend which values BO should send.\n */\nconst POST_BOOKING_PARAMS = { entrySource: 'navigation bar', device: 'web' };\n\n/**\n * Reissue APIs — the same endpoints the consumer web uses (the backend opens them for BO).\n */\n@Injectable({ providedIn: 'root' })\nexport class SbdReissueService {\n private http = inject(HttpClient);\n private config = inject(SBD_CONFIG);\n private base = this.config.apiBase;\n\n private get headers(): Record<string, string> {\n return { platform: this.config.platform };\n }\n\n /** `POST /v2/manage-booking/flight/create-post-booking/{bookingId}` -> `postBookingId`. */\n createPostBooking(bookingId: string): Observable<string> {\n return this.http\n .post<{ data?: { postBookingId?: string } }>(\n `${this.base}/v2/manage-booking/flight/create-post-booking/${bookingId}`,\n null, // the web sends no body on this call\n { headers: this.headers, params: POST_BOOKING_PARAMS },\n )\n .pipe(map(res => res?.data?.postBookingId ?? ''));\n }\n\n /** `GET /v3/manage-booking/flight/reissue/availability/{bookingId}/{postBookingId}` -> `data.legs[]`. */\n getAvailability(\n bookingId: string,\n postBookingId: string,\n ctx?: ReissueBookingContext,\n ): Observable<ReissueAvailabilityResponse> {\n return this.http.get<ReissueAvailabilityResponse>(\n `${this.base}/v3/manage-booking/flight/reissue/availability/${bookingId}/${postBookingId}`,\n { headers: this.headers },\n );\n }\n\n /**\n * `POST /v3/manage-booking/flight/reissue/upgrade-class/{bookingId}/{postBookingId}` — same call (and body) the\n * web makes to decide whether the \"Upgrade Class\" option is shown. Returns the unwrapped `data`.\n */\n getUpgradeClassOptions(\n bookingId: string,\n postBookingId: string,\n ctx: ReissueBookingContext,\n ): Observable<ReissueUpgradeOptionsResponse | null> {\n const body = {\n serviceName: 'change-flight-class',\n legs: ctx.legs.map(l => ({\n legId: l.legId,\n legDepartureAirportCode: l.originCode,\n legArrivalAirportCode: l.destinationCode,\n legDepartureDate: l.departure,\n })),\n };\n return this.http\n .post<{ data?: ReissueUpgradeOptionsResponse }>(\n `${this.base}/v3/manage-booking/flight/reissue/upgrade-class/${bookingId}/${postBookingId}`,\n body,\n { headers: this.headers },\n )\n .pipe(map(res => (res?.data ?? (res as ReissueUpgradeOptionsResponse)) ?? null));\n }\n\n /** Same rule as the web's `hasUpgradeOptions()`: at least one option in any section. */\n hasUpgradeOptions(data: ReissueUpgradeOptionsResponse | null): boolean {\n if (!data) return false;\n if (data.fareOptionScope === 'leg') return (data.legs ?? []).some(l => (l.options?.length ?? 0) > 0);\n return (data.options?.length ?? 0) > 0;\n }\n\n /**\n * Airport picker for Change Route. Same typeahead endpoint the web and the backoffice already use\n * (`StaticDataService.getAirports`) — no extra backend work needed. Response: `data[].items[].items[]`.\n * An empty term makes no request (the dialog lists the booking's own airports meanwhile).\n */\n searchAirports(term: string): Observable<ReissueAirport[]> {\n const q = term.trim();\n if (!q) return of([]);\n\n return this.http\n .get<{ data?: { items?: { items?: ReissueAirport[] }[] }[] }>(\n `${this.base}/v1/typeahead-search-service/suggestion/suggest/flights`,\n { params: { q }, headers: this.headers },\n )\n .pipe(\n map(res => {\n const out: ReissueAirport[] = [];\n for (const group of res?.data ?? []) {\n for (const item of group.items ?? []) {\n if (item.items) out.push(...item.items);\n }\n }\n return out.map(a => ({\n id: a.id,\n name: a.name,\n city_name: a.city_name,\n country_name: a.country_name,\n type: a.type === 'airport' ? ('airport' as const) : ('city' as const),\n }));\n }),\n catchError(() => of([] as ReissueAirport[])),\n );\n }\n\n // ── Upgrade Class ──────────────────────────────────────────────────────────\n\n /**\n * `POST /v3/manage-booking/flight/reissue/choose-flight/{bookingId}/{postBookingId}` — prices the chosen upgrade\n * option. Same endpoint/body the web uses; response `data` carries `itineraryAvailable`, `priceChanged`, `price`, `currency`.\n */\n chooseFlight(\n bookingId: string,\n postBookingId: string,\n body: ReissueChooseFlightRequest,\n ): Observable<ReissueChooseFlightResponse> {\n return this.http\n .post<{ data?: ReissueChooseFlightResponse }>(\n `${this.base}/v3/manage-booking/flight/reissue/choose-flight/${bookingId}/${postBookingId}`,\n body,\n { headers: this.headers },\n )\n .pipe(map(res => res?.data ?? {}));\n }\n\n /** `POST /v2/manage-booking/flight/book-now` — places a zero-total reissue (no payment needed). */\n bookNow(postBookingId: string): Observable<unknown> {\n return this.http.post(`${this.base}/v2/manage-booking/flight/book-now`, { postBookingId }, { headers: this.headers });\n }\n\n /**\n * Payment link of a reissue with an amount to pay. There is no separate API: the backend puts the link in the\n * cart of the post-booking (`GET /v2/manage-booking/flight/cart/{postBookingId}`, the call the web checkout reads).\n * The name of the field is not final yet: the first of the names below that exists is used, and the call fails\n * with a clear message when the cart has none.\n */\n getPaymentLink(postBookingId: string, amount = 0, currency = ''): Observable<ReissuePaymentLink> {\n return this.http\n .get<{ data?: Record<string, any> }>(`${this.base}/v2/manage-booking/flight/cart/${postBookingId}`, {\n headers: this.headers,\n })\n .pipe(\n map(res => {\n const cart = res?.data ?? {};\n let url: string | undefined =\n cart['paymentLink'] ?? cart['link'] ?? cart['payment']?.link ?? cart['payment']?.paymentLink ?? cart['payment']?.url;\n if (!url) throw new Error('The cart has no payment link yet.');\n // The cart returns only a path (\"/<paymentId>\"): the customer page base comes from the host config.\n if (!/^https?:\\/\\//i.test(url)) {\n const linkBase = this.config.paymentLinkBase?.replace(/\\/+$/, '');\n if (!linkBase) {\n throw new Error(`The cart returned a relative link (${url}) and no paymentLinkBase is configured.`);\n }\n url = `${linkBase}${url.startsWith('/') ? '' : '/'}${url}`;\n }\n return {\n url,\n amount: cart['payment']?.amount ?? amount,\n currency: cart['payment']?.currency ?? currency,\n expiresAt: cart['payment']?.expiryDate ?? cart['expiryDate'],\n };\n }),\n );\n }\n}\n","import { ReissueAirport, ReissueLeg } from '../models/reissue.types';\n\n/** Today as `YYYY-MM-DD` in the agent's timezone (what `<input type=\"date\">` compares against). */\nexport function todayIso(): string {\n return new Date().toLocaleDateString('en-CA');\n}\n\nexport function formatReissueDate(value: string): string {\n if (!value) return '—';\n const date = new Date(value);\n return Number.isNaN(date.getTime())\n ? value\n : date.toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' });\n}\n\n/**\n * Expiry of the payment link as epoch ms. The backend sends `YYYY-MM-DD HH:mm:ss` with no timezone, read as UTC (to\n * be confirmed with the backend); a value that carries `Z` or an offset is read as it is. `null` when missing/invalid.\n */\nexport function parseLinkExpiry(value?: string | null): number | null {\n if (!value) return null;\n const hasZone = /(Z|[+-]\\d{2}:?\\d{2})$/i.test(value.trim());\n const ms = Date.parse(hasZone ? value : `${value.trim().replace(' ', 'T')}Z`);\n return Number.isNaN(ms) ? null : ms;\n}\n\n/** `mm:ss` (or `h:mm:ss` from one hour up) for a countdown. */\nexport function formatCountdown(ms: number): string {\n const total = Math.max(0, Math.floor(ms / 1000));\n const h = Math.floor(total / 3600);\n const m = Math.floor((total % 3600) / 60);\n const s = total % 60;\n const pad = (n: number) => String(n).padStart(2, '0');\n return h > 0 ? `${h}:${pad(m)}:${pad(s)}` : `${pad(m)}:${pad(s)}`;\n}\n\nexport function legTitle(leg: ReissueLeg): string {\n return `${leg.direction || 'Leg'} · ${leg.originCode} → ${leg.destinationCode}`;\n}\n\nexport function airportOf(id: string, name: string, city: string, country: string): ReissueAirport {\n return { id, name: name || city || id, city_name: city || id, country_name: country, type: 'airport' };\n}\n\nexport const originAirport = (l: ReissueLeg): ReissueAirport =>\n airportOf(l.originCode, l.originName, l.originCityName, l.originCountryName);\n\nexport const destinationAirport = (l: ReissueLeg): ReissueAirport =>\n airportOf(l.destinationCode, l.destinationName, l.destinationCityName, l.destinationCountryName);\n\nexport const compareAirports = (a: ReissueAirport, b: ReissueAirport): boolean => a?.id === b?.id;\n\nexport function formatMoney(amount: number, currency: string): string {\n return `${amount.toLocaleString('en-US', { maximumFractionDigits: 2 })} ${currency}`.trim();\n}\n\n/** `21 Oct` — same short date the cancel dialog shows on a leg card. */\nexport function formatShortDate(value: string): string {\n if (!value) return '—';\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleDateString('en-GB', { day: '2-digit', month: 'short' });\n}\n\n/** `01:55` straight from the `YYYY-MM-DDTHH:mm:ss` string (no timezone conversion). */\nexport function formatTime(value: string): string {\n return value && value.length >= 16 && value[10] === 'T' ? value.slice(11, 16) : '—';\n}\n\n/**\n * The leg already departed. The booking gives no timezone for `LegDepartureDateTime` (airport local time), so this\n * compares with the agent's clock: it can be off by a few hours on the day of the flight, never by a day.\n */\nexport function isLegFlown(leg: { departure: string }): boolean {\n const time = leg.departure ? Date.parse(leg.departure) : NaN;\n return !Number.isNaN(time) && time < Date.now();\n}\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EMPTY, Observable, Subject, of, throwError } from 'rxjs';\nimport { catchError, debounceTime, distinctUntilChanged, map, switchMap, tap } from 'rxjs/operators';\n\nimport { SBD_CONFIG } from '../../config/dashboard.config';\nimport { SbdReissueService } from '../../services/reissue.service';\nimport {\n ReissueAirport,\n ReissueLeg,\n ReissueSelection,\n ReissueServiceKey,\n ReissueUpgradeOptionsResponse,\n} from '../../models/reissue.types';\nimport { buildReissueBookingContext, buildReissueSearchUrl } from '../../utils/reissue-url.builder';\nimport {\n destinationAirport,\n formatReissueDate,\n formatShortDate,\n formatTime,\n isLegFlown,\n legTitle,\n originAirport,\n todayIso,\n} from '../../utils/reissue-format';\n\n/** `legs` + `edit` serve change date / route; `upgrade-legs` + `upgrade` + `confirm` serve Upgrade Class. */\nexport type ReissueStep = 'service' | 'legs' | 'edit' | 'upgrade-legs' | 'upgrade' | 'confirm';\nexport type AirportSide = 'origin' | 'destination';\nexport interface RouteEdit { origin: ReissueAirport; destination: ReissueAirport }\nexport type AirportOption = ReissueAirport & { label: string };\n\n/** View models: everything the templates need is computed here, so the templates call no methods. */\nexport interface ReissueLegRow {\n leg: ReissueLeg;\n direction: string;\n from: string;\n to: string;\n dateLabel: string;\n depTime: string;\n arrTime: string;\n stopsLabel: string;\n airlineLine: string;\n /** The leg already departed (\"Used Flight\"): never selectable. */\n flown: boolean;\n available: boolean;\n /** Why a leg cannot be picked: it already flew, it is offline (no online reissue), or it has no upgrade options. */\n reason: 'flown' | 'offline' | 'no-options' | null;\n selected: boolean;\n}\n\nexport function buildLegRow(\n leg: ReissueLeg,\n available: boolean,\n selected: boolean,\n unavailableReason: 'offline' | 'no-options' = 'offline',\n): ReissueLegRow {\n const flown = isLegFlown(leg);\n return {\n leg,\n direction: leg.direction,\n from: leg.originCode,\n to: leg.destinationCode,\n dateLabel: formatShortDate(leg.departure),\n depTime: formatTime(leg.departure),\n arrTime: formatTime(leg.arrival),\n stopsLabel: leg.stops > 0 ? `${leg.stops} stop${leg.stops > 1 ? 's' : ''}` : 'Direct',\n airlineLine: [leg.airline, leg.flightNo].filter(Boolean).join(' · '),\n flown,\n available: available && !flown,\n reason: flown ? 'flown' : available ? null : unavailableReason,\n selected: selected && !flown,\n };\n}\nexport interface ReissueDateRow { leg: ReissueLeg; title: string; current: string; value: string; min: string; max: string }\nexport interface ReissueRouteRow { leg: ReissueLeg; title: string; current: string; origin: ReissueAirport; destination: ReissueAirport }\n\nconst START_ERROR = 'Could not start the reissue request.';\nconst AVAILABILITY_ERROR = 'Could not check availability for this booking.';\n\n/** `base (HTTP 500: message from the backend)` — so the agent (and we, while the APIs are new) can see why it failed. */\nfunction describeHttpError(base: string, e: unknown): string {\n const err = e as { status?: number; error?: { message?: string; error?: string } | string } | null;\n // The backend sends both: `error` (the real reason, e.g. \"Unauthorized!\") and a generic `message`.\n const body =\n typeof err?.error === 'string' ? [err.error] : [err?.error?.error, err?.error?.message];\n const text = body.filter(Boolean).join(' — ').slice(0, 200);\n const detail = [err?.status ? `HTTP ${err.status}` : '', text].filter(Boolean).join(': ');\n return detail ? `${base} (${detail})` : base;\n}\n\n/**\n * State + rules of the Reissue dialog (one instance per dialog, provided by the dialog component).\n * The step components are presentational: they get view models from here through the dialog shell.\n */\n@Injectable()\nexport class SbdReissueStore {\n private api = inject(SbdReissueService);\n private config = inject(SBD_CONFIG);\n\n readonly today = todayIso();\n\n // ── state ─────────────────────────────────────────────────────────────────\n private booking = signal<{ data: unknown; id: string } | null>(null);\n readonly step = signal<ReissueStep>('service');\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n readonly postBookingId = signal('');\n readonly service = signal<ReissueServiceKey | null>(null);\n /** Raw upgrade-class response; `null` when not loaded / not offered. Read by `SbdReissueUpgradeStore`. */\n readonly upgradeOptions = signal<ReissueUpgradeOptionsResponse | null>(null);\n readonly upgradeAvailable = computed(() => this.api.hasUpgradeOptions(this.upgradeOptions()));\n\n private availableIds = signal<ReadonlySet<string>>(new Set());\n /** The availability call answered (so \"no leg available\" is a real answer, not \"still loading\"). */\n private availabilityLoaded = signal(false);\n private selectedLegIds = signal<readonly string[]>([]);\n /** The \"select flight\" step was skipped (one-way): Back from the edit step returns to the service list. */\n private legsStepSkipped = signal(false);\n private dateEdits = signal<Readonly<Record<string, string>>>({});\n private routeEdits = signal<Readonly<Record<string, RouteEdit>>>({});\n private searchedAirports = signal<readonly ReissueAirport[]>([]);\n\n private load$ = new Subject<void>();\n private airportTerm$ = new Subject<string>();\n\n constructor() {\n this.load$.pipe(switchMap(() => this.loadFlow()), takeUntilDestroyed()).subscribe();\n\n // Debounced typeahead: one request per pause in typing, older in-flight ones are dropped.\n this.airportTerm$\n .pipe(\n debounceTime(250),\n distinctUntilChanged(),\n switchMap(term => this.api.searchAirports(term)),\n takeUntilDestroyed(),\n )\n .subscribe(list => this.searchedAirports.set(list));\n }\n\n // ── derived ───────────────────────────────────────────────────────────────\n readonly ctx = computed(() => {\n const b = this.booking();\n return b ? buildReissueBookingContext(b.data, b.id) : null;\n });\n readonly legs = computed(() => this.ctx()?.legs ?? []);\n private selectedSet = computed(() => new Set(this.selectedLegIds()));\n private selectedLegs = computed(() => this.legs().filter(l => this.selectedSet().has(l.legId)));\n\n readonly legRows = computed<ReissueLegRow[]>(() =>\n this.legs().map(leg => buildLegRow(leg, this.availableIds().has(leg.legId), this.selectedSet().has(leg.legId))),\n );\n\n /** The leg came back online from the availability check. */\n isLegOnline(legId: string): boolean {\n return this.availableIds().has(legId);\n }\n\n /** `false` = a round trip must be upgraded as a whole (availability's `allowCustomerToSelectSingleLeg`). */\n readonly allowSingleLegSelection = signal(true);\n readonly anyAvailable = computed(() => this.legRows().some(r => r.available));\n\n /**\n * No leg can be reissued online (offline, or already flown): the dialog shows this message instead of the options,\n * like the cancel dialog does for a booking it cannot auto-cancel. `null` while loading or when any leg is available.\n */\n readonly blocked = computed<{ title: string; text: string } | null>(() => {\n const rows = this.legRows();\n if (!this.availabilityLoaded() || !rows.length || rows.some(r => r.available)) return null;\n return rows.every(r => r.flown)\n ? { title: 'All flights of this booking have already departed.', text: 'There is nothing left to reissue.' }\n : {\n title: 'This booking doesn’t support online reissue.',\n text: 'Please escalate to the relevant team for manual handling.',\n };\n });\n readonly canContinue = computed(() => this.selectedLegIds().length > 0);\n\n /** A leg's date after the change: the new one when the agent is changing it, the original otherwise. */\n readonly dateRows = computed<ReissueDateRow[]>(() => {\n const legs = this.legs();\n const selected = this.selectedSet();\n const edits = this.dateEdits();\n const effective = (l: ReissueLeg) => (selected.has(l.legId) ? (edits[l.legId] ?? '') : l.departure.slice(0, 10));\n\n return legs.flatMap((leg, i) => {\n if (!selected.has(leg.legId)) return [];\n const prev = i > 0 ? effective(legs[i - 1]) : '';\n return [\n {\n leg,\n title: legTitle(leg),\n current: formatReissueDate(leg.departure),\n value: edits[leg.legId] ?? '',\n // Never before today or the previous leg; never after the next leg (same day is fine).\n min: prev > this.today ? prev : this.today,\n max: i < legs.length - 1 ? effective(legs[i + 1]) : '',\n },\n ];\n });\n });\n\n readonly routeRows = computed<ReissueRouteRow[]>(() => {\n const edits = this.routeEdits();\n return this.selectedLegs().map(leg => ({\n leg,\n title: legTitle(leg),\n current: formatReissueDate(leg.departure),\n origin: edits[leg.legId]?.origin ?? originAirport(leg),\n destination: edits[leg.legId]?.destination ?? destinationAirport(leg),\n }));\n });\n\n readonly airportOptions = computed<AirportOption[]>(() => {\n const byId = new Map<string, ReissueAirport>();\n // Order matters (later wins): the booking's own airports, the search results, then what is already picked.\n for (const l of this.legs()) {\n byId.set(l.originCode, originAirport(l));\n byId.set(l.destinationCode, destinationAirport(l));\n }\n for (const a of this.searchedAirports()) byId.set(a.id, a);\n for (const e of Object.values(this.routeEdits())) {\n byId.set(e.origin.id, e.origin);\n byId.set(e.destination.id, e.destination);\n }\n return [...byId.values()].map(a => ({ ...a, label: `${a.city_name} (${a.id}) – ${a.name}` }));\n });\n\n readonly validationError = computed<string | null>(() => {\n const service = this.service();\n if (!service || !this.selectedLegIds().length) return 'Select at least one leg.';\n\n if (service === 'change_date') {\n for (const { leg, value, min, max } of this.dateRows()) {\n const who = leg.direction || 'This leg';\n if (!value) return 'Pick a new date for every selected leg.';\n if (value < this.today) return 'The new date cannot be in the past.';\n if (value < min) return `${who} cannot depart before the previous flight (${min}).`;\n if (max && value > max) return `${who} cannot depart after the next flight (${max}).`;\n }\n return null;\n }\n\n let changed = false;\n for (const { leg, origin, destination } of this.routeRows()) {\n if (origin.id === destination.id) return 'Origin and destination must be different.';\n if (origin.id !== leg.originCode || destination.id !== leg.destinationCode) changed = true;\n }\n return changed ? null : 'Change at least one airport.';\n });\n\n // ── actions ───────────────────────────────────────────────────────────────\n\n /** (Re)starts the dialog for a booking: clears every choice, then loads post-booking + availability. */\n open(data: unknown, id: string): void {\n this.booking.set({ data, id });\n this.step.set('service');\n this.service.set(null);\n this.selectedLegIds.set([]);\n this.dateEdits.set({});\n this.routeEdits.set({});\n this.searchedAirports.set([]);\n this.postBookingId.set('');\n this.availableIds.set(new Set());\n this.availabilityLoaded.set(false);\n this.upgradeOptions.set(null);\n this.load();\n }\n\n load(): void {\n this.load$.next();\n }\n\n chooseService(service: ReissueServiceKey): void {\n if (this.loading() || this.error()) return;\n this.service.set(service);\n // A one-way with its only leg online has nothing to choose: skip \"select flight\" and go straight to editing.\n // (An offline one-way still shows the step, so the agent sees why it cannot be changed.)\n const rows = this.legRows();\n if (rows.length === 1 && rows[0].available) {\n this.selectedLegIds.set([rows[0].leg.legId]);\n this.legsStepSkipped.set(true);\n this.goToEdit();\n return;\n }\n this.legsStepSkipped.set(false);\n this.selectedLegIds.set([]);\n this.step.set('legs');\n }\n\n toggleLeg(legId: string): void {\n if (!this.availableIds().has(legId)) return;\n this.selectedLegIds.update(ids => (ids.includes(legId) ? ids.filter(i => i !== legId) : [...ids, legId]));\n }\n\n /** Legs -> edit: seed each selected leg with its current date / airports. */\n goToEdit(): void {\n if (!this.canContinue()) return;\n if (this.service() === 'change_date') {\n this.dateEdits.update(edits => {\n const next = { ...edits };\n for (const l of this.selectedLegs()) next[l.legId] ??= l.departure.slice(0, 10);\n return next;\n });\n } else {\n this.routeEdits.update(edits => {\n const next = { ...edits };\n for (const l of this.selectedLegs()) {\n next[l.legId] ??= { origin: originAirport(l), destination: destinationAirport(l) };\n }\n return next;\n });\n }\n this.step.set('edit');\n }\n\n goTo(step: ReissueStep): void {\n this.step.set(step);\n }\n\n back(): void {\n const previous: Record<ReissueStep, ReissueStep> = {\n service: 'service',\n legs: 'service',\n edit: this.legsStepSkipped() ? 'service' : 'legs',\n 'upgrade-legs': 'service',\n upgrade: 'service', // the upgrade store overrides this when the leg step was shown\n confirm: 'upgrade',\n };\n this.step.update(s => previous[s]);\n }\n\n setDate(legId: string, date: string): void {\n this.dateEdits.update(edits => ({ ...edits, [legId]: date }));\n }\n\n setAirport(legId: string, side: AirportSide, airport: ReissueAirport | null): void {\n if (!airport) return;\n const current = this.routeRows().find(r => r.leg.legId === legId);\n if (!current) return;\n this.routeEdits.update(edits => ({\n ...edits,\n [legId]: { origin: current.origin, destination: current.destination, [side]: airport },\n }));\n }\n\n /** Swaps a leg's origin and destination (the arrow between the two pickers). */\n swapAirports(legId: string): void {\n const current = this.routeRows().find(r => r.leg.legId === legId);\n if (!current) return;\n this.routeEdits.update(edits => ({\n ...edits,\n [legId]: { origin: current.destination, destination: current.origin },\n }));\n }\n\n searchAirports(term: string): void {\n this.airportTerm$.next(term ?? '');\n }\n\n /** The web search URL for the current choices, or `null` when they are not valid yet. */\n searchUrl(): string | null {\n const ctx = this.ctx();\n const service = this.service();\n if (!ctx || !service || service === 'upgrade_class' || this.validationError()) return null;\n\n const selection: ReissueSelection = {\n service,\n legs:\n service === 'change_date'\n ? this.dateRows().map(r => ({ legId: r.leg.legId, departDate: r.value }))\n : this.routeRows().map(r => ({ legId: r.leg.legId, origin: r.origin, destination: r.destination })),\n };\n return buildReissueSearchUrl(this.config.webBaseUrl, ctx, selection, this.postBookingId());\n }\n\n // ── loading: post-booking -> availability -> upgrade options (once per dialog visit) ─────────\n\n private loadFlow(): Observable<unknown> {\n const ctx = this.ctx();\n if (!ctx) {\n this.error.set('This booking has no leg data to reissue.');\n return EMPTY;\n }\n this.loading.set(true);\n this.error.set(null);\n\n return this.api.createPostBooking(ctx.bookingId).pipe(\n switchMap(postBookingId => {\n if (!postBookingId) return throwError(() => START_ERROR);\n this.postBookingId.set(postBookingId);\n return this.api.getAvailability(ctx.bookingId, postBookingId, ctx).pipe(\n catchError(e => throwError(() => describeHttpError(AVAILABILITY_ERROR, e))),\n tap(res => {\n // A leg that already flew can never be changed, whatever availability says: treat it as offline.\n const flown = new Set(ctx.legs.filter(isLegFlown).map(l => l.legId));\n this.availableIds.set(\n new Set((res?.data?.legs ?? []).filter(l => l.available && !flown.has(l.legId)).map(l => l.legId)),\n );\n this.allowSingleLegSelection.set(res?.data?.allowCustomerToSelectSingleLeg ?? true);\n this.availabilityLoaded.set(true);\n }),\n switchMap(() => this.offersUpgrade(ctx.tripType, ctx.legs, postBookingId)),\n );\n }),\n tap(options => {\n this.upgradeOptions.set(options);\n this.loading.set(false);\n }),\n catchError((e: unknown) => {\n this.error.set(typeof e === 'string' ? e : describeHttpError(START_ERROR, e));\n this.loading.set(false);\n return EMPTY;\n }),\n );\n }\n\n /**\n * The upgrade-class options (same rule as the web for listing \"Upgrade Class\"): skipped for a one-way whose\n * only leg is offline; a failing call just yields `null` (option hidden) instead of blocking the dialog.\n */\n private offersUpgrade(\n tripType: string,\n legs: readonly ReissueLeg[],\n postBookingId: string,\n ): Observable<ReissueUpgradeOptionsResponse | null> {\n const ctx = this.ctx();\n const oneWayOffline = tripType === 'OneWay' && !this.availableIds().has(legs[0]?.legId);\n if (!ctx || !legs.length || oneWayOffline) return of(null);\n return this.api\n .getUpgradeClassOptions(ctx.bookingId, postBookingId, ctx)\n .pipe(catchError(() => of(null)));\n }\n}\n","import { DestroyRef, Injectable, computed, effect, inject, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { finalize } from 'rxjs/operators';\n\nimport { SbdReissueService } from '../../services/reissue.service';\nimport {\n ReissueChooseFlightRequest,\n ReissuePaymentLink,\n ReissueUpgradeExistingLeg,\n ReissueUpgradeOption,\n ReissueUpgradeOptionsResponse,\n} from '../../models/reissue.types';\nimport { formatMoney } from '../../utils/reissue-format';\nimport { ReissueLegRow, SbdReissueStore, buildLegRow } from './reissue.store';\n\n/** View models for the Upgrade Class steps. */\nexport interface UpgradeOptionRow { key: string; name: string; code: string; extraLabel: string; selected: boolean; unavailable: boolean }\nexport interface UpgradeSectionRow { id: string; title: string; current: string; options: UpgradeOptionRow[] }\nexport interface UpgradeSummaryRow { title: string; from: string; to: string; extraLabel: string }\n/** What the primary button of the confirm step does. */\nexport type UpgradeAction = 'book' | 'link' | 'done';\n\ninterface RawSection { id: string; title: string; current: string; options: ReissueUpgradeOption[] }\ninterface UpgradePick { section: RawSection; option: ReissueUpgradeOption }\n\nconst extraOf = (o: ReissueUpgradeOption): number => o.fareDetails?.totalAdditionalFare ?? o.priceDifference ?? 0;\nconst routeOf = (l: Pick<ReissueUpgradeExistingLeg, 'origin' | 'destination'>): string => `${l.origin} → ${l.destination}`;\nconst currentOf = (l?: ReissueUpgradeExistingLeg): string => {\n if (!l) return '';\n const cabin = [l.class, l.fareBrand?.name].filter(Boolean).join(' · ');\n return cabin ? `Current: ${cabin}` : '';\n};\n\n/**\n * Upgrade Class flow: pick the new class -> price it (choose-flight) -> confirm (book-now when nothing to pay,\n * otherwise a backend-generated payment link). Reads the options the main store already loaded.\n */\n@Injectable()\nexport class SbdReissueUpgradeStore {\n private main = inject(SbdReissueStore);\n private api = inject(SbdReissueService);\n private destroyRef = inject(DestroyRef);\n\n readonly submitting = signal(false);\n readonly error = signal<string | null>(null);\n readonly priceChanged = signal(false);\n /** `book-now` succeeded (nothing to pay): the reissue is being placed with the supplier. */\n readonly booked = signal(false);\n readonly paymentLink = signal<ReissuePaymentLink | null>(null);\n\n private selected = signal<Readonly<Record<string, string>>>({}); // sectionId -> referenceKey\n private unavailableKeys = signal<ReadonlySet<string>>(new Set());\n\n /** Legs the agent chose to upgrade (the \"select leg\" step; a one-way preselects its only leg). */\n private legIds = signal<readonly string[]>([]);\n /** Options fetched for a partial leg selection; `null` = the options loaded when the dialog opened (all legs) apply. */\n private freshOptions = signal<ReissueUpgradeOptionsResponse | null>(null);\n private legsStepSkipped = signal(false);\n\n constructor() {\n // A fresh options response (new dialog visit / retry) starts the flow over.\n effect(\n () => {\n this.main.upgradeOptions();\n untracked(() => this.reset());\n },\n { allowSignalWrites: true },\n );\n }\n\n // ── derived ───────────────────────────────────────────────────────────────\n readonly currency = computed(() => this.main.ctx()?.currency ?? '');\n\n /** The options to show: for a partial leg selection the fresh response, otherwise the one loaded with the dialog. */\n private options = computed(() => this.freshOptions() ?? this.main.upgradeOptions());\n\n // ── leg selection ─────────────────────────────────────────────────────────\n\n /** A leg can be upgraded only if it is online AND has upgrade options (per leg for leg scope; booking scope applies to all). */\n private legUpgradable(legId: string, index: number): boolean {\n if (!this.main.isLegOnline(legId)) return false;\n const data = this.main.upgradeOptions();\n if (!data) return false;\n if (data.fareOptionScope === 'leg') {\n return (data.legs?.find(l => l.legIndex === index)?.options?.length ?? 0) > 0;\n }\n return (data.options?.length ?? 0) > 0;\n }\n\n readonly legRows = computed<ReissueLegRow[]>(() => {\n const chosen = new Set(this.legIds());\n return this.main\n .legs()\n .map((leg, i) =>\n buildLegRow(leg, this.legUpgradable(leg.legId, i), chosen.has(leg.legId), this.main.isLegOnline(leg.legId) ? 'no-options' : 'offline'),\n );\n });\n readonly anyLegUpgradable = computed(() => this.legRows().some(r => r.available));\n readonly canContinueFromLegs = computed(() => this.legIds().length > 0 && !this.submitting());\n\n /** Legs the options on screen were requested for (all of them, or just the selected ones after a partial fetch). */\n private optionLegs = computed(() => {\n const all = this.main.legs();\n return this.freshOptions() ? all.filter(l => this.legIds().includes(l.legId)) : all;\n });\n\n private rawSections = computed<RawSection[]>(() => {\n const data = this.options();\n if (!data) return [];\n\n if (data.fareOptionScope === 'leg') {\n return (data.legs ?? []).map(leg => ({\n id: String(leg.legIndex),\n title: routeOf({ origin: leg.origin ?? leg.existingLeg.origin, destination: leg.destination ?? leg.existingLeg.destination }),\n current: currentOf(leg.existingLeg),\n options: leg.options ?? [],\n }));\n }\n const originals = data.existingLegs ?? data.originalLegs ?? [];\n return [\n {\n id: 'booking',\n title: originals.map(routeOf).join(' · ') || 'Whole booking',\n current: currentOf(originals[0]),\n options: data.options ?? [],\n },\n ];\n });\n\n readonly sections = computed<UpgradeSectionRow[]>(() => {\n const selected = this.selected();\n const unavailable = this.unavailableKeys();\n const currency = this.currency();\n return this.rawSections().map(s => ({\n id: s.id,\n title: s.title,\n current: s.current,\n options: s.options.map(o => {\n const extra = extraOf(o);\n return {\n key: o.referenceKey,\n name: o.name,\n code: o.code,\n extraLabel: extra > 0 ? `+${formatMoney(extra, currency)}` : 'No extra cost',\n selected: selected[s.id] === o.referenceKey,\n unavailable: unavailable.has(o.referenceKey),\n };\n }),\n }));\n });\n\n private picks = computed<UpgradePick[]>(() => {\n const selected = this.selected();\n return this.rawSections().flatMap(section => {\n const option = section.options.find(o => o.referenceKey === selected[section.id]);\n return option ? [{ section, option }] : [];\n });\n });\n\n readonly canContinue = computed(() => this.picks().length > 0 && !this.submitting());\n\n /**\n * Amount to pay: the sum of the picked options' additional fare (same as the web's `getTotalToPay`).\n * choose-flight's own `price` is deliberately not used — it is not known whether it is the difference or the full fare.\n */\n readonly total = computed(() => this.picks().reduce((sum, p) => sum + extraOf(p.option), 0));\n readonly totalLabel = computed(() => (this.total() > 0 ? formatMoney(this.total(), this.currency()) : 'Nothing to pay'));\n\n readonly summary = computed<UpgradeSummaryRow[]>(() =>\n this.picks().map(({ section, option }) => ({\n title: section.title,\n from: section.current.replace(/^Current:\\s*/, ''),\n to: option.name,\n extraLabel: extraOf(option) > 0 ? `+${formatMoney(extraOf(option), this.currency())}` : 'No extra cost',\n })),\n );\n\n readonly action = computed<UpgradeAction>(() => {\n if (this.booked() || this.paymentLink()) return 'done';\n return this.total() > 0 ? 'link' : 'book';\n });\n\n /** Nothing can be changed any more once the upgrade is placed or a link was generated. */\n readonly locked = computed(() => this.booked() || !!this.paymentLink() || this.submitting());\n\n // ── actions ───────────────────────────────────────────────────────────────\n\n /**\n * Service picked: go to \"select leg\", unless there is nothing to choose (one-way with its only leg upgradable),\n * which goes straight to the options like the web.\n */\n start(): void {\n if (this.main.loading() || this.main.error()) return;\n this.main.service.set('upgrade_class');\n this.freshOptions.set(null);\n this.selected.set({});\n this.error.set(null);\n\n const upgradable = this.legRows().filter(r => r.available);\n if (this.legRows().length === 1 && upgradable.length === 1) {\n this.legIds.set([upgradable[0].leg.legId]);\n this.legsStepSkipped.set(true);\n this.main.goTo('upgrade');\n return;\n }\n this.legsStepSkipped.set(false);\n // \"Upgrade as a whole\" bookings: every upgradable leg is preselected and cannot be unticked.\n this.legIds.set(this.main.allowSingleLegSelection() ? [] : upgradable.map(r => r.leg.legId));\n this.main.goTo('upgrade-legs');\n }\n\n toggleLeg(legId: string): void {\n const row = this.legRows().find(r => r.leg.legId === legId);\n if (!row?.available || !this.main.allowSingleLegSelection()) return;\n this.error.set(null);\n this.legIds.update(ids => (ids.includes(legId) ? ids.filter(i => i !== legId) : [...ids, legId]));\n }\n\n /**\n * Select leg -> options. All legs selected: reuse the options loaded with the dialog. A subset: fetch the options\n * again for just those legs (the earlier response covers the whole booking, so it would price the wrong legs).\n */\n continueFromLegs(): void {\n const ctx = this.main.ctx();\n const chosen = this.main.legs().filter(l => this.legIds().includes(l.legId));\n if (!ctx || !chosen.length || !this.canContinueFromLegs()) return;\n\n this.selected.set({});\n this.unavailableKeys.set(new Set());\n if (chosen.length === this.main.legs().length) {\n this.freshOptions.set(null);\n this.main.goTo('upgrade');\n return;\n }\n\n this.submitting.set(true);\n this.error.set(null);\n this.api\n .getUpgradeClassOptions(ctx.bookingId, this.main.postBookingId(), { ...ctx, legs: chosen })\n .pipe(\n finalize(() => this.submitting.set(false)),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe({\n next: data => {\n if (!this.api.hasUpgradeOptions(data)) {\n this.error.set('No upgrade is available for the selected flight(s).');\n return;\n }\n this.freshOptions.set(data);\n this.main.goTo('upgrade');\n },\n error: () => this.error.set('Could not load the upgrade options for the selected flight(s).'),\n });\n }\n\n /** Back from the options: to \"select leg\" when that step was shown, otherwise to the service list. */\n back(): void {\n this.main.goTo(this.legsStepSkipped() ? 'service' : 'upgrade-legs');\n }\n\n select(sectionId: string, key: string): void {\n if (this.unavailableKeys().has(key)) return;\n this.error.set(null);\n this.selected.update(s => ({ ...s, [sectionId]: key }));\n }\n\n /** Options -> confirm: prices the pick(s) with choose-flight (same body the web sends). */\n continue(): void {\n const ctx = this.main.ctx();\n const picks = this.picks();\n if (!ctx || !picks.length || !this.canContinue()) return;\n\n this.submitting.set(true);\n this.error.set(null);\n this.api\n .chooseFlight(ctx.bookingId, this.main.postBookingId(), this.chooseBody(picks))\n .pipe(\n finalize(() => this.submitting.set(false)),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe({\n next: res => {\n if (res?.itineraryAvailable === false) {\n this.unavailableKeys.update(keys => new Set([...keys, ...picks.map(p => p.option.referenceKey)]));\n this.selected.set({});\n this.error.set('This option is no longer available. Please choose another one.');\n return;\n }\n this.priceChanged.set(res?.priceChanged === true);\n this.main.goTo('confirm');\n },\n error: () => this.error.set('Could not price the selected upgrade. Please try again.'),\n });\n }\n\n /** Confirm step primary action: place the free upgrade, or generate the payment link. */\n confirm(): void {\n const action = this.action();\n if (action === 'done' || this.submitting()) return;\n const postBookingId = this.main.postBookingId();\n\n this.submitting.set(true);\n this.error.set(null);\n const request$ =\n action === 'book'\n ? this.api.bookNow(postBookingId)\n : this.api.getPaymentLink(postBookingId, this.total(), this.currency());\n\n request$\n .pipe(\n finalize(() => this.submitting.set(false)),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe({\n next: res => {\n // The dialog does not follow the result (no confirmation-status): after `book-now`, or once the link is\n // sent, the agent follows the booking from the dashboard.\n if (action === 'book') this.booked.set(true);\n else this.paymentLink.set(res as ReissuePaymentLink);\n },\n error: (err: unknown) =>\n this.error.set(\n action === 'book'\n ? 'Could not place the upgrade. Please try again.'\n : err instanceof Error && err.message.startsWith('The cart ')\n ? err.message\n : 'Could not get the payment link. Please try again.',\n ),\n });\n }\n\n private reset(): void {\n this.selected.set({});\n this.unavailableKeys.set(new Set());\n this.legIds.set([]);\n this.freshOptions.set(null);\n this.legsStepSkipped.set(false);\n this.submitting.set(false);\n this.error.set(null);\n this.priceChanged.set(false);\n this.booked.set(false);\n this.paymentLink.set(null);\n }\n\n /** Booking scope: one itinerary. Leg scope: each picked leg as onwardLeg / returnLeg (by the real leg direction). */\n private chooseBody(picks: UpgradePick[]): ReissueChooseFlightRequest {\n const scope = this.options()?.fareOptionScope ?? 'booking';\n if (scope !== 'leg') return { fareOptionScope: 'booking', ItineraryId: picks[0].option.referenceKey };\n\n // A partial fetch re-indexes the sections from 0, so resolve the direction from the legs the options were requested for.\n const legs = this.optionLegs();\n const toLeg = (p?: UpgradePick) => (p ? { legId: p.option.referenceKey, providerType: p.option.providerType } : undefined);\n const isReturn = (p: UpgradePick) => legs[Number(p.section.id)]?.direction === 'Return';\n return {\n fareOptionScope: 'leg',\n onwardLeg: toLeg(picks.find(p => !isReturn(p))),\n returnLeg: toLeg(picks.find(isReturn)),\n };\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/** Icon + message box used for the info callout, loading / error states and the validation hint. */\n@Component({\n selector: 'app-sbd-reissue-notice',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': '\"sbd-notice sbd-notice--\" + tone()' },\n template: `<i [class]=\"icon()\"></i><span class=\"sbd-notice__text\"><ng-content /></span><ng-content select=\"[action]\" />`,\n styleUrl: './reissue-notice.component.scss',\n})\nexport class SbdReissueNoticeComponent {\n icon = input('pi pi-info-circle');\n tone = input<'info' | 'error' | 'warn' | 'muted' | 'success'>('info');\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { UpgradeSectionRow } from '../../reissue-upgrade.store';\nimport { SbdReissueNoticeComponent } from '../reissue-notice/reissue-notice.component';\n\n/** New-class options as radio cards, in the look of the cancel dialog's refund-method options. */\n@Component({\n selector: 'app-sbd-reissue-upgrade-step',\n standalone: true,\n imports: [SbdReissueNoticeComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (error()) {\n <app-sbd-reissue-notice tone=\"error\" icon=\"pi pi-exclamation-circle\">{{ error() }}</app-sbd-reissue-notice>\n }\n\n @for (section of sections(); track section.id) {\n <section class=\"sbd-rup__section\">\n <div class=\"sbd-rup__head\">\n <span class=\"sbd-rup__route\">{{ section.title }}</span>\n @if (section.current) { <span class=\"sbd-rup__current\">{{ section.current }}</span> }\n </div>\n\n @if (!section.options.length) {\n <span class=\"sbd-rup__empty\">No upgrade available for this flight.</span>\n }\n\n @for (option of section.options; track option.key) {\n <button type=\"button\" class=\"sbd-rup__option\"\n [class.sbd-rup__option--active]=\"option.selected\"\n [disabled]=\"option.unavailable\"\n (click)=\"picked.emit({ sectionId: section.id, key: option.key })\">\n <span class=\"sbd-rup__radio\" [class.sbd-rup__radio--on]=\"option.selected\"></span>\n <span class=\"sbd-rup__text\">\n <strong>{{ option.name }}</strong>\n <small>{{ option.code }}</small>\n </span>\n @if (option.unavailable) {\n <span class=\"sbd-rup__unavailable\">Not available</span>\n } @else {\n <span class=\"sbd-rup__price\">{{ option.extraLabel }}</span>\n }\n </button>\n }\n </section>\n }\n `,\n styleUrl: './reissue-upgrade-step.component.scss',\n host: { class: 'sbd-rup' },\n})\nexport class SbdReissueUpgradeStepComponent {\n sections = input.required<UpgradeSectionRow[]>();\n error = input<string | null>(null);\n picked = output<{ sectionId: string; key: string }>();\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, computed, inject, input, output, signal } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { ReissuePaymentLink } from '../../../../models/reissue.types';\nimport { formatCountdown, parseLinkExpiry } from '../../../../utils/reissue-format';\nimport { UpgradeSummaryRow } from '../../reissue-upgrade.store';\nimport { SbdReissueNoticeComponent } from '../reissue-notice/reissue-notice.component';\n\n@Component({\n selector: 'app-sbd-reissue-upgrade-confirm-step',\n standalone: true,\n imports: [ButtonModule, SbdReissueNoticeComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (priceChanged()) {\n <app-sbd-reissue-notice tone=\"warn\" icon=\"pi pi-exclamation-triangle\">\n The price changed since the options were loaded. Check the total below.\n </app-sbd-reissue-notice>\n }\n @if (error()) {\n <app-sbd-reissue-notice tone=\"error\" icon=\"pi pi-exclamation-circle\">{{ error() }}</app-sbd-reissue-notice>\n }\n\n <div class=\"sbd-rconf__summary\">\n @for (row of rows(); track row.title) {\n <div class=\"sbd-rconf__row\">\n <span class=\"sbd-rconf__row-main\">\n <b>{{ row.title }}</b>\n <small>{{ row.from ? row.from + ' → ' : '' }}{{ row.to }}</small>\n </span>\n <strong>{{ row.extraLabel }}</strong>\n </div>\n }\n <div class=\"sbd-rconf__total\">\n <span>Total to pay</span>\n <strong>{{ totalLabel() }}</strong>\n </div>\n </div>\n\n @if (link(); as link) {\n @if (expired()) {\n <app-sbd-reissue-notice tone=\"error\" icon=\"pi pi-clock\">\n The payment link expired. Start the upgrade again from the beginning.\n <button action pButton type=\"button\" class=\"p-button-sm p-button-outlined p-button-secondary\" label=\"Start again\"\n (click)=\"restart.emit()\"></button>\n </app-sbd-reissue-notice>\n } @else {\n <div class=\"sbd-rconf__link\">\n <div class=\"sbd-rconf__link-head\"><b>Payment link</b><small>Send it to the customer</small></div>\n <div class=\"sbd-rconf__link-row\">\n <input class=\"sbd-rconf__link-input\" readonly [value]=\"link.url\" (focus)=\"$any($event.target).select()\" />\n <button pButton type=\"button\" class=\"p-button-sm p-button-outlined p-button-secondary\"\n [icon]=\"copied() ? 'pi pi-check' : 'pi pi-copy'\" [label]=\"copied() ? 'Copied' : 'Copy'\" (click)=\"copy(link.url)\"></button>\n </div>\n @if (countdown(); as left) {\n <small class=\"sbd-rconf__expiry\" [class.sbd-rconf__expiry--soon]=\"soon()\">Link expires in {{ left }}</small>\n } @else if (link.expiresAt) {\n <small class=\"sbd-rconf__expiry\">Expires {{ link.expiresAt.slice(0, 16).replace('T', ' ') }}</small>\n }\n </div>\n }\n }\n\n <!-- The dialog does not follow the result: after book-now, or once the link is sent, the agent follows the booking. -->\n @if (booked()) {\n <app-sbd-reissue-notice tone=\"success\" icon=\"pi pi-check-circle\">\n The upgrade request was sent. Check the booking for the result.\n </app-sbd-reissue-notice>\n } @else if (link()) {\n @if (!expired()) {\n <app-sbd-reissue-notice tone=\"success\" icon=\"pi pi-check-circle\">\n Copy the link and send it to the customer. The upgrade is placed once they pay: check the booking then.\n </app-sbd-reissue-notice>\n }\n } @else {\n <app-sbd-reissue-notice icon=\"pi pi-info-circle\">\n {{ total() > 0\n ? 'A payment link will be generated for the customer to pay the difference.'\n : 'Nothing to pay: confirming places the upgrade straight away.' }}\n </app-sbd-reissue-notice>\n }\n `,\n styleUrl: './reissue-upgrade-confirm-step.component.scss',\n host: { class: 'sbd-rconf' },\n})\nexport class SbdReissueUpgradeConfirmStepComponent {\n rows = input.required<UpgradeSummaryRow[]>();\n total = input(0);\n totalLabel = input('');\n priceChanged = input(false);\n /** `book-now` was sent. */\n booked = input(false);\n link = input<ReissuePaymentLink | null>(null);\n error = input<string | null>(null);\n /** The link expired and the agent chose to redo the upgrade from the beginning. */\n restart = output<void>();\n\n protected copied = signal(false);\n\n /** Ticks every second so the countdown (and the expired state) update on their own. */\n private now = signal(Date.now());\n private remainingMs = computed(() => {\n const expiry = parseLinkExpiry(this.link()?.expiresAt);\n return expiry == null ? null : expiry - this.now();\n });\n protected expired = computed(() => {\n const left = this.remainingMs();\n return left != null && left <= 0;\n });\n /** `mm:ss` until the link expires; empty when the backend sent no (valid) expiry. */\n protected countdown = computed(() => {\n const left = this.remainingMs();\n return left == null || left <= 0 ? '' : formatCountdown(left);\n });\n /** Last two minutes: highlight the countdown. */\n protected soon = computed(() => (this.remainingMs() ?? Infinity) <= 2 * 60 * 1000);\n\n constructor() {\n const timer = setInterval(() => this.now.set(Date.now()), 1000);\n inject(DestroyRef).onDestroy(() => clearInterval(timer));\n }\n\n protected async copy(url: string): Promise<void> {\n try {\n await navigator.clipboard.writeText(url);\n this.copied.set(true);\n setTimeout(() => this.copied.set(false), 1500);\n } catch {\n // Clipboard blocked (e.g. insecure context): the input is selectable, so the agent can still copy by hand.\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { ReissueServiceKey } from '../../../../models/reissue.types';\n\ninterface ServiceOption { key: ReissueServiceKey; icon: string; title: string; description: string }\n\nconst OPTIONS: ServiceOption[] = [\n { key: 'change_date', icon: 'pi pi-calendar', title: 'Change Flight Date', description: 'Move one or more flights to a new date' },\n { key: 'change_route', icon: 'pi pi-map', title: 'Change Route', description: 'Change the origin or destination airport' },\n { key: 'upgrade_class', icon: 'pi pi-arrow-up', title: 'Upgrade Class', description: 'Move to a higher cabin or fare class' },\n];\n\n@Component({\n selector: 'app-sbd-reissue-service-step',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @for (option of options(); track option.key) {\n <button type=\"button\" class=\"sbd-rsvc__option\" (click)=\"chosen.emit(option.key)\">\n <span class=\"sbd-rsvc__icon\"><i [class]=\"option.icon\"></i></span>\n <span class=\"sbd-rsvc__text\">\n <strong>{{ option.title }}</strong>\n <small>{{ option.description }}</small>\n </span>\n <i class=\"pi pi-chevron-right sbd-rsvc__arrow\"></i>\n </button>\n }\n `,\n styleUrl: './reissue-service-step.component.scss',\n host: { class: 'sbd-rsvc' },\n})\nexport class SbdReissueServiceStepComponent {\n upgradeAvailable = input(false);\n chosen = output<ReissueServiceKey>();\n\n /** Upgrade Class is listed only when the upgrade-class API returned options. */\n protected options = computed(() => OPTIONS.filter(o => o.key !== 'upgrade_class' || this.upgradeAvailable()));\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { ReissueLegRow } from '../../reissue.store';\nimport { SbdReissueNoticeComponent } from '../reissue-notice/reissue-notice.component';\n\n/** Leg cards in the cancel dialog's \"Select Leg\" design: checkbox overlay, outline badge, times row. */\n@Component({\n selector: 'app-sbd-reissue-legs-step',\n standalone: true,\n imports: [SbdReissueNoticeComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (!anyAvailable()) {\n <app-sbd-reissue-notice tone=\"warn\" icon=\"pi pi-exclamation-triangle\">{{ unavailableText() }}</app-sbd-reissue-notice>\n }\n @if (note()) {\n <app-sbd-reissue-notice icon=\"pi pi-info-circle\">{{ note() }}</app-sbd-reissue-notice>\n }\n @if (error()) {\n <app-sbd-reissue-notice tone=\"error\" icon=\"pi pi-exclamation-circle\">{{ error() }}</app-sbd-reissue-notice>\n }\n\n @for (row of rows(); track row.leg.legId) {\n <div class=\"sbd-rlegs__card\" role=\"checkbox\" tabindex=\"0\"\n [attr.aria-checked]=\"row.selected\" [attr.aria-disabled]=\"!row.available\"\n [class.sbd-rlegs__card--selected]=\"row.selected\"\n [class.sbd-rlegs__card--disabled]=\"!row.available\"\n (click)=\"toggled.emit(row.leg.legId)\"\n (keydown.enter)=\"toggled.emit(row.leg.legId)\"\n (keydown.space)=\"$event.preventDefault(); toggled.emit(row.leg.legId)\">\n\n <span class=\"sbd-rlegs__checkbox\" [class.sbd-rlegs__checkbox--on]=\"row.selected\" [class.sbd-rlegs__checkbox--off]=\"!row.available\">\n <i class=\"pi pi-check\"></i>\n </span>\n\n <div class=\"sbd-rlegs__content\">\n <div class=\"sbd-rlegs__top\">\n <div>\n <span class=\"sbd-rlegs__name\">{{ row.from }} to {{ row.to }}</span>\n <div class=\"sbd-rlegs__date\">{{ row.direction ? row.direction + ' · ' : '' }}{{ row.dateLabel }}</div>\n </div>\n <span class=\"sbd-rlegs__badge\" [class.sbd-rlegs__badge--green]=\"row.available\">\n {{ row.reason === 'flown' ? 'Used Flight' : row.reason === 'offline' ? 'Not supported' : row.reason ? 'Not available' : 'Available' }}\n </span>\n </div>\n\n <div class=\"sbd-rlegs__times\">\n <span class=\"sbd-rlegs__time\">{{ row.depTime }}</span>\n <span class=\"sbd-rlegs__line\">\n <span class=\"sbd-rlegs__stops\">{{ row.stopsLabel }}</span>\n <i class=\"pi pi-arrow-right sbd-rlegs__arrow\"></i>\n </span>\n <span class=\"sbd-rlegs__time\">{{ row.arrTime }}</span>\n </div>\n\n @if (row.airlineLine) { <span class=\"sbd-rlegs__airline\">{{ row.airlineLine }}</span> }\n\n @if (!row.available) {\n <div class=\"sbd-rlegs__notice\">\n <i class=\"pi pi-info-circle\"></i>\n <span>{{ reasonText(row.reason) }}</span>\n </div>\n }\n </div>\n </div>\n }\n `,\n styleUrl: './reissue-legs-step.component.scss',\n host: { class: 'sbd-rlegs' },\n})\nexport class SbdReissueLegsStepComponent {\n rows = input.required<ReissueLegRow[]>();\n anyAvailable = input(true);\n unavailableText = input('None of these flights can be changed online. Handle this booking manually.');\n /** Extra info line, e.g. \"these flights must be upgraded together\". */\n note = input<string | null>(null);\n error = input<string | null>(null);\n toggled = output<string>();\n\n /** The note under a disabled leg. */\n protected reasonText(reason: ReissueLegRow['reason']): string {\n switch (reason) {\n case 'flown': return 'This flight has already departed.';\n case 'no-options': return 'No upgrade options are available for this flight.';\n default: return 'This flight doesn’t support online reissue.';\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { ReissueDateRow } from '../../reissue.store';\n\n@Component({\n selector: 'app-sbd-reissue-date-step',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @for (row of rows(); track row.leg.legId) {\n <div class=\"sbd-rdate__card\">\n <div class=\"sbd-rdate__head\">\n <span class=\"sbd-rdate__name\">{{ row.leg.originCode }} to {{ row.leg.destinationCode }}</span>\n <span class=\"sbd-rdate__current\">Currently {{ row.current }}</span>\n </div>\n <label class=\"sbd-rdate__field\">\n <span>New departure date</span>\n <input type=\"date\" class=\"sbd-rdate__input\"\n [value]=\"row.value\" [min]=\"row.min\" [attr.max]=\"row.max || null\"\n (input)=\"changed.emit({ legId: row.leg.legId, date: $any($event.target).value })\" />\n </label>\n </div>\n }\n `,\n styleUrl: './reissue-date-step.component.scss',\n host: { class: 'sbd-rdate' },\n})\nexport class SbdReissueDateStepComponent {\n rows = input.required<ReissueDateRow[]>();\n changed = output<{ legId: string; date: string }>();\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { ReissueAirport } from '../../../../models/reissue.types';\nimport { compareAirports } from '../../../../utils/reissue-format';\nimport { AirportOption, AirportSide, ReissueRouteRow } from '../../reissue.store';\n\n@Component({\n selector: 'app-sbd-reissue-route-step',\n standalone: true,\n imports: [FormsModule, NgSelectModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @for (row of rows(); track row.leg.legId) {\n <div class=\"sbd-rroute__card\">\n <div class=\"sbd-rroute__head\">\n <span class=\"sbd-rroute__name\">{{ row.leg.originCode }} to {{ row.leg.destinationCode }}</span>\n <span class=\"sbd-rroute__current\">Currently {{ row.current }}</span>\n </div>\n\n <div class=\"sbd-rroute__pair\">\n @for (side of sides; track side.key) {\n <label class=\"sbd-rroute__field\">\n <span>{{ side.label }}</span>\n <ng-select class=\"sbd-rroute__select\" bindLabel=\"label\" [clearable]=\"false\"\n [items]=\"options()\" [compareWith]=\"compare\" [ngModel]=\"row[side.key]\"\n (ngModelChange)=\"airportChanged.emit({ legId: row.leg.legId, side: side.key, airport: $event })\"\n (search)=\"searched.emit($event.term)\">\n <ng-template ng-label-tmp let-item=\"item\">{{ item.city_name }} ({{ item.id }})</ng-template>\n <ng-template ng-option-tmp let-item=\"item\">\n <div class=\"sbd-rroute__opt\"><b>{{ item.city_name }} ({{ item.id }})</b><small>{{ item.name }}</small></div>\n </ng-template>\n </ng-select>\n </label>\n\n <!-- Swap arrow, between From and To -->\n @if ($first) {\n <button type=\"button\" class=\"sbd-rroute__swap\" aria-label=\"Swap origin and destination\"\n (click)=\"swapped.emit(row.leg.legId)\">\n <!-- Inline SVG: primeicons 4.x has no horizontal swap arrows. -->\n <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M2 5.5h11M10.5 3l2.5 2.5-2.5 2.5M14 10.5H3M5.5 8 3 10.5 5.5 13\" />\n </svg>\n </button>\n }\n }\n </div>\n </div>\n }\n `,\n styleUrl: './reissue-route-step.component.scss',\n host: { class: 'sbd-rroute' },\n})\nexport class SbdReissueRouteStepComponent {\n rows = input.required<ReissueRouteRow[]>();\n options = input.required<AirportOption[]>();\n airportChanged = output<{ legId: string; side: AirportSide; airport: ReissueAirport | null }>();\n searched = output<string>();\n swapped = output<string>();\n\n readonly compare = compareAirports;\n readonly sides: { key: AirportSide; label: string }[] = [\n { key: 'origin', label: 'From' },\n { key: 'destination', label: 'To' },\n ];\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Injector,\n computed,\n effect,\n inject,\n input,\n output,\n runInInjectionContext,\n untracked,\n} from '@angular/core';\nimport { firstValueFrom, isObservable } from 'rxjs';\nimport { DialogModule } from 'primeng/dialog';\nimport { ButtonModule } from 'primeng/button';\n\nimport { SBD_CONFIG, SbdRedirectAuthParams } from '../../config/dashboard.config';\nimport { appendAuthParams } from '../../utils/reissue-url.builder';\nimport { ReissueServiceKey } from '../../models/reissue.types';\nimport { SbdReissueStore } from './reissue.store';\nimport { SbdReissueUpgradeStore } from './reissue-upgrade.store';\nimport { SbdReissueUpgradeStepComponent } from './steps/reissue-upgrade-step/reissue-upgrade-step.component';\nimport { SbdReissueUpgradeConfirmStepComponent } from './steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component';\nimport { SbdReissueNoticeComponent } from './steps/reissue-notice/reissue-notice.component';\nimport { SbdReissueServiceStepComponent } from './steps/reissue-service-step/reissue-service-step.component';\nimport { SbdReissueLegsStepComponent } from './steps/reissue-legs-step/reissue-legs-step.component';\nimport { SbdReissueDateStepComponent } from './steps/reissue-date-step/reissue-date-step.component';\nimport { SbdReissueRouteStepComponent } from './steps/reissue-route-step/reissue-route-step.component';\n\n/**\n * Reissue dialog shell: owns the p-dialog, the loading / error states and the footer, and swaps the step\n * components. All state and rules live in `SbdReissueStore`; the steps only render and emit.\n */\n@Component({\n selector: 'app-sbd-reissue-dialog',\n standalone: true,\n imports: [\n DialogModule,\n ButtonModule,\n SbdReissueNoticeComponent,\n SbdReissueServiceStepComponent,\n SbdReissueLegsStepComponent,\n SbdReissueDateStepComponent,\n SbdReissueRouteStepComponent,\n SbdReissueUpgradeStepComponent,\n SbdReissueUpgradeConfirmStepComponent,\n ],\n providers: [SbdReissueStore, SbdReissueUpgradeStore],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './reissue-dialog.component.html',\n styleUrl: './reissue-dialog.component.scss',\n})\nexport class SbdReissueDialogComponent {\n protected readonly store = inject(SbdReissueStore);\n protected readonly upgrade = inject(SbdReissueUpgradeStore);\n private readonly config = inject(SBD_CONFIG);\n private readonly injector = inject(Injector);\n\n visible = input(false);\n bookingId = input('');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n bookingData = input<any | null>(null);\n closed = output<void>();\n\n /** Header title per screen, like the cancel dialog's \"Select Leg to Cancel\" / \"Refund Method\". */\n protected readonly title = computed(() => {\n switch (this.store.step()) {\n case 'legs': return 'Select Flight to Change';\n case 'edit': return this.store.service() === 'change_date' ? 'Choose New Date' : 'Choose New Route';\n case 'upgrade-legs': return 'Select Flight to Upgrade';\n case 'upgrade': return 'Choose New Class';\n case 'confirm': return 'Review Upgrade';\n default: return 'Reissue Booking';\n }\n });\n\n /** Gray hint above the footer (cancel's \"Select at least one flight to continue\"), or why Search is disabled. */\n protected readonly hint = computed(() => {\n switch (this.store.step()) {\n case 'legs':\n return this.store.anyAvailable() && !this.store.canContinue() ? 'Select at least one flight to continue' : null;\n case 'edit':\n return this.store.validationError();\n case 'upgrade-legs':\n return this.upgrade.anyLegUpgradable() && !this.upgrade.canContinueFromLegs() && !this.upgrade.submitting()\n ? 'Select at least one flight to continue'\n : null;\n case 'upgrade':\n return this.upgrade.sections().some(s => s.options.length) && !this.upgrade.canContinue() && !this.upgrade.submitting()\n ? 'Select a class to continue'\n : null;\n default:\n return null;\n }\n });\n\n constructor() {\n // Depends only on these three inputs; whatever the store reads while opening must not retrigger it.\n effect(\n () => {\n const [visible, data, id] = [this.visible(), this.bookingData(), this.bookingId()];\n if (visible) untracked(() => this.store.open(data, id));\n },\n { allowSignalWrites: true },\n );\n }\n\n protected onServiceChosen(service: ReissueServiceKey): void {\n if (service === 'upgrade_class') this.upgrade.start();\n else this.store.chooseService(service);\n }\n\n /** Back from the options returns to \"select leg\" only when that step was shown (the upgrade store knows). */\n protected onBack(): void {\n if (this.store.step() === 'upgrade') this.upgrade.back();\n else this.store.back();\n }\n\n /** The payment link expired: redo the whole reissue from the start (a new post-booking, the service list again). */\n protected restartFlow(): void {\n this.store.open(this.bookingData(), this.bookingId());\n }\n\n /** Redirects to the web search (new tab: the agent keeps the dashboard open next to the web flow). */\n protected async searchFlights(): Promise<void> {\n const url = this.store.searchUrl();\n if (!url) return;\n // Open the tab now, inside the click, so the browser does not block it while the host's token is awaited.\n const tab = window.open('about:blank', '_blank');\n const finalUrl = appendAuthParams(url, await this.redirectAuthParams(), this.config.redirectAuthIn);\n if (tab) {\n tab.opener = null; // same protection as `noopener`\n tab.location.href = finalUrl;\n } else {\n window.open(finalUrl, '_blank', 'noopener');\n }\n this.closed.emit();\n }\n\n /** The host's auth parameters for the web link; `{}` when it has none or it fails (the web then asks to log in). */\n private async redirectAuthParams(): Promise<SbdRedirectAuthParams> {\n const provide = this.config.redirectAuthParams;\n if (!provide) return {};\n try {\n const result = runInInjectionContext(this.injector, provide);\n return (isObservable(result) ? await firstValueFrom(result) : await result) ?? {};\n } catch {\n return {};\n }\n }\n}\n","<p-dialog [visible]=\"visible()\" (visibleChange)=\"$event ? null : closed.emit()\"\n [modal]=\"true\" [blockScroll]=\"true\" [draggable]=\"false\" [resizable]=\"false\"\n [showHeader]=\"false\" [style]=\"{ width: '560px', padding: '0' }\" styleClass=\"sbd-reissue-dialog-wrapper\">\n\n <div class=\"sbd-reissue\">\n\n <!-- Header: same layout as the cancel dialog (round close button, centered title + booking id) -->\n <div class=\"sbd-reissue__header\">\n <button type=\"button\" class=\"sbd-reissue__close\" (click)=\"closed.emit()\" aria-label=\"Close\">\n <i class=\"pi pi-times\"></i>\n </button>\n <div class=\"sbd-reissue__header-text\">\n <h3 class=\"sbd-reissue__title\">{{ title() }}</h3>\n <span class=\"sbd-reissue__sub\">Booking ID #{{ bookingId() }}</span>\n </div>\n </div>\n\n @if (store.loading()) {\n <div class=\"sbd-reissue__state\">\n <div class=\"sbd-reissue__state-icon\"><i class=\"pi pi-spin pi-spinner\"></i></div>\n <div class=\"sbd-reissue__state-text\">Checking availability…</div>\n <div class=\"sbd-reissue__dots\"><span></span><span></span><span></span></div>\n </div>\n } @else if (store.error()) {\n <div class=\"sbd-reissue__state\">\n <div class=\"sbd-reissue__state-icon sbd-reissue__state-icon--warn\"><i class=\"pi pi-exclamation-triangle\"></i></div>\n <div class=\"sbd-reissue__state-text\">{{ store.error() }}</div>\n <button pButton type=\"button\" label=\"Retry\" class=\"p-button-outlined p-button-secondary\" (click)=\"store.load()\"></button>\n </div>\n } @else if (store.blocked()) {\n <!-- No leg can be reissued online: same idea as the cancel dialog's \"not eligible, escalate\" notice. -->\n <div class=\"sbd-reissue__body\">\n <app-sbd-reissue-notice tone=\"warn\" icon=\"pi pi-exclamation-triangle\">\n <strong>{{ store.blocked()?.title }}</strong><br>{{ store.blocked()?.text }}\n </app-sbd-reissue-notice>\n </div>\n <div class=\"sbd-reissue__footer\">\n <button pButton type=\"button\" label=\"Close\" class=\"p-button-outlined p-button-secondary sbd-reissue__btn\"\n (click)=\"closed.emit()\"></button>\n </div>\n } @else {\n <div class=\"sbd-reissue__body\">\n @switch (store.step()) {\n @case ('service') {\n <app-sbd-reissue-notice>Change requests are subject to availability from the airline.</app-sbd-reissue-notice>\n <app-sbd-reissue-service-step\n [upgradeAvailable]=\"store.upgradeAvailable()\"\n (chosen)=\"onServiceChosen($event)\" />\n }\n @case ('legs') {\n <app-sbd-reissue-legs-step\n [rows]=\"store.legRows()\"\n [anyAvailable]=\"store.anyAvailable()\"\n (toggled)=\"store.toggleLeg($event)\" />\n }\n @case ('edit') {\n @if (store.service() === 'change_date') {\n <app-sbd-reissue-date-step\n [rows]=\"store.dateRows()\"\n (changed)=\"store.setDate($event.legId, $event.date)\" />\n } @else {\n <app-sbd-reissue-route-step\n [rows]=\"store.routeRows()\"\n [options]=\"store.airportOptions()\"\n (airportChanged)=\"store.setAirport($event.legId, $event.side, $event.airport)\"\n (searched)=\"store.searchAirports($event)\"\n (swapped)=\"store.swapAirports($event)\" />\n }\n }\n @case ('upgrade-legs') {\n <app-sbd-reissue-legs-step\n unavailableText=\"None of these flights can be upgraded online. Handle this booking manually.\"\n [rows]=\"upgrade.legRows()\"\n [anyAvailable]=\"upgrade.anyLegUpgradable()\"\n [note]=\"store.allowSingleLegSelection() ? null : 'These flights must be upgraded together.'\"\n [error]=\"upgrade.error()\"\n (toggled)=\"upgrade.toggleLeg($event)\" />\n }\n @case ('upgrade') {\n <app-sbd-reissue-upgrade-step\n [sections]=\"upgrade.sections()\"\n [error]=\"upgrade.error()\"\n (picked)=\"upgrade.select($event.sectionId, $event.key)\" />\n }\n @case ('confirm') {\n <app-sbd-reissue-upgrade-confirm-step\n [rows]=\"upgrade.summary()\"\n [total]=\"upgrade.total()\"\n [totalLabel]=\"upgrade.totalLabel()\"\n [priceChanged]=\"upgrade.priceChanged()\"\n [booked]=\"upgrade.booked()\"\n [link]=\"upgrade.paymentLink()\"\n [error]=\"upgrade.error()\"\n (restart)=\"restartFlow()\" />\n }\n }\n </div>\n\n @if (hint(); as text) {\n <div class=\"sbd-reissue__hint\">{{ text }}</div>\n }\n\n @if (store.step() !== 'service') {\n <div class=\"sbd-reissue__footer\">\n <button pButton type=\"button\" label=\"Back\" class=\"p-button-outlined p-button-secondary sbd-reissue__btn\"\n [disabled]=\"store.step() === 'confirm' && upgrade.locked()\" (click)=\"onBack()\"></button>\n\n @switch (store.step()) {\n @case ('legs') {\n <button pButton type=\"button\" label=\"Continue\" class=\"sbd-reissue__btn\"\n [disabled]=\"!store.canContinue()\" (click)=\"store.goToEdit()\"></button>\n }\n @case ('edit') {\n <button pButton type=\"button\" icon=\"pi pi-search\" label=\"Search flights\" class=\"sbd-reissue__btn\"\n [disabled]=\"!!store.validationError()\" (click)=\"searchFlights()\"></button>\n }\n @case ('upgrade-legs') {\n <button pButton type=\"button\" label=\"Continue\" class=\"sbd-reissue__btn\" [loading]=\"upgrade.submitting()\"\n [disabled]=\"!upgrade.canContinueFromLegs()\" (click)=\"upgrade.continueFromLegs()\"></button>\n }\n @case ('upgrade') {\n <button pButton type=\"button\" label=\"Continue\" class=\"sbd-reissue__btn\" [loading]=\"upgrade.submitting()\"\n [disabled]=\"!upgrade.canContinue()\" (click)=\"upgrade.continue()\"></button>\n }\n @case ('confirm') {\n @switch (upgrade.action()) {\n @case ('done') {\n <button pButton type=\"button\" label=\"Close\" class=\"sbd-reissue__btn\" (click)=\"closed.emit()\"></button>\n }\n @case ('book') {\n <button pButton type=\"button\" label=\"Confirm upgrade\" class=\"sbd-reissue__btn\"\n [loading]=\"upgrade.submitting()\" (click)=\"upgrade.confirm()\"></button>\n }\n @case ('link') {\n <button pButton type=\"button\" icon=\"pi pi-link\" label=\"Generate payment link\" class=\"sbd-reissue__btn\"\n [loading]=\"upgrade.submitting()\" (click)=\"upgrade.confirm()\"></button>\n }\n }\n }\n }\n </div>\n }\n }\n </div>\n</p-dialog>\n","import { Component, input, output, signal, computed } from '@angular/core';\nimport { LowerCasePipe, NgIf } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\n\nimport { IHotelBookingData } from '../../../../models/booking.types';\nimport { SbdHotelItineraryCardComponent } from '../../../hotel-itinerary-card/hotel-itinerary-card.component';\nimport { SbdDataSearchComponent } from '../../../data-search/data-search.component';\n\n@Component({\n selector: 'app-sbd-hotel-content',\n standalone: true,\n imports: [\n SbdHotelItineraryCardComponent,\n SbdDataSearchComponent,\n LowerCasePipe,\n NgIf,\n ButtonModule,\n DialogModule,\n ],\n templateUrl: './hotel-content.component.html',\n styleUrl: './hotel-content.component.scss',\n})\nexport class SbdHotelContentComponent {\n // Inputs\n bookingData = input.required<IHotelBookingData | null>();\n bookingStatus = input.required<'idle' | 'loading' | 'success' | 'error'>();\n bookingId = input.required<string>();\n dataVerified = input.required<boolean>();\n bookingNotes = input.required<any[]>();\n bookingHistory = input.required<any[]>();\n historyGroups = input.required<any[]>();\n activeContextTab = input.required<'notes' | 'changes'>();\n\n // Computed: Check if all packages are cancelled\n allPackagesCancelled = computed(() => {\n const packages = this.bookingData()?.packages;\n if (!packages || packages.length === 0) return false;\n return packages.every((pkg: any) => pkg.isCancelled === true);\n });\n\n // Outputs\n cancelBooking = output<void>();\n addNoteRequested = output<void>();\n contextTabChanged = output<'notes' | 'changes'>();\n\n // Dialog state\n detailDialogVisible = signal(false);\n selectedDetail = signal<{ title: string; data: any; type: string } | null>(null);\n\n fmtNoteDate(date: { sec: number; usec?: number }): string {\n if (!date?.sec) return '—';\n try {\n return new Date(date.sec * 1000).toLocaleString('en-GB', {\n day: '2-digit', month: 'short', year: 'numeric',\n hour: '2-digit', minute: '2-digit',\n });\n } catch { return '—'; }\n }\n\n formatField(field: string): string {\n return field\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/([a-z\\d])([A-Z])/g, '$1 $2')\n .trim();\n }\n\n fmtDate(dt: string): string {\n if (!dt) return '—';\n try {\n return new Date(dt).toLocaleString('en-GB', {\n day: '2-digit', month: 'short', hour: '2-digit', minute: '2-digit',\n });\n } catch { return dt; }\n }\n\n onCancelBooking(): void {\n this.cancelBooking.emit();\n }\n\n onAddNote(): void {\n this.addNoteRequested.emit();\n }\n\n onTabChange(tab: 'notes' | 'changes'): void {\n this.contextTabChanged.emit(tab);\n }\n\n formatDate(date: string | undefined): string {\n if (!date) return '—';\n try {\n return new Date(date).toLocaleDateString('en-GB', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n });\n } catch {\n return date;\n }\n }\n\n formatPrice(price: number | undefined): string {\n if (!price) return '—';\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'SAR',\n minimumFractionDigits: 2,\n }).format(price);\n }\n\n showDetailDialog(title: string, data: any, type: string): void {\n this.selectedDetail.set({ title, data, type });\n this.detailDialogVisible.set(true);\n }\n\n closeDetailDialog(): void {\n this.detailDialogVisible.set(false);\n this.selectedDetail.set(null);\n }\n\n showPackagesDetail(): void {\n const packages = this.bookingData()?.packages;\n if (packages && packages.length > 0) {\n this.showDetailDialog('Room Packages', packages, 'packages');\n }\n }\n\n formatDetailValue(value: any): string {\n if (value === null || value === undefined) return '—';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n if (typeof value === 'object') return JSON.stringify(value, null, 2);\n return String(value);\n }\n}\n","<!-- 2-column layout for hotels -->\n<div class=\"sbd-hotel-content\">\n\n <!-- Left: booking context -->\n <aside class=\"sbd-hotel-content__aside\">\n\n <!-- Data search at the top of the sidebar -->\n @if (bookingStatus() === 'success') {\n <app-sbd-data-search [data]=\"bookingData()\" />\n <app-sbd-hotel-itinerary-card [data]=\"bookingData()\" [verified]=\"dataVerified()\" />\n }\n\n <!-- Loading skeleton for aside -->\n @if (bookingStatus() === 'loading') {\n <div class=\"sbd-hotel-content__skeleton-card\">\n <div class=\"sbd-hotel-content__skeleton-row\" style=\"width:60%\"></div>\n <div class=\"sbd-hotel-content__skeleton-row\" style=\"width:40%\"></div>\n <div class=\"sbd-hotel-content__skeleton-row\" style=\"width:80%\"></div>\n <div class=\"sbd-hotel-content__skeleton-row\" style=\"width:50%\"></div>\n </div>\n }\n\n </aside>\n\n <!-- Right: agent workspace -->\n <main class=\"sbd-hotel-content__main\">\n\n <!-- Error state -->\n @if (bookingStatus() === 'error') {\n <div class=\"sbd-hotel-content__error\">\n <i class=\"pi pi-exclamation-circle\"></i>\n <span>Booking not found. Double-check the ID and product type, then try again.</span>\n </div>\n }\n\n <!-- Content once loaded -->\n @if (bookingStatus() === 'success') {\n\n <!-- Quick actions -->\n <div class=\"sbd-hotel-content__quick-actions\">\n <span class=\"sbd-hotel-content__quick-label\">Quick actions</span>\n @if (allPackagesCancelled()) {\n <div class=\"sbd-hotel-content__cancelled-status\">\n <i class=\"pi pi-check-circle\"></i>\n <span>All Packages Cancelled</span>\n </div>\n } @else {\n <button\n pButton\n label=\"Cancel Booking\"\n icon=\"pi pi-times-circle\"\n class=\"p-button-danger p-button-sm\"\n (click)=\"onCancelBooking()\">\n </button>\n }\n </div>\n\n <!-- Modern Data Overview Cards -->\n <div class=\"sbd-hotel-content__data-overview\">\n <h3 class=\"sbd-hotel-content__section-title\">Booking Overview</h3>\n\n <div class=\"sbd-hotel-content__data-grid\">\n <!-- Booking ID Card -->\n @if (bookingData()?.bookingId) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--blue\">\n <i class=\"pi pi-bookmark\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Booking ID</span>\n <span class=\"sbd-hotel-content__data-value\">{{ bookingData()?.bookingId }}</span>\n </div>\n </div>\n }\n\n <!-- Hotel Name Card -->\n @if (bookingData()?.hotelName) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--purple\">\n <i class=\"pi pi-home\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Hotel</span>\n <span class=\"sbd-hotel-content__data-value\">{{ bookingData()?.hotelName }}</span>\n </div>\n </div>\n }\n\n <!-- Check-in Date Card -->\n @if (bookingData()?.dateFrom) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--green\">\n <i class=\"pi pi-calendar-plus\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Check-in</span>\n <span class=\"sbd-hotel-content__data-value\">{{ formatDate(bookingData()?.dateFrom) }}</span>\n @if (bookingData()?.checkInTime) {\n <span class=\"sbd-hotel-content__data-subtext\">{{ bookingData()?.checkInTime }}</span>\n }\n </div>\n </div>\n }\n\n <!-- Check-out Date Card -->\n @if (bookingData()?.dateTo) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--orange\">\n <i class=\"pi pi-calendar-minus\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Check-out</span>\n <span class=\"sbd-hotel-content__data-value\">{{ formatDate(bookingData()?.dateTo) }}</span>\n @if (bookingData()?.checkOutTime) {\n <span class=\"sbd-hotel-content__data-subtext\">{{ bookingData()?.checkOutTime }}</span>\n }\n </div>\n </div>\n }\n\n <!-- Number of Nights Card -->\n @if (bookingData()?.numberOfNights) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--indigo\">\n <i class=\"pi pi-moon\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Duration</span>\n <span class=\"sbd-hotel-content__data-value\">{{ bookingData()?.numberOfNights }} Nights</span>\n </div>\n </div>\n }\n\n <!-- Number of Rooms Card -->\n @if (bookingData()?.rooms) {\n <div class=\"sbd-hotel-content__data-card sbd-hotel-content__data-card--clickable\" (click)=\"showPackagesDetail()\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--pink\">\n <i class=\"pi pi-home\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Rooms</span>\n <span class=\"sbd-hotel-content__data-value\">{{ bookingData()?.rooms }} Room{{ bookingData()?.rooms > 1 ? 's' : '' }}</span>\n @if (bookingData()?.packages && bookingData()?.packages.length > 0) {\n <span class=\"sbd-hotel-content__data-subtext\">Click for details</span>\n }\n </div>\n @if (bookingData()?.packages && bookingData()?.packages.length > 0) {\n <i class=\"pi pi-chevron-right sbd-hotel-content__data-arrow\"></i>\n }\n </div>\n }\n\n <!-- Price Card -->\n @if (bookingData()?.price) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--emerald\">\n <i class=\"pi pi-wallet\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Total Price</span>\n <span class=\"sbd-hotel-content__data-value\">{{ formatPrice(bookingData()?.price) }}</span>\n </div>\n </div>\n }\n\n <!-- Hotel ID Card -->\n @if (bookingData()?.hotelId) {\n <div class=\"sbd-hotel-content__data-card\">\n <div class=\"sbd-hotel-content__data-icon sbd-hotel-content__data-icon--teal\">\n <i class=\"pi pi-id-card\"></i>\n </div>\n <div class=\"sbd-hotel-content__data-content\">\n <span class=\"sbd-hotel-content__data-label\">Hotel ID</span>\n <span class=\"sbd-hotel-content__data-value\">{{ bookingData()?.hotelId }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Context: Notes + Changes tabbed -->\n <div class=\"sbd-hotel-content__context\">\n\n <!-- Tab bar -->\n <div class=\"sbd-hotel-content__context-tabs\">\n <button class=\"sbd-hotel-content__context-tab\"\n [class.sbd-hotel-content__context-tab--active]=\"activeContextTab() === 'changes'\"\n (click)=\"onTabChange('changes')\">\n <i class=\"pi pi-history\"></i>\n Changes\n @if (bookingHistory().length > 0) {\n <span class=\"sbd-hotel-content__context-pill sbd-hotel-content__context-pill--changes\">{{ bookingHistory().length }}</span>\n }\n </button>\n <button class=\"sbd-hotel-content__context-tab\"\n [class.sbd-hotel-content__context-tab--active]=\"activeContextTab() === 'notes'\"\n (click)=\"onTabChange('notes')\">\n <i class=\"pi pi-comments\"></i>\n Notes\n <span class=\"sbd-hotel-content__context-pill sbd-hotel-content__context-pill--notes\">{{ bookingNotes().length }}</span>\n </button>\n @if (activeContextTab() === 'notes') {\n <button pButton label=\"Add Note\" icon=\"pi pi-plus\" class=\"p-button-sm p-button-outlined sbd-hotel-content__context-add\"\n (click)=\"onAddNote()\">\n </button>\n }\n </div>\n\n <!-- Notes tab -->\n @if (activeContextTab() === 'notes') {\n <div class=\"sbd-hotel-content__notes-list\">\n @if (bookingNotes().length === 0) {\n <div class=\"sbd-hotel-content__context-empty\">\n <i class=\"pi pi-inbox\"></i> No notes yet\n </div>\n }\n @for (note of bookingNotes(); track $index) {\n <div class=\"sbd-hotel-content__note\">\n <div class=\"sbd-hotel-content__note-top\">\n <span class=\"sbd-hotel-content__note-badge sbd-hotel-content__note-badge--{{ note.action | lowercase }}\">\n {{ note.action }}\n </span>\n <span class=\"sbd-hotel-content__note-author\">\n {{ note.writtenBy?.firstName }} {{ note.writtenBy?.lastName }}\n </span>\n <span class=\"sbd-hotel-content__note-date\">{{ fmtNoteDate(note.date) }}</span>\n </div>\n <p class=\"sbd-hotel-content__note-msg\">{{ note.message }}</p>\n </div>\n }\n </div>\n }\n\n <!-- Changes tab -->\n @if (activeContextTab() === 'changes') {\n <div class=\"sbd-hotel-content__changes-groups\">\n @if (historyGroups().length === 0) {\n <div class=\"sbd-hotel-content__context-empty\">\n <i class=\"pi pi-check\"></i> No changes recorded\n </div>\n }\n @for (group of historyGroups(); track group.changedAt) {\n <div class=\"sbd-hotel-content__changes-group\">\n <div class=\"sbd-hotel-content__changes-meta\">\n <i class=\"pi pi-user\"></i>\n <strong>{{ group.changedBy }}</strong>\n <span class=\"sbd-hotel-content__changes-sep\">·</span>\n <span>{{ fmtDate(group.changedAt) }}</span>\n </div>\n <table class=\"sbd-hotel-content__changes-table\">\n <thead>\n <tr>\n <th>Field</th>\n <th><i class=\"pi pi-times-circle\"></i> Before</th>\n <th><i class=\"pi pi-check-circle\"></i> After</th>\n </tr>\n </thead>\n <tbody>\n @for (entry of group.entries; track entry.field) {\n <tr>\n <td class=\"sbd-hotel-content__changes-field\">{{ formatField(entry.field) }}</td>\n <td class=\"sbd-hotel-content__changes-old\">{{ entry.from }}</td>\n <td class=\"sbd-hotel-content__changes-new\">{{ entry.to }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n </div>\n\n }\n\n <!-- Loading skeleton for main -->\n @if (bookingStatus() === 'loading') {\n <div class=\"sbd-hotel-content__skeleton-card\">\n <div class=\"sbd-hotel-content__skeleton-row\" style=\"width:40%\"></div>\n <div class=\"sbd-hotel-content__skeleton-row\" style=\"width:25%\"></div>\n </div>\n }\n\n </main>\n\n</div>\n\n<!-- Detail Dialog -->\n<p-dialog\n [(visible)]=\"detailDialogVisible\"\n [header]=\"selectedDetail()?.title || 'Details'\"\n [modal]=\"true\"\n [style]=\"{ width: '600px', maxWidth: '90vw' }\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n styleClass=\"sbd-hotel-content__detail-dialog\">\n\n @if (selectedDetail()?.type === 'packages' && selectedDetail()?.data) {\n <div class=\"sbd-hotel-content__packages-detail\">\n @for (pkg of selectedDetail()?.data; track $index) {\n <div class=\"sbd-hotel-content__package-card\">\n <div class=\"sbd-hotel-content__package-header\">\n <span class=\"sbd-hotel-content__package-title\">Package {{ $index + 1 }}</span>\n <div class=\"sbd-hotel-content__package-badges\">\n @if (pkg.isCancelled) {\n <span class=\"sbd-hotel-content__badge sbd-hotel-content__badge--cancelled\">Cancelled</span>\n }\n @if (pkg.isRefundable) {\n <span class=\"sbd-hotel-content__badge sbd-hotel-content__badge--success\">Refundable</span>\n } @else {\n <span class=\"sbd-hotel-content__badge sbd-hotel-content__badge--danger\">Non-Refundable</span>\n }\n </div>\n </div>\n\n @if (pkg.supplier) {\n <div class=\"sbd-hotel-content__package-row\">\n <span class=\"sbd-hotel-content__package-label\">Supplier</span>\n <span class=\"sbd-hotel-content__package-value\">{{ pkg.supplier }}</span>\n </div>\n }\n\n @if (pkg.rooms && pkg.rooms.length > 0) {\n <div class=\"sbd-hotel-content__rooms-section\">\n <h4 class=\"sbd-hotel-content__subsection-title\">Rooms ({{ pkg.rooms.length }})</h4>\n @for (room of pkg.rooms; track room.roomId || $index) {\n <div class=\"sbd-hotel-content__room-item\">\n <div class=\"sbd-hotel-content__room-icon\">\n <i class=\"pi pi-home\"></i>\n </div>\n <div class=\"sbd-hotel-content__room-details\">\n @if (room.roomName) {\n <div class=\"sbd-hotel-content__room-name\">{{ room.roomName }}</div>\n }\n <div class=\"sbd-hotel-content__room-info\">\n @if (room.roomType) {\n <span class=\"sbd-hotel-content__room-tag\">{{ room.roomType }}</span>\n }\n @if (room.roomBasis) {\n <span class=\"sbd-hotel-content__room-tag\">{{ room.roomBasis }}</span>\n }\n @if (room.bedType) {\n <span class=\"sbd-hotel-content__room-tag\">{{ room.bedType }}</span>\n }\n </div>\n @if (room.adultsNum || room.childrenNum) {\n <div class=\"sbd-hotel-content__room-occupancy\">\n @if (room.adultsNum) {\n <span><i class=\"pi pi-user\"></i> {{ room.adultsNum }} Adult{{ room.adultsNum > 1 ? 's' : '' }}</span>\n }\n @if (room.childrenNum) {\n <span><i class=\"pi pi-users\"></i> {{ room.childrenNum }} Child{{ room.childrenNum > 1 ? 'ren' : '' }}</span>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n\n @if (pkg.refundableUntil) {\n <div class=\"sbd-hotel-content__package-row\">\n <span class=\"sbd-hotel-content__package-label\">Refundable Until</span>\n <span class=\"sbd-hotel-content__package-value\">{{ pkg.refundableUntil }}</span>\n </div>\n }\n </div>\n }\n </div>\n }\n</p-dialog>\n","import { Component, computed, inject, signal, HostListener } from '@angular/core';\nimport { LowerCasePipe, NgIf } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\n\n\nimport { SBD_CONFIG } from '../../config/dashboard.config';\nimport { SbdBookingService } from '../../services/booking.service';\nimport { SbdToastService } from '../../services/toast.service';\nimport { FLIGHT_ACTIONS } from '../../config/flight-actions.config';\nimport { HOTEL_ACTIONS } from '../../config/hotel-actions.config';\nimport { ProductType, IHotelBookingData, mapToHotelBookingData } from '../../models/booking.types';\n\nimport { SbdBookingInputComponent } from '../../components/booking-input/booking-input.component';\nimport { SbdWorkflowActionsComponent } from '../../components/workflow-actions/workflow-actions.component';\nimport { SbdActionGridComponent } from '../../components/action-grid/action-grid.component';\nimport { SbdCancelDialogComponent } from '../../components/cancel-dialog/cancel-dialog.component';\nimport { AlmatarHotelAutoCancellationComponent } from '../../components/hotel-cancel/almatar-hotel-auto-cancellation.component';\nimport { SbdFlightItineraryCardComponent } from '../../components/flight-itinerary-card/flight-itinerary-card.component';\nimport { SbdHotelItineraryCardComponent } from '../../components/hotel-itinerary-card/hotel-itinerary-card.component';\nimport { SbdDataSearchComponent } from '../../components/data-search/data-search.component';\nimport { SbdActionDialogComponent } from '../../components/action-dialog/action-dialog.component';\nimport { SbdAddNoteDialogComponent } from '../../components/add-note-dialog/add-note-dialog.component';\nimport { SbdReissueDialogComponent } from '../../components/reissue-dialog/reissue-dialog.component';\nimport { SbdHotelContentComponent } from '../../components/hotel-cancel/components/hotel-content/hotel-content.component';\n\n@Component({\n selector: 'app-smart-booking-dashboard',\n standalone: true,\n imports: [\n SbdBookingInputComponent,\n SbdWorkflowActionsComponent,\n SbdActionGridComponent,\n SbdCancelDialogComponent,\n AlmatarHotelAutoCancellationComponent,\n SbdFlightItineraryCardComponent,\n SbdHotelItineraryCardComponent,\n SbdDataSearchComponent,\n SbdActionDialogComponent,\n SbdAddNoteDialogComponent,\n SbdReissueDialogComponent,\n SbdHotelContentComponent,\n LowerCasePipe,\n NgIf,\n ButtonModule,\n ],\n templateUrl: './smart-booking-dashboard.component.html',\n styleUrl: './smart-booking-dashboard.component.scss',\n})\nexport class SmartBookingDashboardComponent {\n private bookingService = inject(SbdBookingService);\n private toast = inject(SbdToastService);\n /** The Reissue button is shown for flights only, and only when the host enabled the feature. */\n protected readonly reissueEnabled = inject(SBD_CONFIG).reissueEnabled;\n\n product = signal<ProductType>('flight');\n bookingId = signal('');\n\n bookingStatus = signal<'idle' | 'loading' | 'success' | 'error'>('idle');\n bookingData = signal<IHotelBookingData | any | null>(null);\n\n cancelDialogOpen = signal(false);\n hotelAutoCancelDialogOpen = signal(false);\n actionDialogOpen = signal(false);\n addNoteDialogOpen = signal(false);\n reissueDialogOpen = signal(false);\n selectedActionKey = signal<string | null>(null);\n activeContextTab = signal<'notes' | 'changes'>('changes');\n\n availableActions = computed(() =>\n (this.product() === 'flight' ? FLIGHT_ACTIONS : HOTEL_ACTIONS).filter(a => !a.hidden)\n );\n\n // Handle both correct spelling (dataVerified) and BE typo (dataVerfied)\n dataVerified = computed(() => {\n const bi = this.bookingData()?.data?.booking_info;\n return bi?.dataVerified === true || bi?.dataVerfied === true;\n });\n\n // PNR list for the active booking, normalized to a flat array regardless of BE shape.\n cancelPnrInfo = computed<{ pnr?: string; LegDirectionality?: string }[]>(() => {\n const raw = this.bookingData()?.data?.booking_info?.pnr_info;\n if (Array.isArray(raw)) return raw;\n if (raw?.pnr) return [{ pnr: raw.pnr, LegDirectionality: 'Departure' }];\n return [];\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n bookingHistory = computed(() => (this.bookingData()?.data?.booking_info?.history ?? []) as any[]);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n bookingNotes = computed(() => (this.bookingData()?.data?.booking_info?.notes ?? []) as any[]);\n\n historyGroups = computed(() => {\n const groups = new Map<string, { changedBy: string; changedAt: string; entries: { field: string; from: string; to: string }[] }>();\n for (const e of this.bookingHistory()) {\n if (!groups.has(e.changedAt)) groups.set(e.changedAt, { changedBy: e.changedBy, changedAt: e.changedAt, entries: [] });\n const rawField = (e.field as string).split('.').pop() ?? e.field;\n groups.get(e.changedAt)!.entries.push({\n field: rawField.replace(/\\[.*?\\]/g, ''),\n from: e.previousValue,\n to: e.newValue,\n });\n }\n return [...groups.values()];\n });\n\n fmtNoteDate(date: { sec: number; usec?: number }): string {\n if (!date?.sec) return '—';\n try {\n return new Date(date.sec * 1000).toLocaleString('en-GB', {\n day: '2-digit', month: 'short', year: 'numeric',\n hour: '2-digit', minute: '2-digit',\n });\n } catch { return '—'; }\n }\n\n formatField(field: string): string {\n return field\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/([a-z\\d])([A-Z])/g, '$1 $2')\n .trim();\n }\n\n fmtDate(dt: string): string {\n if (!dt) return '—';\n try {\n return new Date(dt).toLocaleString('en-GB', {\n day: '2-digit', month: 'short', hour: '2-digit', minute: '2-digit',\n });\n } catch { return dt; }\n }\n\n openAction(key: string): void {\n this.selectedActionKey.set(key);\n this.actionDialogOpen.set(true);\n }\n\n @HostListener('document:keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if ((event.metaKey || event.ctrlKey) && event.key === 'k') {\n event.preventDefault();\n document.querySelector<HTMLInputElement>('.sbd-booking-input__field')?.focus();\n }\n }\n\n lookupBooking(): void {\n const id = this.bookingId().trim();\n if (!id) return;\n\n this.bookingStatus.set('loading');\n\n const fields = this.product() === 'hotel'\n ? ['booking_info', 'hotel_information', 'checkin_checkout', 'room_information']\n : 'booking_info';\n\n this.bookingService.getBooking(id, this.product(), fields).subscribe({\n next: ({ data }) => {\n // console.log('Booking data received:', data); \n if(this.product() === 'hotel'){\n const mappedData = mapToHotelBookingData(data);\n this.bookingData.set(mappedData);\n } else {\n this.bookingData.set(data);\n }\n this.bookingStatus.set('success');\n },\n error: () => {\n this.bookingStatus.set('error');\n this.bookingData.set(null);\n this.toast.error('Booking not found. Check the ID and try again.');\n },\n });\n }\n\n}\n","<div class=\"sbd-page\">\n\n <!-- Search bar full-width at top -->\n <div class=\"sbd-page__search\">\n <app-sbd-booking-input\n [(product)]=\"product\"\n [(bookingId)]=\"bookingId\"\n [loading]=\"bookingStatus() === 'loading'\"\n (lookup)=\"lookupBooking()\"\n />\n </div>\n\n <!-- Hotel: Use dedicated component -->\n @if (product() === 'hotel') {\n <app-sbd-hotel-content\n [bookingData]=\"bookingData()\"\n [bookingStatus]=\"bookingStatus()\"\n [bookingId]=\"bookingId()\"\n [dataVerified]=\"dataVerified()\"\n [bookingNotes]=\"bookingNotes()\"\n [bookingHistory]=\"bookingHistory()\"\n [historyGroups]=\"historyGroups()\"\n [activeContextTab]=\"activeContextTab()\"\n (cancelBooking)=\"cancelDialogOpen.set(true)\"\n (addNoteRequested)=\"addNoteDialogOpen.set(true)\"\n (contextTabChanged)=\"activeContextTab.set($event)\"\n />\n }\n\n <!-- Flight: Keep original 2-column layout -->\n @if (product() === 'flight') {\n <div class=\"sbd-page__content\">\n\n <!-- Left: booking context -->\n <aside class=\"sbd-page__aside\">\n\n <!-- Data search at the top of the sidebar -->\n @if (bookingStatus() === 'success') {\n <app-sbd-data-search [data]=\"bookingData()\" />\n <app-sbd-flight-itinerary-card [product]=\"product()\" [data]=\"bookingData()\" [verified]=\"dataVerified()\" />\n }\n\n <!-- Loading skeleton for aside -->\n @if (bookingStatus() === 'loading') {\n <div class=\"sbd-page__skeleton-card\">\n <div class=\"sbd-page__skeleton-row\" style=\"width:60%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:40%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:80%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:50%\"></div>\n </div>\n }\n\n </aside>\n\n <!-- Right: agent workspace -->\n <main class=\"sbd-page__main\">\n\n <!-- Error state -->\n @if (bookingStatus() === 'error') {\n <div class=\"sbd-page__error\">\n <i class=\"pi pi-exclamation-circle\"></i>\n <span>Booking not found. Double-check the ID and product type, then try again.</span>\n </div>\n }\n\n <!-- Content once loaded -->\n @if (bookingStatus() === 'success') {\n\n <!-- Quick actions -->\n <div class=\"sbd-page__quick-actions\">\n <span class=\"sbd-page__quick-label\">Quick actions</span>\n <app-sbd-workflow-actions\n [bookingId]=\"bookingId()\"\n [showReissue]=\"reissueEnabled && product() === 'flight'\"\n (cancelBooking)=\"cancelDialogOpen.set(true)\"\n (reissue)=\"reissueDialogOpen.set(true)\"\n />\n </div>\n\n <!-- Action grid -->\n <app-sbd-action-grid\n [actions]=\"availableActions()\"\n [activeKey]=\"selectedActionKey()\"\n (actionSelected)=\"openAction($event)\"\n />\n\n <!-- Context: Notes + Changes tabbed -->\n <div class=\"sbd-page__context\">\n\n <!-- Tab bar -->\n <div class=\"sbd-page__context-tabs\">\n <button class=\"sbd-page__context-tab\"\n [class.sbd-page__context-tab--active]=\"activeContextTab() === 'changes'\"\n (click)=\"activeContextTab.set('changes')\">\n <i class=\"pi pi-history\"></i>\n Changes\n @if (bookingHistory().length > 0) {\n <span class=\"sbd-page__context-pill sbd-page__context-pill--changes\">{{ bookingHistory().length }}</span>\n }\n </button>\n <button class=\"sbd-page__context-tab\"\n [class.sbd-page__context-tab--active]=\"activeContextTab() === 'notes'\"\n (click)=\"activeContextTab.set('notes')\">\n <i class=\"pi pi-comments\"></i>\n Notes\n <span class=\"sbd-page__context-pill sbd-page__context-pill--notes\">{{ bookingNotes().length }}</span>\n </button>\n @if (activeContextTab() === 'notes') {\n <button pButton label=\"Add Note\" icon=\"pi pi-plus\" class=\"p-button-sm p-button-outlined sbd-page__context-add\"\n (click)=\"addNoteDialogOpen.set(true)\">\n </button>\n }\n </div>\n\n <!-- Notes tab -->\n @if (activeContextTab() === 'notes') {\n <div class=\"sbd-page__notes-list\">\n @if (bookingNotes().length === 0) {\n <div class=\"sbd-page__context-empty\">\n <i class=\"pi pi-inbox\"></i> No notes yet\n </div>\n }\n @for (note of bookingNotes(); track $index) {\n <div class=\"sbd-page__note\">\n <div class=\"sbd-page__note-top\">\n <span class=\"sbd-page__note-badge sbd-page__note-badge--{{ note.action | lowercase }}\">\n {{ note.action }}\n </span>\n <span class=\"sbd-page__note-author\">\n {{ note.writtenBy?.firstName }} {{ note.writtenBy?.lastName }}\n </span>\n <span class=\"sbd-page__note-date\">{{ fmtNoteDate(note.date) }}</span>\n </div>\n <p class=\"sbd-page__note-msg\">{{ note.message }}</p>\n </div>\n }\n </div>\n }\n\n <!-- Changes tab -->\n @if (activeContextTab() === 'changes') {\n <div class=\"sbd-page__changes-groups\">\n @if (historyGroups().length === 0) {\n <div class=\"sbd-page__context-empty\">\n <i class=\"pi pi-check\"></i> No changes recorded\n </div>\n }\n @for (group of historyGroups(); track group.changedAt) {\n <div class=\"sbd-page__changes-group\">\n <div class=\"sbd-page__changes-meta\">\n <i class=\"pi pi-user\"></i>\n <strong>{{ group.changedBy }}</strong>\n <span class=\"sbd-page__changes-sep\">·</span>\n <span>{{ fmtDate(group.changedAt) }}</span>\n </div>\n <table class=\"sbd-page__changes-table\">\n <thead>\n <tr>\n <th>Field</th>\n <th><i class=\"pi pi-times-circle\"></i> Before</th>\n <th><i class=\"pi pi-check-circle\"></i> After</th>\n </tr>\n </thead>\n <tbody>\n @for (entry of group.entries; track entry.field) {\n <tr>\n <td class=\"sbd-page__changes-field\">{{ formatField(entry.field) }}</td>\n <td class=\"sbd-page__changes-old\">{{ entry.from }}</td>\n <td class=\"sbd-page__changes-new\">{{ entry.to }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n </div>\n\n }\n\n <!-- Loading skeleton for main -->\n @if (bookingStatus() === 'loading') {\n <div class=\"sbd-page__skeleton-card\">\n <div class=\"sbd-page__skeleton-row\" style=\"width:40%\"></div>\n <div class=\"sbd-page__skeleton-row\" style=\"width:25%\"></div>\n </div>\n }\n\n </main>\n\n </div>\n }\n\n</div>\n\n<app-sbd-cancel-dialog\n [visible]=\"cancelDialogOpen() && product() === 'flight'\"\n [bookingId]=\"bookingId()\"\n [product]=\"product()\"\n [pnrInfo]=\"cancelPnrInfo()\"\n [bookingInfo]=\"bookingData()\"\n (closed)=\"cancelDialogOpen.set(false)\"\n (confirmed)=\"bookingStatus.set('idle'); bookingData.set(null)\"\n/>\n\n<almatar-hotel-auto-cancellation\n *ngIf=\"cancelDialogOpen() && product() === 'hotel'\"\n [selectedHotelBooking]=\"bookingData()\"\n (closed)=\"cancelDialogOpen.set(false)\"\n (cancellationSuccess)=\"bookingStatus.set('idle'); bookingData.set(null)\"\n/>\n\n<app-sbd-action-dialog\n [visible]=\"actionDialogOpen()\"\n [bookingId]=\"bookingId()\"\n [product]=\"product()\"\n [actions]=\"availableActions()\"\n [initialKey]=\"selectedActionKey()\"\n [preloadedData]=\"bookingData()\"\n (closed)=\"actionDialogOpen.set(false)\"\n/>\n\n<app-sbd-add-note-dialog\n [visible]=\"addNoteDialogOpen()\"\n [bookingId]=\"bookingId()\"\n [product]=\"product()\"\n (closed)=\"addNoteDialogOpen.set(false)\"\n/>\n\n<app-sbd-reissue-dialog\n [visible]=\"reissueDialogOpen()\"\n [bookingId]=\"bookingId()\"\n [bookingData]=\"bookingData()\"\n (closed)=\"reissueDialogOpen.set(false)\"\n/>\n","import { Routes } from '@angular/router';\n\nexport const smartBookingDashboardRoutes: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('./pages/smart-booking-dashboard/smart-booking-dashboard.component').then(\n c => c.SmartBookingDashboardComponent\n ),\n },\n];\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { smartBookingDashboardRoutes } from './smart-booking-dashboard.routes';\n\n@NgModule({\n imports: [RouterModule.forChild(smartBookingDashboardRoutes)],\n})\nexport class SmartBookingDashboardModule {}\n","/*\n * Public API of the Smart Booking Dashboard.\n * Host apps should import only from this file.\n */\nexport { SmartBookingDashboardComponent } from './lib/pages/smart-booking-dashboard/smart-booking-dashboard.component';\nexport { smartBookingDashboardRoutes } from './lib/smart-booking-dashboard.routes';\nexport { SmartBookingDashboardModule } from './lib/smart-booking-dashboard.module';\nexport { SBD_CONFIG, SBD_DEFAULT_CONFIG, provideSmartBookingDashboard } from './lib/config/dashboard.config';\nexport type { SbdConfig, SbdRedirectAuthParams } from './lib/config/dashboard.config';\nexport { buildReissueSearchUrl, buildReissueSearchParams, buildReissueBookingContext, appendAuthParams } from './lib/utils/reissue-url.builder';\nexport type * from './lib/models/reissue.types';\nexport { SBD_TOAST_HANDLER } from './lib/services/toast.service';\nexport type { SbdToastHandler } from './lib/services/toast.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["na","i4","i2","i1","PAYMENT_GATEWAY_LABELS","INSTALLMENT_GATEWAY_CODES","LOYALTY_GATEWAY_CODES","INTERNAL_GATEWAY_CODES","MADA_GATEWAY_CODES","i2.AsideBackButtonService","i5","map","i1.AlmatarIconComponent","i2.ExchangeRoundPipe","i1.ExchangeRoundPipe","i1.LoaderComponent","catchError","i3"],"mappings":"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"}