5180 fichiers 38.5 Mo 0 téléchargements 528 vues mis à jour il y a 8 heures ui
nitro-v36-with-renderer-v36 / src / components / catalog / views / page / widgets / CatalogPriceDisplayWidgetView.tsx
CatalogPriceDisplayWidgetView.tsx 2.4 Ko Télécharger le fichier
import { FC } from 'react';
import { IPurchasableOffer } from '../../../../../api';
import { getCatalogBundlePrice, ICatalogBundlePrice } from '../../../../../api/catalog/CatalogBundleDiscount';
import { LayoutCurrencyIcon, Text } from '../../../../../common';
import { NativeTextTree } from '../../../../../common/native-text/NativeTextTree';
import { useCatalogBundleDiscountRuleset, useCatalogUiState } from '../../../../../hooks';

interface CatalogPriceDisplayWidgetViewProps {
    offer: IPurchasableOffer;
    separator?: boolean;
}

export const CatalogPriceDisplayWidgetView: FC<CatalogPriceDisplayWidgetViewProps> = (props) => {
    const { offer = null, separator = false } = props;
    const { purchaseOptions = null } = useCatalogUiState();
    const { data: bundleDiscountRuleset = null } = useCatalogBundleDiscountRuleset();
    const { quantity = 1 } = purchaseOptions;

    if (!offer) return null;

    const credits = getCatalogBundlePrice(offer.priceInCredits, quantity, offer.bundlePurchaseAllowed, bundleDiscountRuleset);
    const activityPoints = getCatalogBundlePrice(offer.priceInActivityPoints, quantity, offer.bundlePurchaseAllowed, bundleDiscountRuleset);

    const Price = ({ price }: { price: ICatalogBundlePrice }) => (
        <>
            {price.hasDiscount && <Text className="octane-catalog-standard-price-original">{price.originalPrice}</Text>}
            <Text className="octane-catalog-standard-price-text">{price.price}</Text>
        </>
    );

    return (
        <NativeTextTree>
            <div className="octane-catalog-standard-price-display">
                {offer.priceInCredits > 0 && (
                    <div className="octane-catalog-standard-price-pill is-credits" data-currency-type="-1">
                        <Price price={credits} />
                        <LayoutCurrencyIcon type={-1} />
                    </div>
                )}
                {separator && offer.priceInCredits > 0 && offer.priceInActivityPoints > 0 && <Text className="octane-catalog-standard-price-plus">+</Text>}
                {offer.priceInActivityPoints > 0 && (
                    <div className="octane-catalog-standard-price-pill is-activity-points" data-currency-type={offer.activityPointType}>
                        <Price price={activityPoints} />
                        <LayoutCurrencyIcon type={offer.activityPointType} />
                    </div>
                )}
            </div>
        </NativeTextTree>
    );
};
15Sujets
1Dépôts
20Membres
4En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser