All files / src/components/Basket BasketCode.tsx

6.9% Statements 2/29
0% Branches 0/28
0% Functions 0/6
6.9% Lines 2/29

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  4x               4x                                                                                                                        
import React, { FC, useEffect, useState } from 'react';
const styles = require('./Basket.module.css')
import { Button } from 'ag-ems-ui-library';
import { useCartContext } from '../../contexts';
import { useTranslation } from 'react-i18next';
 
export const BasketCode: FC<{
  classes?: string;
  setPreloader?: (flag: boolean) => void;
}> = ({ classes, setPreloader }) => {
  const { t } = useTranslation();
  const { applyCoupon, removeCoupon, coupons } = useCartContext();
  const [code, setCode] = useState('');
  const [isApplied, setIsApplied] = useState(false);
  const [errorMessage, setErrorMessage] = useState('');
 
  const onTypeCode = e => {
    setCode(e.target.value);
  }
 
  useEffect(() => {
    if (coupons && coupons.length) {
      setCode(coupons[0].code);
      setIsApplied(true);
    } else {
      setCode('');
      setIsApplied(false);
    }
  }, [coupons]);
 
  const onApply = evt => {
    evt.preventDefault();
    setErrorMessage('');
    setPreloader && setPreloader(true);
    if (isApplied) {
      removeCoupon().then(({ errors }) => {
        setPreloader && setPreloader(false);
        if (errors && errors.length) {
          setErrorMessage(errors[0].message);
        }
      });
    } else {
      applyCoupon(code).then(({ errors }) => {
        setPreloader && setPreloader(false);
        if (errors && errors.length) {
          setErrorMessage(errors[0].message);
        }
      });
    }
  }
 
  return (
    <form className={`${styles.BasketCode} ${classes ? classes : ''}`} onSubmit={onApply}>
      <div className={styles.BasketCodeField}>
        <input
          type="text"
          value={code}
          placeholder={`${t('checkout.enterCode')} (${t('optional')})`}
          disabled={isApplied}
          onChange={onTypeCode}
        />
        {code.trim().length
          ? <button type="submit">{isApplied ? t('remove') : t('apply')}</button>
          : null
        }
      </div>
      {errorMessage && <p className="errorText">{errorMessage}</p>}
    </form>
  );
}