mirror of
https://github.com/vercel/commerce.git
synced 2025-05-18 23:46:58 +00:00
61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
import getCustomerId from '../../utils/get-customer-id'
|
|
import type { WishlistEndpoint } from '.'
|
|
import { normalizeWishlistItem } from '../../../lib/normalize'
|
|
import removeItemFromWishlistMutation from '../../mutations/removeItemFromWishlist-mutation'
|
|
|
|
// Return wishlist info
|
|
const removeItem: WishlistEndpoint['handlers']['removeItem'] = async ({
|
|
res,
|
|
body: { customerToken, itemId },
|
|
config,
|
|
commerce,
|
|
}) => {
|
|
const token = customerToken ? Buffer.from(customerToken, 'base64').toString('ascii'): null;
|
|
const accessToken = token ? JSON.parse(token).accessToken : null;
|
|
let result: { data?: any } = {}
|
|
let wishlist: any
|
|
|
|
const customerId = customerToken && (await getCustomerId({ customerToken, config }))
|
|
const wishlistName= config.defaultWishlistName
|
|
const wishlistResponse = await commerce.getCustomerWishlist({
|
|
variables: { customerId, wishlistName },
|
|
config,
|
|
})
|
|
wishlist= wishlistResponse?.wishlist
|
|
|
|
if (!wishlist || !itemId) {
|
|
return res.status(400).json({
|
|
data: null,
|
|
errors: [{ message: 'Invalid request' }],
|
|
})
|
|
}
|
|
const removedItem = wishlist?.items?.find(
|
|
(item:any) => {
|
|
return item.product.productCode === itemId;
|
|
}
|
|
);
|
|
|
|
const removeItemFromWishlistResponse = await config.fetch(
|
|
removeItemFromWishlistMutation,
|
|
{
|
|
variables: {
|
|
wishlistId: wishlist?.id,
|
|
wishlistItemId: removedItem?.id
|
|
},
|
|
},
|
|
{ headers: { 'x-vol-user-claims': accessToken } }
|
|
)
|
|
|
|
if(removeItemFromWishlistResponse?.data?.deleteWishlistItem){
|
|
const wishlistResponse= await commerce.getCustomerWishlist({
|
|
variables: { customerId, wishlistName },
|
|
config,
|
|
})
|
|
wishlist= wishlistResponse?.wishlist
|
|
}
|
|
result = { data: {...wishlist, items: wishlist?.items?.map((item:any) => normalizeWishlistItem(item, config))} }
|
|
res.status(200).json({ data: result?.data })
|
|
}
|
|
|
|
export default removeItem
|