Alessandro Casazza dbecda64c4
fix: Clean order
2022-01-21 11:43:37 +01:00

70 lines
1.9 KiB
TypeScript

import { useMemo } from 'react'
import { SWRHook } from '@commerce/utils/types'
import useCart, { UseCart } from '@commerce/cart/use-cart'
import { Order } from '@commercelayer/js-sdk'
import getCredentials from '../api/utils/getCredentials'
import normalizeLineItems from '../api/utils/normalizeLineItems'
export default useCart as UseCart<typeof handler>
export const handler: SWRHook<any> = {
fetchOptions: {
query: '',
},
async fetcher() {
const id = localStorage.getItem('CL_ORDER_ID') || ''
const credentials = getCredentials()
if (id && credentials.accessToken) {
const clOrder = await Order.withCredentials(credentials)
.includes('lineItems')
.find(id, { rawResponse: true })
const attributes = clOrder.data.attributes
const orderStatus = attributes.status
if (['pending', 'draft'].includes(orderStatus)) {
const lineItems = clOrder?.included
? normalizeLineItems(clOrder?.included)
: []
return {
id,
createdAt: attributes.created_at,
currency: { code: attributes.currency_code },
taxesIncluded: '',
lineItems,
lineItemsSubtotalPrice: '',
subtotalPrice: attributes.subtotal_amount_float,
totalPrice: attributes.total_amount_float,
}
} else if (id) {
localStorage.removeItem('CL_ORDER_ID')
}
}
return {
id: '',
createdAt: '',
currency: { code: '' },
taxesIncluded: '',
lineItems: [],
lineItemsSubtotalPrice: '',
subtotalPrice: 0,
totalPrice: 0,
}
},
useHook:
({ useData }) =>
() => {
const response = useData()
return useMemo(
() =>
Object.create(response, {
isEmpty: {
get() {
return response.data?.lineItems.length === 0
},
enumerable: true,
},
}),
[response]
)
},
}