{"version":3,"file":"rolatech-angular-onboarding-admin-onboarding-detail-page-XSdwZjbX.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 {\n  onboardingApplicantTypeLabel,\n  OnboardingDocumentResponse,\n  onboardingDocumentTypeLabel,\n  onboardingStatusLabel,\n  onboardingVatModeLabel,\n  OnboardingDocumentType,\n} from '@rolatech/angular-services';\nimport { PlatformPageHeader, PlatformStatCard } from '@rolatech/angular-platform';\nimport { OnboardingDocumentPreviewDialog } from '../../components/onboarding/onboarding-document-preview-dialog';\nimport { OnboardingIssueList } from '../../components/onboarding/onboarding-issue-list';\nimport { OnboardingReviewIssuesBanner } from '../../components/onboarding/onboarding-review-issues-banner';\nimport { OnboardingReviewRow } from '../../components/onboarding/onboarding-review-row';\nimport { OnboardingStatusBadge } from '../../components/onboarding/onboarding-status-badge';\nimport { OnboardingTimelineDrawer } from '../../components/onboarding/onboarding-timeline-drawer';\nimport {\n  OnboardingReviewIssueDraft,\n  OnboardingReviewIssueOption,\n  onboardingDocumentIssueOptions,\n  onboardingFieldIssueOptions,\n} from '../../models/onboarding-review.models';\nimport { AdminOnboardingReviewFacade } from '../../store/admin-onboarding-review.facade';\n\ninterface AdminReviewItem {\n  key: string;\n  label: string;\n  value: string | null | undefined;\n  helper: string;\n}\n\ninterface AdminDocumentReviewItem {\n  documentType: OnboardingDocumentType;\n  label: string;\n  value: string | null | undefined;\n  helper: string;\n  document: OnboardingDocumentResponse | null;\n}\n\n@Component({\n  selector: 'rolatech-admin-onboarding-detail-page',\n  standalone: true,\n  imports: [\n    RouterLink,\n    PlatformPageHeader,\n    PlatformStatCard,\n    OnboardingStatusBadge,\n    OnboardingIssueList,\n    OnboardingTimelineDrawer,\n    OnboardingReviewRow,\n    OnboardingReviewIssuesBanner,\n    OnboardingDocumentPreviewDialog,\n  ],\n  providers: [AdminOnboardingReviewFacade],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'block' },\n  template: `\n    <section class=\"rt-platform-theme flex flex-col gap-6 bg-(--rt-base-background) p-6 text-(--rt-text-primary)\">\n      <rolatech-platform-page-header>\n        <div header-left class=\"space-y-2\">\n          <div class=\"flex flex-wrap items-center gap-2 text-sm text-muted-foreground\">\n            <a [routerLink]=\"['../']\" class=\"hover:underline cursor-pointer\">Agent Applications</a>\n            @if (facade.detail(); as detail) {\n              <span>/</span>\n              <span>{{ detail.organizationName || detail.contactName || detail.id }}</span>\n            }\n          </div>\n\n          <div>\n            <h1 class=\"text-2xl font-semibold tracking-tight\">{{ title() }}</h1>\n            <p class=\"mt-1 text-sm text-muted-foreground\">{{ subtitle() }}</p>\n          </div>\n        </div>\n\n        <div header-actions>\n          @if (facade.detail()?.status || null; as status) {\n            <rolatech-onboarding-status-badge [status]=\"status\" />\n          }\n          <a\n            [routerLink]=\"['review']\"\n            class=\"inline-flex items-center rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm font-medium hover:bg-(--rt-raised-background) cursor-pointer\"\n          >\n            Review Page\n          </a>\n          <button\n            type=\"button\"\n            class=\"inline-flex items-center rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm font-medium\"\n            (click)=\"openTimeline()\"\n          >\n            Timeline\n          </button>\n        </div>\n      </rolatech-platform-page-header>\n\n      <section class=\"grid gap-4 md:grid-cols-2 xl:grid-cols-4\">\n        <rolatech-platform-stat-card>\n          <div stat-label>Documents</div>\n          <div stat-value>{{ documentCount() }}</div>\n        </rolatech-platform-stat-card>\n\n        <rolatech-platform-stat-card>\n          <div stat-label>Open Issues</div>\n          <div stat-value>{{ openIssueCount() }}</div>\n        </rolatech-platform-stat-card>\n\n        <rolatech-platform-stat-card>\n          <div stat-label>Timeline Events</div>\n          <div stat-value>{{ timelineCount() }}</div>\n        </rolatech-platform-stat-card>\n\n        <rolatech-platform-stat-card>\n          <div stat-label>Draft Issues</div>\n          <div stat-value>{{ facade.issueDrafts().length }}</div>\n        </rolatech-platform-stat-card>\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      @if (facade.detail(); as detail) {\n        <div class=\"space-y-4\">\n          <section class=\"rounded-2xl border border-(--rt-border-color) bg-card p-5 shadow-sm\">\n            <div class=\"flex flex-wrap items-center gap-3 text-sm text-muted-foreground\">\n              <span\n                >Application ID: <span class=\"font-semibold text-(--rt-text-primary)\">{{ detail.id }}</span></span\n              >\n              <span>•</span>\n              <span>{{ onboardingStatusLabel(detail.status) }}</span>\n              <span>•</span>\n              <span>{{ onboardingApplicantTypeLabel(detail.applicantType) }}</span>\n              <span>•</span>\n              <span>{{ countryCodeLabel(detail.countryCode) }}</span>\n            </div>\n          </section>\n\n          @if (detail.status === 'NEED_MORE_INFO') {\n            <rolatech-onboarding-review-issues-banner [issues]=\"detail.issues\" [status]=\"detail.status\" />\n          }\n\n          <section class=\"space-y-4 rounded-3xl border border-(--rt-border-color) bg-(--rt-base-background) p-6 shadow-sm\">\n            <div class=\"flex flex-wrap items-start justify-between gap-4\">\n              <div class=\"space-y-2\">\n                <h2 class=\"text-lg font-semibold text-(--rt-text-primary)\">Inline Review Workspace</h2>\n                <p class=\"max-w-2xl text-sm text-(--rt-text-secondary)\">\n                  Review the application in place. Mark a field or document as passed, or leave an issue directly beside the\n                  item that needs correction.\n                </p>\n              </div>\n\n              <span\n                class=\"rounded-full border border-(--rt-border-color) bg-(--rt-raised-background) px-3 py-1 text-xs font-semibold text-(--rt-text-secondary)\"\n              >\n                {{ facade.issueDrafts().length }} draft issues\n              </span>\n            </div>\n\n            <label class=\"grid gap-2\">\n              <span class=\"text-sm font-medium text-(--rt-text-secondary)\">Review summary</span>\n              <textarea\n                class=\"min-h-28 rounded-xl border border-(--rt-border-color) px-3 py-2\"\n                [value]=\"facade.reviewComment()\"\n                (input)=\"setComment($event)\"\n                placeholder=\"Add a high-level review note or final decision context...\"\n              ></textarea>\n            </label>\n\n            <div class=\"flex flex-wrap gap-3\">\n              <button\n                type=\"button\"\n                class=\"rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm font-semibold text-(--rt-text-secondary) hover:bg-(--rt-raised-background)\"\n                [disabled]=\"facade.saving()\"\n                (click)=\"startReview()\"\n              >\n                Start Review\n              </button>\n\n              <button\n                type=\"button\"\n                class=\"rounded-xl border border-amber-300 bg-amber-50 px-4 py-2 text-sm font-semibold text-amber-800 hover:bg-amber-100\"\n                [disabled]=\"facade.saving()\"\n                (click)=\"needMoreInfo()\"\n              >\n                Need More Info\n              </button>\n\n              <button\n                type=\"button\"\n                class=\"rounded-xl border border-emerald-300 bg-emerald-50 px-4 py-2 text-sm font-semibold text-emerald-800 hover:bg-emerald-100\"\n                [disabled]=\"facade.saving()\"\n                (click)=\"approve()\"\n              >\n                Approve\n              </button>\n\n              <button\n                type=\"button\"\n                class=\"rounded-xl border border-rose-300 bg-rose-50 px-4 py-2 text-sm font-semibold text-rose-800 hover:bg-rose-100\"\n                [disabled]=\"facade.saving()\"\n                (click)=\"fail()\"\n              >\n                Fail\n              </button>\n            </div>\n          </section>\n\n          <section class=\"space-y-4\">\n            <div class=\"space-y-1\">\n              <h2 class=\"text-lg font-semibold text-(--rt-text-primary)\">Applicant Profile</h2>\n              <p class=\"text-sm text-(--rt-text-secondary)\">Check identity, contact, and company information.</p>\n            </div>\n\n            <div class=\"grid gap-4 lg:grid-cols-2\">\n              @for (item of profileItems(); track item.key) {\n                <rolatech-onboarding-review-row\n                  [label]=\"item.label\"\n                  [value]=\"item.value\"\n                  [helper]=\"item.helper\"\n                  [issueOptions]=\"fieldIssueOptions(item.key)\"\n                  [existingIssue]=\"fieldExistingIssue(item.key)\"\n                  [draftIssue]=\"facade.fieldDraft(item.key)\"\n                  [passed]=\"facade.fieldPassed(item.key)\"\n                  [busy]=\"facade.saving()\"\n                  (passedChange)=\"onFieldPassed(item.key, $event)\"\n                  (draftIssueChange)=\"onFieldIssue(item.key, $event)\"\n                />\n              }\n            </div>\n          </section>\n\n          <section class=\"space-y-4\">\n            <div class=\"space-y-1\">\n              <h2 class=\"text-lg font-semibold text-(--rt-text-primary)\">Compliance and Banking</h2>\n              <p class=\"text-sm text-(--rt-text-secondary)\">Check VAT setup and settlement account details.</p>\n            </div>\n\n            <div class=\"grid gap-4 lg:grid-cols-2\">\n              @for (item of complianceItems(); track item.key) {\n                <rolatech-onboarding-review-row\n                  [label]=\"item.label\"\n                  [value]=\"item.value\"\n                  [helper]=\"item.helper\"\n                  [issueOptions]=\"fieldIssueOptions(item.key)\"\n                  [existingIssue]=\"fieldExistingIssue(item.key)\"\n                  [draftIssue]=\"facade.fieldDraft(item.key)\"\n                  [passed]=\"facade.fieldPassed(item.key)\"\n                  [busy]=\"facade.saving()\"\n                  (passedChange)=\"onFieldPassed(item.key, $event)\"\n                  (draftIssueChange)=\"onFieldIssue(item.key, $event)\"\n                />\n              }\n            </div>\n          </section>\n\n          <section class=\"space-y-4\">\n            <div class=\"space-y-1\">\n              <h2 class=\"text-lg font-semibold text-(--rt-text-primary)\">Documents</h2>\n              <p class=\"text-sm text-(--rt-text-secondary)\">\n                Review required documents and flag anything missing or unreadable.\n              </p>\n            </div>\n\n            <div class=\"grid gap-4 lg:grid-cols-2\">\n              @for (item of documentItems(); track item.documentType + item.label) {\n                <rolatech-onboarding-review-row\n                  [label]=\"item.label\"\n                  [value]=\"item.value\"\n                  [helper]=\"item.helper\"\n                  [issueOptions]=\"documentIssueOptions(item.documentType)\"\n                  [existingIssue]=\"documentExistingIssue(item.documentType)\"\n                  [draftIssue]=\"facade.documentDraft(item.documentType)\"\n                  [passed]=\"facade.documentPassed(item.documentType)\"\n                  [busy]=\"facade.saving()\"\n                  [actionLabel]=\"item.document ? 'Preview' : null\"\n                  [actionDisabled]=\"!item.document\"\n                  (passedChange)=\"onDocumentPassed(item.documentType, $event)\"\n                  (draftIssueChange)=\"onDocumentIssue(item.documentType, $event)\"\n                  (actionTriggered)=\"openDocumentPreview(item)\"\n                />\n              }\n            </div>\n          </section>\n\n          <rolatech-onboarding-issue-list [issues]=\"detail.issues\" />\n        </div>\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\n      <rolatech-onboarding-document-preview-dialog\n        [open]=\"previewOpen()\"\n        [title]=\"previewTitle()\"\n        [subtitle]=\"previewSubtitle()\"\n        [url]=\"facade.previewUrl()\"\n        [loading]=\"facade.previewLoading()\"\n        [error]=\"facade.previewError()\"\n        (closeRequested)=\"closeDocumentPreview()\"\n      />\n    </section>\n  `,\n})\nexport class AdminOnboardingDetailPage {\n  readonly facade = inject(AdminOnboardingReviewFacade);\n  readonly timelineOpen = signal(false);\n  readonly previewOpen = signal(false);\n  readonly previewTitle = signal<string | null>(null);\n  readonly previewSubtitle = signal<string | null>(null);\n  readonly onboardingApplicantTypeLabel = onboardingApplicantTypeLabel;\n  readonly onboardingStatusLabel = onboardingStatusLabel;\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 and triage approvals inline.';\n    }\n\n    return `${detail.organizationName || detail.contactName || 'Applicant'} • ${detail.contactEmail || 'No email'}`;\n  });\n  readonly title = computed(() => {\n    const detail = this.facade.detail();\n\n    if (!detail) {\n      return 'Agent Application Review';\n    }\n\n    return detail.organizationName || detail.contactName || 'Agent Application Review';\n  });\n  readonly documentCount = computed(() => this.facade.detail()?.documents.length ?? 0);\n  readonly timelineCount = computed(() => this.facade.detail()?.timeline.length ?? 0);\n  readonly openIssueCount = computed(() => (this.facade.detail()?.issues ?? []).filter((issue) => !issue.resolved).length);\n\n  readonly profileItems = computed<AdminReviewItem[]>(() => {\n    const detail = this.facade.detail();\n\n    if (!detail) {\n      return [];\n    }\n\n    return [\n      ...(detail.applicantType === 'COMPANY'\n        ? [{ key: 'organizationName', label: 'Company legal name', value: detail.organizationName, helper: '' }]\n        : [{ key: 'contactName', label: 'Applicant name', value: detail.contactName, helper: '' }]),\n      ...(detail.applicantType === 'COMPANY'\n        ? [{ key: 'contactName', label: 'Primary contact', value: detail.contactName, helper: '' }]\n        : []),\n      { key: 'contactEmail', label: 'Primary email', value: detail.contactEmail, helper: '' },\n      { key: 'contactPhone', label: 'Phone number', value: detail.contactPhone, helper: '' },\n    ];\n  });\n\n  readonly complianceItems = computed<AdminReviewItem[]>(() => {\n    const detail = this.facade.detail();\n\n    if (!detail) {\n      return [];\n    }\n\n    return [\n      { key: 'vatMode', label: 'VAT mode', value: onboardingVatModeLabel(detail.vatMode ?? null), helper: '' },\n      { key: 'vatNumber', label: 'VAT number', value: detail.vatNumber || 'Missing', helper: '' },\n      { key: 'bankName', label: 'Bank name', value: detail.bankName, helper: '' },\n      { key: 'accountHolderName', label: 'Account holder', value: detail.accountHolderName, helper: '' },\n      { key: 'sortCode', label: 'Sort code', value: detail.sortCode, helper: '' },\n      { key: 'accountNumber', label: 'Account number', value: detail.accountNumber, helper: '' },\n    ];\n  });\n\n  readonly documentItems = computed<AdminDocumentReviewItem[]>(() => {\n    const detail = this.facade.detail();\n\n    if (!detail) {\n      return [];\n    }\n\n    const requiredItems = this.facade.requiredDocuments().map((spec) => {\n      const document = detail.documents.find((item) => item.documentType === spec.type) ?? null;\n\n      return {\n        documentType: spec.type,\n        label: spec.label,\n        helper: spec.helperText ?? '',\n        document,\n        value: document?.originalFilename ?? 'Missing',\n      };\n    });\n\n    const requiredTypes = new Set(requiredItems.map((item) => item.documentType));\n    const additionalItems = detail.documents\n      .filter((item) => !requiredTypes.has(item.documentType))\n      .map((item) => ({\n        documentType: item.documentType,\n        label: `Additional: ${onboardingDocumentTypeLabel(item.documentType)}`,\n        helper: 'Supporting document uploaded by the applicant.',\n        document: item,\n        value: item.originalFilename,\n      }));\n\n    return [...requiredItems, ...additionalItems];\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  setComment(event: Event): void {\n    const target = event.target as HTMLTextAreaElement;\n    this.facade.setComment(target.value);\n  }\n\n  fieldIssueOptions(fieldKey: string): OnboardingReviewIssueOption[] {\n    return onboardingFieldIssueOptions(fieldKey);\n  }\n\n  documentIssueOptions(documentType: OnboardingDocumentType): OnboardingReviewIssueOption[] {\n    return onboardingDocumentIssueOptions(documentType);\n  }\n\n  onFieldIssue(fieldKey: string, draft: OnboardingReviewIssueDraft | null): void {\n    this.facade.setFieldIssueDraft(fieldKey, draft);\n  }\n\n  fieldExistingIssue(fieldKey: string): string | null {\n    const existing = this.facade.existingFieldIssues();\n    return Object.prototype.hasOwnProperty.call(existing, fieldKey) ? existing[fieldKey] : null;\n  }\n\n  onFieldPassed(fieldKey: string, passed: boolean): void {\n    this.facade.toggleFieldPassed(fieldKey, passed);\n  }\n\n  onDocumentIssue(documentType: OnboardingDocumentType, draft: OnboardingReviewIssueDraft | null): void {\n    this.facade.setDocumentIssueDraft(documentType, draft);\n  }\n\n  documentExistingIssue(documentType: OnboardingDocumentType): string | null {\n    const existing = this.facade.existingDocumentIssues();\n    return existing[documentType] ?? null;\n  }\n\n  onDocumentPassed(documentType: OnboardingDocumentType, passed: boolean): void {\n    this.facade.toggleDocumentPassed(documentType, passed);\n  }\n\n  async openDocumentPreview(item: AdminDocumentReviewItem): Promise<void> {\n    if (!item.document) {\n      return;\n    }\n\n    this.previewTitle.set(item.label);\n    this.previewSubtitle.set(item.document.originalFilename || null);\n    this.previewOpen.set(true);\n    await this.facade.openDocumentPreview(item.document.id);\n  }\n\n  async startReview(): Promise<void> {\n    const applicationId = this.paramMap().get('applicationId');\n\n    if (!applicationId) {\n      return;\n    }\n\n    await this.facade.startReview(applicationId);\n  }\n\n  async needMoreInfo(): Promise<void> {\n    const applicationId = this.paramMap().get('applicationId');\n\n    if (!applicationId) {\n      return;\n    }\n\n    await this.facade.requestMoreInfo(applicationId);\n  }\n\n  async approve(): Promise<void> {\n    const applicationId = this.paramMap().get('applicationId');\n\n    if (!applicationId) {\n      return;\n    }\n\n    await this.facade.approve(applicationId);\n  }\n\n  async fail(): Promise<void> {\n    const applicationId = this.paramMap().get('applicationId');\n\n    if (!applicationId) {\n      return;\n    }\n\n    await this.facade.fail(applicationId);\n  }\n\n  openTimeline(): void {\n    this.timelineOpen.set(true);\n  }\n\n  closeTimeline(): void {\n    this.timelineOpen.set(false);\n  }\n\n  closeDocumentPreview(): void {\n    this.previewOpen.set(false);\n    this.previewTitle.set(null);\n    this.previewSubtitle.set(null);\n    this.facade.clearDocumentPreview();\n  }\n\n  countryCodeLabel(value: string | null | undefined): string {\n    switch ((value ?? '').toUpperCase()) {\n      case 'CN':\n        return 'China';\n      case 'GB':\n        return 'United Kingdom';\n      default:\n        return value || '—';\n    }\n  }\n}\n"],"names":[],"mappings":"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"}