{"version":3,"file":"rolatech-angular-onboarding-admin-onboarding-review-page-zk0Oxyh1.mjs","sources":["../../../../packages/angular-onboarding/src/lib/pages/admin-onboarding/admin-onboarding-review-page.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, effect, inject, ViewEncapsulation } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport {\n  onboardingDocumentTypeLabel,\n  onboardingIssueTypeLabel,\n  OnboardingDocumentType,\n} 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 { AdminOnboardingReviewFacade } from '../../store/admin-onboarding-review.facade';\n\n@Component({\n  selector: 'rolatech-admin-onboarding-review-page',\n  standalone: true,\n  imports: [ReactiveFormsModule, RouterLink, OnboardingPageShell, OnboardingStatusBadge, OnboardingIssueList],\n  providers: [AdminOnboardingReviewFacade],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'block' },\n  template: `\n    <rolatech-onboarding-page-shell\n      title=\"Onboarding Review Workspace\"\n      subtitle=\"Create actionable review notes and make a final decision.\"\n      kicker=\"Admin Console\"\n    >\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-6 shadow-sm\">\n          <h2 class=\"text-lg font-semibold text-(--rt-text-primary)\">{{ detail.organizationName || 'Organization' }}</h2>\n          <p class=\"mt-1 text-sm text-(--rt-text-secondary)\">{{ detail.contactName }} • {{ detail.contactEmail }}</p>\n\n          <label class=\"mt-6 grid gap-2\">\n            <span class=\"text-sm font-medium text-(--rt-text-secondary)\">Review comment</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 review summary or final decision context...\"\n            ></textarea>\n          </label>\n\n          <form\n            [formGroup]=\"issueForm\"\n            class=\"mt-6 grid gap-3 rounded-xl border border-(--rt-border-color) bg-(--rt-raised-background) p-4 md:grid-cols-3\"\n          >\n            <label class=\"grid gap-1\">\n              <span class=\"text-xs font-semibold uppercase tracking-wide text-(--rt-text-secondary)\">Field key</span>\n              <input\n                formControlName=\"fieldKey\"\n                class=\"h-10 rounded-lg border border-(--rt-border-color) px-3\"\n                placeholder=\"financial.vatNumber\"\n              />\n            </label>\n\n            <label class=\"grid gap-1\">\n              <span class=\"text-xs font-semibold uppercase tracking-wide text-(--rt-text-secondary)\">Document type</span>\n              <select formControlName=\"documentType\" class=\"h-10 rounded-lg border border-(--rt-border-color) px-3\">\n                @for (type of documentTypes; track type) {\n                  <option [value]=\"type\">{{ documentTypeLabel(type) }}</option>\n                }\n              </select>\n            </label>\n\n            <label class=\"grid gap-1 md:col-span-3\">\n              <span class=\"text-xs font-semibold uppercase tracking-wide text-(--rt-text-secondary)\">Issue comment</span>\n              <input\n                formControlName=\"comment\"\n                class=\"h-10 rounded-lg border border-(--rt-border-color) px-3\"\n                placeholder=\"Describe what needs correction\"\n              />\n            </label>\n\n            <div class=\"md:col-span-3 flex flex-wrap gap-2\">\n              <button\n                type=\"button\"\n                class=\"rounded-lg border border-(--rt-border-color) px-3 py-2 text-sm font-medium text-(--rt-text-secondary) hover:bg-(--rt-base-background)\"\n                (click)=\"addFieldIssue()\"\n              >\n                Add Field Issue\n              </button>\n              <button\n                type=\"button\"\n                class=\"rounded-lg border border-(--rt-border-color) px-3 py-2 text-sm font-medium text-(--rt-text-secondary) hover:bg-(--rt-base-background)\"\n                (click)=\"addDocumentIssue()\"\n              >\n                Add Document Issue\n              </button>\n            </div>\n          </form>\n\n          @if (facade.issueDrafts().length > 0) {\n            <section class=\"mt-6 space-y-3\">\n              <h3 class=\"text-sm font-semibold uppercase tracking-wide text-(--rt-text-secondary)\">Draft Issues</h3>\n              @for (item of facade.issueDrafts(); track $index) {\n                <article class=\"rounded-xl border border-(--rt-border-color) p-3\">\n                  <p class=\"text-xs font-semibold uppercase tracking-wide text-(--rt-text-secondary)\">{{ issueTypeLabel(item.issueType) }}</p>\n                  <p class=\"mt-1 text-sm text-(--rt-text-secondary)\">\n                    {{ item.fieldKey || documentTypeLabel(item.documentType || null) }}\n                  </p>\n                  <p class=\"mt-1 text-sm text-(--rt-text-primary)\">{{ item.comment }}</p>\n                  <button\n                    type=\"button\"\n                    class=\"mt-2 text-xs font-semibold uppercase tracking-wide text-rose-700\"\n                    (click)=\"facade.removeIssue($index)\"\n                  >\n                    Remove\n                  </button>\n                </article>\n              }\n            </section>\n          }\n\n          <div class=\"mt-8 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        <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 review workspace...\n        </div>\n      }\n    </rolatech-onboarding-page-shell>\n  `,\n})\nexport class AdminOnboardingReviewPage {\n  readonly facade = inject(AdminOnboardingReviewFacade);\n  private readonly fb = inject(FormBuilder);\n  private readonly route = inject(ActivatedRoute);\n  readonly documentTypeLabel = onboardingDocumentTypeLabel;\n  readonly issueTypeLabel = onboardingIssueTypeLabel;\n\n  readonly documentTypes: OnboardingDocumentType[] = [\n    'PASSPORT',\n    'CERTIFICATE_OF_INCORPORATION',\n    'INDUSTRY_CERTIFICATE',\n    'PROOF_OF_ADDRESS',\n    'BANK_STATEMENT',\n    'OTHER',\n  ];\n\n  readonly issueForm = this.fb.nonNullable.group({\n    fieldKey: ['', [Validators.required]],\n    documentType: ['PASSPORT' as OnboardingDocumentType, [Validators.required]],\n    comment: ['', [Validators.required]],\n  });\n\n  private readonly paramMap = toSignal(this.route.paramMap, {\n    initialValue: this.route.snapshot.paramMap,\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  addFieldIssue(): void {\n    const value = this.issueForm.getRawValue();\n\n    if (!value.comment || !value.fieldKey) {\n      return;\n    }\n\n    this.facade.addFieldIssue(value.fieldKey, value.comment);\n  }\n\n  addDocumentIssue(): void {\n    const value = this.issueForm.getRawValue();\n\n    if (!value.comment || !value.documentType) {\n      return;\n    }\n\n    this.facade.addDocumentIssue(value.documentType, value.comment);\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"],"names":[],"mappings":"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"}