You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
linking my followed along project here my github repo/utils/cart.js
spots that need help are labeled with // TODO HELP -- *
when running the Woocommerce endpoints in POST MAN, I get desired result of adding to cart, and getting updated cart when running those enpoints in axios in the app I still get null return . I'll link the code snippet below
I've tried
trying browser in incognito
using a different browser
import { getSession, storeSession } from './cart-session';
import { getApiCartConfig } from './cart-api';
import axios from 'axios';
import { WC_CART } from 'utils/endpoints';
import { isEmpty, isArray } from 'lodash';
/**
* Add To Cart Request Handler.
*
* @param {int} productId Product Id.
* @param {int} qty Product Quantity.
* @param {Function} setCart Sets The New Cart Value
* @param {Function} setIsAddedToCart Sets A Boolean Value If Product Is Added To Cart.
* @param {Function} setLoading Sets A Boolean Value For Loading State.
*/
export const addToCart = ( productId, qty = 1, setCart, setIsAddedToCart, setLoading ) => {
const storedSession = getSession();
const addOrViewCartConfig = getApiCartConfig();
setLoading(true);
// TODO HELP -- using enpoints in POST MAN works as it should, but not here
axios.post( WC_CART, {
product_id: productId,
quantity: qty,
},
addOrViewCartConfig,
)
.then( ( res ) => {
console.log('data post: ', res?.data);
if ( isEmpty( storedSession ) ) { storeSession( res?.headers?.[ 'x-wc-session' ] ) }
setIsAddedToCart(true)
setLoading(false)
viewCart( setCart )
} )
.catch( err => {
console.warn( 'err', err )
} );
};
/**
* View Cart Request Handler
*
* @param {Function} setCart Set Cart Function.
* @param {Function} setProcessing Set Processing Function.
*/
export const viewCart = ( setCart, setProcessing = () => {} ) => {
const addOrViewCartConfig = getApiCartConfig();
axios.get( WC_CART, addOrViewCartConfig )
.then( ( res ) => {
// TODO HELP -- This is returning 'null'
console.log('viewCart', res?.data);
const formattedCartData = getFormattedCartData( res?.data ?? [] )
setCart( formattedCartData );
setProcessing(false);
} )
.catch( err => {
console.log( 'err', err );
setProcessing(false);
} );
};
/**
* Update Cart Request Handler
*/
export const updateCart = ( cartKey, qty = 1, setCart, setUpdatingProduct ) => {
const addOrViewCartConfig = getApiCartConfig();
setUpdatingProduct(true);
axios.put( `${WC_CART}${cartKey}`, {
quantity: qty,
}, addOrViewCartConfig )
.then( ( res ) => {
viewCart( setCart, setUpdatingProduct );
} )
.catch( err => {
console.log( 'err', err );
setUpdatingProduct(false);
} );
};
/**
* Delete a cart item Request handler.
*
* Deletes all products in the cart of a
* specific product id ( by its cart key )
* In a cart session, each product maintains
* its data( qty etc ) with a specific cart key
*
* @param {String} cartKey Cart Key.
* @param {Function} setCart SetCart Function.
* @param {Function} setRemovingProduct Set Removing Product Function.
*/
export const deleteCartItem = ( cartKey, setCart, setRemovingProduct ) => {
const addOrViewCartConfig = getApiCartConfig();
setRemovingProduct(true);
axios.delete( `${WC_CART}${cartKey}`, addOrViewCartConfig )
.then( ( res ) => {
viewCart( setCart, setRemovingProduct );
} )
.catch( err => {
console.log( 'err', err );
setRemovingProduct(false);
} );
};
/**
* Clear Cart Request Handler
*
* @param {Function} setCart Set Cart
* @param {Function} setClearCartProcessing Set Clear Cart Processing.
*/
export const clearCart = async ( setCart, setClearCartProcessing ) => {
setClearCartProcessing(true);
const addOrViewCartConfig = getApiCartConfig();
try {
const response = await axios.delete( WC_CART, addOrViewCartConfig );
viewCart( setCart, setClearCartProcessing );
} catch ( err ) {
console.log( 'err', err );
setClearCartProcessing(false);
}
};
/**
* Get Formatted Cart Data.
*
* @param cartData
* @return {null|{cartTotal: {totalQty: number, totalPrice: number}, cartItems: ({length}|*|*[])}}
*/
const getFormattedCartData = ( cartData ) => {
if ( ! cartData.length ) {
return null;
}
const cartTotal = calculateCartQtyAndPrice( cartData || [] );
return {
cartItems: cartData || [],
...cartTotal,
};
};
/**
* Calculate Cart Qty And Price.
*
* @param cartItems
* @return {{totalQty: number, totalPrice: number}}
*/
const calculateCartQtyAndPrice = ( cartItems ) => {
const qtyAndPrice = {
totalQty: 0,
totalPrice: 0,
}
if ( !isArray(cartItems) || !cartItems?.length ) {
return qtyAndPrice;
}
cartItems.forEach( (item, index) => {
qtyAndPrice.totalQty += item?.quantity ?? 0;
qtyAndPrice.totalPrice += item?.line_total ?? 0;
} )
return qtyAndPrice;
}
The text was updated successfully, but these errors were encountered:
wchorski
changed the title
Axios.Post Not working
Axios.Post is not async.
Sep 20, 2022
wchorski
changed the title
Axios.Post is not async.
Axios.Post not adding to cart
Sep 20, 2022
linking my followed along project here
my github repo/
utils/cart.js
spots that need help are labeled with
// TODO HELP -- *
when running the Woocommerce endpoints in POST MAN, I get desired result of adding to cart, and getting updated cart when running those enpoints in axios in the app I still get
null
return . I'll link the code snippet belowI've tried
The text was updated successfully, but these errors were encountered: