@rolatech/angular-onboarding 20.3.0-beta.2 → 20.3.0-beta.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 (40) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-detail-page-DREEMvoT.mjs +720 -0
  3. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-detail-page-DREEMvoT.mjs.map +1 -0
  4. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-index-page-DP7wffLd.mjs +313 -0
  5. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-index-page-DP7wffLd.mjs.map +1 -0
  6. package/fesm2022/rolatech-angular-onboarding-agent-apply-form-page-y02hYlN_.mjs +446 -0
  7. package/fesm2022/rolatech-angular-onboarding-agent-apply-form-page-y02hYlN_.mjs.map +1 -0
  8. package/fesm2022/rolatech-angular-onboarding-agent-apply-result-page-CEL4nWb_.mjs +141 -0
  9. package/fesm2022/rolatech-angular-onboarding-agent-apply-result-page-CEL4nWb_.mjs.map +1 -0
  10. package/fesm2022/rolatech-angular-onboarding-agent-apply-review-page-DG_D03YW.mjs +453 -0
  11. package/fesm2022/rolatech-angular-onboarding-agent-apply-review-page-DG_D03YW.mjs.map +1 -0
  12. package/fesm2022/{rolatech-angular-onboarding-agent-apply-shell-page-DibWYeD1.mjs → rolatech-angular-onboarding-agent-apply-shell-page-CaTvnFzk.mjs} +27 -40
  13. package/fesm2022/rolatech-angular-onboarding-agent-apply-shell-page-CaTvnFzk.mjs.map +1 -0
  14. package/fesm2022/{rolatech-angular-onboarding-agent-apply-start-page-DC7gyOnS.mjs → rolatech-angular-onboarding-agent-apply-start-page-BfqO2YWB.mjs} +31 -29
  15. package/fesm2022/rolatech-angular-onboarding-agent-apply-start-page-BfqO2YWB.mjs.map +1 -0
  16. package/fesm2022/{rolatech-angular-onboarding-agent-onboarding-documents-page-DWBGTj5J.mjs → rolatech-angular-onboarding-agent-onboarding-documents-page-BKDYZE0e.mjs} +79 -6
  17. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-documents-page-BKDYZE0e.mjs.map +1 -0
  18. package/fesm2022/rolatech-angular-onboarding.mjs +2251 -233
  19. package/fesm2022/rolatech-angular-onboarding.mjs.map +1 -1
  20. package/package.json +1 -1
  21. package/types/rolatech-angular-onboarding.d.ts +219 -12
  22. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-detail-page-DKJQX3cs.mjs +0 -224
  23. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-detail-page-DKJQX3cs.mjs.map +0 -1
  24. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-index-page-BO4pC_NU.mjs +0 -206
  25. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-index-page-BO4pC_NU.mjs.map +0 -1
  26. package/fesm2022/rolatech-angular-onboarding-agent-apply-banking-page-VYNfR4fy.mjs +0 -133
  27. package/fesm2022/rolatech-angular-onboarding-agent-apply-banking-page-VYNfR4fy.mjs.map +0 -1
  28. package/fesm2022/rolatech-angular-onboarding-agent-apply-financial-page-Ck3Rowke.mjs +0 -132
  29. package/fesm2022/rolatech-angular-onboarding-agent-apply-financial-page-Ck3Rowke.mjs.map +0 -1
  30. package/fesm2022/rolatech-angular-onboarding-agent-apply-profile-page-DNepDxHu.mjs +0 -122
  31. package/fesm2022/rolatech-angular-onboarding-agent-apply-profile-page-DNepDxHu.mjs.map +0 -1
  32. package/fesm2022/rolatech-angular-onboarding-agent-apply-qualification-page-CSwupuKt.mjs +0 -108
  33. package/fesm2022/rolatech-angular-onboarding-agent-apply-qualification-page-CSwupuKt.mjs.map +0 -1
  34. package/fesm2022/rolatech-angular-onboarding-agent-apply-review-page-DugCjfvK.mjs +0 -182
  35. package/fesm2022/rolatech-angular-onboarding-agent-apply-review-page-DugCjfvK.mjs.map +0 -1
  36. package/fesm2022/rolatech-angular-onboarding-agent-apply-shell-page-DibWYeD1.mjs.map +0 -1
  37. package/fesm2022/rolatech-angular-onboarding-agent-apply-start-page-DC7gyOnS.mjs.map +0 -1
  38. package/fesm2022/rolatech-angular-onboarding-agent-apply-submitted-page-BMkV2V8K.mjs +0 -55
  39. package/fesm2022/rolatech-angular-onboarding-agent-apply-submitted-page-BMkV2V8K.mjs.map +0 -1
  40. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-documents-page-DWBGTj5J.mjs.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rolatech/angular-onboarding",
3
- "version": "20.3.0-beta.2",
3
+ "version": "20.3.0-beta.4",
4
4
  "private": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": ">=20.0.0 <22.0.0",
@@ -1,8 +1,10 @@
1
1
  import { Routes, CanActivateFn, CanActivateChildFn } from '@angular/router';
2
2
  import * as _angular_forms from '@angular/forms';
3
+ import { FormGroup } from '@angular/forms';
3
4
  import * as _rolatech_angular_services from '@rolatech/angular-services';
4
- import { OnboardingDocumentType, OnboardingApplicationResponse, OnboardingApplicationDetailResponse, OnboardingStatus, OnboardingDocumentResponse, OnboardingIssueResponse, CreateOnboardingApplicationRequest, OnboardingAdminListQuery, onboardingIssueTypeLabel, onboardingDocumentTypeLabel, OnboardingTimelineResponse } from '@rolatech/angular-services';
5
+ import { OnboardingDocumentType, OnboardingApplicationResponse, OnboardingApplicationDetailResponse, OnboardingStatus, OnboardingDocumentResponse, OnboardingIssueResponse, CreateOnboardingApplicationRequest, OnboardingAdminListQuery, onboardingIssueTypeLabel, onboardingDocumentTypeLabel, OnboardingTimelineResponse, OnboardingApplicantType, OnboardingVatMode, onboardingVatModeLabel } from '@rolatech/angular-services';
5
6
  import * as _angular_core from '@angular/core';
7
+ import * as _angular_platform_browser from '@angular/platform-browser';
6
8
 
7
9
  declare const AGENT_APPLY_ROUTES: Routes;
8
10
 
@@ -10,12 +12,14 @@ declare const AGENT_ONBOARDING_ROUTES: Routes;
10
12
 
