@rolatech/angular-onboarding 20.3.0-beta.2

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 (35) hide show
  1. package/README.md +55 -0
  2. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-detail-page-DKJQX3cs.mjs +224 -0
  3. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-detail-page-DKJQX3cs.mjs.map +1 -0
  4. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-index-page-BO4pC_NU.mjs +206 -0
  5. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-index-page-BO4pC_NU.mjs.map +1 -0
  6. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-review-page-BERcLBeQ.mjs +419 -0
  7. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-review-page-BERcLBeQ.mjs.map +1 -0
  8. package/fesm2022/rolatech-angular-onboarding-agent-apply-banking-page-VYNfR4fy.mjs +133 -0
  9. package/fesm2022/rolatech-angular-onboarding-agent-apply-banking-page-VYNfR4fy.mjs.map +1 -0
  10. package/fesm2022/rolatech-angular-onboarding-agent-apply-financial-page-Ck3Rowke.mjs +132 -0
  11. package/fesm2022/rolatech-angular-onboarding-agent-apply-financial-page-Ck3Rowke.mjs.map +1 -0
  12. package/fesm2022/rolatech-angular-onboarding-agent-apply-profile-page-DNepDxHu.mjs +122 -0
  13. package/fesm2022/rolatech-angular-onboarding-agent-apply-profile-page-DNepDxHu.mjs.map +1 -0
  14. package/fesm2022/rolatech-angular-onboarding-agent-apply-qualification-page-CSwupuKt.mjs +108 -0
  15. package/fesm2022/rolatech-angular-onboarding-agent-apply-qualification-page-CSwupuKt.mjs.map +1 -0
  16. package/fesm2022/rolatech-angular-onboarding-agent-apply-review-page-DugCjfvK.mjs +182 -0
  17. package/fesm2022/rolatech-angular-onboarding-agent-apply-review-page-DugCjfvK.mjs.map +1 -0
  18. package/fesm2022/rolatech-angular-onboarding-agent-apply-shell-page-DibWYeD1.mjs +150 -0
  19. package/fesm2022/rolatech-angular-onboarding-agent-apply-shell-page-DibWYeD1.mjs.map +1 -0
  20. package/fesm2022/rolatech-angular-onboarding-agent-apply-start-page-DC7gyOnS.mjs +144 -0
  21. package/fesm2022/rolatech-angular-onboarding-agent-apply-start-page-DC7gyOnS.mjs.map +1 -0
  22. package/fesm2022/rolatech-angular-onboarding-agent-apply-submitted-page-BMkV2V8K.mjs +55 -0
  23. package/fesm2022/rolatech-angular-onboarding-agent-apply-submitted-page-BMkV2V8K.mjs.map +1 -0
  24. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-documents-page-DWBGTj5J.mjs +99 -0
  25. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-documents-page-DWBGTj5J.mjs.map +1 -0
  26. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-issues-page-CSVgCJ7t.mjs +28 -0
  27. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-issues-page-CSVgCJ7t.mjs.map +1 -0
  28. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-overview-page-8sTSvFZ7.mjs +67 -0
  29. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-overview-page-8sTSvFZ7.mjs.map +1 -0
  30. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-shell-page-B6ffcJ5A.mjs +125 -0
  31. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-shell-page-B6ffcJ5A.mjs.map +1 -0
  32. package/fesm2022/rolatech-angular-onboarding.mjs +1495 -0
  33. package/fesm2022/rolatech-angular-onboarding.mjs.map +1 -0
  34. package/package.json +35 -0
  35. package/types/rolatech-angular-onboarding.d.ts +244 -0
