All files / app/cart AppliedRedeemables.tsx

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114  8x   8x 8x   8x               8x                                                           8x                                                                 8x                                                                     8x  
import { Coupon, GiftCertificate } from '@bigcommerce/checkout-sdk';
import React, { memo, useCallback, FunctionComponent } from 'react';
 
import { AppliedCoupon } from '../coupon';
import { AppliedGiftCertificate } from '../giftCertificate';
 
import AppliedRedeemable from './AppliedRedeemable';
 
interface AppliedCouponProps {
    coupon: Coupon;
    isRemoving?: boolean;
    onRemoved(code: string): void;
}
 
const AppliedCouponChecklistItem: FunctionComponent<AppliedCouponProps> = ({
    coupon,
    onRemoved,
    isRemoving = false,
}) => {
    const handleRemove = useCallback(() => {
        onRemoved(coupon.code);
    }, [
        coupon,
        onRemoved,
    ]);
 
    return (
        <li className="form-checklist-item optimizedCheckout-form-checklist-item">
            <AppliedRedeemable
                isRemoving={ isRemoving }
                onRemove={ handleRemove }
            >
                <AppliedCoupon coupon={ coupon } />
            </AppliedRedeemable>
        </li>
    );
};
 
interface AppliedGiftCertificateProps {
    giftCertificate: GiftCertificate;
    isRemoving?: boolean;
    onRemoved(code: string): void;
}
 
const AppliedGiftCertificateChecklistItem: FunctionComponent<AppliedGiftCertificateProps> = ({
    giftCertificate,
    onRemoved,
    isRemoving = false,
}) => {
    const handleRemove = useCallback(() => {
        onRemoved(giftCertificate.code);
    }, [
        giftCertificate,
        onRemoved,
    ]);
 
    return (
        <li className="form-checklist-item optimizedCheckout-form-checklist-item">
            <AppliedRedeemable
                isRemoving={ isRemoving }
                onRemove={ handleRemove }
            >
                <AppliedGiftCertificate giftCertificate={ giftCertificate } />
            </AppliedRedeemable>
        </li>
    );
};
 
export interface AppliedRedeemablesProps {
    coupons?: Coupon[];
    giftCertificates?: GiftCertificate[];
    isRemovingGiftCertificate?: boolean;
    isRemovingCoupon?: boolean;
    onRemovedCoupon(code: string): void;
    onRemovedGiftCertificate(code: string): void;
}
 
const AppliedRedeemables: FunctionComponent<AppliedRedeemablesProps> = ({
    coupons = [],
    giftCertificates = [],
    isRemovingCoupon = false,
    isRemovingGiftCertificate = false,
    onRemovedCoupon,
    onRemovedGiftCertificate,
}) => {
    if (!coupons.length && !giftCertificates.length) {
        return null;
    }
 
    return (
        <ul className="form-checklist optimizedCheckout-form-checklist" data-test="redeemables-list">
            { coupons.map(coupon => (
                <AppliedCouponChecklistItem
                    coupon={ coupon }
                    isRemoving={ isRemovingCoupon }
                    key={ coupon.code }
                    onRemoved={ onRemovedCoupon }
                />
            )) }
 
            { giftCertificates.map(giftCertificate => (
                <AppliedGiftCertificateChecklistItem
                    giftCertificate={ giftCertificate }
                    isRemoving={ isRemovingGiftCertificate }
                    key={ giftCertificate.code }
                    onRemoved={ onRemovedGiftCertificate }
                />
            )) }
        </ul>
    );
};
 
export default memo(AppliedRedeemables);