All files / src/hooks useAddToCart.ts

100% Statements 16/16
100% Branches 4/4
100% Functions 2/2
100% Lines 16/16

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          47x 47x 47x   47x 4x 4x 4x 1x 1x     3x 1x 1x   2x 1x   1x   2x        
import { useCartStore } from '../stores/useCartStore';
import { useCustomSnackbar } from './useCustomSnackbar';
import { useTranslation } from 'react-i18next';
 
export function useAddToCart() {
  const addItem = useCartStore.getState().addItem;
  const { notify } = useCustomSnackbar();
  const { t } = useTranslation('cart');
 
  return async (id: string, desiredQty: number, availableQty: number): Promise<boolean> => {
    try {
      const isLocked = useCartStore.getState().isLocked;
      if (isLocked) {
        notify(t('errors.cart_locked'), 'warning');
        return false;
      }
      
      await addItem(id, desiredQty, availableQty);
      notify(t('cart.add_success'), 'success');
      return true;
    } catch (err: any) {
      if (err.message.includes('exceeds')) {
        notify(t('cart.not_enough_stock', { count: availableQty }), 'warning');
      } else {
        notify(t('errors.error_update'), 'error');
      }
      return false;
    }
  };
}