package/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # @rolatech/angular-onboarding
2
+
3
+ Dedicated Angular onboarding UI/state package for PrimeCasa and Rolatech.
4
+
5
+ ## Scope
6
+
7
+ Owns:
8
+ - onboarding pages
9
+ - onboarding route definitions
10
+ - onboarding facades/signals/forms
11
+ - onboarding reusable components
12
+ - apply flow UI
13
+ - applicant dashboard UI
14
+ - admin review UI
15
+
16
+ Does not own:
17
+ - HTTP transport logic
18
+ - API DTO definitions
19
+ - backend request/response contracts
20
+ - auth/session transport
21
+ - organization provisioning logic
22
+
23
+ Transport and contracts are consumed from `@rolatech/angular-services`.
24
+
25
+ ## Route Exports
26
+
27
+ - `AGENT_APPLY_ROUTES`
28
+ - `AGENT_ONBOARDING_ROUTES`
29
+ - `ADMIN_ONBOARDING_ROUTES`
30
+
31
+ ## Integration Example
32
+
33
+ ```ts
34
+ import { Routes } from '@angular/router';
35
+ import {
36
+ ADMIN_ONBOARDING_ROUTES,
37
+ AGENT_APPLY_ROUTES,
38
+ AGENT_ONBOARDING_ROUTES,
39
+ } from '@rolatech/angular-onboarding';
40
+
41
+ export const routes: Routes = [
42
+ {
43
+ path: 'agents/apply',
44
+ children: AGENT_APPLY_ROUTES,
45
+ },
46
+ {
47
+ path: 'onboarding',
48
+ children: AGENT_ONBOARDING_ROUTES,
49
+ },
50
+ {
51
+ path: 'onboarding/applications',
52
+ children: ADMIN_ONBOARDING_ROUTES,
53
+ },
54
+ ];
55
+ ```
@@ -0,0 +1,224 @@
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
@@ -0,0 +1 @@
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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"}
@@ -0,0 +1,206 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { RouterLink } from '@angular/router';
4
+ import { onboardingStatusLabel } from '@rolatech/angular-services';
5
+ import { AdminOnboardingListFacade, OnboardingPageShell, OnboardingStatusBadge } from './rolatech-angular-onboarding.mjs';
6
+
7
+ class AdminOnboardingIndexPage {
8
+ facade = inject(AdminOnboardingListFacade);
9
+ statusLabel = onboardingStatusLabel;
10
+ statuses = [
11
+ 'DRAFT',
12
+ 'IN_PROGRESS',
13
+ 'SUBMITTED',
14
+ 'IN_REVIEW',
15
+ 'NEED_MORE_INFO',
16
+ 'APPROVED',
17
+ 'FAILED',
18
+ ];
19
+ constructor() {
20
+ void this.facade.load();
21
+ }
22
+ onSearch(event) {
23
+ const target = event.target;
24
+ this.facade.setSearch(target.value);
25
+ void this.facade.load();
26
+ }
27
+ onStatus(event) {
28
+ const target = event.target;
29
+ const status = target.value ? target.value : undefined;
30
+ this.facade.setStatus(status);
31
+ void this.facade.load();
32
+ }
33
+ async reload() {
34
+ await this.facade.load();
35
+ }
36
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AdminOnboardingIndexPage, deps: [], target: i0.ɵɵFactoryTarget.Component });
37
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AdminOnboardingIndexPage, isStandalone: true, selector: "rolatech-admin-onboarding-index-page", host: { classAttribute: "block" }, providers: [AdminOnboardingListFacade], ngImport: i0, template: `
38
+ <rolatech-onboarding-page-shell
39
+ title="Onboarding Applications"
40
+ subtitle="Review incoming onboarding requests and triage approvals."
41
+ kicker="Admin Console"
42
+ >
43
+ <section class="rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 shadow-sm">
44
+ <div class="grid gap-3 md:grid-cols-3">
45
+ <label class="grid gap-2">
46
+ <span class="text-xs font-semibold uppercase tracking-wide text-(--rt-text-secondary)">Search</span>
47
+ <input
48
+ class="h-10 rounded-xl border border-(--rt-border-color) px-3"
49
+ [value]="facade.filters().search || ''"
50
+ (input)="onSearch($event)"
51
+ placeholder="Organization or contact"
52
+ />
53
+ </label>
54
+
55
+ <label class="grid gap-2">
56
+ <span class="text-xs font-semibold uppercase tracking-wide text-(--rt-text-secondary)">Status</span>
57
+ <select class="h-10 rounded-xl border border-(--rt-border-color) px-3" [value]="facade.filters().status || ''" (change)="onStatus($event)">
58
+ <option value="">All</option>
59
+ @for (status of statuses; track status) {
60
+ <option [value]="status">{{ statusLabel(status) }}</option>
61
+ }
62
+ </select>
63
+ </label>
64
+
65
+ <div class="flex items-end justify-start md:justify-end">
66
+ <button
67
+ type="button"
68
+ class="rounded-xl bg-(--rt-brand-color) px-4 py-2 text-sm font-semibold text-(--rt-text-primary-inverse) transition hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60"
69
+ [disabled]="facade.loading()"
70
+ (click)="reload()"
71
+ >
72
+ Refresh
73
+ </button>
74
+ </div>
75
+ </div>
76
+ </section>
77
+
78
+ @if (facade.error()) {
79
+ <div class="rounded-2xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700">{{ facade.error() }}</div>
80
+ }
81
+
82
+ <section class="overflow-hidden rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) shadow-sm">
83
+ <table class="min-w-full text-left text-sm">
84
+ <thead class="border-b border-(--rt-border-color) bg-(--rt-raised-background) text-(--rt-text-secondary)">
85
+ <tr>
86
+ <th class="px-4 py-3 font-semibold">ID</th>
87
+ <th class="px-4 py-3 font-semibold">Organization</th>
88
+ <th class="px-4 py-3 font-semibold">Applicant</th>
89
+ <th class="px-4 py-3 font-semibold">Status</th>
90
+ </tr>
91
+ </thead>
92
+ <tbody>
93
+ @for (item of facade.items(); track item.id) {
94
+ <tr class="border-b border-(--rt-border-color) text-(--rt-text-secondary) last:border-b-0">
95
+ <td class="px-4 py-3">
96
+ <a [routerLink]="[item.id]" class="font-medium text-(--rt-text-primary) hover:underline cursor-pointer">{{ item.id }}</a>
97
+ </td>
98
+ <td class="px-4 py-3">{{ item.organizationName || '-' }}</td>
99
+ <td class="px-4 py-3">{{ item.contactName || '-' }}</td>
100
+ <td class="px-4 py-3">
101
+ <rolatech-onboarding-status-badge [status]="item.status" />
102
+ </td>
103
+ </tr>
104
+ }
105
+ </tbody>
106
+ </table>
107
+
108
+ @if (facade.items().length === 0 && !facade.loading()) {
109
+ <div class="px-4 py-6 text-sm text-(--rt-text-secondary)">No onboarding applications found.</div>
110
+ }
111
+ </section>
112
+ </rolatech-onboarding-page-shell>
113
+ `, 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
114
+ }
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AdminOnboardingIndexPage, decorators: [{
116
+ type: Component,
117
+ args: [{
118
+ selector: 'rolatech-admin-onboarding-index-page',
119
+ standalone: true,
120
+ imports: [RouterLink, OnboardingPageShell, OnboardingStatusBadge],
121
+ providers: [AdminOnboardingListFacade],
122
+ changeDetection: ChangeDetectionStrategy.OnPush,
123
+ encapsulation: ViewEncapsulation.None,
124
+ host: { class: 'block' },
125
+ template: `
126
+ <rolatech-onboarding-page-shell
127
+ title="Onboarding Applications"
128
+ subtitle="Review incoming onboarding requests and triage approvals."
129
+ kicker="Admin Console"
130
+ >
131
+ <section class="rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 shadow-sm">
132
+ <div class="grid gap-3 md:grid-cols-3">
133
+ <label class="grid gap-2">
134
+ <span class="text-xs font-semibold uppercase tracking-wide text-(--rt-text-secondary)">Search</span>
135
+ <input
136
+ class="h-10 rounded-xl border border-(--rt-border-color) px-3"
137
+ [value]="facade.filters().search || ''"
138
+ (input)="onSearch($event)"
139
+ placeholder="Organization or contact"
140
+ />
141
+ </label>
142
+
143
+ <label class="grid gap-2">
144
+ <span class="text-xs font-semibold uppercase tracking-wide text-(--rt-text-secondary)">Status</span>
145
+ <select class="h-10 rounded-xl border border-(--rt-border-color) px-3" [value]="facade.filters().status || ''" (change)="onStatus($event)">
146
+ <option value="">All</option>
147
+ @for (status of statuses; track status) {
148
+ <option [value]="status">{{ statusLabel(status) }}</option>
149
+ }
150
+ </select>
151
+ </label>
152
+
153
+ <div class="flex items-end justify-start md:justify-end">
154
+ <button
155
+ type="button"
156
+ class="rounded-xl bg-(--rt-brand-color) px-4 py-2 text-sm font-semibold text-(--rt-text-primary-inverse) transition hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60"
157
+ [disabled]="facade.loading()"
158
+ (click)="reload()"
159
+ >
160
+ Refresh
161
+ </button>
162
+ </div>
163
+ </div>
164
+ </section>
165
+
166
+ @if (facade.error()) {
167
+ <div class="rounded-2xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700">{{ facade.error() }}</div>
168
+ }
169
+
170
+ <section class="overflow-hidden rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) shadow-sm">
171
+ <table class="min-w-full text-left text-sm">
172
+ <thead class="border-b border-(--rt-border-color) bg-(--rt-raised-background) text-(--rt-text-secondary)">
173
+ <tr>
174
+ <th class="px-4 py-3 font-semibold">ID</th>
175
+ <th class="px-4 py-3 font-semibold">Organization</th>
176
+ <th class="px-4 py-3 font-semibold">Applicant</th>
177
+ <th class="px-4 py-3 font-semibold">Status</th>
178
+ </tr>
179
+ </thead>
180
+ <tbody>
181
+ @for (item of facade.items(); track item.id) {
182
+ <tr class="border-b border-(--rt-border-color) text-(--rt-text-secondary) last:border-b-0">
183
+ <td class="px-4 py-3">
184
+ <a [routerLink]="[item.id]" class="font-medium text-(--rt-text-primary) hover:underline cursor-pointer">{{ item.id }}</a>
185
+ </td>
186
+ <td class="px-4 py-3">{{ item.organizationName || '-' }}</td>
187
+ <td class="px-4 py-3">{{ item.contactName || '-' }}</td>
188
+ <td class="px-4 py-3">
189
+ <rolatech-onboarding-status-badge [status]="item.status" />
190
+ </td>
191
+ </tr>
192
+ }
193
+ </tbody>
194
+ </table>
195
+
196
+ @if (facade.items().length === 0 && !facade.loading()) {
197
+ <div class="px-4 py-6 text-sm text-(--rt-text-secondary)">No onboarding applications found.</div>
198
+ }
199
+ </section>
200
+ </rolatech-onboarding-page-shell>
201
+ `,
202
+ }]
203
+ }], ctorParameters: () => [] });
204
+
205
+ export { AdminOnboardingIndexPage };
206
+ //# sourceMappingURL=rolatech-angular-onboarding-admin-onboarding-index-page-BO4pC_NU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolatech-angular-onboarding-admin-onboarding-index-page-BO4pC_NU.mjs","sources":["../../../../packages/angular-onboarding/src/lib/pages/admin-onboarding/admin-onboarding-index-page.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { onboardingStatusLabel, OnboardingStatus } from '@rolatech/angular-services';\nimport { OnboardingPageShell } from '../../components/onboarding/onboarding-page-shell';\nimport { OnboardingStatusBadge } from '../../components/onboarding/onboarding-status-badge';\nimport { AdminOnboardingListFacade } from '../../store/admin-onboarding-list.facade';\n\n@Component({\n selector: 'rolatech-admin-onboarding-index-page',\n standalone: true,\n imports: [RouterLink, OnboardingPageShell, OnboardingStatusBadge],\n providers: [AdminOnboardingListFacade],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n template: `\n <rolatech-onboarding-page-shell\n title=\"Onboarding Applications\"\n subtitle=\"Review incoming onboarding requests and triage approvals.\"\n kicker=\"Admin Console\"\n >\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 shadow-sm\">\n <div class=\"grid gap-3 md:grid-cols-3\">\n <label class=\"grid gap-2\">\n <span class=\"text-xs font-semibold uppercase tracking-wide text-(--rt-text-secondary)\">Search</span>\n <input\n class=\"h-10 rounded-xl border border-(--rt-border-color) px-3\"\n [value]=\"facade.filters().search || ''\"\n (input)=\"onSearch($event)\"\n placeholder=\"Organization or contact\"\n />\n </label>\n\n <label class=\"grid gap-2\">\n <span class=\"text-xs font-semibold uppercase tracking-wide text-(--rt-text-secondary)\">Status</span>\n <select class=\"h-10 rounded-xl border border-(--rt-border-color) px-3\" [value]=\"facade.filters().status || ''\" (change)=\"onStatus($event)\">\n <option value=\"\">All</option>\n @for (status of statuses; track status) {\n <option [value]=\"status\">{{ statusLabel(status) }}</option>\n }\n </select>\n </label>\n\n <div class=\"flex items-end justify-start md:justify-end\">\n <button\n type=\"button\"\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 disabled:cursor-not-allowed disabled:opacity-60\"\n [disabled]=\"facade.loading()\"\n (click)=\"reload()\"\n >\n Refresh\n </button>\n </div>\n </div>\n </section>\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 <section class=\"overflow-hidden rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) shadow-sm\">\n <table class=\"min-w-full text-left text-sm\">\n <thead class=\"border-b border-(--rt-border-color) bg-(--rt-raised-background) text-(--rt-text-secondary)\">\n <tr>\n <th class=\"px-4 py-3 font-semibold\">ID</th>\n <th class=\"px-4 py-3 font-semibold\">Organization</th>\n <th class=\"px-4 py-3 font-semibold\">Applicant</th>\n <th class=\"px-4 py-3 font-semibold\">Status</th>\n </tr>\n </thead>\n <tbody>\n @for (item of facade.items(); track item.id) {\n <tr class=\"border-b border-(--rt-border-color) text-(--rt-text-secondary) last:border-b-0\">\n <td class=\"px-4 py-3\">\n <a [routerLink]=\"[item.id]\" class=\"font-medium text-(--rt-text-primary) hover:underline cursor-pointer\">{{ item.id }}</a>\n </td>\n <td class=\"px-4 py-3\">{{ item.organizationName || '-' }}</td>\n <td class=\"px-4 py-3\">{{ item.contactName || '-' }}</td>\n <td class=\"px-4 py-3\">\n <rolatech-onboarding-status-badge [status]=\"item.status\" />\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n @if (facade.items().length === 0 && !facade.loading()) {\n <div class=\"px-4 py-6 text-sm text-(--rt-text-secondary)\">No onboarding applications found.</div>\n }\n </section>\n </rolatech-onboarding-page-shell>\n `,\n})\nexport class AdminOnboardingIndexPage {\n readonly facade = inject(AdminOnboardingListFacade);\n readonly statusLabel = onboardingStatusLabel;\n readonly statuses: OnboardingStatus[] = [\n 'DRAFT',\n 'IN_PROGRESS',\n 'SUBMITTED',\n 'IN_REVIEW',\n 'NEED_MORE_INFO',\n 'APPROVED',\n 'FAILED',\n ];\n\n constructor() {\n void this.facade.load();\n }\n\n onSearch(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.facade.setSearch(target.value);\n void this.facade.load();\n }\n\n onStatus(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const status = target.value ? (target.value as OnboardingStatus) : undefined;\n this.facade.setStatus(status);\n void this.facade.load();\n }\n\n async reload(): Promise<void> {\n await this.facade.load();\n }\n}\n"],"names":[],"mappings":";;;;;;MA6Fa,wBAAwB,CAAA;AAC1B,IAAA,MAAM,GAAG,MAAM,CAAC,yBAAyB,CAAC;IAC1C,WAAW,GAAG,qBAAqB;AACnC,IAAA,QAAQ,GAAuB;QACtC,OAAO;QACP,aAAa;QACb,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,UAAU;QACV,QAAQ;KACT;AAED,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA2B;AAChD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,GAAI,MAAM,CAAC,KAA0B,GAAG,SAAS;AAC5E,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;AAC7B,QAAA,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC1B;uGAhCW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAlFxB,CAAC,yBAAyB,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAI5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4ET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjFS,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAmFrD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAtFpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,UAAU,EAAE,mBAAmB,EAAE,qBAAqB,CAAC;oBACjE,SAAS,EAAE,CAAC,yBAAyB,CAAC;oBACtC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;AACxB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4ET,EAAA,CAAA;AACF,iBAAA;;;;;"}