From 68503ea01d03759600a462918512d9a32ebcc407 Mon Sep 17 00:00:00 2001 From: nobswebdev Date: Mon, 7 Sep 2026 12:28:14 +0200 Subject: [PATCH] Add payment method icons to storefront navbar and cart. Show BTC/XMR icons beside exchange rates and pay buttons. --- backend/src/consts/paymentMethodIconUrl.ts | 6 +++++ .../controllers/StorefrontCartController.ts | 4 +++- .../storefrontCore/public/css/storefront.css | 22 ++++++++++++++++++ .../modules/storefrontCore/public/img/btc.png | Bin 0 -> 16165 bytes .../modules/storefrontCore/public/img/xmr.png | Bin 0 -> 13153 bytes .../StorefrontShopViewService.spec.ts | 4 ++-- .../services/StorefrontShopViewService.ts | 6 +++-- .../types/StorefrontCryptoRate.ts | 3 ++- .../views/partials/cart-totals-panel.hbs | 9 ++++++- .../views/partials/shop-nav.hbs | 11 ++++++++- 10 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 backend/src/consts/paymentMethodIconUrl.ts create mode 100644 backend/src/modules/storefrontCore/public/img/btc.png create mode 100644 backend/src/modules/storefrontCore/public/img/xmr.png diff --git a/backend/src/consts/paymentMethodIconUrl.ts b/backend/src/consts/paymentMethodIconUrl.ts new file mode 100644 index 0000000..1128fe1 --- /dev/null +++ b/backend/src/consts/paymentMethodIconUrl.ts @@ -0,0 +1,6 @@ +import { PaymentMethod } from '../modules/payment/types/PaymentMethod'; + +export const paymentMethodIconUrl: Record = { + [PaymentMethod.Xmr]: '/shop/assets/img/xmr.png', + [PaymentMethod.Btc]: '/shop/assets/img/btc.png' +}; diff --git a/backend/src/modules/storefrontCart/controllers/StorefrontCartController.ts b/backend/src/modules/storefrontCart/controllers/StorefrontCartController.ts index 7628aee..e1d79ad 100644 --- a/backend/src/modules/storefrontCart/controllers/StorefrontCartController.ts +++ b/backend/src/modules/storefrontCart/controllers/StorefrontCartController.ts @@ -4,6 +4,7 @@ import { Throttle } from '@nestjs/throttler'; import type { Request, Response } from 'express'; import { throttleProfiles } from '../../../config/throttleProfiles'; import type { Config } from '../../../types/Config'; +import { paymentMethodIconUrl } from '../../../consts/paymentMethodIconUrl'; import { paymentMethodLabel } from '../../../consts/paymentMethodLabel'; import { StorefrontExceptionFilter } from '../../storefrontCore/filters/StorefrontExceptionFilter'; import { StorefrontCartCookieService } from '../../storefrontCore/services/StorefrontCartCookieService'; @@ -70,7 +71,8 @@ export class StorefrontCartController { const paymentMethods = enabledPaymentMethods.map(paymentMethod => ({ paymentMethod, - paymentMethodLabel: paymentMethodLabel[paymentMethod] + paymentMethodLabel: paymentMethodLabel[paymentMethod], + iconUrl: paymentMethodIconUrl[paymentMethod] })); return res.render('cart-summary', { diff --git a/backend/src/modules/storefrontCore/public/css/storefront.css b/backend/src/modules/storefrontCore/public/css/storefront.css index afa33dd..730e251 100644 --- a/backend/src/modules/storefrontCore/public/css/storefront.css +++ b/backend/src/modules/storefrontCore/public/css/storefront.css @@ -355,9 +355,31 @@ a:hover { gap: var(--sf-space-1); } +.sf-rates { + display: flex; + flex-wrap: wrap; + gap: var(--sf-space-3); + align-items: center; +} + .sf-rate { + display: inline-flex; + align-items: center; + gap: var(--sf-space-1); font-size: 0.95rem; color: var(--sf-text-muted); + white-space: nowrap; +} + +.sf-crypto-icon { + width: 1.25rem; + height: 1.25rem; + object-fit: contain; + flex-shrink: 0; +} + +.sf-btn--pay { + gap: var(--sf-space-2); } .sf-category-nav { diff --git a/backend/src/modules/storefrontCore/public/img/btc.png b/backend/src/modules/storefrontCore/public/img/btc.png new file mode 100644 index 0000000000000000000000000000000000000000..4e2d591de8ebfd0316b6e2c8ab7a11085b84003c GIT binary patch literal 16165 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 e!NJMW*2?Gqf5Sa;mjdJlC|#D(EkH|M<@FL literal 0 HcmV?d00001 diff --git a/backend/src/modules/storefrontCore/public/img/xmr.png b/backend/src/modules/storefrontCore/public/img/xmr.png new file mode 100644 index 0000000000000000000000000000000000000000..95baa7b89988e904d91d9eff51730d3b3e1cd88a GIT binary patch literal 13153 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 { feedback: { type: 'success', text: 'Added to cart' }, shopFiatCurrency: 'USD', cryptoRates: [ - { cryptoCurrency: 'XMR', fiatPerCrypto: 200 }, - { cryptoCurrency: 'BTC', fiatPerCrypto: 80_000 } + { paymentLabel: 'XMR', fiatPerCrypto: 200, iconUrl: '/shop/assets/img/xmr.png' }, + { paymentLabel: 'BTC', fiatPerCrypto: 80_000, iconUrl: '/shop/assets/img/btc.png' } ], logoUrl: '/uploads/logo.png', faviconUrl: '/uploads/favicon.ico', diff --git a/backend/src/modules/storefrontCore/services/StorefrontShopViewService.ts b/backend/src/modules/storefrontCore/services/StorefrontShopViewService.ts index 2431836..08f5d62 100644 --- a/backend/src/modules/storefrontCore/services/StorefrontShopViewService.ts +++ b/backend/src/modules/storefrontCore/services/StorefrontShopViewService.ts @@ -8,6 +8,7 @@ import { formatShortOrderId } from '../../../utils/order/formatShortOrderId'; import { toAbsoluteUrl } from '../../../utils/toAbsoluteUrl'; import { ShopSettingsService } from '../../shopSettings/services/ShopSettingsService'; import { ExchangeRateService } from '../../exchangeRate/services/ExchangeRateService'; +import { paymentMethodIconUrl } from '../../../consts/paymentMethodIconUrl'; import { paymentMethodLabel } from '../../../consts/paymentMethodLabel'; import { PaymentMethod } from '../../payment/types/PaymentMethod'; import type { AuthorizedOrderNavItem } from '../types/AuthorizedOrderNavItem'; @@ -145,8 +146,9 @@ export class StorefrontShopViewService { return [ { - cryptoCurrency: paymentMethodLabel[paymentMethod], - fiatPerCrypto + paymentLabel: paymentMethodLabel[paymentMethod], + fiatPerCrypto, + iconUrl: paymentMethodIconUrl[paymentMethod] } ]; }); diff --git a/backend/src/modules/storefrontCore/types/StorefrontCryptoRate.ts b/backend/src/modules/storefrontCore/types/StorefrontCryptoRate.ts index 769e126..a39ab79 100644 --- a/backend/src/modules/storefrontCore/types/StorefrontCryptoRate.ts +++ b/backend/src/modules/storefrontCore/types/StorefrontCryptoRate.ts @@ -1,4 +1,5 @@ export type StorefrontCryptoRate = { - cryptoCurrency: string; + paymentLabel: string; fiatPerCrypto: number; + iconUrl: string; }; diff --git a/backend/src/modules/storefrontCore/views/partials/cart-totals-panel.hbs b/backend/src/modules/storefrontCore/views/partials/cart-totals-panel.hbs index 19ca943..bf1519e 100644 --- a/backend/src/modules/storefrontCore/views/partials/cart-totals-panel.hbs +++ b/backend/src/modules/storefrontCore/views/partials/cart-totals-panel.hbs @@ -80,9 +80,16 @@ type='submit' name='paymentMethod' value='{{paymentMethod}}' - class='sf-btn sf-btn--primary' + class='sf-btn sf-btn--primary sf-btn--pay' > Pay with {{paymentMethodLabel}} + {{> storefront-image + class='sf-crypto-icon' + src=iconUrl + alt='' + width='20' + height='20' + }} {{/each}} diff --git a/backend/src/modules/storefrontCore/views/partials/shop-nav.hbs b/backend/src/modules/storefrontCore/views/partials/shop-nav.hbs index 90203c7..b5cedcc 100644 --- a/backend/src/modules/storefrontCore/views/partials/shop-nav.hbs +++ b/backend/src/modules/storefrontCore/views/partials/shop-nav.hbs @@ -32,7 +32,16 @@ {{#if cryptoRates.length}}
{{#each cryptoRates}} -
1 {{cryptoCurrency}} = {{fiatPerCrypto}} {{../shopFiatCurrency}}
+ + {{> storefront-image + class='sf-crypto-icon' + src=iconUrl + alt=paymentLabel + width='20' + height='20' + }} + {{fiatPerCrypto}} {{../shopFiatCurrency}} + {{/each}}
{{/if}}