import odooApi from "../api/odooApi" import { getAuth } from "./auth" /** * Retrieves cart data from localStorage, if available. * * @returns {Object} - The cart data as an object, or an empty object if not found. */ const getCart = () => { if (typeof window !== 'undefined' && window.localStorage) { const cart = localStorage.getItem('cart') if (cart) return JSON.parse(cart) } return {} } /** * Saves cart data to localStorage, if available. * * @param {Object} cart - The cart data to be saved. * @returns {boolean} - Returns `true` if cart data is saved successfully, `false` otherwise. */ const setCart = (cart) => { if (typeof window !== 'undefined' && window.localStorage) { const storageChangeEvent = new Event('localStorageChange') localStorage.setItem('cart', JSON.stringify(cart)) window.dispatchEvent(storageChangeEvent) return true } return false } const addCart = async (product_id, qty, selected, programLineId = null, source) => { const data = { 'product_id' : product_id, 'qty' : qty, 'selected' : selected, 'program_line_id' : programLineId } if(source){ data.source = source } const id = getAuth()?.id const cartAdd = await odooApi( 'POST', `/api/v1/user/${id}/cart/create-or-update`, data ) return true } const getCartApi = async () => { const id = getAuth()?.id const cart = await odooApi('GET', `/api/v1/user/${id}/cart`) return cart } const getCountCart = async () => { const id = getAuth()?.id if(id){ const cart = await odooApi('GET', `/api/v1/user/${id}/cart/count`) return cart } return } const deleteCart = async (product_id) => { const id = getAuth()?.id const cartDelete = await odooApi( 'DELETE', `/api/v1/user/${id}/cart?product_ids=${product_id}` ) } /** * Retrieves an item from the cart data based on the given product ID. * * @param {Object} options - The options object containing the productId. * @param {string} options.productId - The ID of the product to be retrieved from the cart. * @returns {Object} - Returns the item object from the cart data, or `undefined` if not found. */ const getItemCart = ({ productId }) => { let cart = getCart() return cart[productId] } /** * Updates an item in the cart data with the given productId, quantity, and selected status. * * @param {Object} options - The options object containing the productId, quantity, and selected status. * @param {string} options.productId - The ID of the product to be updated in the cart. * @param {number} options.quantity - The new quantity of the product in the cart. * @param {boolean} [options.selected=false] - The new selected status of the product in the cart. Default is `false`. * @returns {boolean} - Returns `true`. */ const updateItemCart = async ({ productId, quantity, selected = false , programLineId, source}) => { let cart = getCart() quantity = parseInt(quantity) cart[productId] = { productId, quantity, selected } setCart(cart) await addCart(productId, quantity, selected, programLineId, source) return true } /** * Deletes an item from the cart data with the given productId. * * @param {Object} options - The options object containing the productId. * @param {string} options.productId - The ID of the product to be deleted from the cart. * @returns {boolean} - Returns `true`. */ const deleteItemCart = ({ productId }) => { let cart = getCart() delete cart[productId] deleteCart(productId) setCart(cart) return true } export { getCart, getItemCart, updateItemCart, deleteItemCart, addCart, getCartApi, getCountCart}