11
13
  declare const ADMIN_ONBOARDING_ROUTES: Routes;
12
14
 
13
- type ApplyRouteStep = 'profile' | 'qualification' | 'financial' | 'banking' | 'review' | 'submitted';
15
+ type ApplyRouteStep = 'form' | 'review' | 'result';
16
+ type ApplySectionKey = 'profile' | 'qualification' | 'financial' | 'banking';
14
17
  interface ApplyStepCompletion {
15
18
  profile: boolean;
16
19
  qualification: boolean;
17
20
  financial: boolean;
18
21
  banking: boolean;
22
+ form: boolean;
19
23
  }
20
24
  interface ApplyStepNavItem {
21
25
  label: string;
@@ -27,26 +31,50 @@ interface ApplyStepNavItem {
27
31
  interface RequiredDocumentSpec {
28
32
  type: OnboardingDocumentType;
29
33
  label: string;
34
+ helperText?: string;
35
+ warning?: string;
36
+ }
37
+ type ApplyUploadStatus = 'idle' | 'uploading' | 'uploaded' | 'failed';
38
+ interface ApplyUploadState {
39
+ filename: string | null;
40
+ progress: number;
41
+ status: ApplyUploadStatus;
42
+ error: string | null;
30
43
  }
31
44
 
32
45
  declare class AgentApplyFacade {
33
46
  private readonly onboardingService;
34
47
  private readonly fb;
35
- private http;
48
+ private readonly destroyRef;
36
49
  readonly loading: _angular_core.WritableSignal<boolean>;
37
50
  readonly saving: _angular_core.WritableSignal<boolean>;
38
51
  readonly submitting: _angular_core.WritableSignal<boolean>;
39
52
  readonly error: _angular_core.WritableSignal<string | null>;
53
+ readonly lastLocalDraftSavedAt: _angular_core.WritableSignal<string | null>;
40
54
  readonly application: _angular_core.WritableSignal<OnboardingApplicationResponse | null>;
41
55
  readonly detail: _angular_core.WritableSignal<OnboardingApplicationDetailResponse | null>;
56
+ readonly uploadStates: _angular_core.WritableSignal<Partial<Record<OnboardingDocumentType, ApplyUploadState>>>;
42
57
  private readonly loadedApplicationId;
43
58
  readonly applicationId: _angular_core.Signal<string | null>;
44
59
  readonly status: _angular_core.Signal<OnboardingStatus | null>;
60
+ readonly applicantType: _angular_core.Signal<_rolatech_angular_services.OnboardingApplicantType>;
61
+ readonly companyCountry: _angular_core.Signal<string>;
62
+ readonly isCompany: _angular_core.Signal<boolean>;
63
+ readonly isIndividual: _angular_core.Signal<boolean>;
64
+ readonly isUkCompany: _angular_core.Signal<boolean>;
65
+ readonly isChinaCompany: _angular_core.Signal<boolean>;
66
+ readonly hasSubmittedState: _angular_core.Signal<boolean>;
67
+ readonly hasGeneralIssue: _angular_core.Signal<boolean>;
45
68
  readonly documents: _angular_core.Signal<OnboardingDocumentResponse[]>;
46
69
  readonly issues: _angular_core.Signal<OnboardingIssueResponse[]>;
47
70
  readonly timeline: _angular_core.Signal<_rolatech_angular_services.OnboardingTimelineResponse[]>;
71
+ readonly fieldIssueComments: _angular_core.Signal<Record<string, string>>;
72
+ readonly documentIssueComments: _angular_core.Signal<Partial<Record<OnboardingDocumentType, string>>>;
48
73
  readonly requiredDocuments: _angular_core.Signal<RequiredDocumentSpec[]>;
74
+ readonly hasActiveUploads: _angular_core.Signal<boolean>;
49
75
  readonly completion: _angular_core.Signal<ApplyStepCompletion>;
76
+ readonly readyForReview: _angular_core.Signal<boolean>;
77
+ readonly canSubmit: _angular_core.Signal<boolean>;
50
78
  readonly profileForm: _angular_forms.FormGroup<{
51
79
  organizationName: _angular_forms.FormControl<string>;
52
80
  contactName: _angular_forms.FormControl<string>;
@@ -64,22 +92,43 @@ declare class AgentApplyFacade {
64
92
  sortCode: _angular_forms.FormControl<string>;
65
93
  accountNumber: _angular_forms.FormControl<string>;
66
94
  }>;
95
+ constructor();
67
96
  start(request: CreateOnboardingApplicationRequest): Promise<OnboardingApplicationResponse | null>;
68
97
  ensureLoaded(applicationId: string, force?: boolean): Promise<void>;
69
- saveProfile(): Promise<boolean>;
70
- saveFinancial(): Promise<boolean>;
71
- saveBanking(): Promise<boolean>;
98
+ saveProfile(reload?: boolean): Promise<boolean>;
99
+ saveFinancial(reload?: boolean): Promise<boolean>;
100
+ saveBanking(reload?: boolean): Promise<boolean>;
101
+ saveFormProgress(): Promise<boolean>;
72
102
  uploadDocument(documentType: OnboardingDocumentType, file: File, replacedDocumentId?: string | null): Promise<boolean>;
73
103
  submit(): Promise<boolean>;
74
104
  getDocument(documentType: OnboardingDocumentType): OnboardingDocumentResponse | null;
75
105
  getIssueComment(documentType: OnboardingDocumentType): string | null;
106
+ getFieldIssueComment(fieldKey: string): string | null;
107
+ isFieldLocked(fieldKey: string): boolean;
108
+ isDocumentLocked(documentType: OnboardingDocumentType): boolean;
76
109
  canAccessStep(step: ApplyRouteStep): boolean;
77
- firstIncompleteStep(): Exclude<ApplyRouteStep, 'submitted'>;
110
+ firstIncompleteStep(): Exclude<ApplyRouteStep, 'result'>;
111
+ uploadState(documentType: OnboardingDocumentType): ApplyUploadState;
112
+ expectedAccountHolderName(): string;
113
+ formatSortCode(value: string | null | undefined): string;
114
+ private setupAutosave;
115
+ private syncProfileValidators;
116
+ private syncFinancialRules;
78
117
  private patchForms;
79
118
  private isProfileComplete;
80
119
  private isQualificationComplete;
81
120
  private isFinancialComplete;
82
121
  private isBankingComplete;
122
+ private accountHolderNameValidator;
123
+ private normalizeBankingFields;
124
+ private persistLocalDraft;
125
+ private restoreLocalDraft;
126
+ private clearLocalDraft;
127
+ private localDraftKey;
128
+ private setUploadState;
129
+ private uploadToSignedUrl;
130
+ private defaultCountryCode;
131
+ private onlyDigits;
83
132
  private toErrorMessage;
84
133
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AgentApplyFacade, never>;
85
134
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AgentApplyFacade>;
@@ -131,6 +180,20 @@ declare class AdminOnboardingDetailFacade {
131
180
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AdminOnboardingDetailFacade>;
132
181
  }
133
182
 
183
+ interface OnboardingReviewIssueOption {
184
+ key: string;
185
+ label: string;
186
+ comment: string;
187
+ requiresComment?: boolean;
188
+ placeholder?: string;
189
+ }
190
+ interface OnboardingReviewIssueDraft {
191
+ optionKey: string;
192
+ comment: string;
193
+ }
194
+ declare function onboardingFieldIssueOptions(fieldKey: string): OnboardingReviewIssueOption[];
195
+ declare function onboardingDocumentIssueOptions(documentType: OnboardingDocumentType): OnboardingReviewIssueOption[];
196
+
134
197
  declare class AdminOnboardingReviewFacade {
135
198
  private readonly onboardingAdminService;
136
199
  readonly loading: _angular_core.WritableSignal<boolean>;
@@ -138,18 +201,48 @@ declare class AdminOnboardingReviewFacade {
138
201
  readonly error: _angular_core.WritableSignal<string | null>;
139
202
  readonly detail: _angular_core.WritableSignal<OnboardingApplicationDetailResponse | null>;
140
203
  readonly reviewComment: _angular_core.WritableSignal<string>;
141
- readonly issueDrafts: _angular_core.WritableSignal<_rolatech_angular_services.NeedMoreInfoOnboardingIssueRequest[]>;
204
+ readonly fieldIssueDrafts: _angular_core.WritableSignal<Record<string, OnboardingReviewIssueDraft>>;
205
+ readonly documentIssueDrafts: _angular_core.WritableSignal<Partial<Record<OnboardingDocumentType, OnboardingReviewIssueDraft>>>;
206
+ readonly passedFields: _angular_core.WritableSignal<Record<string, boolean>>;
207
+ readonly passedDocuments: _angular_core.WritableSignal<Partial<Record<OnboardingDocumentType, boolean>>>;
208
+ readonly previewLoading: _angular_core.WritableSignal<boolean>;
209
+ readonly previewError: _angular_core.WritableSignal<string | null>;
210
+ readonly previewUrl: _angular_core.WritableSignal<string | null>;
211
+ readonly previewDocumentId: _angular_core.WritableSignal<string | null>;
212
+ readonly requiredDocuments: _angular_core.Signal<RequiredDocumentSpec[]>;
213
+ readonly existingFieldIssues: _angular_core.Signal<Record<string, string>>;
214
+ readonly existingDocumentIssues: _angular_core.Signal<Partial<Record<OnboardingDocumentType, string>>>;
215
+ readonly issueDrafts: _angular_core.Signal<_rolatech_angular_services.NeedMoreInfoOnboardingIssueRequest[]>;
216
+ readonly hasPendingIssues: _angular_core.Signal<boolean>;
142
217
  load(applicationId: string): Promise<void>;
143
218
  addFieldIssue(fieldKey: string, comment: string): void;
144
219
  addDocumentIssue(documentType: OnboardingDocumentType, comment: string): void;
145
220
  removeIssue(index: number): void;
146
221
  setComment(value: string): void;
222
+ setFieldIssueDraft(fieldKey: string, draft: OnboardingReviewIssueDraft | string | null): void;
223
+ setDocumentIssueDraft(documentType: OnboardingDocumentType, draft: OnboardingReviewIssueDraft | string | null): void;
224
+ toggleFieldPassed(fieldKey: string, passed: boolean): void;
225
+ toggleDocumentPassed(documentType: OnboardingDocumentType, passed: boolean): void;
226
+ fieldDraft(fieldKey: string): OnboardingReviewIssueDraft | null;
227
+ documentDraft(documentType: OnboardingDocumentType): OnboardingReviewIssueDraft | null;
228
+ fieldDraftComment(fieldKey: string): string;
229
+ documentDraftComment(documentType: OnboardingDocumentType): string;
230
+ fieldPassed(fieldKey: string): boolean;
231
+ documentPassed(documentType: OnboardingDocumentType): boolean;
147
232
  startReview(applicationId: string): Promise<boolean>;
148
233
  requestMoreInfo(applicationId: string): Promise<boolean>;
149
234
  approve(applicationId: string): Promise<boolean>;
150
235
  fail(applicationId: string): Promise<boolean>;
236
+ openDocumentPreview(documentId: string): Promise<boolean>;
237
+ clearDocumentPreview(): void;
238
+ private clearFieldIssueDraft;
239
+ private clearDocumentIssueDraft;
240
+ private buildIssueDrafts;
241
+ private resetDrafts;
242
+ private normalizeDraft;
151
243
  private runAction;
152
244
  private toErrorMessage;
245
+ private toPreviewErrorMessage;
153
246
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdminOnboardingReviewFacade, never>;
154
247
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AdminOnboardingReviewFacade>;
155
248
  }
@@ -165,7 +258,7 @@ declare class OnboardingPageShell {
165
258
  declare class OnboardingStatusBadge {
166
259
  readonly status: _angular_core.InputSignal<OnboardingStatus | null>;
167
260
  readonly label: _angular_core.Signal<string>;
168
- readonly badgeClass: _angular_core.Signal<"border-emerald-200 bg-emerald-50 text-emerald-700" | "border-rose-200 bg-rose-50 text-rose-700" | "border-amber-200 bg-amber-50 text-amber-700" | "border-sky-200 bg-sky-50 text-sky-700" | "border-(--rt-border-color) bg-(--rt-raised-background) text-(--rt-text-secondary)">;
261
+ readonly badgeClass: _angular_core.Signal<"border-(--rt-border-color) bg-(--rt-raised-background) text-emerald-700" | "border-(--rt-border-color) bg-(--rt-raised-background) text-rose-700" | "border-(--rt-border-color) bg-(--rt-raised-background) text-amber-700" | "border-(--rt-border-color) bg-(--rt-raised-background) text-sky-700" | "border-(--rt-border-color) bg-(--rt-raised-background) text-(--rt-text-secondary)">;
169
262
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingStatusBadge, never>;
170
263
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingStatusBadge, "rolatech-onboarding-status-badge", never, { "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
171
264
  }
@@ -182,17 +275,41 @@ declare class OnboardingDocumentUploader {
182
275
  readonly helperText: _angular_core.InputSignal<string>;
183
276
  readonly documentType: _angular_core.InputSignal<OnboardingDocumentType>;
184
277
  readonly document: _angular_core.InputSignal<OnboardingDocumentResponse | null>;
278
+ readonly warning: _angular_core.InputSignal<string | null>;
185
279
  readonly comment: _angular_core.InputSignal<string | null>;
186
280
  readonly busy: _angular_core.InputSignal<boolean>;
281
+ readonly locked: _angular_core.InputSignal<boolean>;
282
+ readonly uploading: _angular_core.InputSignal<boolean>;
283
+ readonly progress: _angular_core.InputSignal<number>;
284
+ readonly pendingFilename: _angular_core.InputSignal<string | null>;
285
+ readonly uploadError: _angular_core.InputSignal<string | null>;
187
286
  readonly acceptedTypes: _angular_core.InputSignal<string>;
287
+ readonly canPreview: _angular_core.InputSignal<boolean>;
288
+ readonly previewBusy: _angular_core.InputSignal<boolean>;
188
289
  readonly fileSelected: _angular_core.OutputEmitterRef<{
189
290
  documentType: OnboardingDocumentType;
190
291
  file: File;
191
292
  replacedDocumentId?: string;
192
293
  }>;
294
+ readonly previewRequested: _angular_core.OutputEmitterRef<void>;
295
+ readonly buttonLabel: _angular_core.Signal<"Locked" | "Uploading..." | "Replace" | "Upload">;
193
296
  onFileChange(event: Event): void;
194
297
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingDocumentUploader, never>;
195
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingDocumentUploader, "rolatech-onboarding-document-uploader", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "documentType": { "alias": "documentType"; "required": true; "isSignal": true; }; "document": { "alias": "document"; "required": false; "isSignal": true; }; "comment": { "alias": "comment"; "required": false; "isSignal": true; }; "busy": { "alias": "busy"; "required": false; "isSignal": true; }; "acceptedTypes": { "alias": "acceptedTypes"; "required": false; "isSignal": true; }; }, { "fileSelected": "fileSelected"; }, never, never, true, never>;
298
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingDocumentUploader, "rolatech-onboarding-document-uploader", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "documentType": { "alias": "documentType"; "required": true; "isSignal": true; }; "document": { "alias": "document"; "required": false; "isSignal": true; }; "warning": { "alias": "warning"; "required": false; "isSignal": true; }; "comment": { "alias": "comment"; "required": false; "isSignal": true; }; "busy": { "alias": "busy"; "required": false; "isSignal": true; }; "locked": { "alias": "locked"; "required": false; "isSignal": true; }; "uploading": { "alias": "uploading"; "required": false; "isSignal": true; }; "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "pendingFilename": { "alias": "pendingFilename"; "required": false; "isSignal": true; }; "uploadError": { "alias": "uploadError"; "required": false; "isSignal": true; }; "acceptedTypes": { "alias": "acceptedTypes"; "required": false; "isSignal": true; }; "canPreview": { "alias": "canPreview"; "required": false; "isSignal": true; }; "previewBusy": { "alias": "previewBusy"; "required": false; "isSignal": true; }; }, { "fileSelected": "fileSelected"; "previewRequested": "previewRequested"; }, never, never, true, never>;
299
+ }
300
+
301
+ declare class OnboardingDocumentPreviewDialog {
302
+ readonly open: _angular_core.InputSignal<boolean>;
303
+ readonly title: _angular_core.InputSignal<string | null>;
304
+ readonly subtitle: _angular_core.InputSignal<string | null>;
305
+ readonly url: _angular_core.InputSignal<string | null>;
306
+ readonly loading: _angular_core.InputSignal<boolean>;
307
+ readonly error: _angular_core.InputSignal<string | null>;
308
+ readonly closeRequested: _angular_core.OutputEmitterRef<void>;
309
+ private readonly sanitizer;
310
+ readonly safeUrl: _angular_core.Signal<_angular_platform_browser.SafeResourceUrl | null>;
311
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingDocumentPreviewDialog, never>;
312
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingDocumentPreviewDialog, "rolatech-onboarding-document-preview-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "url": { "alias": "url"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; }, { "closeRequested": "closeRequested"; }, never, never, true, never>;
196
313
  }
197
314
 
198
315
  declare class OnboardingIssueList {
@@ -236,9 +353,99 @@ declare class OnboardingTimelineDrawer {
236
353
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingTimelineDrawer, "rolatech-onboarding-timeline-drawer", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; }, { "closeRequested": "closeRequested"; }, never, never, true, never>;
237
354
  }
238
355
 
356
+ declare class OnboardingReviewIssuesBanner {
357
+ readonly issues: _angular_core.InputSignal<OnboardingIssueResponse[]>;
358
+ readonly status: _angular_core.InputSignal<OnboardingStatus | null>;
359
+ readonly unresolvedCount: _angular_core.Signal<number>;
360
+ readonly eyebrow: _angular_core.Signal<"More Information Required" | "Review Status">;
361
+ readonly title: _angular_core.Signal<"Review feedback is blocking resubmission." | "The application is now waiting on reviewer action.">;
362
+ readonly description: _angular_core.Signal<"Only the flagged fields and documents should be updated. Approved items stay read-only until review is complete." | "You can monitor status updates and any reviewer feedback from this flow.">;
363
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingReviewIssuesBanner, never>;
364
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingReviewIssuesBanner, "rolatech-onboarding-review-issues-banner", never, { "issues": { "alias": "issues"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
365
+ }
366
+
367
+ declare class OnboardingQualificationUploadSection {
368
+ readonly documentSpecs: _angular_core.InputSignal<RequiredDocumentSpec[]>;
369
+ readonly documents: _angular_core.InputSignal<OnboardingDocumentResponse[]>;
370
+ readonly issueComments: _angular_core.InputSignal<Partial<Record<OnboardingDocumentType, string>>>;
371
+ readonly lockedDocuments: _angular_core.InputSignal<OnboardingDocumentType[]>;
372
+ readonly uploadStates: _angular_core.InputSignal<Partial<Record<OnboardingDocumentType, ApplyUploadState>>>;
373
+ readonly busy: _angular_core.InputSignal<boolean>;
374
+ readonly fileSelected: _angular_core.OutputEmitterRef<{
375
+ documentType: OnboardingDocumentType;
376
+ file: File;
377
+ replacedDocumentId?: string;
378
+ }>;
379
+ readonly uploadedRequiredCount: _angular_core.Signal<number>;
380
+ documentFor(documentType: OnboardingDocumentType): OnboardingDocumentResponse | null;
381
+ issueCommentFor(documentType: OnboardingDocumentType): string | null;
382
+ isLocked(documentType: OnboardingDocumentType): boolean;
383
+ uploadStateFor(documentType: OnboardingDocumentType): ApplyUploadState;
384
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingQualificationUploadSection, never>;
385
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingQualificationUploadSection, "rolatech-onboarding-qualification-upload-section", never, { "documentSpecs": { "alias": "documentSpecs"; "required": false; "isSignal": true; }; "documents": { "alias": "documents"; "required": false; "isSignal": true; }; "issueComments": { "alias": "issueComments"; "required": false; "isSignal": true; }; "lockedDocuments": { "alias": "lockedDocuments"; "required": false; "isSignal": true; }; "uploadStates": { "alias": "uploadStates"; "required": false; "isSignal": true; }; "busy": { "alias": "busy"; "required": false; "isSignal": true; }; }, { "fileSelected": "fileSelected"; }, never, never, true, never>;
386
+ }
387
+
388
+ declare class OnboardingVatSection {
389
+ readonly form: _angular_core.InputSignal<FormGroup<any>>;
390
+ readonly applicantType: _angular_core.InputSignal<OnboardingApplicantType>;
391
+ readonly companyCountry: _angular_core.InputSignal<string>;
392
+ readonly fieldLocks: _angular_core.InputSignal<Record<string, boolean>>;
393
+ readonly vatRateLabel: _angular_core.InputSignal<string>;
394
+ readonly issueComments: _angular_core.InputSignal<Record<string, string>>;
395
+ readonly isIndividual: _angular_core.Signal<boolean>;
396
+ readonly currentVatMode: _angular_core.Signal<OnboardingVatMode>;
397
+ readonly vatNumberValue: _angular_core.Signal<string>;
398
+ readonly sectionReadOnly: _angular_core.Signal<boolean>;
399
+ readonly vatModeLabel: typeof onboardingVatModeLabel;
400
+ fieldComment(fieldKey: string): string | null;
401
+ isFieldLocked(fieldKey: string): boolean;
402
+ hasError(controlName: string, errorCode: string): boolean;
403
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingVatSection, never>;
404
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingVatSection, "rolatech-onboarding-vat-section", never, { "form": { "alias": "form"; "required": true; "isSignal": true; }; "applicantType": { "alias": "applicantType"; "required": true; "isSignal": true; }; "companyCountry": { "alias": "companyCountry"; "required": true; "isSignal": true; }; "fieldLocks": { "alias": "fieldLocks"; "required": false; "isSignal": true; }; "vatRateLabel": { "alias": "vatRateLabel"; "required": false; "isSignal": true; }; "issueComments": { "alias": "issueComments"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
405
+ }
406
+
407
+ declare class OnboardingBankingSection {
408
+ readonly form: _angular_core.InputSignal<FormGroup<any>>;
409
+ readonly fieldLocks: _angular_core.InputSignal<Record<string, boolean>>;
410
+ readonly expectedAccountHolderName: _angular_core.InputSignal<string>;
411
+ readonly issueComments: _angular_core.InputSignal<Record<string, string>>;
412
+ fieldComment(fieldKey: string): string | null;
413
+ isFieldLocked(fieldKey: string): boolean;
414
+ hasError(controlName: string, errorCode: string): boolean;
415
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingBankingSection, never>;
416
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingBankingSection, "rolatech-onboarding-banking-section", never, { "form": { "alias": "form"; "required": true; "isSignal": true; }; "fieldLocks": { "alias": "fieldLocks"; "required": false; "isSignal": true; }; "expectedAccountHolderName": { "alias": "expectedAccountHolderName"; "required": false; "isSignal": true; }; "issueComments": { "alias": "issueComments"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
417
+ }
418
+
419
+ declare class OnboardingReviewRow {
420
+ readonly label: _angular_core.InputSignal<string>;
421
+ readonly value: _angular_core.InputSignal<string | null | undefined>;
422
+ readonly helper: _angular_core.InputSignal<string>;
423
+ readonly existingIssue: _angular_core.InputSignal<string | null>;
424
+ readonly issueOptions: _angular_core.InputSignal<OnboardingReviewIssueOption[]>;
425
+ readonly draftIssue: _angular_core.InputSignal<OnboardingReviewIssueDraft | null>;
426
+ readonly passed: _angular_core.InputSignal<boolean>;
427
+ readonly busy: _angular_core.InputSignal<boolean>;
428
+ readonly actionLabel: _angular_core.InputSignal<string | null>;
429
+ readonly actionDisabled: _angular_core.InputSignal<boolean>;
430
+ readonly selectedIssueKey: _angular_core.Signal<string>;
431
+ readonly activeIssueOption: _angular_core.Signal<OnboardingReviewIssueOption | null>;
432
+ readonly showCustomComment: _angular_core.Signal<boolean>;
433
+ readonly selectedPresetComment: _angular_core.Signal<string>;
434
+ readonly customCommentPlaceholder: _angular_core.Signal<string>;
435
+ readonly passButtonClass: _angular_core.Signal<"border-(--rt-border-color) bg-(--rt-raised-background) text-emerald-800" | "border-(--rt-border-color) bg-(--rt-base-background) text-(--rt-text-secondary)">;
436
+ readonly passedChange: _angular_core.OutputEmitterRef<boolean>;
437
+ readonly draftIssueChange: _angular_core.OutputEmitterRef<OnboardingReviewIssueDraft | null>;
438
+ readonly actionTriggered: _angular_core.OutputEmitterRef<void>;
439
+ togglePassed(): void;
440
+ onIssueSelectionChange(event: Event): void;
441
+ onCustomCommentChange(event: Event): void;
442
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingReviewRow, never>;
443
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingReviewRow, "rolatech-onboarding-review-row", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "helper": { "alias": "helper"; "required": false; "isSignal": true; }; "existingIssue": { "alias": "existingIssue"; "required": false; "isSignal": true; }; "issueOptions": { "alias": "issueOptions"; "required": false; "isSignal": true; }; "draftIssue": { "alias": "draftIssue"; "required": false; "isSignal": true; }; "passed": { "alias": "passed"; "required": false; "isSignal": true; }; "busy": { "alias": "busy"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "actionDisabled": { "alias": "actionDisabled"; "required": false; "isSignal": true; }; }, { "passedChange": "passedChange"; "draftIssueChange": "draftIssueChange"; "actionTriggered": "actionTriggered"; }, never, never, true, never>;
444
+ }
445
+
239
446
  declare const applicationIdGuard: CanActivateFn;
240
447
 
241
448
  declare const applyStepGuard: CanActivateChildFn;
242
449
 
243
- export { ADMIN_ONBOARDING_ROUTES, AGENT_APPLY_ROUTES, AGENT_ONBOARDING_ROUTES, AdminOnboardingDetailFacade, AdminOnboardingListFacade, AdminOnboardingReviewFacade, AgentApplyFacade, AgentOnboardingFacade, OnboardingDocumentUploader, OnboardingIssueList, OnboardingPageShell, OnboardingStatusBadge, OnboardingStepNav, OnboardingSummaryCard, OnboardingTimeline, OnboardingTimelineDrawer, applicationIdGuard, applyStepGuard };
244
- export type { ApplyRouteStep, ApplyStepCompletion, ApplyStepNavItem, RequiredDocumentSpec };
450
+ export { ADMIN_ONBOARDING_ROUTES, AGENT_APPLY_ROUTES, AGENT_ONBOARDING_ROUTES, AdminOnboardingDetailFacade, AdminOnboardingListFacade, AdminOnboardingReviewFacade, AgentApplyFacade, AgentOnboardingFacade, OnboardingBankingSection, OnboardingDocumentPreviewDialog, OnboardingDocumentUploader, OnboardingIssueList, OnboardingPageShell, OnboardingQualificationUploadSection, OnboardingReviewIssuesBanner, OnboardingReviewRow, OnboardingStatusBadge, OnboardingStepNav, OnboardingSummaryCard, OnboardingTimeline, OnboardingTimelineDrawer, OnboardingVatSection, applicationIdGuard, applyStepGuard, onboardingDocumentIssueOptions, onboardingFieldIssueOptions };
451
+ export type { ApplyRouteStep, ApplySectionKey, ApplyStepCompletion, ApplyStepNavItem, ApplyUploadState, ApplyUploadStatus, OnboardingReviewIssueDraft, OnboardingReviewIssueOption, RequiredDocumentSpec };
@@ -1,224 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, signal, computed, effect, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { toSignal } from '@angular/core/rxjs-interop';
4
- import { ActivatedRoute, RouterLink } from '@angular/router';
5
- import { onboardingApplicantTypeLabel, onboardingVatModeLabel } from '@rolatech/angular-services';
6
- import { AdminOnboardingDetailFacade, OnboardingPageShell, OnboardingStatusBadge, OnboardingSummaryCard, OnboardingIssueList, OnboardingTimelineDrawer } from './rolatech-angular-onboarding.mjs';
7
-
8
- class AdminOnboardingDetailPage {
9
- facade = inject(AdminOnboardingDetailFacade);
10
- timelineOpen = signal(false, ...(ngDevMode ? [{ debugName: "timelineOpen" }] : []));
11
- route = inject(ActivatedRoute);
12
- paramMap = toSignal(this.route.paramMap, {
13
- initialValue: this.route.snapshot.paramMap,
14
- });
15
- subtitle = computed(() => {
16
- const detail = this.facade.detail();
17
- if (!detail) {
18
- return 'Inspect onboarding data, documents, and review notes.';
19
- }
20
- return `${detail.organizationName || 'Unknown organization'} • ${detail.contactName || 'Unknown contact'}`;
21
- }, ...(ngDevMode ? [{ debugName: "subtitle" }] : []));
22
- profileItems = computed(() => {
23
- const detail = this.facade.detail();
24
- if (!detail) {
25
- return [];
26
- }
27
- return [
28
- { label: 'Organization', value: detail.organizationName },
29
- { label: 'Contact name', value: detail.contactName },
30
- { label: 'Contact email', value: detail.contactEmail },
31
- { label: 'Contact phone', value: detail.contactPhone },
32
- { label: 'Country', value: detail.companyCountry },
33
- { label: 'Applicant type', value: onboardingApplicantTypeLabel(detail.applicantType) },
34
- ];
35
- }, ...(ngDevMode ? [{ debugName: "profileItems" }] : []));
36
- complianceItems = computed(() => {
37
- const detail = this.facade.detail();
38
- if (!detail) {
39
- return [];
40
- }
41
- return [
42
- { label: 'VAT mode', value: onboardingVatModeLabel(detail.vatMode ?? null) },
43
- { label: 'VAT number', value: detail.vatNumber },
44
- { label: 'Bank', value: detail.bankName },
45
- { label: 'Account holder', value: detail.accountHolderName },
46
- { label: 'Sort code', value: detail.sortCode },
47
- { label: 'Account number', value: detail.accountNumber },
48
- ];
49
- }, ...(ngDevMode ? [{ debugName: "complianceItems" }] : []));
50
- constructor() {
51
- effect(() => {
52
- const applicationId = this.paramMap().get('applicationId');
53
- if (!applicationId) {
54
- return;
55
- }
56
- void this.facade.load(applicationId);
57
- });
58
- }
59
- openTimeline() {
60
- this.timelineOpen.set(true);
61
- }
62
- closeTimeline() {
63
- this.timelineOpen.set(false);
64
- }
65
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AdminOnboardingDetailPage, deps: [], target: i0.ɵɵFactoryTarget.Component });
66
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AdminOnboardingDetailPage, isStandalone: true, selector: "rolatech-admin-onboarding-detail-page", host: { classAttribute: "block" }, providers: [AdminOnboardingDetailFacade], ngImport: i0, template: `
67
- <rolatech-onboarding-page-shell title="Onboarding Application Detail" [subtitle]="subtitle()" kicker="Admin Console">
68
- <div header-leading>
69
- <a
70
- [routerLink]="['../']"
71
- class="inline-flex items-center rounded-xl border border-(--rt-border-color) bg-(--rt-base-background) px-3 py-2 text-sm font-medium text-(--rt-text-secondary) transition hover:bg-(--rt-raised-background) cursor-pointer"
72
- >
73
- &larr; Back
74
- </a>
75
- </div>
76
-
77
- <div header-actions>
78
- <rolatech-onboarding-status-badge [status]="facade.detail()?.status || null" />
79
- </div>
80
-
81
- @if (facade.error()) {
82
- <div class="rounded-2xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700">{{ facade.error() }}</div>
83
- }
84
-
85
- @if (facade.detail(); as detail) {
86
- <section class="rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 shadow-sm">
87
- <div class="flex flex-wrap items-center justify-between gap-3">
88
- <p class="text-sm text-(--rt-text-secondary)">
89
- Application ID: <span class="font-semibold text-(--rt-text-primary)">{{ detail.id }}</span>
90
- </p>
91
- <div class="flex flex-wrap items-center gap-2">
92
- <button
93
- type="button"
94
- class="rounded-xl border border-(--rt-border-color) bg-(--rt-base-background) px-4 py-2 text-sm font-semibold text-(--rt-text-secondary) transition hover:bg-(--rt-raised-background)"
95
- (click)="openTimeline()"
96
- >
97
- Timeline
98
- </button>
99
- <a
100
- [routerLink]="['review']"
101
- class="rounded-xl bg-(--rt-brand-color) px-4 py-2 text-sm font-semibold text-(--rt-text-primary-inverse) transition hover:opacity-90 cursor-pointer"
102
- >
103
- Open Review
104
- </a>
105
- </div>
106
- </div>
107
- </section>
108
-
109
- <rolatech-onboarding-summary-card [title]="'Applicant Profile'" [items]="profileItems()" />
110
-
111
- <rolatech-onboarding-summary-card [title]="'Compliance & Banking'" [items]="complianceItems()" />
112
-
113
- <rolatech-onboarding-issue-list [issues]="detail.issues" />
114
- } @else {
115
- <div
116
- class="rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 text-sm text-(--rt-text-secondary) shadow-sm"
117
- >
118
- Loading application details...
119
- </div>
120
- }
121
-
122
- @if (facade.detail(); as detail) {
123
- <rolatech-onboarding-timeline-drawer
124
- floating
125
- [open]="timelineOpen()"
126
- [title]="'Application Timeline'"
127
- [items]="detail.timeline"
128
- [zIndex]="9100"
129
- (closeRequested)="closeTimeline()"
130
- />
131
- }
132
- </rolatech-onboarding-page-shell>
133
- `, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: OnboardingPageShell, selector: "rolatech-onboarding-page-shell", inputs: ["title", "subtitle", "kicker"] }, { kind: "component", type: OnboardingStatusBadge, selector: "rolatech-onboarding-status-badge", inputs: ["status"] }, { kind: "component", type: OnboardingSummaryCard, selector: "rolatech-onboarding-summary-card", inputs: ["title", "items"] }, { kind: "component", type: OnboardingIssueList, selector: "rolatech-onboarding-issue-list", inputs: ["issues"] }, { kind: "component", type: OnboardingTimelineDrawer, selector: "rolatech-onboarding-timeline-drawer", inputs: ["open", "title", "items", "zIndex"], outputs: ["closeRequested"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
134
- }
135
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AdminOnboardingDetailPage, decorators: [{
136
- type: Component,
137
- args: [{
138
- selector: 'rolatech-admin-onboarding-detail-page',
139
- standalone: true,
140
- imports: [
141
- RouterLink,
142
- OnboardingPageShell,
143
- OnboardingStatusBadge,
144
- OnboardingSummaryCard,
145
- OnboardingIssueList,
146
- OnboardingTimelineDrawer,
147
- ],
148
- providers: [AdminOnboardingDetailFacade],
149
- changeDetection: ChangeDetectionStrategy.OnPush,
150
- encapsulation: ViewEncapsulation.None,
151
- host: { class: 'block' },
152
- template: `
153
- <rolatech-onboarding-page-shell title="Onboarding Application Detail" [subtitle]="subtitle()" kicker="Admin Console">
154
- <div header-leading>
155
- <a
156
- [routerLink]="['../']"
157
- class="inline-flex items-center rounded-xl border border-(--rt-border-color) bg-(--rt-base-background) px-3 py-2 text-sm font-medium text-(--rt-text-secondary) transition hover:bg-(--rt-raised-background) cursor-pointer"
158
- >
159
- &larr; Back
160
- </a>
161
- </div>
162
-
163
- <div header-actions>
164
- <rolatech-onboarding-status-badge [status]="facade.detail()?.status || null" />
165
- </div>
166
-
167
- @if (facade.error()) {
168
- <div class="rounded-2xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700">{{ facade.error() }}</div>
169
- }
170
-
171
- @if (facade.detail(); as detail) {
172
- <section class="rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 shadow-sm">
173
- <div class="flex flex-wrap items-center justify-between gap-3">
174
- <p class="text-sm text-(--rt-text-secondary)">
175
- Application ID: <span class="font-semibold text-(--rt-text-primary)">{{ detail.id }}</span>
176
- </p>
177
- <div class="flex flex-wrap items-center gap-2">
178
- <button
179
- type="button"
180
- class="rounded-xl border border-(--rt-border-color) bg-(--rt-base-background) px-4 py-2 text-sm font-semibold text-(--rt-text-secondary) transition hover:bg-(--rt-raised-background)"
181
- (click)="openTimeline()"
182
- >
183
- Timeline
184
- </button>
185
- <a
186
- [routerLink]="['review']"
187
- class="rounded-xl bg-(--rt-brand-color) px-4 py-2 text-sm font-semibold text-(--rt-text-primary-inverse) transition hover:opacity-90 cursor-pointer"
188
- >
189
- Open Review
190
- </a>
191
- </div>
192
- </div>
193
- </section>
194
-
195
- <rolatech-onboarding-summary-card [title]="'Applicant Profile'" [items]="profileItems()" />
196
-
197
- <rolatech-onboarding-summary-card [title]="'Compliance & Banking'" [items]="complianceItems()" />
198
-
199
- <rolatech-onboarding-issue-list [issues]="detail.issues" />
200
- } @else {
201
- <div
202
- class="rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 text-sm text-(--rt-text-secondary) shadow-sm"
203
- >
204
- Loading application details...
205
- </div>
206
- }
207
-
208
- @if (facade.detail(); as detail) {
209
- <rolatech-onboarding-timeline-drawer
210
- floating
211
- [open]="timelineOpen()"
212
- [title]="'Application Timeline'"
213
- [items]="detail.timeline"
214
- [zIndex]="9100"
215
- (closeRequested)="closeTimeline()"
216
- />
217
- }
218
- </rolatech-onboarding-page-shell>
219
- `,
220
- }]
221
- }], ctorParameters: () => [] });
222
-
223
- export { AdminOnboardingDetailPage };
224
- //# sourceMappingURL=rolatech-angular-onboarding-admin-onboarding-detail-page-DKJQX3cs.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rolatech-angular-onboarding-admin-onboarding-detail-page-DKJQX3cs.mjs","sources":["../../../../packages/angular-onboarding/src/lib/pages/admin-onboarding/admin-onboarding-detail-page.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { onboardingApplicantTypeLabel, onboardingVatModeLabel } from '@rolatech/angular-services';\nimport { OnboardingIssueList } from '../../components/onboarding/onboarding-issue-list';\nimport { OnboardingPageShell } from '../../components/onboarding/onboarding-page-shell';\nimport { OnboardingStatusBadge } from '../../components/onboarding/onboarding-status-badge';\nimport { OnboardingSummaryCard } from '../../components/onboarding/onboarding-summary-card';\nimport { OnboardingTimelineDrawer } from '../../components/onboarding/onboarding-timeline-drawer';\nimport { AdminOnboardingDetailFacade } from '../../store/admin-onboarding-detail.facade';\n\n@Component({\n selector: 'rolatech-admin-onboarding-detail-page',\n standalone: true,\n imports: [\n RouterLink,\n OnboardingPageShell,\n OnboardingStatusBadge,\n OnboardingSummaryCard,\n OnboardingIssueList,\n OnboardingTimelineDrawer,\n ],\n providers: [AdminOnboardingDetailFacade],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n template: `\n <rolatech-onboarding-page-shell title=\"Onboarding Application Detail\" [subtitle]=\"subtitle()\" kicker=\"Admin Console\">\n <div header-leading>\n <a\n [routerLink]=\"['../']\"\n class=\"inline-flex items-center rounded-xl border border-(--rt-border-color) bg-(--rt-base-background) px-3 py-2 text-sm font-medium text-(--rt-text-secondary) transition hover:bg-(--rt-raised-background) cursor-pointer\"\n >\n &larr; Back\n </a>\n </div>\n\n <div header-actions>\n <rolatech-onboarding-status-badge [status]=\"facade.detail()?.status || null\" />\n </div>\n\n @if (facade.error()) {\n <div class=\"rounded-2xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700\">{{ facade.error() }}</div>\n }\n\n @if (facade.detail(); as detail) {\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 shadow-sm\">\n <div class=\"flex flex-wrap items-center justify-between gap-3\">\n <p class=\"text-sm text-(--rt-text-secondary)\">\n Application ID: <span class=\"font-semibold text-(--rt-text-primary)\">{{ detail.id }}</span>\n </p>\n <div class=\"flex flex-wrap items-center gap-2\">\n <button\n type=\"button\"\n class=\"rounded-xl border border-(--rt-border-color) bg-(--rt-base-background) px-4 py-2 text-sm font-semibold text-(--rt-text-secondary) transition hover:bg-(--rt-raised-background)\"\n (click)=\"openTimeline()\"\n >\n Timeline\n </button>\n <a\n [routerLink]=\"['review']\"\n class=\"rounded-xl bg-(--rt-brand-color) px-4 py-2 text-sm font-semibold text-(--rt-text-primary-inverse) transition hover:opacity-90 cursor-pointer\"\n >\n Open Review\n </a>\n </div>\n </div>\n </section>\n\n <rolatech-onboarding-summary-card [title]=\"'Applicant Profile'\" [items]=\"profileItems()\" />\n\n <rolatech-onboarding-summary-card [title]=\"'Compliance & Banking'\" [items]=\"complianceItems()\" />\n\n <rolatech-onboarding-issue-list [issues]=\"detail.issues\" />\n } @else {\n <div\n class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 text-sm text-(--rt-text-secondary) shadow-sm\"\n >\n Loading application details...\n </div>\n }\n\n @if (facade.detail(); as detail) {\n <rolatech-onboarding-timeline-drawer\n floating\n [open]=\"timelineOpen()\"\n [title]=\"'Application Timeline'\"\n [items]=\"detail.timeline\"\n [zIndex]=\"9100\"\n (closeRequested)=\"closeTimeline()\"\n />\n }\n </rolatech-onboarding-page-shell>\n `,\n})\nexport class AdminOnboardingDetailPage {\n readonly facade = inject(AdminOnboardingDetailFacade);\n readonly timelineOpen = signal(false);\n private readonly route = inject(ActivatedRoute);\n\n private readonly paramMap = toSignal(this.route.paramMap, {\n initialValue: this.route.snapshot.paramMap,\n });\n\n readonly subtitle = computed(() => {\n const detail = this.facade.detail();\n\n if (!detail) {\n return 'Inspect onboarding data, documents, and review notes.';\n }\n\n return `${detail.organizationName || 'Unknown organization'} • ${detail.contactName || 'Unknown contact'}`;\n });\n\n readonly profileItems = computed(() => {\n const detail = this.facade.detail();\n if (!detail) {\n return [];\n }\n\n return [\n { label: 'Organization', value: detail.organizationName },\n { label: 'Contact name', value: detail.contactName },\n { label: 'Contact email', value: detail.contactEmail },\n { label: 'Contact phone', value: detail.contactPhone },\n { label: 'Country', value: detail.companyCountry },\n { label: 'Applicant type', value: onboardingApplicantTypeLabel(detail.applicantType) },\n ];\n });\n\n readonly complianceItems = computed(() => {\n const detail = this.facade.detail();\n if (!detail) {\n return [];\n }\n\n return [\n { label: 'VAT mode', value: onboardingVatModeLabel(detail.vatMode ?? null) },\n { label: 'VAT number', value: detail.vatNumber },\n { label: 'Bank', value: detail.bankName },\n { label: 'Account holder', value: detail.accountHolderName },\n { label: 'Sort code', value: detail.sortCode },\n { label: 'Account number', value: detail.accountNumber },\n ];\n });\n\n constructor() {\n effect(() => {\n const applicationId = this.paramMap().get('applicationId');\n\n if (!applicationId) {\n return;\n }\n\n void this.facade.load(applicationId);\n });\n }\n\n openTimeline(): void {\n this.timelineOpen.set(true);\n }\n\n closeTimeline(): void {\n this.timelineOpen.set(false);\n }\n}\n"],"names":[],"mappings":"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"}