@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.
- package/esm2022/lib/components/almatar-aside/aside.component.mjs +6 -7
- package/esm2022/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.mjs +17 -12
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.mjs +9 -3
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-result-overlay/almatar-hotel-auto-cancellation-result-overlay.component.mjs +210 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.mjs +3 -3
- 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
- package/esm2022/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.mjs +11 -4
- package/esm2022/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.mjs +23 -21
- package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.mjs +42 -34
- package/esm2022/lib/components/reissue-dialog/reissue-dialog.component.mjs +135 -0
- package/esm2022/lib/components/reissue-dialog/reissue-upgrade.store.mjs +305 -0
- package/esm2022/lib/components/reissue-dialog/reissue.store.mjs +349 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.mjs +45 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.mjs +140 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.mjs +16 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.mjs +104 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.mjs +44 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.mjs +193 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.mjs +88 -0
- package/esm2022/lib/components/workflow-actions/workflow-actions.component.mjs +5 -3
- package/esm2022/lib/config/dashboard.config.mjs +3 -1
- package/esm2022/lib/models/reissue.types.mjs +2 -0
- package/esm2022/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.mjs +9 -3
- package/esm2022/lib/services/reissue.service.mjs +142 -0
- package/esm2022/lib/services/toast.service.mjs +15 -7
- package/esm2022/lib/utils/reissue-format.mjs +64 -0
- package/esm2022/lib/utils/reissue-url.builder.mjs +314 -0
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/almatar-smart-booking-dashboard.mjs +2211 -102
- package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -1
- package/lib/components/action-dialog/action-dialog.component.d.ts +1 -1
- package/lib/components/almatar-aside/aside.component.d.ts +1 -2
- package/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.d.ts +3 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.d.ts +1 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-result-overlay/almatar-hotel-auto-cancellation-result-overlay.component.d.ts +46 -0
- package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +2 -1
- package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.d.ts +6 -0
- package/lib/components/reissue-dialog/reissue-dialog.component.d.ts +34 -0
- package/lib/components/reissue-dialog/reissue-upgrade.store.d.ts +96 -0
- package/lib/components/reissue-dialog/reissue.store.d.ts +124 -0
- package/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.d.ts +11 -0
- package/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.d.ts +16 -0
- package/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.d.ts +8 -0
- package/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.d.ts +21 -0
- package/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.d.ts +17 -0
- package/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.d.ts +28 -0
- package/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.d.ts +13 -0
- package/lib/components/result-panel/result-panel.component.d.ts +1 -1
- package/lib/components/workflow-actions/workflow-actions.component.d.ts +3 -1
- package/lib/config/dashboard.config.d.ts +29 -0
- package/lib/models/reissue.types.d.ts +147 -0
- package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +4 -1
- package/lib/services/reissue.service.d.ts +45 -0
- package/lib/services/toast.service.d.ts +14 -1
- package/lib/utils/reissue-format.d.ts +28 -0
- package/lib/utils/reissue-url.builder.d.ts +24 -0
- package/package.json +9 -7
- package/public-api.d.ts +5 -1
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { SbdReissueNoticeComponent } from '../reissue-notice/reissue-notice.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/** Leg cards in the cancel dialog's "Select Leg" design: checkbox overlay, outline badge, times row. */
|
|
5
|
+
export class SbdReissueLegsStepComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.rows = input.required();
|
|
8
|
+
this.anyAvailable = input(true);
|
|
9
|
+
this.unavailableText = input('None of these flights can be changed online. Handle this booking manually.');
|
|
10
|
+
/** Extra info line, e.g. "these flights must be upgraded together". */
|
|
11
|
+
this.note = input(null);
|
|
12
|
+
this.error = input(null);
|
|
13
|
+
this.toggled = output();
|
|
14
|
+
}
|
|
15
|
+
/** The note under a disabled leg. */
|
|
16
|
+
reasonText(reason) {
|
|
17
|
+
switch (reason) {
|
|
18
|
+
case 'flown': return 'This flight has already departed.';
|
|
19
|
+
case 'no-options': return 'No upgrade options are available for this flight.';
|
|
20
|
+
default: return 'This flight doesn’t support online reissue.';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueLegsStepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SbdReissueLegsStepComponent, isStandalone: true, selector: "app-sbd-reissue-legs-step", inputs: { rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: true, transformFunction: null }, anyAvailable: { classPropertyName: "anyAvailable", publicName: "anyAvailable", isSignal: true, isRequired: false, transformFunction: null }, unavailableText: { classPropertyName: "unavailableText", publicName: "unavailableText", isSignal: true, isRequired: false, transformFunction: null }, note: { classPropertyName: "note", publicName: "note", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { toggled: "toggled" }, host: { classAttribute: "sbd-rlegs" }, ngImport: i0, template: `
|
|
25
|
+
@if (!anyAvailable()) {
|
|
26
|
+
<app-sbd-reissue-notice tone="warn" icon="pi pi-exclamation-triangle">{{ unavailableText() }}</app-sbd-reissue-notice>
|
|
27
|
+
}
|
|
28
|
+
@if (note()) {
|
|
29
|
+
<app-sbd-reissue-notice icon="pi pi-info-circle">{{ note() }}</app-sbd-reissue-notice>
|
|
30
|
+
}
|
|
31
|
+
@if (error()) {
|
|
32
|
+
<app-sbd-reissue-notice tone="error" icon="pi pi-exclamation-circle">{{ error() }}</app-sbd-reissue-notice>
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@for (row of rows(); track row.leg.legId) {
|
|
36
|
+
<div class="sbd-rlegs__card" role="checkbox" tabindex="0"
|
|
37
|
+
[attr.aria-checked]="row.selected" [attr.aria-disabled]="!row.available"
|
|
38
|
+
[class.sbd-rlegs__card--selected]="row.selected"
|
|
39
|
+
[class.sbd-rlegs__card--disabled]="!row.available"
|
|
40
|
+
(click)="toggled.emit(row.leg.legId)"
|
|
41
|
+
(keydown.enter)="toggled.emit(row.leg.legId)"
|
|
42
|
+
(keydown.space)="$event.preventDefault(); toggled.emit(row.leg.legId)">
|
|
43
|
+
|
|
44
|
+
<span class="sbd-rlegs__checkbox" [class.sbd-rlegs__checkbox--on]="row.selected" [class.sbd-rlegs__checkbox--off]="!row.available">
|
|
45
|
+
<i class="pi pi-check"></i>
|
|
46
|
+
</span>
|
|
47
|
+
|
|
48
|
+
<div class="sbd-rlegs__content">
|
|
49
|
+
<div class="sbd-rlegs__top">
|
|
50
|
+
<div>
|
|
51
|
+
<span class="sbd-rlegs__name">{{ row.from }} to {{ row.to }}</span>
|
|
52
|
+
<div class="sbd-rlegs__date">{{ row.direction ? row.direction + ' · ' : '' }}{{ row.dateLabel }}</div>
|
|
53
|
+
</div>
|
|
54
|
+
<span class="sbd-rlegs__badge" [class.sbd-rlegs__badge--green]="row.available">
|
|
55
|
+
{{ row.reason === 'flown' ? 'Used Flight' : row.reason === 'offline' ? 'Not supported' : row.reason ? 'Not available' : 'Available' }}
|
|
56
|
+
</span>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div class="sbd-rlegs__times">
|
|
60
|
+
<span class="sbd-rlegs__time">{{ row.depTime }}</span>
|
|
61
|
+
<span class="sbd-rlegs__line">
|
|
62
|
+
<span class="sbd-rlegs__stops">{{ row.stopsLabel }}</span>
|
|
63
|
+
<i class="pi pi-arrow-right sbd-rlegs__arrow"></i>
|
|
64
|
+
</span>
|
|
65
|
+
<span class="sbd-rlegs__time">{{ row.arrTime }}</span>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
@if (row.airlineLine) { <span class="sbd-rlegs__airline">{{ row.airlineLine }}</span> }
|
|
69
|
+
|
|
70
|
+
@if (!row.available) {
|
|
71
|
+
<div class="sbd-rlegs__notice">
|
|
72
|
+
<i class="pi pi-info-circle"></i>
|
|
73
|
+
<span>{{ reasonText(row.reason) }}</span>
|
|
74
|
+
</div>
|
|
75
|
+
}
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
}
|
|
79
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;gap:12px}.sbd-rlegs__card{border:1.5px solid #e2e8f0;border-radius:16px;background:#fff;transition:border-color .15s,box-shadow .15s;position:relative;padding:16px 16px 16px 48px;cursor:pointer}.sbd-rlegs__card:focus-visible{outline:2px solid var(--sbd-accent, #6d4aff);outline-offset:2px}.sbd-rlegs__card--selected{border-color:var(--sbd-accent, #6d4aff)}.sbd-rlegs__card--disabled{opacity:.7;cursor:not-allowed}.sbd-rlegs__checkbox{position:absolute;top:16px;left:16px;width:22px;height:22px;border-radius:6px;border:1.5px solid #cbd5e1;background:#fff;color:#fff;font-size:12px;display:flex;align-items:center;justify-content:center}.sbd-rlegs__checkbox--on{background:var(--sbd-accent, #6d4aff);border-color:var(--sbd-accent, #6d4aff)}.sbd-rlegs__checkbox--off{background:#f1f5f9;border-color:#e2e8f0}.sbd-rlegs__content{display:flex;flex-direction:column;gap:8px}.sbd-rlegs__top{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.sbd-rlegs__name{font-size:15px;font-weight:700;color:#1e2e4a}.sbd-rlegs__date{font-size:13px;color:#64748b;margin-top:2px}.sbd-rlegs__badge{font-size:11.5px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;border-radius:20px;padding:4px 14px;width:max-content;background:#f8fafc;color:#64748b;box-shadow:inset 0 0 0 1px #e2e8f0}.sbd-rlegs__badge--green{background:transparent;color:#16a34a;box-shadow:inset 0 0 0 1.5px currentColor}.sbd-rlegs__times{display:flex;align-items:center;gap:8px}.sbd-rlegs__time{font-size:18px;font-weight:700;color:#1e2e4a;font-variant-numeric:tabular-nums}.sbd-rlegs__line{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;padding:0 16px 0 8px}.sbd-rlegs__line:before{content:\"\";position:absolute;left:0;right:14px;top:50%;height:2px;background:#cbd5e1;z-index:1}.sbd-rlegs__stops{font-size:12px;color:#64748b;background:#fff;padding:0 6px;z-index:2}.sbd-rlegs__arrow{position:absolute;right:4px;top:51%;transform:translateY(-50%);font-size:11px;color:#64748b}.sbd-rlegs__airline{font-size:12.5px;color:#64748b}.sbd-rlegs__notice{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:10px;background:#fdf1e0;color:#6b4a16;font-size:12.5px;line-height:1.4}.sbd-rlegs__notice i{flex-shrink:0;margin-top:1px;color:#b98a3e}\n"], dependencies: [{ kind: "component", type: SbdReissueNoticeComponent, selector: "app-sbd-reissue-notice", inputs: ["icon", "tone"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
80
|
+
}
|
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueLegsStepComponent, decorators: [{
|
|
82
|
+
type: Component,
|
|
83
|
+
args: [{ selector: 'app-sbd-reissue-legs-step', standalone: true, imports: [SbdReissueNoticeComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
84
|
+
@if (!anyAvailable()) {
|
|
85
|
+
<app-sbd-reissue-notice tone="warn" icon="pi pi-exclamation-triangle">{{ unavailableText() }}</app-sbd-reissue-notice>
|
|
86
|
+
}
|
|
87
|
+
@if (note()) {
|
|
88
|
+
<app-sbd-reissue-notice icon="pi pi-info-circle">{{ note() }}</app-sbd-reissue-notice>
|
|
89
|
+
}
|
|
90
|
+
@if (error()) {
|
|
91
|
+
<app-sbd-reissue-notice tone="error" icon="pi pi-exclamation-circle">{{ error() }}</app-sbd-reissue-notice>
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@for (row of rows(); track row.leg.legId) {
|
|
95
|
+
<div class="sbd-rlegs__card" role="checkbox" tabindex="0"
|
|
96
|
+
[attr.aria-checked]="row.selected" [attr.aria-disabled]="!row.available"
|
|
97
|
+
[class.sbd-rlegs__card--selected]="row.selected"
|
|
98
|
+
[class.sbd-rlegs__card--disabled]="!row.available"
|
|
99
|
+
(click)="toggled.emit(row.leg.legId)"
|
|
100
|
+
(keydown.enter)="toggled.emit(row.leg.legId)"
|
|
101
|
+
(keydown.space)="$event.preventDefault(); toggled.emit(row.leg.legId)">
|
|
102
|
+
|
|
103
|
+
<span class="sbd-rlegs__checkbox" [class.sbd-rlegs__checkbox--on]="row.selected" [class.sbd-rlegs__checkbox--off]="!row.available">
|
|
104
|
+
<i class="pi pi-check"></i>
|
|
105
|
+
</span>
|
|
106
|
+
|
|
107
|
+
<div class="sbd-rlegs__content">
|
|
108
|
+
<div class="sbd-rlegs__top">
|
|
109
|
+
<div>
|
|
110
|
+
<span class="sbd-rlegs__name">{{ row.from }} to {{ row.to }}</span>
|
|
111
|
+
<div class="sbd-rlegs__date">{{ row.direction ? row.direction + ' · ' : '' }}{{ row.dateLabel }}</div>
|
|
112
|
+
</div>
|
|
113
|
+
<span class="sbd-rlegs__badge" [class.sbd-rlegs__badge--green]="row.available">
|
|
114
|
+
{{ row.reason === 'flown' ? 'Used Flight' : row.reason === 'offline' ? 'Not supported' : row.reason ? 'Not available' : 'Available' }}
|
|
115
|
+
</span>
|
|
116
|
+
</div>
|
|
117
|
+
|
|
118
|
+
<div class="sbd-rlegs__times">
|
|
119
|
+
<span class="sbd-rlegs__time">{{ row.depTime }}</span>
|
|
120
|
+
<span class="sbd-rlegs__line">
|
|
121
|
+
<span class="sbd-rlegs__stops">{{ row.stopsLabel }}</span>
|
|
122
|
+
<i class="pi pi-arrow-right sbd-rlegs__arrow"></i>
|
|
123
|
+
</span>
|
|
124
|
+
<span class="sbd-rlegs__time">{{ row.arrTime }}</span>
|
|
125
|
+
</div>
|
|
126
|
+
|
|
127
|
+
@if (row.airlineLine) { <span class="sbd-rlegs__airline">{{ row.airlineLine }}</span> }
|
|
128
|
+
|
|
129
|
+
@if (!row.available) {
|
|
130
|
+
<div class="sbd-rlegs__notice">
|
|
131
|
+
<i class="pi pi-info-circle"></i>
|
|
132
|
+
<span>{{ reasonText(row.reason) }}</span>
|
|
133
|
+
</div>
|
|
134
|
+
}
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
}
|
|
138
|
+
`, host: { class: 'sbd-rlegs' }, styles: [":host{display:flex;flex-direction:column;gap:12px}.sbd-rlegs__card{border:1.5px solid #e2e8f0;border-radius:16px;background:#fff;transition:border-color .15s,box-shadow .15s;position:relative;padding:16px 16px 16px 48px;cursor:pointer}.sbd-rlegs__card:focus-visible{outline:2px solid var(--sbd-accent, #6d4aff);outline-offset:2px}.sbd-rlegs__card--selected{border-color:var(--sbd-accent, #6d4aff)}.sbd-rlegs__card--disabled{opacity:.7;cursor:not-allowed}.sbd-rlegs__checkbox{position:absolute;top:16px;left:16px;width:22px;height:22px;border-radius:6px;border:1.5px solid #cbd5e1;background:#fff;color:#fff;font-size:12px;display:flex;align-items:center;justify-content:center}.sbd-rlegs__checkbox--on{background:var(--sbd-accent, #6d4aff);border-color:var(--sbd-accent, #6d4aff)}.sbd-rlegs__checkbox--off{background:#f1f5f9;border-color:#e2e8f0}.sbd-rlegs__content{display:flex;flex-direction:column;gap:8px}.sbd-rlegs__top{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.sbd-rlegs__name{font-size:15px;font-weight:700;color:#1e2e4a}.sbd-rlegs__date{font-size:13px;color:#64748b;margin-top:2px}.sbd-rlegs__badge{font-size:11.5px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;border-radius:20px;padding:4px 14px;width:max-content;background:#f8fafc;color:#64748b;box-shadow:inset 0 0 0 1px #e2e8f0}.sbd-rlegs__badge--green{background:transparent;color:#16a34a;box-shadow:inset 0 0 0 1.5px currentColor}.sbd-rlegs__times{display:flex;align-items:center;gap:8px}.sbd-rlegs__time{font-size:18px;font-weight:700;color:#1e2e4a;font-variant-numeric:tabular-nums}.sbd-rlegs__line{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;padding:0 16px 0 8px}.sbd-rlegs__line:before{content:\"\";position:absolute;left:0;right:14px;top:50%;height:2px;background:#cbd5e1;z-index:1}.sbd-rlegs__stops{font-size:12px;color:#64748b;background:#fff;padding:0 6px;z-index:2}.sbd-rlegs__arrow{position:absolute;right:4px;top:51%;transform:translateY(-50%);font-size:11px;color:#64748b}.sbd-rlegs__airline{font-size:12.5px;color:#64748b}.sbd-rlegs__notice{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:10px;background:#fdf1e0;color:#6b4a16;font-size:12.5px;line-height:1.4}.sbd-rlegs__notice i{flex-shrink:0;margin-top:1px;color:#b98a3e}\n"] }]
|
|
139
|
+
}] });
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVpc3N1ZS1sZWdzLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL3JlaXNzdWUtZGlhbG9nL3N0ZXBzL3JlaXNzdWUtbGVncy1zdGVwL3JlaXNzdWUtbGVncy1zdGVwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBRXZGLHdHQUF3RztBQWlFeEcsTUFBTSxPQUFPLDJCQUEyQjtJQWhFeEM7UUFpRUUsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQW1CLENBQUM7UUFDekMsaUJBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0Isb0JBQWUsR0FBRyxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztRQUN0Ryx1RUFBdUU7UUFDdkUsU0FBSSxHQUFHLEtBQUssQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDbEMsVUFBSyxHQUFHLEtBQUssQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDbkMsWUFBTyxHQUFHLE1BQU0sRUFBVSxDQUFDO0tBVTVCO0lBUkMscUNBQXFDO0lBQzNCLFVBQVUsQ0FBQyxNQUErQjtRQUNsRCxRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2YsS0FBSyxPQUFPLENBQUMsQ0FBQyxPQUFPLG1DQUFtQyxDQUFDO1lBQ3pELEtBQUssWUFBWSxDQUFDLENBQUMsT0FBTyxtREFBbUQsQ0FBQztZQUM5RSxPQUFPLENBQUMsQ0FBQyxPQUFPLDZDQUE2QyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDOytHQWhCVSwyQkFBMkI7bUdBQTNCLDJCQUEyQiw2eUJBM0Q1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVEVCwrMUVBekRTLHlCQUF5Qjs7NEZBNkR4QiwyQkFBMkI7a0JBaEV2QyxTQUFTOytCQUNFLDJCQUEyQixjQUN6QixJQUFJLFdBQ1AsQ0FBQyx5QkFBeUIsQ0FBQyxtQkFDbkIsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVEVCxRQUVLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlaXNzdWVMZWdSb3cgfSBmcm9tICcuLi8uLi9yZWlzc3VlLnN0b3JlJztcbmltcG9ydCB7IFNiZFJlaXNzdWVOb3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi9yZWlzc3VlLW5vdGljZS9yZWlzc3VlLW5vdGljZS5jb21wb25lbnQnO1xuXG4vKiogTGVnIGNhcmRzIGluIHRoZSBjYW5jZWwgZGlhbG9nJ3MgXCJTZWxlY3QgTGVnXCIgZGVzaWduOiBjaGVja2JveCBvdmVybGF5LCBvdXRsaW5lIGJhZGdlLCB0aW1lcyByb3cuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtc2JkLXJlaXNzdWUtbGVncy1zdGVwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1NiZFJlaXNzdWVOb3RpY2VDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKCFhbnlBdmFpbGFibGUoKSkge1xuICAgICAgPGFwcC1zYmQtcmVpc3N1ZS1ub3RpY2UgdG9uZT1cIndhcm5cIiBpY29uPVwicGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGVcIj57eyB1bmF2YWlsYWJsZVRleHQoKSB9fTwvYXBwLXNiZC1yZWlzc3VlLW5vdGljZT5cbiAgICB9XG4gICAgQGlmIChub3RlKCkpIHtcbiAgICAgIDxhcHAtc2JkLXJlaXNzdWUtbm90aWNlIGljb249XCJwaSBwaS1pbmZvLWNpcmNsZVwiPnt7IG5vdGUoKSB9fTwvYXBwLXNiZC1yZWlzc3VlLW5vdGljZT5cbiAgICB9XG4gICAgQGlmIChlcnJvcigpKSB7XG4gICAgICA8YXBwLXNiZC1yZWlzc3VlLW5vdGljZSB0b25lPVwiZXJyb3JcIiBpY29uPVwicGkgcGktZXhjbGFtYXRpb24tY2lyY2xlXCI+e3sgZXJyb3IoKSB9fTwvYXBwLXNiZC1yZWlzc3VlLW5vdGljZT5cbiAgICB9XG5cbiAgICBAZm9yIChyb3cgb2Ygcm93cygpOyB0cmFjayByb3cubGVnLmxlZ0lkKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwic2JkLXJsZWdzX19jYXJkXCIgcm9sZT1cImNoZWNrYm94XCIgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cInJvdy5zZWxlY3RlZFwiIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiIXJvdy5hdmFpbGFibGVcIlxuICAgICAgICBbY2xhc3Muc2JkLXJsZWdzX19jYXJkLS1zZWxlY3RlZF09XCJyb3cuc2VsZWN0ZWRcIlxuICAgICAgICBbY2xhc3Muc2JkLXJsZWdzX19jYXJkLS1kaXNhYmxlZF09XCIhcm93LmF2YWlsYWJsZVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVkLmVtaXQocm93LmxlZy5sZWdJZClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJ0b2dnbGVkLmVtaXQocm93LmxlZy5sZWdJZClcIlxuICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgdG9nZ2xlZC5lbWl0KHJvdy5sZWcubGVnSWQpXCI+XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmQtcmxlZ3NfX2NoZWNrYm94XCIgW2NsYXNzLnNiZC1ybGVnc19fY2hlY2tib3gtLW9uXT1cInJvdy5zZWxlY3RlZFwiIFtjbGFzcy5zYmQtcmxlZ3NfX2NoZWNrYm94LS1vZmZdPVwiIXJvdy5hdmFpbGFibGVcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNoZWNrXCI+PC9pPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiZC1ybGVnc19fY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcmxlZ3NfX3RvcFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmQtcmxlZ3NfX25hbWVcIj57eyByb3cuZnJvbSB9fSB0byB7eyByb3cudG8gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcmxlZ3NfX2RhdGVcIj57eyByb3cuZGlyZWN0aW9uID8gcm93LmRpcmVjdGlvbiArICcgwrcgJyA6ICcnIH19e3sgcm93LmRhdGVMYWJlbCB9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiZC1ybGVnc19fYmFkZ2VcIiBbY2xhc3Muc2JkLXJsZWdzX19iYWRnZS0tZ3JlZW5dPVwicm93LmF2YWlsYWJsZVwiPlxuICAgICAgICAgICAgICB7eyByb3cucmVhc29uID09PSAnZmxvd24nID8gJ1VzZWQgRmxpZ2h0JyA6IHJvdy5yZWFzb24gPT09ICdvZmZsaW5lJyA/ICdOb3Qgc3VwcG9ydGVkJyA6IHJvdy5yZWFzb24gPyAnTm90IGF2YWlsYWJsZScgOiAnQXZhaWxhYmxlJyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiZC1ybGVnc19fdGltZXNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JkLXJsZWdzX190aW1lXCI+e3sgcm93LmRlcFRpbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiZC1ybGVnc19fbGluZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiZC1ybGVnc19fc3RvcHNcIj57eyByb3cuc3RvcHNMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1hcnJvdy1yaWdodCBzYmQtcmxlZ3NfX2Fycm93XCI+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmQtcmxlZ3NfX3RpbWVcIj57eyByb3cuYXJyVGltZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIEBpZiAocm93LmFpcmxpbmVMaW5lKSB7IDxzcGFuIGNsYXNzPVwic2JkLXJsZWdzX19haXJsaW5lXCI+e3sgcm93LmFpcmxpbmVMaW5lIH19PC9zcGFuPiB9XG5cbiAgICAgICAgICBAaWYgKCFyb3cuYXZhaWxhYmxlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JkLXJsZWdzX19ub3RpY2VcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgcmVhc29uVGV4dChyb3cucmVhc29uKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIGAsXG4gIHN0eWxlVXJsOiAnLi9yZWlzc3VlLWxlZ3Mtc3RlcC5jb21wb25lbnQuc2NzcycsXG4gIGhvc3Q6IHsgY2xhc3M6ICdzYmQtcmxlZ3MnIH0sXG59KVxuZXhwb3J0IGNsYXNzIFNiZFJlaXNzdWVMZWdzU3RlcENvbXBvbmVudCB7XG4gIHJvd3MgPSBpbnB1dC5yZXF1aXJlZDxSZWlzc3VlTGVnUm93W10+KCk7XG4gIGFueUF2YWlsYWJsZSA9IGlucHV0KHRydWUpO1xuICB1bmF2YWlsYWJsZVRleHQgPSBpbnB1dCgnTm9uZSBvZiB0aGVzZSBmbGlnaHRzIGNhbiBiZSBjaGFuZ2VkIG9ubGluZS4gSGFuZGxlIHRoaXMgYm9va2luZyBtYW51YWxseS4nKTtcbiAgLyoqIEV4dHJhIGluZm8gbGluZSwgZS5nLiBcInRoZXNlIGZsaWdodHMgbXVzdCBiZSB1cGdyYWRlZCB0b2dldGhlclwiLiAqL1xuICBub3RlID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGVycm9yID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHRvZ2dsZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gIC8qKiBUaGUgbm90ZSB1bmRlciBhIGRpc2FibGVkIGxlZy4gKi9cbiAgcHJvdGVjdGVkIHJlYXNvblRleHQocmVhc29uOiBSZWlzc3VlTGVnUm93WydyZWFzb24nXSk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChyZWFzb24pIHtcbiAgICAgIGNhc2UgJ2Zsb3duJzogcmV0dXJuICdUaGlzIGZsaWdodCBoYXMgYWxyZWFkeSBkZXBhcnRlZC4nO1xuICAgICAgY2FzZSAnbm8tb3B0aW9ucyc6IHJldHVybiAnTm8gdXBncmFkZSBvcHRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHRoaXMgZmxpZ2h0Lic7XG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ1RoaXMgZmxpZ2h0IGRvZXNu4oCZdCBzdXBwb3J0IG9ubGluZSByZWlzc3VlLic7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/esm2022/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.mjs
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/** Icon + message box used for the info callout, loading / error states and the validation hint. */
|
|
4
|
+
export class SbdReissueNoticeComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.icon = input('pi pi-info-circle');
|
|
7
|
+
this.tone = input('info');
|
|
8
|
+
}
|
|
9
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueNoticeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: SbdReissueNoticeComponent, isStandalone: true, selector: "app-sbd-reissue-notice", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "\"sbd-notice sbd-notice--\" + tone()" } }, ngImport: i0, template: `<i [class]="icon()"></i><span class="sbd-notice__text"><ng-content /></span><ng-content select="[action]" />`, isInline: true, styles: [":host{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:12px;font-size:13px;line-height:1.5}:host i{flex-shrink:0;margin-top:1px}:host .sbd-notice__text{flex:1}:host(.sbd-notice--info){background:#eaf2ff;border:1px solid #b9d6ff;color:#1a5fd6}:host(.sbd-notice--warn){background:#fdf3e3;border:1px solid #f3d9a4;color:#8a5a1e}:host(.sbd-notice--warn) i{color:#b98a3e}:host(.sbd-notice--error){background:#fef2f2;border:1px solid #fecaca;color:#b91c1c}:host(.sbd-notice--success){background:#f0fdf4;border:1px solid #bbf7d0;color:#166534}:host(.sbd-notice--muted){align-items:center;color:#64748b}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueNoticeComponent, decorators: [{
|
|
13
|
+
type: Component,
|
|
14
|
+
args: [{ selector: 'app-sbd-reissue-notice', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: { '[class]': '"sbd-notice sbd-notice--" + tone()' }, template: `<i [class]="icon()"></i><span class="sbd-notice__text"><ng-content /></span><ng-content select="[action]" />`, styles: [":host{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:12px;font-size:13px;line-height:1.5}:host i{flex-shrink:0;margin-top:1px}:host .sbd-notice__text{flex:1}:host(.sbd-notice--info){background:#eaf2ff;border:1px solid #b9d6ff;color:#1a5fd6}:host(.sbd-notice--warn){background:#fdf3e3;border:1px solid #f3d9a4;color:#8a5a1e}:host(.sbd-notice--warn) i{color:#b98a3e}:host(.sbd-notice--error){background:#fef2f2;border:1px solid #fecaca;color:#b91c1c}:host(.sbd-notice--success){background:#f0fdf4;border:1px solid #bbf7d0;color:#166534}:host(.sbd-notice--muted){align-items:center;color:#64748b}\n"] }]
|
|
15
|
+
}] });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVpc3N1ZS1ub3RpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL3JlaXNzdWUtZGlhbG9nL3N0ZXBzL3JlaXNzdWUtbm90aWNlL3JlaXNzdWUtbm90aWNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFMUUsb0dBQW9HO0FBU3BHLE1BQU0sT0FBTyx5QkFBeUI7SUFSdEM7UUFTRSxTQUFJLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEMsU0FBSSxHQUFHLEtBQUssQ0FBa0QsTUFBTSxDQUFDLENBQUM7S0FDdkU7K0dBSFkseUJBQXlCO21HQUF6Qix5QkFBeUIsbVpBSDFCLDhHQUE4Rzs7NEZBRzdHLHlCQUF5QjtrQkFSckMsU0FBUzsrQkFDRSx3QkFBd0IsY0FDdEIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDLEVBQUUsU0FBUyxFQUFFLG9DQUFvQyxFQUFFLFlBQy9DLDhHQUE4RyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKiBJY29uICsgbWVzc2FnZSBib3ggdXNlZCBmb3IgdGhlIGluZm8gY2FsbG91dCwgbG9hZGluZyAvIGVycm9yIHN0YXRlcyBhbmQgdGhlIHZhbGlkYXRpb24gaGludC4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zYmQtcmVpc3N1ZS1ub3RpY2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogeyAnW2NsYXNzXSc6ICdcInNiZC1ub3RpY2Ugc2JkLW5vdGljZS0tXCIgKyB0b25lKCknIH0sXG4gIHRlbXBsYXRlOiBgPGkgW2NsYXNzXT1cImljb24oKVwiPjwvaT48c3BhbiBjbGFzcz1cInNiZC1ub3RpY2VfX3RleHRcIj48bmctY29udGVudCAvPjwvc3Bhbj48bmctY29udGVudCBzZWxlY3Q9XCJbYWN0aW9uXVwiIC8+YCxcbiAgc3R5bGVVcmw6ICcuL3JlaXNzdWUtbm90aWNlLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgU2JkUmVpc3N1ZU5vdGljZUNvbXBvbmVudCB7XG4gIGljb24gPSBpbnB1dCgncGkgcGktaW5mby1jaXJjbGUnKTtcbiAgdG9uZSA9IGlucHV0PCdpbmZvJyB8ICdlcnJvcicgfCAnd2FybicgfCAnbXV0ZWQnIHwgJ3N1Y2Nlc3MnPignaW5mbycpO1xufVxuIl19
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { FormsModule } from '@angular/forms';
|
|
3
|
+
import { NgSelectModule } from '@ng-select/ng-select';
|
|
4
|
+
import { compareAirports } from '../../../../utils/reissue-format';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/forms";
|
|
7
|
+
import * as i2 from "@ng-select/ng-select";
|
|
8
|
+
export class SbdReissueRouteStepComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.rows = input.required();
|
|
11
|
+
this.options = input.required();
|
|
12
|
+
this.airportChanged = output();
|
|
13
|
+
this.searched = output();
|
|
14
|
+
this.swapped = output();
|
|
15
|
+
this.compare = compareAirports;
|
|
16
|
+
this.sides = [
|
|
17
|
+
{ key: 'origin', label: 'From' },
|
|
18
|
+
{ key: 'destination', label: 'To' },
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueRouteStepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SbdReissueRouteStepComponent, isStandalone: true, selector: "app-sbd-reissue-route-step", inputs: { rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { airportChanged: "airportChanged", searched: "searched", swapped: "swapped" }, host: { classAttribute: "sbd-rroute" }, ngImport: i0, template: `
|
|
23
|
+
@for (row of rows(); track row.leg.legId) {
|
|
24
|
+
<div class="sbd-rroute__card">
|
|
25
|
+
<div class="sbd-rroute__head">
|
|
26
|
+
<span class="sbd-rroute__name">{{ row.leg.originCode }} to {{ row.leg.destinationCode }}</span>
|
|
27
|
+
<span class="sbd-rroute__current">Currently {{ row.current }}</span>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<div class="sbd-rroute__pair">
|
|
31
|
+
@for (side of sides; track side.key) {
|
|
32
|
+
<label class="sbd-rroute__field">
|
|
33
|
+
<span>{{ side.label }}</span>
|
|
34
|
+
<ng-select class="sbd-rroute__select" bindLabel="label" [clearable]="false"
|
|
35
|
+
[items]="options()" [compareWith]="compare" [ngModel]="row[side.key]"
|
|
36
|
+
(ngModelChange)="airportChanged.emit({ legId: row.leg.legId, side: side.key, airport: $event })"
|
|
37
|
+
(search)="searched.emit($event.term)">
|
|
38
|
+
<ng-template ng-label-tmp let-item="item">{{ item.city_name }} ({{ item.id }})</ng-template>
|
|
39
|
+
<ng-template ng-option-tmp let-item="item">
|
|
40
|
+
<div class="sbd-rroute__opt"><b>{{ item.city_name }} ({{ item.id }})</b><small>{{ item.name }}</small></div>
|
|
41
|
+
</ng-template>
|
|
42
|
+
</ng-select>
|
|
43
|
+
</label>
|
|
44
|
+
|
|
45
|
+
<!-- Swap arrow, between From and To -->
|
|
46
|
+
@if ($first) {
|
|
47
|
+
<button type="button" class="sbd-rroute__swap" aria-label="Swap origin and destination"
|
|
48
|
+
(click)="swapped.emit(row.leg.legId)">
|
|
49
|
+
<!-- Inline SVG: primeicons 4.x has no horizontal swap arrows. -->
|
|
50
|
+
<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.6"
|
|
51
|
+
stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
52
|
+
<path d="M2 5.5h11M10.5 3l2.5 2.5-2.5 2.5M14 10.5H3M5.5 8 3 10.5 5.5 13" />
|
|
53
|
+
</svg>
|
|
54
|
+
</button>
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
}
|
|
60
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;gap:12px}.sbd-rroute__card{border:1.5px solid #e2e8f0;border-radius:16px;background:#fff;transition:border-color .15s,box-shadow .15s;padding:16px;display:flex;flex-direction:column;gap:14px}.sbd-rroute__head{display:flex;flex-direction:column;gap:2px}.sbd-rroute__name{font-size:15px;font-weight:700;color:#1e2e4a}.sbd-rroute__current{font-size:13px;color:#64748b}.sbd-rroute__field{display:flex;flex-direction:column;gap:6px;min-width:0;font-size:12.5px;font-weight:600;color:#475569}.sbd-rroute__pair{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:8px;align-items:end}.sbd-rroute__swap{width:32px;height:32px;margin-bottom:4px;border-radius:50%;border:1.5px solid #e2e8f0;background:#fff;color:#1e2e4a;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s,border-color .15s}.sbd-rroute__swap .pi{font-size:13px}.sbd-rroute__swap:hover{background:#f8fafc;border-color:var(--sbd-accent, #6d4aff)}.sbd-rroute__opt{display:flex;flex-direction:column;line-height:1.3;min-width:0}.sbd-rroute__opt b{font-size:13px;font-weight:600;color:#1e2e4a}.sbd-rroute__opt small{font-size:11px;color:#64748b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .sbd-rroute__select{font-size:13px;font-weight:400;color:#1e2e4a}:host ::ng-deep .sbd-rroute__select .ng-select-container{min-height:40px;border-radius:10px;border:1.5px solid #e2e8f0}:host ::ng-deep .sbd-rroute__select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:var(--sbd-accent, #6d4aff);box-shadow:none}:host ::ng-deep .sbd-rroute__select .ng-value-container .ng-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}:host ::ng-deep .sbd-rroute__select .ng-dropdown-panel{min-width:100%;z-index:1100;border-radius:10px}:host ::ng-deep .sbd-rroute__select .ng-dropdown-panel .ng-dropdown-panel-items{max-height:220px}:host ::ng-deep .sbd-rroute__select .ng-dropdown-panel .ng-option{padding:8px 12px;font-size:13px;white-space:normal}:host ::ng-deep .sbd-rroute__select .ng-dropdown-panel .ng-option.ng-option-selected,:host ::ng-deep .sbd-rroute__select .ng-dropdown-panel .ng-option.ng-option-marked{background:var(--sbd-accent-soft, #ede9fe)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i2.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick", "keyDownFn"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i2.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i2.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
61
|
+
}
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueRouteStepComponent, decorators: [{
|
|
63
|
+
type: Component,
|
|
64
|
+
args: [{ selector: 'app-sbd-reissue-route-step', standalone: true, imports: [FormsModule, NgSelectModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
65
|
+
@for (row of rows(); track row.leg.legId) {
|
|
66
|
+
<div class="sbd-rroute__card">
|
|
67
|
+
<div class="sbd-rroute__head">
|
|
68
|
+
<span class="sbd-rroute__name">{{ row.leg.originCode }} to {{ row.leg.destinationCode }}</span>
|
|
69
|
+
<span class="sbd-rroute__current">Currently {{ row.current }}</span>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<div class="sbd-rroute__pair">
|
|
73
|
+
@for (side of sides; track side.key) {
|
|
74
|
+
<label class="sbd-rroute__field">
|
|
75
|
+
<span>{{ side.label }}</span>
|
|
76
|
+
<ng-select class="sbd-rroute__select" bindLabel="label" [clearable]="false"
|
|
77
|
+
[items]="options()" [compareWith]="compare" [ngModel]="row[side.key]"
|
|
78
|
+
(ngModelChange)="airportChanged.emit({ legId: row.leg.legId, side: side.key, airport: $event })"
|
|
79
|
+
(search)="searched.emit($event.term)">
|
|
80
|
+
<ng-template ng-label-tmp let-item="item">{{ item.city_name }} ({{ item.id }})</ng-template>
|
|
81
|
+
<ng-template ng-option-tmp let-item="item">
|
|
82
|
+
<div class="sbd-rroute__opt"><b>{{ item.city_name }} ({{ item.id }})</b><small>{{ item.name }}</small></div>
|
|
83
|
+
</ng-template>
|
|
84
|
+
</ng-select>
|
|
85
|
+
</label>
|
|
86
|
+
|
|
87
|
+
<!-- Swap arrow, between From and To -->
|
|
88
|
+
@if ($first) {
|
|
89
|
+
<button type="button" class="sbd-rroute__swap" aria-label="Swap origin and destination"
|
|
90
|
+
(click)="swapped.emit(row.leg.legId)">
|
|
91
|
+
<!-- Inline SVG: primeicons 4.x has no horizontal swap arrows. -->
|
|
92
|
+
<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.6"
|
|
93
|
+
stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
94
|
+
<path d="M2 5.5h11M10.5 3l2.5 2.5-2.5 2.5M14 10.5H3M5.5 8 3 10.5 5.5 13" />
|
|
95
|
+
</svg>
|
|
96
|
+
</button>
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
}
|
|
102
|
+
`, host: { class: 'sbd-rroute' }, styles: [":host{display:flex;flex-direction:column;gap:12px}.sbd-rroute__card{border:1.5px solid #e2e8f0;border-radius:16px;background:#fff;transition:border-color .15s,box-shadow .15s;padding:16px;display:flex;flex-direction:column;gap:14px}.sbd-rroute__head{display:flex;flex-direction:column;gap:2px}.sbd-rroute__name{font-size:15px;font-weight:700;color:#1e2e4a}.sbd-rroute__current{font-size:13px;color:#64748b}.sbd-rroute__field{display:flex;flex-direction:column;gap:6px;min-width:0;font-size:12.5px;font-weight:600;color:#475569}.sbd-rroute__pair{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:8px;align-items:end}.sbd-rroute__swap{width:32px;height:32px;margin-bottom:4px;border-radius:50%;border:1.5px solid #e2e8f0;background:#fff;color:#1e2e4a;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s,border-color .15s}.sbd-rroute__swap .pi{font-size:13px}.sbd-rroute__swap:hover{background:#f8fafc;border-color:var(--sbd-accent, #6d4aff)}.sbd-rroute__opt{display:flex;flex-direction:column;line-height:1.3;min-width:0}.sbd-rroute__opt b{font-size:13px;font-weight:600;color:#1e2e4a}.sbd-rroute__opt small{font-size:11px;color:#64748b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .sbd-rroute__select{font-size:13px;font-weight:400;color:#1e2e4a}:host ::ng-deep .sbd-rroute__select .ng-select-container{min-height:40px;border-radius:10px;border:1.5px solid #e2e8f0}:host ::ng-deep .sbd-rroute__select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:var(--sbd-accent, #6d4aff);box-shadow:none}:host ::ng-deep .sbd-rroute__select .ng-value-container .ng-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}:host ::ng-deep .sbd-rroute__select .ng-dropdown-panel{min-width:100%;z-index:1100;border-radius:10px}:host ::ng-deep .sbd-rroute__select .ng-dropdown-panel .ng-dropdown-panel-items{max-height:220px}:host ::ng-deep .sbd-rroute__select .ng-dropdown-panel .ng-option{padding:8px 12px;font-size:13px;white-space:normal}:host ::ng-deep .sbd-rroute__select .ng-dropdown-panel .ng-option.ng-option-selected,:host ::ng-deep .sbd-rroute__select .ng-dropdown-panel .ng-option.ng-option-marked{background:var(--sbd-accent-soft, #ede9fe)}\n"] }]
|
|
103
|
+
}] });
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVpc3N1ZS1yb3V0ZS1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9yZWlzc3VlLWRpYWxvZy9zdGVwcy9yZWlzc3VlLXJvdXRlLXN0ZXAvcmVpc3N1ZS1yb3V0ZS1zdGVwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7QUFrRG5FLE1BQU0sT0FBTyw0QkFBNEI7SUEvQ3pDO1FBZ0RFLFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFxQixDQUFDO1FBQzNDLFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFtQixDQUFDO1FBQzVDLG1CQUFjLEdBQUcsTUFBTSxFQUF3RSxDQUFDO1FBQ2hHLGFBQVEsR0FBRyxNQUFNLEVBQVUsQ0FBQztRQUM1QixZQUFPLEdBQUcsTUFBTSxFQUFVLENBQUM7UUFFbEIsWUFBTyxHQUFHLGVBQWUsQ0FBQztRQUMxQixVQUFLLEdBQTBDO1lBQ3RELEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQ2hDLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1NBQ3BDLENBQUM7S0FDSDsrR0FaWSw0QkFBNEI7bUdBQTVCLDRCQUE0QixvZEExQzdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDVCxtekVBeENTLFdBQVcsOFZBQUUsY0FBYzs7NEZBNEMxQiw0QkFBNEI7a0JBL0N4QyxTQUFTOytCQUNFLDRCQUE0QixjQUMxQixJQUFJLFdBQ1AsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLG1CQUNyQix1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDVCxRQUVLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdTZWxlY3RNb2R1bGUgfSBmcm9tICdAbmctc2VsZWN0L25nLXNlbGVjdCc7XG5pbXBvcnQgeyBSZWlzc3VlQWlycG9ydCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWlzc3VlLnR5cGVzJztcbmltcG9ydCB7IGNvbXBhcmVBaXJwb3J0cyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL3JlaXNzdWUtZm9ybWF0JztcbmltcG9ydCB7IEFpcnBvcnRPcHRpb24sIEFpcnBvcnRTaWRlLCBSZWlzc3VlUm91dGVSb3cgfSBmcm9tICcuLi8uLi9yZWlzc3VlLnN0b3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXNiZC1yZWlzc3VlLXJvdXRlLXN0ZXAnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIE5nU2VsZWN0TW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGZvciAocm93IG9mIHJvd3MoKTsgdHJhY2sgcm93LmxlZy5sZWdJZCkge1xuICAgICAgPGRpdiBjbGFzcz1cInNiZC1ycm91dGVfX2NhcmRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiZC1ycm91dGVfX2hlYWRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiZC1ycm91dGVfX25hbWVcIj57eyByb3cubGVnLm9yaWdpbkNvZGUgfX0gdG8ge3sgcm93LmxlZy5kZXN0aW5hdGlvbkNvZGUgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmQtcnJvdXRlX19jdXJyZW50XCI+Q3VycmVudGx5IHt7IHJvdy5jdXJyZW50IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JkLXJyb3V0ZV9fcGFpclwiPlxuICAgICAgICAgIEBmb3IgKHNpZGUgb2Ygc2lkZXM7IHRyYWNrIHNpZGUua2V5KSB7XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzYmQtcnJvdXRlX19maWVsZFwiPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBzaWRlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8bmctc2VsZWN0IGNsYXNzPVwic2JkLXJyb3V0ZV9fc2VsZWN0XCIgYmluZExhYmVsPVwibGFiZWxcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwib3B0aW9ucygpXCIgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVcIiBbbmdNb2RlbF09XCJyb3dbc2lkZS5rZXldXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJhaXJwb3J0Q2hhbmdlZC5lbWl0KHsgbGVnSWQ6IHJvdy5sZWcubGVnSWQsIHNpZGU6IHNpZGUua2V5LCBhaXJwb3J0OiAkZXZlbnQgfSlcIlxuICAgICAgICAgICAgICAgIChzZWFyY2gpPVwic2VhcmNoZWQuZW1pdCgkZXZlbnQudGVybSlcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctbGFiZWwtdG1wIGxldC1pdGVtPVwiaXRlbVwiPnt7IGl0ZW0uY2l0eV9uYW1lIH19ICh7eyBpdGVtLmlkIH19KTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JkLXJyb3V0ZV9fb3B0XCI+PGI+e3sgaXRlbS5jaXR5X25hbWUgfX0gKHt7IGl0ZW0uaWQgfX0pPC9iPjxzbWFsbD57eyBpdGVtLm5hbWUgfX08L3NtYWxsPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxuICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgPCEtLSBTd2FwIGFycm93LCBiZXR3ZWVuIEZyb20gYW5kIFRvIC0tPlxuICAgICAgICAgICAgQGlmICgkZmlyc3QpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzYmQtcnJvdXRlX19zd2FwXCIgYXJpYS1sYWJlbD1cIlN3YXAgb3JpZ2luIGFuZCBkZXN0aW5hdGlvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3YXBwZWQuZW1pdChyb3cubGVnLmxlZ0lkKVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gSW5saW5lIFNWRzogcHJpbWVpY29ucyA0LnggaGFzIG5vIGhvcml6b250YWwgc3dhcCBhcnJvd3MuIC0tPlxuICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNiAxNlwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS42XCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yIDUuNWgxMU0xMC41IDNsMi41IDIuNS0yLjUgMi41TTE0IDEwLjVIM001LjUgOCAzIDEwLjUgNS41IDEzXCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgYCxcbiAgc3R5bGVVcmw6ICcuL3JlaXNzdWUtcm91dGUtc3RlcC5jb21wb25lbnQuc2NzcycsXG4gIGhvc3Q6IHsgY2xhc3M6ICdzYmQtcnJvdXRlJyB9LFxufSlcbmV4cG9ydCBjbGFzcyBTYmRSZWlzc3VlUm91dGVTdGVwQ29tcG9uZW50IHtcbiAgcm93cyA9IGlucHV0LnJlcXVpcmVkPFJlaXNzdWVSb3V0ZVJvd1tdPigpO1xuICBvcHRpb25zID0gaW5wdXQucmVxdWlyZWQ8QWlycG9ydE9wdGlvbltdPigpO1xuICBhaXJwb3J0Q2hhbmdlZCA9IG91dHB1dDx7IGxlZ0lkOiBzdHJpbmc7IHNpZGU6IEFpcnBvcnRTaWRlOyBhaXJwb3J0OiBSZWlzc3VlQWlycG9ydCB8IG51bGwgfT4oKTtcbiAgc2VhcmNoZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICBzd2FwcGVkID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICByZWFkb25seSBjb21wYXJlID0gY29tcGFyZUFpcnBvcnRzO1xuICByZWFkb25seSBzaWRlczogeyBrZXk6IEFpcnBvcnRTaWRlOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtcbiAgICB7IGtleTogJ29yaWdpbicsIGxhYmVsOiAnRnJvbScgfSxcbiAgICB7IGtleTogJ2Rlc3RpbmF0aW9uJywgbGFiZWw6ICdUbycgfSxcbiAgXTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
const OPTIONS = [
|
|
4
|
+
{ key: 'change_date', icon: 'pi pi-calendar', title: 'Change Flight Date', description: 'Move one or more flights to a new date' },
|
|
5
|
+
{ key: 'change_route', icon: 'pi pi-map', title: 'Change Route', description: 'Change the origin or destination airport' },
|
|
6
|
+
{ key: 'upgrade_class', icon: 'pi pi-arrow-up', title: 'Upgrade Class', description: 'Move to a higher cabin or fare class' },
|
|
7
|
+
];
|
|
8
|
+
export class SbdReissueServiceStepComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.upgradeAvailable = input(false);
|
|
11
|
+
this.chosen = output();
|
|
12
|
+
/** Upgrade Class is listed only when the upgrade-class API returned options. */
|
|
13
|
+
this.options = computed(() => OPTIONS.filter(o => o.key !== 'upgrade_class' || this.upgradeAvailable()));
|
|
14
|
+
}
|
|
15
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueServiceStepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
16
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SbdReissueServiceStepComponent, isStandalone: true, selector: "app-sbd-reissue-service-step", inputs: { upgradeAvailable: { classPropertyName: "upgradeAvailable", publicName: "upgradeAvailable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { chosen: "chosen" }, host: { classAttribute: "sbd-rsvc" }, ngImport: i0, template: `
|
|
17
|
+
@for (option of options(); track option.key) {
|
|
18
|
+
<button type="button" class="sbd-rsvc__option" (click)="chosen.emit(option.key)">
|
|
19
|
+
<span class="sbd-rsvc__icon"><i [class]="option.icon"></i></span>
|
|
20
|
+
<span class="sbd-rsvc__text">
|
|
21
|
+
<strong>{{ option.title }}</strong>
|
|
22
|
+
<small>{{ option.description }}</small>
|
|
23
|
+
</span>
|
|
24
|
+
<i class="pi pi-chevron-right sbd-rsvc__arrow"></i>
|
|
25
|
+
</button>
|
|
26
|
+
}
|
|
27
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;gap:12px}.sbd-rsvc__option{border:1.5px solid #e2e8f0;border-radius:16px;background:#fff;transition:border-color .15s,box-shadow .15s;display:flex;align-items:center;gap:12px;width:100%;padding:16px;text-align:left;font-family:inherit;cursor:pointer}.sbd-rsvc__option:hover{border-color:var(--sbd-accent, #6d4aff)}.sbd-rsvc__icon{flex-shrink:0;width:44px;height:44px;border-radius:10px;border:1px solid #e2e8f0;color:#1e2e4a;display:flex;align-items:center;justify-content:center}.sbd-rsvc__icon .pi{font-size:16px}.sbd-rsvc__text{flex:1;display:flex;flex-direction:column;gap:2px}.sbd-rsvc__text strong{font-size:15px;font-weight:700;color:#1e2e4a}.sbd-rsvc__text small{font-size:12.5px;color:#64748b}.sbd-rsvc__arrow{color:#94a3b8;font-size:12px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueServiceStepComponent, decorators: [{
|
|
30
|
+
type: Component,
|
|
31
|
+
args: [{ selector: 'app-sbd-reissue-service-step', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
32
|
+
@for (option of options(); track option.key) {
|
|
33
|
+
<button type="button" class="sbd-rsvc__option" (click)="chosen.emit(option.key)">
|
|
34
|
+
<span class="sbd-rsvc__icon"><i [class]="option.icon"></i></span>
|
|
35
|
+
<span class="sbd-rsvc__text">
|
|
36
|
+
<strong>{{ option.title }}</strong>
|
|
37
|
+
<small>{{ option.description }}</small>
|
|
38
|
+
</span>
|
|
39
|
+
<i class="pi pi-chevron-right sbd-rsvc__arrow"></i>
|
|
40
|
+
</button>
|
|
41
|
+
}
|
|
42
|
+
`, host: { class: 'sbd-rsvc' }, styles: [":host{display:flex;flex-direction:column;gap:12px}.sbd-rsvc__option{border:1.5px solid #e2e8f0;border-radius:16px;background:#fff;transition:border-color .15s,box-shadow .15s;display:flex;align-items:center;gap:12px;width:100%;padding:16px;text-align:left;font-family:inherit;cursor:pointer}.sbd-rsvc__option:hover{border-color:var(--sbd-accent, #6d4aff)}.sbd-rsvc__icon{flex-shrink:0;width:44px;height:44px;border-radius:10px;border:1px solid #e2e8f0;color:#1e2e4a;display:flex;align-items:center;justify-content:center}.sbd-rsvc__icon .pi{font-size:16px}.sbd-rsvc__text{flex:1;display:flex;flex-direction:column;gap:2px}.sbd-rsvc__text strong{font-size:15px;font-weight:700;color:#1e2e4a}.sbd-rsvc__text small{font-size:12.5px;color:#64748b}.sbd-rsvc__arrow{color:#94a3b8;font-size:12px}\n"] }]
|
|
43
|
+
}] });
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVpc3N1ZS1zZXJ2aWNlLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL3JlaXNzdWUtZGlhbG9nL3N0ZXBzL3JlaXNzdWUtc2VydmljZS1zdGVwL3JlaXNzdWUtc2VydmljZS1zdGVwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUs1RixNQUFNLE9BQU8sR0FBb0I7SUFDL0IsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLHdDQUF3QyxFQUFFO0lBQ2xJLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLDBDQUEwQyxFQUFFO0lBQzFILEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsc0NBQXNDLEVBQUU7Q0FDOUgsQ0FBQztBQXFCRixNQUFNLE9BQU8sOEJBQThCO0lBbkIzQztRQW9CRSxxQkFBZ0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsV0FBTSxHQUFHLE1BQU0sRUFBcUIsQ0FBQztRQUVyQyxnRkFBZ0Y7UUFDdEUsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxlQUFlLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQy9HOytHQU5ZLDhCQUE4QjttR0FBOUIsOEJBQThCLGtVQWYvQjs7Ozs7Ozs7Ozs7R0FXVDs7NEZBSVUsOEJBQThCO2tCQW5CMUMsU0FBUzsrQkFDRSw4QkFBOEIsY0FDNUIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7OztHQVdULFFBRUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlaXNzdWVTZXJ2aWNlS2V5IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlaXNzdWUudHlwZXMnO1xuXG5pbnRlcmZhY2UgU2VydmljZU9wdGlvbiB7IGtleTogUmVpc3N1ZVNlcnZpY2VLZXk7IGljb246IHN0cmluZzsgdGl0bGU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9XG5cbmNvbnN0IE9QVElPTlM6IFNlcnZpY2VPcHRpb25bXSA9IFtcbiAgeyBrZXk6ICdjaGFuZ2VfZGF0ZScsIGljb246ICdwaSBwaS1jYWxlbmRhcicsIHRpdGxlOiAnQ2hhbmdlIEZsaWdodCBEYXRlJywgZGVzY3JpcHRpb246ICdNb3ZlIG9uZSBvciBtb3JlIGZsaWdodHMgdG8gYSBuZXcgZGF0ZScgfSxcbiAgeyBrZXk6ICdjaGFuZ2Vfcm91dGUnLCBpY29uOiAncGkgcGktbWFwJywgdGl0bGU6ICdDaGFuZ2UgUm91dGUnLCBkZXNjcmlwdGlvbjogJ0NoYW5nZSB0aGUgb3JpZ2luIG9yIGRlc3RpbmF0aW9uIGFpcnBvcnQnIH0sXG4gIHsga2V5OiAndXBncmFkZV9jbGFzcycsIGljb246ICdwaSBwaS1hcnJvdy11cCcsIHRpdGxlOiAnVXBncmFkZSBDbGFzcycsIGRlc2NyaXB0aW9uOiAnTW92ZSB0byBhIGhpZ2hlciBjYWJpbiBvciBmYXJlIGNsYXNzJyB9LFxuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXNiZC1yZWlzc3VlLXNlcnZpY2Utc3RlcCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBmb3IgKG9wdGlvbiBvZiBvcHRpb25zKCk7IHRyYWNrIG9wdGlvbi5rZXkpIHtcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2JkLXJzdmNfX29wdGlvblwiIChjbGljayk9XCJjaG9zZW4uZW1pdChvcHRpb24ua2V5KVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiZC1yc3ZjX19pY29uXCI+PGkgW2NsYXNzXT1cIm9wdGlvbi5pY29uXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmQtcnN2Y19fdGV4dFwiPlxuICAgICAgICAgIDxzdHJvbmc+e3sgb3B0aW9uLnRpdGxlIH19PC9zdHJvbmc+XG4gICAgICAgICAgPHNtYWxsPnt7IG9wdGlvbi5kZXNjcmlwdGlvbiB9fTwvc21hbGw+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jaGV2cm9uLXJpZ2h0IHNiZC1yc3ZjX19hcnJvd1wiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgYCxcbiAgc3R5bGVVcmw6ICcuL3JlaXNzdWUtc2VydmljZS1zdGVwLmNvbXBvbmVudC5zY3NzJyxcbiAgaG9zdDogeyBjbGFzczogJ3NiZC1yc3ZjJyB9LFxufSlcbmV4cG9ydCBjbGFzcyBTYmRSZWlzc3VlU2VydmljZVN0ZXBDb21wb25lbnQge1xuICB1cGdyYWRlQXZhaWxhYmxlID0gaW5wdXQoZmFsc2UpO1xuICBjaG9zZW4gPSBvdXRwdXQ8UmVpc3N1ZVNlcnZpY2VLZXk+KCk7XG5cbiAgLyoqIFVwZ3JhZGUgQ2xhc3MgaXMgbGlzdGVkIG9ubHkgd2hlbiB0aGUgdXBncmFkZS1jbGFzcyBBUEkgcmV0dXJuZWQgb3B0aW9ucy4gKi9cbiAgcHJvdGVjdGVkIG9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiBPUFRJT05TLmZpbHRlcihvID0+IG8ua2V5ICE9PSAndXBncmFkZV9jbGFzcycgfHwgdGhpcy51cGdyYWRlQXZhaWxhYmxlKCkpKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, computed, inject, input, output, signal } from '@angular/core';
|
|
2
|
+
import { ButtonModule } from 'primeng/button';
|
|
3
|
+
import { formatCountdown, parseLinkExpiry } from '../../../../utils/reissue-format';
|
|
4
|
+
import { SbdReissueNoticeComponent } from '../reissue-notice/reissue-notice.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "primeng/button";
|
|
7
|
+
export class SbdReissueUpgradeConfirmStepComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.rows = input.required();
|
|
10
|
+
this.total = input(0);
|
|
11
|
+
this.totalLabel = input('');
|
|
12
|
+
this.priceChanged = input(false);
|
|
13
|
+
/** `book-now` was sent. */
|
|
14
|
+
this.booked = input(false);
|
|
15
|
+
this.link = input(null);
|
|
16
|
+
this.error = input(null);
|
|
17
|
+
/** The link expired and the agent chose to redo the upgrade from the beginning. */
|
|
18
|
+
this.restart = output();
|
|
19
|
+
this.copied = signal(false);
|
|
20
|
+
/** Ticks every second so the countdown (and the expired state) update on their own. */
|
|
21
|
+
this.now = signal(Date.now());
|
|
22
|
+
this.remainingMs = computed(() => {
|
|
23
|
+
const expiry = parseLinkExpiry(this.link()?.expiresAt);
|
|
24
|
+
return expiry == null ? null : expiry - this.now();
|
|
25
|
+
});
|
|
26
|
+
this.expired = computed(() => {
|
|
27
|
+
const left = this.remainingMs();
|
|
28
|
+
return left != null && left <= 0;
|
|
29
|
+
});
|
|
30
|
+
/** `mm:ss` until the link expires; empty when the backend sent no (valid) expiry. */
|
|
31
|
+
this.countdown = computed(() => {
|
|
32
|
+
const left = this.remainingMs();
|
|
33
|
+
return left == null || left <= 0 ? '' : formatCountdown(left);
|
|
34
|
+
});
|
|
35
|
+
/** Last two minutes: highlight the countdown. */
|
|
36
|
+
this.soon = computed(() => (this.remainingMs() ?? Infinity) <= 2 * 60 * 1000);
|
|
37
|
+
const timer = setInterval(() => this.now.set(Date.now()), 1000);
|
|
38
|
+
inject(DestroyRef).onDestroy(() => clearInterval(timer));
|
|
39
|
+
}
|
|
40
|
+
async copy(url) {
|
|
41
|
+
try {
|
|
42
|
+
await navigator.clipboard.writeText(url);
|
|
43
|
+
this.copied.set(true);
|
|
44
|
+
setTimeout(() => this.copied.set(false), 1500);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Clipboard blocked (e.g. insecure context): the input is selectable, so the agent can still copy by hand.
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueUpgradeConfirmStepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
51
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SbdReissueUpgradeConfirmStepComponent, isStandalone: true, selector: "app-sbd-reissue-upgrade-confirm-step", inputs: { rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: true, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, totalLabel: { classPropertyName: "totalLabel", publicName: "totalLabel", isSignal: true, isRequired: false, transformFunction: null }, priceChanged: { classPropertyName: "priceChanged", publicName: "priceChanged", isSignal: true, isRequired: false, transformFunction: null }, booked: { classPropertyName: "booked", publicName: "booked", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { restart: "restart" }, host: { classAttribute: "sbd-rconf" }, ngImport: i0, template: `
|
|
52
|
+
@if (priceChanged()) {
|
|
53
|
+
<app-sbd-reissue-notice tone="warn" icon="pi pi-exclamation-triangle">
|
|
54
|
+
The price changed since the options were loaded. Check the total below.
|
|
55
|
+
</app-sbd-reissue-notice>
|
|
56
|
+
}
|
|
57
|
+
@if (error()) {
|
|
58
|
+
<app-sbd-reissue-notice tone="error" icon="pi pi-exclamation-circle">{{ error() }}</app-sbd-reissue-notice>
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
<div class="sbd-rconf__summary">
|
|
62
|
+
@for (row of rows(); track row.title) {
|
|
63
|
+
<div class="sbd-rconf__row">
|
|
64
|
+
<span class="sbd-rconf__row-main">
|
|
65
|
+
<b>{{ row.title }}</b>
|
|
66
|
+
<small>{{ row.from ? row.from + ' → ' : '' }}{{ row.to }}</small>
|
|
67
|
+
</span>
|
|
68
|
+
<strong>{{ row.extraLabel }}</strong>
|
|
69
|
+
</div>
|
|
70
|
+
}
|
|
71
|
+
<div class="sbd-rconf__total">
|
|
72
|
+
<span>Total to pay</span>
|
|
73
|
+
<strong>{{ totalLabel() }}</strong>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
@if (link(); as link) {
|
|
78
|
+
@if (expired()) {
|
|
79
|
+
<app-sbd-reissue-notice tone="error" icon="pi pi-clock">
|
|
80
|
+
The payment link expired. Start the upgrade again from the beginning.
|
|
81
|
+
<button action pButton type="button" class="p-button-sm p-button-outlined p-button-secondary" label="Start again"
|
|
82
|
+
(click)="restart.emit()"></button>
|
|
83
|
+
</app-sbd-reissue-notice>
|
|
84
|
+
} @else {
|
|
85
|
+
<div class="sbd-rconf__link">
|
|
86
|
+
<div class="sbd-rconf__link-head"><b>Payment link</b><small>Send it to the customer</small></div>
|
|
87
|
+
<div class="sbd-rconf__link-row">
|
|
88
|
+
<input class="sbd-rconf__link-input" readonly [value]="link.url" (focus)="$any($event.target).select()" />
|
|
89
|
+
<button pButton type="button" class="p-button-sm p-button-outlined p-button-secondary"
|
|
90
|
+
[icon]="copied() ? 'pi pi-check' : 'pi pi-copy'" [label]="copied() ? 'Copied' : 'Copy'" (click)="copy(link.url)"></button>
|
|
91
|
+
</div>
|
|
92
|
+
@if (countdown(); as left) {
|
|
93
|
+
<small class="sbd-rconf__expiry" [class.sbd-rconf__expiry--soon]="soon()">Link expires in {{ left }}</small>
|
|
94
|
+
} @else if (link.expiresAt) {
|
|
95
|
+
<small class="sbd-rconf__expiry">Expires {{ link.expiresAt.slice(0, 16).replace('T', ' ') }}</small>
|
|
96
|
+
}
|
|
97
|
+
</div>
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
<!-- The dialog does not follow the result: after book-now, or once the link is sent, the agent follows the booking. -->
|
|
102
|
+
@if (booked()) {
|
|
103
|
+
<app-sbd-reissue-notice tone="success" icon="pi pi-check-circle">
|
|
104
|
+
The upgrade request was sent. Check the booking for the result.
|
|
105
|
+
</app-sbd-reissue-notice>
|
|
106
|
+
} @else if (link()) {
|
|
107
|
+
@if (!expired()) {
|
|
108
|
+
<app-sbd-reissue-notice tone="success" icon="pi pi-check-circle">
|
|
109
|
+
Copy the link and send it to the customer. The upgrade is placed once they pay: check the booking then.
|
|
110
|
+
</app-sbd-reissue-notice>
|
|
111
|
+
}
|
|
112
|
+
} @else {
|
|
113
|
+
<app-sbd-reissue-notice icon="pi pi-info-circle">
|
|
114
|
+
{{ total() > 0
|
|
115
|
+
? 'A payment link will be generated for the customer to pay the difference.'
|
|
116
|
+
: 'Nothing to pay: confirming places the upgrade straight away.' }}
|
|
117
|
+
</app-sbd-reissue-notice>
|
|
118
|
+
}
|
|
119
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;gap:14px}.sbd-rconf__summary{background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:12px}.sbd-rconf__row{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13.5px}.sbd-rconf__row strong{font-size:14px;font-weight:800;color:#1e2e4a;font-variant-numeric:tabular-nums;white-space:nowrap}.sbd-rconf__row-main{display:flex;flex-direction:column;gap:2px;min-width:0}.sbd-rconf__row-main b{font-weight:700;color:#1e2e4a}.sbd-rconf__row-main small{font-size:12.5px;color:#64748b}.sbd-rconf__total{display:flex;align-items:center;justify-content:space-between;border-top:1px solid #e2e8f0;padding-top:12px}.sbd-rconf__total span{font-size:14.5px;font-weight:700;color:#1e2e4a}.sbd-rconf__total strong{font-size:17px;font-weight:800;color:#1e2e4a;font-variant-numeric:tabular-nums}.sbd-rconf__link{border:1.5px solid #e2e8f0;border-radius:16px;background:#fff;transition:border-color .15s,box-shadow .15s;padding:16px;display:flex;flex-direction:column;gap:10px}.sbd-rconf__link-head{display:flex;justify-content:space-between;align-items:center;font-size:14px;color:#1e2e4a}.sbd-rconf__link-head small{color:#94a3b8;font-size:12.5px}.sbd-rconf__link-row{display:flex;gap:8px}.sbd-rconf__link-input{height:40px;padding:0 12px;border:1.5px solid #e2e8f0;border-radius:10px;background:#fff;font-size:13px;font-family:inherit;color:#1e2e4a}.sbd-rconf__link-input:focus{outline:none;border-color:var(--sbd-accent, #6d4aff)}.sbd-rconf__link-input{flex:1;min-width:0;height:36px;font-size:12px;color:#334155}.sbd-rconf__expiry{color:#94a3b8;font-size:12.5px;font-variant-numeric:tabular-nums}.sbd-rconf__expiry--soon{color:#b45309;font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: SbdReissueNoticeComponent, selector: "app-sbd-reissue-notice", inputs: ["icon", "tone"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
120
|
+
}
|
|
121
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueUpgradeConfirmStepComponent, decorators: [{
|
|
122
|
+
type: Component,
|
|
123
|
+
args: [{ selector: 'app-sbd-reissue-upgrade-confirm-step', standalone: true, imports: [ButtonModule, SbdReissueNoticeComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
124
|
+
@if (priceChanged()) {
|
|
125
|
+
<app-sbd-reissue-notice tone="warn" icon="pi pi-exclamation-triangle">
|
|
126
|
+
The price changed since the options were loaded. Check the total below.
|
|
127
|
+
</app-sbd-reissue-notice>
|
|
128
|
+
}
|
|
129
|
+
@if (error()) {
|
|
130
|
+
<app-sbd-reissue-notice tone="error" icon="pi pi-exclamation-circle">{{ error() }}</app-sbd-reissue-notice>
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
<div class="sbd-rconf__summary">
|
|
134
|
+
@for (row of rows(); track row.title) {
|
|
135
|
+
<div class="sbd-rconf__row">
|
|
136
|
+
<span class="sbd-rconf__row-main">
|
|
137
|
+
<b>{{ row.title }}</b>
|
|
138
|
+
<small>{{ row.from ? row.from + ' → ' : '' }}{{ row.to }}</small>
|
|
139
|
+
</span>
|
|
140
|
+
<strong>{{ row.extraLabel }}</strong>
|
|
141
|
+
</div>
|
|
142
|
+
}
|
|
143
|
+
<div class="sbd-rconf__total">
|
|
144
|
+
<span>Total to pay</span>
|
|
145
|
+
<strong>{{ totalLabel() }}</strong>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
|
|
149
|
+
@if (link(); as link) {
|
|
150
|
+
@if (expired()) {
|
|
151
|
+
<app-sbd-reissue-notice tone="error" icon="pi pi-clock">
|
|
152
|
+
The payment link expired. Start the upgrade again from the beginning.
|
|
153
|
+
<button action pButton type="button" class="p-button-sm p-button-outlined p-button-secondary" label="Start again"
|
|
154
|
+
(click)="restart.emit()"></button>
|
|
155
|
+
</app-sbd-reissue-notice>
|
|
156
|
+
} @else {
|
|
157
|
+
<div class="sbd-rconf__link">
|
|
158
|
+
<div class="sbd-rconf__link-head"><b>Payment link</b><small>Send it to the customer</small></div>
|
|
159
|
+
<div class="sbd-rconf__link-row">
|
|
160
|
+
<input class="sbd-rconf__link-input" readonly [value]="link.url" (focus)="$any($event.target).select()" />
|
|
161
|
+
<button pButton type="button" class="p-button-sm p-button-outlined p-button-secondary"
|
|
162
|
+
[icon]="copied() ? 'pi pi-check' : 'pi pi-copy'" [label]="copied() ? 'Copied' : 'Copy'" (click)="copy(link.url)"></button>
|
|
163
|
+
</div>
|
|
164
|
+
@if (countdown(); as left) {
|
|
165
|
+
<small class="sbd-rconf__expiry" [class.sbd-rconf__expiry--soon]="soon()">Link expires in {{ left }}</small>
|
|
166
|
+
} @else if (link.expiresAt) {
|
|
167
|
+
<small class="sbd-rconf__expiry">Expires {{ link.expiresAt.slice(0, 16).replace('T', ' ') }}</small>
|
|
168
|
+
}
|
|
169
|
+
</div>
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
<!-- The dialog does not follow the result: after book-now, or once the link is sent, the agent follows the booking. -->
|
|
174
|
+
@if (booked()) {
|
|
175
|
+
<app-sbd-reissue-notice tone="success" icon="pi pi-check-circle">
|
|
176
|
+
The upgrade request was sent. Check the booking for the result.
|
|
177
|
+
</app-sbd-reissue-notice>
|
|
178
|
+
} @else if (link()) {
|
|
179
|
+
@if (!expired()) {
|
|
180
|
+
<app-sbd-reissue-notice tone="success" icon="pi pi-check-circle">
|
|
181
|
+
Copy the link and send it to the customer. The upgrade is placed once they pay: check the booking then.
|
|
182
|
+
</app-sbd-reissue-notice>
|
|
183
|
+
}
|
|
184
|
+
} @else {
|
|
185
|
+
<app-sbd-reissue-notice icon="pi pi-info-circle">
|
|
186
|
+
{{ total() > 0
|
|
187
|
+
? 'A payment link will be generated for the customer to pay the difference.'
|
|
188
|
+
: 'Nothing to pay: confirming places the upgrade straight away.' }}
|
|
189
|
+
</app-sbd-reissue-notice>
|
|
190
|
+
}
|
|
191
|
+
`, host: { class: 'sbd-rconf' }, styles: [":host{display:flex;flex-direction:column;gap:14px}.sbd-rconf__summary{background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:12px}.sbd-rconf__row{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13.5px}.sbd-rconf__row strong{font-size:14px;font-weight:800;color:#1e2e4a;font-variant-numeric:tabular-nums;white-space:nowrap}.sbd-rconf__row-main{display:flex;flex-direction:column;gap:2px;min-width:0}.sbd-rconf__row-main b{font-weight:700;color:#1e2e4a}.sbd-rconf__row-main small{font-size:12.5px;color:#64748b}.sbd-rconf__total{display:flex;align-items:center;justify-content:space-between;border-top:1px solid #e2e8f0;padding-top:12px}.sbd-rconf__total span{font-size:14.5px;font-weight:700;color:#1e2e4a}.sbd-rconf__total strong{font-size:17px;font-weight:800;color:#1e2e4a;font-variant-numeric:tabular-nums}.sbd-rconf__link{border:1.5px solid #e2e8f0;border-radius:16px;background:#fff;transition:border-color .15s,box-shadow .15s;padding:16px;display:flex;flex-direction:column;gap:10px}.sbd-rconf__link-head{display:flex;justify-content:space-between;align-items:center;font-size:14px;color:#1e2e4a}.sbd-rconf__link-head small{color:#94a3b8;font-size:12.5px}.sbd-rconf__link-row{display:flex;gap:8px}.sbd-rconf__link-input{height:40px;padding:0 12px;border:1.5px solid #e2e8f0;border-radius:10px;background:#fff;font-size:13px;font-family:inherit;color:#1e2e4a}.sbd-rconf__link-input:focus{outline:none;border-color:var(--sbd-accent, #6d4aff)}.sbd-rconf__link-input{flex:1;min-width:0;height:36px;font-size:12px;color:#334155}.sbd-rconf__expiry{color:#94a3b8;font-size:12.5px;font-variant-numeric:tabular-nums}.sbd-rconf__expiry--soon{color:#b45309;font-weight:600}\n"] }]
|
|
192
|
+
}], ctorParameters: () => [] });
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVpc3N1ZS11cGdyYWRlLWNvbmZpcm0tc3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvcmVpc3N1ZS1kaWFsb2cvc3RlcHMvcmVpc3N1ZS11cGdyYWRlLWNvbmZpcm0tc3RlcC9yZWlzc3VlLXVwZ3JhZGUtY29uZmlybS1zdGVwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7QUErRXZGLE1BQU0sT0FBTyxxQ0FBcUM7SUFnQ2hEO1FBL0JBLFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUF1QixDQUFDO1FBQzdDLFVBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsZUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixpQkFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QiwyQkFBMkI7UUFDM0IsV0FBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixTQUFJLEdBQUcsS0FBSyxDQUE0QixJQUFJLENBQUMsQ0FBQztRQUM5QyxVQUFLLEdBQUcsS0FBSyxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUNuQyxtRkFBbUY7UUFDbkYsWUFBTyxHQUFHLE1BQU0sRUFBUSxDQUFDO1FBRWYsV0FBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQyx1RkFBdUY7UUFDL0UsUUFBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN6QixnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN2RCxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUNPLFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoQyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNILHFGQUFxRjtRQUMzRSxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsaURBQWlEO1FBQ3ZDLFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUdqRixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRVMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFXO1FBQzlCLElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCwyR0FBMkc7UUFDN0csQ0FBQztJQUNILENBQUM7K0dBN0NVLHFDQUFxQzttR0FBckMscUNBQXFDLDRoQ0F4RXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9FVCxrekRBdEVTLFlBQVksdUtBQUUseUJBQXlCOzs0RkEwRXRDLHFDQUFxQztrQkE3RWpELFNBQVM7K0JBQ0Usc0NBQXNDLGNBQ3BDLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSx5QkFBeUIsQ0FBQyxtQkFDakMsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvRVQsUUFFSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IFJlaXNzdWVQYXltZW50TGluayB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWlzc3VlLnR5cGVzJztcbmltcG9ydCB7IGZvcm1hdENvdW50ZG93biwgcGFyc2VMaW5rRXhwaXJ5IH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvcmVpc3N1ZS1mb3JtYXQnO1xuaW1wb3J0IHsgVXBncmFkZVN1bW1hcnlSb3cgfSBmcm9tICcuLi8uLi9yZWlzc3VlLXVwZ3JhZGUuc3RvcmUnO1xuaW1wb3J0IHsgU2JkUmVpc3N1ZU5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4uL3JlaXNzdWUtbm90aWNlL3JlaXNzdWUtbm90aWNlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zYmQtcmVpc3N1ZS11cGdyYWRlLWNvbmZpcm0tc3RlcCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtCdXR0b25Nb2R1bGUsIFNiZFJlaXNzdWVOb3RpY2VDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKHByaWNlQ2hhbmdlZCgpKSB7XG4gICAgICA8YXBwLXNiZC1yZWlzc3VlLW5vdGljZSB0b25lPVwid2FyblwiIGljb249XCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPlxuICAgICAgICBUaGUgcHJpY2UgY2hhbmdlZCBzaW5jZSB0aGUgb3B0aW9ucyB3ZXJlIGxvYWRlZC4gQ2hlY2sgdGhlIHRvdGFsIGJlbG93LlxuICAgICAgPC9hcHAtc2JkLXJlaXNzdWUtbm90aWNlPlxuICAgIH1cbiAgICBAaWYgKGVycm9yKCkpIHtcbiAgICAgIDxhcHAtc2JkLXJlaXNzdWUtbm90aWNlIHRvbmU9XCJlcnJvclwiIGljb249XCJwaSBwaS1leGNsYW1hdGlvbi1jaXJjbGVcIj57eyBlcnJvcigpIH19PC9hcHAtc2JkLXJlaXNzdWUtbm90aWNlPlxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJzYmQtcmNvbmZfX3N1bW1hcnlcIj5cbiAgICAgIEBmb3IgKHJvdyBvZiByb3dzKCk7IHRyYWNrIHJvdy50aXRsZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2JkLXJjb25mX19yb3dcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiZC1yY29uZl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgIDxiPnt7IHJvdy50aXRsZSB9fTwvYj5cbiAgICAgICAgICAgIDxzbWFsbD57eyByb3cuZnJvbSA/IHJvdy5mcm9tICsgJyDihpIgJyA6ICcnIH19e3sgcm93LnRvIH19PC9zbWFsbD5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHN0cm9uZz57eyByb3cuZXh0cmFMYWJlbCB9fTwvc3Ryb25nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcmNvbmZfX3RvdGFsXCI+XG4gICAgICAgIDxzcGFuPlRvdGFsIHRvIHBheTwvc3Bhbj5cbiAgICAgICAgPHN0cm9uZz57eyB0b3RhbExhYmVsKCkgfX08L3N0cm9uZz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChsaW5rKCk7IGFzIGxpbmspIHtcbiAgICAgIEBpZiAoZXhwaXJlZCgpKSB7XG4gICAgICAgIDxhcHAtc2JkLXJlaXNzdWUtbm90aWNlIHRvbmU9XCJlcnJvclwiIGljb249XCJwaSBwaS1jbG9ja1wiPlxuICAgICAgICAgIFRoZSBwYXltZW50IGxpbmsgZXhwaXJlZC4gU3RhcnQgdGhlIHVwZ3JhZGUgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAgICAgIDxidXR0b24gYWN0aW9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tb3V0bGluZWQgcC1idXR0b24tc2Vjb25kYXJ5XCIgbGFiZWw9XCJTdGFydCBhZ2FpblwiXG4gICAgICAgICAgICAoY2xpY2spPVwicmVzdGFydC5lbWl0KClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9hcHAtc2JkLXJlaXNzdWUtbm90aWNlPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmQtcmNvbmZfX2xpbmtcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JkLXJjb25mX19saW5rLWhlYWRcIj48Yj5QYXltZW50IGxpbms8L2I+PHNtYWxsPlNlbmQgaXQgdG8gdGhlIGN1c3RvbWVyPC9zbWFsbD48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JkLXJjb25mX19saW5rLXJvd1wiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwic2JkLXJjb25mX19saW5rLWlucHV0XCIgcmVhZG9ubHkgW3ZhbHVlXT1cImxpbmsudXJsXCIgKGZvY3VzKT1cIiRhbnkoJGV2ZW50LnRhcmdldCkuc2VsZWN0KClcIiAvPlxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInAtYnV0dG9uLXNtIHAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImNvcGllZCgpID8gJ3BpIHBpLWNoZWNrJyA6ICdwaSBwaS1jb3B5J1wiIFtsYWJlbF09XCJjb3BpZWQoKSA/ICdDb3BpZWQnIDogJ0NvcHknXCIgKGNsaWNrKT1cImNvcHkobGluay51cmwpXCI+PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChjb3VudGRvd24oKTsgYXMgbGVmdCkge1xuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwic2JkLXJjb25mX19leHBpcnlcIiBbY2xhc3Muc2JkLXJjb25mX19leHBpcnktLXNvb25dPVwic29vbigpXCI+TGluayBleHBpcmVzIGluIHt7IGxlZnQgfX08L3NtYWxsPlxuICAgICAgICAgIH0gQGVsc2UgaWYgKGxpbmsuZXhwaXJlc0F0KSB7XG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJzYmQtcmNvbmZfX2V4cGlyeVwiPkV4cGlyZXMge3sgbGluay5leHBpcmVzQXQuc2xpY2UoMCwgMTYpLnJlcGxhY2UoJ1QnLCAnICcpIH19PC9zbWFsbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cblxuICAgIDwhLS0gVGhlIGRpYWxvZyBkb2VzIG5vdCBmb2xsb3cgdGhlIHJlc3VsdDogYWZ0ZXIgYm9vay1ub3csIG9yIG9uY2UgdGhlIGxpbmsgaXMgc2VudCwgdGhlIGFnZW50IGZvbGxvd3MgdGhlIGJvb2tpbmcuIC0tPlxuICAgIEBpZiAoYm9va2VkKCkpIHtcbiAgICAgIDxhcHAtc2JkLXJlaXNzdWUtbm90aWNlIHRvbmU9XCJzdWNjZXNzXCIgaWNvbj1cInBpIHBpLWNoZWNrLWNpcmNsZVwiPlxuICAgICAgICBUaGUgdXBncmFkZSByZXF1ZXN0IHdhcyBzZW50LiBDaGVjayB0aGUgYm9va2luZyBmb3IgdGhlIHJlc3VsdC5cbiAgICAgIDwvYXBwLXNiZC1yZWlzc3VlLW5vdGljZT5cbiAgICB9IEBlbHNlIGlmIChsaW5rKCkpIHtcbiAgICAgIEBpZiAoIWV4cGlyZWQoKSkge1xuICAgICAgICA8YXBwLXNiZC1yZWlzc3VlLW5vdGljZSB0b25lPVwic3VjY2Vzc1wiIGljb249XCJwaSBwaS1jaGVjay1jaXJjbGVcIj5cbiAgICAgICAgICBDb3B5IHRoZSBsaW5rIGFuZCBzZW5kIGl0IHRvIHRoZSBjdXN0b21lci4gVGhlIHVwZ3JhZGUgaXMgcGxhY2VkIG9uY2UgdGhleSBwYXk6IGNoZWNrIHRoZSBib29raW5nIHRoZW4uXG4gICAgICAgIDwvYXBwLXNiZC1yZWlzc3VlLW5vdGljZT5cbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxhcHAtc2JkLXJlaXNzdWUtbm90aWNlIGljb249XCJwaSBwaS1pbmZvLWNpcmNsZVwiPlxuICAgICAgICB7eyB0b3RhbCgpID4gMFxuICAgICAgICAgID8gJ0EgcGF5bWVudCBsaW5rIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGUgY3VzdG9tZXIgdG8gcGF5IHRoZSBkaWZmZXJlbmNlLidcbiAgICAgICAgICA6ICdOb3RoaW5nIHRvIHBheTogY29uZmlybWluZyBwbGFjZXMgdGhlIHVwZ3JhZGUgc3RyYWlnaHQgYXdheS4nIH19XG4gICAgICA8L2FwcC1zYmQtcmVpc3N1ZS1ub3RpY2U+XG4gICAgfVxuICBgLFxuICBzdHlsZVVybDogJy4vcmVpc3N1ZS11cGdyYWRlLWNvbmZpcm0tc3RlcC5jb21wb25lbnQuc2NzcycsXG4gIGhvc3Q6IHsgY2xhc3M6ICdzYmQtcmNvbmYnIH0sXG59KVxuZXhwb3J0IGNsYXNzIFNiZFJlaXNzdWVVcGdyYWRlQ29uZmlybVN0ZXBDb21wb25lbnQge1xuICByb3dzID0gaW5wdXQucmVxdWlyZWQ8VXBncmFkZVN1bW1hcnlSb3dbXT4oKTtcbiAgdG90YWwgPSBpbnB1dCgwKTtcbiAgdG90YWxMYWJlbCA9IGlucHV0KCcnKTtcbiAgcHJpY2VDaGFuZ2VkID0gaW5wdXQoZmFsc2UpO1xuICAvKiogYGJvb2stbm93YCB3YXMgc2VudC4gKi9cbiAgYm9va2VkID0gaW5wdXQoZmFsc2UpO1xuICBsaW5rID0gaW5wdXQ8UmVpc3N1ZVBheW1lbnRMaW5rIHwgbnVsbD4obnVsbCk7XG4gIGVycm9yID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBUaGUgbGluayBleHBpcmVkIGFuZCB0aGUgYWdlbnQgY2hvc2UgdG8gcmVkbyB0aGUgdXBncmFkZSBmcm9tIHRoZSBiZWdpbm5pbmcuICovXG4gIHJlc3RhcnQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBwcm90ZWN0ZWQgY29waWVkID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKiogVGlja3MgZXZlcnkgc2Vjb25kIHNvIHRoZSBjb3VudGRvd24gKGFuZCB0aGUgZXhwaXJlZCBzdGF0ZSkgdXBkYXRlIG9uIHRoZWlyIG93bi4gKi9cbiAgcHJpdmF0ZSBub3cgPSBzaWduYWwoRGF0ZS5ub3coKSk7XG4gIHByaXZhdGUgcmVtYWluaW5nTXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZXhwaXJ5ID0gcGFyc2VMaW5rRXhwaXJ5KHRoaXMubGluaygpPy5leHBpcmVzQXQpO1xuICAgIHJldHVybiBleHBpcnkgPT0gbnVsbCA/IG51bGwgOiBleHBpcnkgLSB0aGlzLm5vdygpO1xuICB9KTtcbiAgcHJvdGVjdGVkIGV4cGlyZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMucmVtYWluaW5nTXMoKTtcbiAgICByZXR1cm4gbGVmdCAhPSBudWxsICYmIGxlZnQgPD0gMDtcbiAgfSk7XG4gIC8qKiBgbW06c3NgIHVudGlsIHRoZSBsaW5rIGV4cGlyZXM7IGVtcHR5IHdoZW4gdGhlIGJhY2tlbmQgc2VudCBubyAodmFsaWQpIGV4cGlyeS4gKi9cbiAgcHJvdGVjdGVkIGNvdW50ZG93biA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5yZW1haW5pbmdNcygpO1xuICAgIHJldHVybiBsZWZ0ID09IG51bGwgfHwgbGVmdCA8PSAwID8gJycgOiBmb3JtYXRDb3VudGRvd24obGVmdCk7XG4gIH0pO1xuICAvKiogTGFzdCB0d28gbWludXRlczogaGlnaGxpZ2h0IHRoZSBjb3VudGRvd24uICovXG4gIHByb3RlY3RlZCBzb29uID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMucmVtYWluaW5nTXMoKSA/PyBJbmZpbml0eSkgPD0gMiAqIDYwICogMTAwMCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLm5vdy5zZXQoRGF0ZS5ub3coKSksIDEwMDApO1xuICAgIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4gY2xlYXJJbnRlcnZhbCh0aW1lcikpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNvcHkodXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodXJsKTtcbiAgICAgIHRoaXMuY29waWVkLnNldCh0cnVlKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb3BpZWQuc2V0KGZhbHNlKSwgMTUwMCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBDbGlwYm9hcmQgYmxvY2tlZCAoZS5nLiBpbnNlY3VyZSBjb250ZXh0KTogdGhlIGlucHV0IGlzIHNlbGVjdGFibGUsIHNvIHRoZSBhZ2VudCBjYW4gc3RpbGwgY29weSBieSBoYW5kLlxuICAgIH1cbiAgfVxufVxuIl19
|