{"version":3,"file":"rolatech-angular-onboarding-admin-onboarding-index-page-DIRYLN8f.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 { PlatformDataTable, PlatformFilterPanel, PlatformPageHeader, PlatformStatCard } from '@rolatech/angular-platform';\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, PlatformPageHeader, PlatformStatCard, PlatformFilterPanel, PlatformDataTable, OnboardingStatusBadge],\n  providers: [AdminOnboardingListFacade],\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-1\">\n          <h1 class=\"text-2xl font-semibold tracking-tight\">Agent Applications</h1>\n          <p class=\"text-sm text-muted-foreground\">Review incoming agent onboarding requests and triage approvals.</p>\n        </div>\n\n        <div header-actions>\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            [disabled]=\"facade.loading()\"\n            (click)=\"reload()\"\n          >\n            Refresh\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>Total Applications</div>\n          <div stat-value>{{ facade.items().length }}</div>\n        </rolatech-platform-stat-card>\n\n        <rolatech-platform-stat-card>\n          <div stat-label>Submitted</div>\n          <div stat-value>{{ facade.groupedCounts().SUBMITTED }}</div>\n        </rolatech-platform-stat-card>\n\n        <rolatech-platform-stat-card>\n          <div stat-label>In Review</div>\n          <div stat-value>{{ facade.groupedCounts().IN_REVIEW }}</div>\n        </rolatech-platform-stat-card>\n\n        <rolatech-platform-stat-card>\n          <div stat-label>Need More Info</div>\n          <div stat-value>{{ facade.groupedCounts().NEED_MORE_INFO }}</div>\n        </rolatech-platform-stat-card>\n      </section>\n\n      <section class=\"grid gap-6 xl:grid-cols-[320px_minmax(0,1fr)]\">\n        <rolatech-platform-filter-panel>\n          <div filter-title>Filters</div>\n          <div filter-description>Search by organization, applicant, and status.</div>\n\n          <label class=\"flex flex-col gap-2\">\n            <span class=\"text-sm font-medium\">Search</span>\n            <input\n              class=\"h-10 rounded-xl border border-(--rt-border-color) px-3 text-sm outline-none\"\n              [value]=\"facade.filters().search || ''\"\n              (input)=\"onSearch($event)\"\n              placeholder=\"Organization or contact\"\n            />\n          </label>\n\n          <label class=\"flex flex-col gap-2\">\n            <span class=\"text-sm font-medium\">Status</span>\n            <select\n              class=\"h-10 rounded-xl border border-(--rt-border-color) px-3 text-sm outline-none\"\n              [value]=\"facade.filters().status || ''\"\n              (change)=\"onStatus($event)\"\n            >\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        </rolatech-platform-filter-panel>\n\n        <rolatech-platform-data-table>\n          <div table-toolbar class=\"flex items-center justify-between gap-3\">\n            <div>\n              <h2 class=\"text-base font-semibold\">Applications</h2>\n              <div class=\"text-sm text-muted-foreground\">{{ facade.items().length }} items</div>\n            </div>\n          </div>\n\n          @if (facade.error()) {\n            <p class=\"mb-4 rounded-2xl border border-rose-300/40 bg-rose-500/10 px-4 py-3 text-sm text-(--rt-text-primary)\">\n              {{ facade.error() }}\n            </p>\n          }\n\n          <thead class=\"bg-muted/40\">\n            <tr class=\"text-left\">\n              <th class=\"px-4 py-3 font-medium\">ID</th>\n              <th class=\"px-4 py-3 font-medium\">Organization</th>\n              <th class=\"px-4 py-3 font-medium\">Applicant</th>\n              <th class=\"px-4 py-3 font-medium\">Country</th>\n              <th class=\"px-4 py-3 font-medium\">Status</th>\n              <th class=\"px-4 py-3 font-medium\">Updated</th>\n            </tr>\n          </thead>\n\n          <tbody>\n            @if (facade.loading()) {\n              <tr>\n                <td colspan=\"6\" class=\"px-4 py-10 text-center text-muted-foreground\">Loading agent applications...</td>\n              </tr>\n            } @else if (facade.items().length === 0) {\n              <tr>\n                <td colspan=\"6\" class=\"px-4 py-10 text-center text-muted-foreground\">No agent applications found.</td>\n              </tr>\n            } @else {\n              @for (item of facade.items(); track item.id) {\n                <tr class=\"border-t border-(--rt-border-color)\">\n                  <td class=\"px-4 py-3\">\n                    <a [routerLink]=\"[item.id]\" class=\"font-medium 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 text-muted-foreground\">{{ countryCodeLabel(item.countryCode) }}</td>\n                  <td class=\"px-4 py-3\">\n                    <rolatech-onboarding-status-badge [status]=\"item.status\" />\n                  </td>\n                  <td class=\"px-4 py-3 text-muted-foreground\">{{ item.updatedAt || item.createdAt || '—' }}</td>\n                </tr>\n              }\n            }\n          </tbody>\n        </rolatech-platform-data-table>\n      </section>\n    </section>\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  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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"}