From 5eb7b2dcbab4a92a5a8b5b5b232fff33546c1b60 Mon Sep 17 00:00:00 2001 From: sdarbinyan Date: Tue, 5 May 2026 11:53:52 +0400 Subject: [PATCH] status check --- src/app/pages/create-page/create-page.html | 3 +++ src/app/pages/create-page/create-page.scss | 11 +++++++++++ src/app/pages/create-page/create-page.ts | 17 +++++++++++------ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/app/pages/create-page/create-page.html b/src/app/pages/create-page/create-page.html index 222ef26..f28fc67 100644 --- a/src/app/pages/create-page/create-page.html +++ b/src/app/pages/create-page/create-page.html @@ -134,6 +134,9 @@

{{ 'create.qr_label' | translate }}

QR + @if (qrStatus()) { + {{ qrStatus() }} + } @if (qrPolling()) {

{{ 'create.qr_waiting' | translate }}

} diff --git a/src/app/pages/create-page/create-page.scss b/src/app/pages/create-page/create-page.scss index 53f3861..d4621ea 100644 --- a/src/app/pages/create-page/create-page.scss +++ b/src/app/pages/create-page/create-page.scss @@ -237,6 +237,17 @@ color: #64748b; animation: pulse 1.6s ease-in-out infinite; } + + &__status { + font-size: 11px; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + padding: 3px 10px; + border-radius: 20px; + background: #f1f5f9; + color: #475569; + } } @keyframes overlay-in { diff --git a/src/app/pages/create-page/create-page.ts b/src/app/pages/create-page/create-page.ts index 149f42e..da03049 100644 --- a/src/app/pages/create-page/create-page.ts +++ b/src/app/pages/create-page/create-page.ts @@ -22,12 +22,12 @@ interface CreateQrResponse { Payload?: string; // per API doc (capital P) nspkurl?: string; // actual field name in real responses qrUrl?: string; - qrStatus?: string; + status?: string; // e.g. "REGISTERED" [key: string]: unknown; } interface QrStatusResponse { - status?: string; // "NEW" | "APPROVED" | "REJECTED" | "COMPLETED" + status?: string; // "REGISTERED" | "NEW" | "APPROVED" | "REJECTED" | "COMPLETED" nspkurl?: string; nspkID?: string; [key: string]: unknown; @@ -88,6 +88,7 @@ export class CreatePage { // QR display state qrImageUrl = signal(null); qrPolling = signal(false); + qrStatus = signal(''); private pollHandle: ReturnType | null = null; private activeQrId = ''; @@ -160,6 +161,7 @@ export class CreatePage { const qrId = res?.qrId ?? res?.nspkID ?? ''; // Real API uses 'nspkurl'; doc says 'Payload' — try both const nspkUrl = res?.nspkurl ?? res?.Payload; + this.qrStatus.set(res?.status ?? ''); if (qrId || nspkUrl) { this.activeQrId = qrId; const qrData = nspkUrl @@ -186,19 +188,21 @@ export class CreatePage { this.http.get(`${QR_VITANOVA_API}/qr/dynamic/${qrId}`) .subscribe({ next: (res) => { - // API returns status: "NEW" | "APPROVED" | "REJECTED" | "COMPLETED" - if (res?.status === 'COMPLETED' || res?.status === 'APPROVED') { + const st = res?.status ?? ''; + this.qrStatus.set(st); + if (st === 'COMPLETED' || st === 'APPROVED') { this.stopPolling(); this.createFastcheck(); - } else if (res?.status === 'REJECTED') { + } else if (st === 'REJECTED') { this.stopPolling(); this.error.set(this.t('errors.payment_failed')); this.qrImageUrl.set(null); } + // REGISTERED / NEW / '' — keep polling }, error: () => undefined }); - }, 3000); + }, 5000); } private stopPolling(): void { @@ -247,6 +251,7 @@ export class CreatePage { closeQr(): void { this.qrImageUrl.set(null); this.qrPolling.set(false); + this.qrStatus.set(''); if (this.pollHandle !== null) { clearInterval(this.pollHandle); this.pollHandle = null;