5180 fichiers 38.5 Mo 0 téléchargements 553 vues mis à jour il y a 8 heures ui
nitro-v36-with-renderer-v36 / src / components / catalog / views / page / common / CatalogRedeemVoucherView.tsx
CatalogRedeemVoucherView.tsx 2.5 Ko Télécharger le fichier
import { RedeemVoucherMessageComposer, VoucherRedeemErrorMessageEvent, VoucherRedeemOkMessageEvent } from '@octane/renderer';
import { FC, useState } from 'react';
import { LocalizeText, SendMessageComposer } from '../../../../../api';
import { Button } from '../../../../../common';
import { NativeTextTree } from '../../../../../common/native-text/NativeTextTree';
import { useMessageEvent, useNotification } from '../../../../../hooks';
import { OctaneInput } from '../../../../../layout';

export interface CatalogRedeemVoucherViewProps {
    text: string;
}

export const CatalogRedeemVoucherView: FC<CatalogRedeemVoucherViewProps> = (props) => {
    const { text = null } = props;
    const [voucher, setVoucher] = useState<string>('');
    const [isWaiting, setIsWaiting] = useState(false);
    const { simpleAlert = null } = useNotification();

    const redeemVoucher = () => {
        if (!voucher || !voucher.length || isWaiting) return;

        SendMessageComposer(new RedeemVoucherMessageComposer(voucher));

        setIsWaiting(true);
    };

    useMessageEvent<VoucherRedeemOkMessageEvent>(VoucherRedeemOkMessageEvent, (event) => {
        const parser = event.getParser();

        let message = LocalizeText('catalog.alert.voucherredeem.ok.description');

        if (parser.productName)
            message = LocalizeText(
                'catalog.alert.voucherredeem.ok.description.furni',
                ['productName', 'productDescription'],
                [parser.productName, parser.productDescription]
            );

        simpleAlert(message, null, null, null, LocalizeText('catalog.alert.voucherredeem.ok.title'));

        setIsWaiting(false);
        setVoucher('');
    });

    useMessageEvent<VoucherRedeemErrorMessageEvent>(VoucherRedeemErrorMessageEvent, (event) => {
        const parser = event.getParser();

        simpleAlert(
            LocalizeText(`catalog.alert.voucherredeem.error.description.${parser.errorCode}`),
            null,
            null,
            null,
            LocalizeText('catalog.alert.voucherredeem.error.title')
        );

        setIsWaiting(false);
    });

    return (
        <NativeTextTree>
            <div className="flex gap-1">
                <OctaneInput placeholder={text} value={voucher} onChange={(event) => setVoucher(event.target.value)} />
                <Button classNames={['octane-catalog-redeem-button']} disabled={isWaiting} onClick={redeemVoucher}>
                    {LocalizeText('redeem')}
                </Button>
            </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