This commit is contained in:
sdarbinyan
2026-06-29 00:06:18 +04:00
parent 3cf0ef87f8
commit 0977f302a4
8 changed files with 84 additions and 52 deletions

View File

@@ -17,6 +17,8 @@ import { TranslatePipe } from '../../i18n/translate.pipe';
import { TranslateService } from '../../i18n/translate.service';
import { PAYMENT_POLL_INTERVAL_MS, PAYMENT_MAX_CHECKS, PAYMENT_TIMEOUT_CLOSE_MS, LINK_COPIED_DURATION_MS } from '../../config/constants';
type PaymentMethod = 'qr' | 'card';
@Component({
selector: 'app-cart',
imports: [DecimalPipe, RouterLink, FormsModule, EmptyCartIconComponent, DeliverySelectorComponent, TelegramLoginComponent, LangRoutePipe, TranslatePipe],
@@ -51,6 +53,7 @@ export class CartComponent implements OnDestroy {
bankPaymentUrl = signal<string>('');
bankPaymentFrameUrl = signal<SafeResourceUrl | null>(null);
showBankPaymentPopup = signal<boolean>(false);
selectedPaymentMethod = signal<PaymentMethod>('qr');
paymentId = signal<string>('');
linkCopied = signal<boolean>(false);
@@ -161,7 +164,7 @@ export class CartComponent implements OnDestroy {
this.cartService.setSelectedDelivery(itemID, selectedDelivery);
}
checkout(): void {
checkout(paymentMethod: PaymentMethod): void {
if (!this.allRequiredDeliveriesSelected()) {
alert(this.i18n.t('cart.deliveryRequired'));
return;
@@ -171,11 +174,12 @@ export class CartComponent implements OnDestroy {
alert(this.i18n.t('cart.acceptTerms'));
return;
}
this.openPaymentPopup();
this.openPaymentPopup(paymentMethod);
}
openPaymentPopup(): void {
openPaymentPopup(paymentMethod: PaymentMethod): void {
this.showPaymentPopup.set(true);
this.selectedPaymentMethod.set(paymentMethod);
this.paymentStatus.set('creating');
this.paymentId.set('');
this.qrCodeUrl.set('');
@@ -192,7 +196,7 @@ export class CartComponent implements OnDestroy {
this.phoneError.set('');
this.emailSubmitting.set(false);
this.paidItems = [...this.items()];
this.createPayment();
this.createPayment(paymentMethod);
}
closePaymentPopup(): void {
@@ -219,10 +223,10 @@ export class CartComponent implements OnDestroy {
this.bankPaymentFrameUrl.set(null);
this.showBankPaymentPopup.set(false);
this.linkCopied.set(false);
this.createPayment();
this.createPayment(this.selectedPaymentMethod());
}
createPayment(): void {
createPayment(paymentMethod: PaymentMethod): void {
const orderId = this.generateOrderId();
const paymentPayload = {
amount: Number(this.totalWithDelivery()),
@@ -231,6 +235,7 @@ export class CartComponent implements OnDestroy {
siteorderID: orderId,
redirectUrl: '',
telegramUsername: this.getTelegramUsername(),
paymentMethod,
items: this.buildPaymentItems(),
};
@@ -242,7 +247,7 @@ export class CartComponent implements OnDestroy {
const paymentLink = this.apiService.resolvePaymentLink(response);
const bankUrl = this.apiService.resolveBankPaymentUrl(response);
if (!qrId || (!qrUrl && !bankUrl)) {
if (!qrId || (paymentMethod === 'qr' && !qrUrl) || (paymentMethod === 'card' && !bankUrl)) {
console.error('Payment response missing payment fields:', response);
this.setPaymentError();
return;
@@ -255,6 +260,9 @@ export class CartComponent implements OnDestroy {
this.paymentStatus.set('waiting');
this.startPolling();
if (paymentMethod === 'card') {
this.openBankPaymentPopup();
}
},
error: (err) => {
console.error('Error creating payment:', err);