mirror of
https://github.com/vercel/commerce.git
synced 2025-06-19 05:31:22 +00:00
69 lines
1.2 KiB
TypeScript
69 lines
1.2 KiB
TypeScript
import { LineItem } from '../types'
|
|
|
|
const api = {
|
|
get: (): LineItem[] => {
|
|
if (!process.browser) {
|
|
return []
|
|
}
|
|
|
|
const raw = localStorage.getItem('cart')
|
|
|
|
if (!raw) {
|
|
return []
|
|
}
|
|
|
|
return JSON.parse(raw) as LineItem[]
|
|
},
|
|
set: (items: LineItem[]) => {
|
|
localStorage.setItem('cart', JSON.stringify(items))
|
|
},
|
|
add: (item: LineItem) => {
|
|
const items = api.get()
|
|
const itemIndex = items.findIndex(
|
|
(_item) => _item.productId === item.productId
|
|
)
|
|
|
|
if (itemIndex >= 0) {
|
|
items[itemIndex].quantity = (items[itemIndex].quantity || 0) + 1
|
|
} else {
|
|
items.push(item)
|
|
}
|
|
|
|
api.set(items)
|
|
|
|
return items
|
|
},
|
|
remove: (item: LineItem) => {
|
|
const items = api.get()
|
|
const itemIndex = items.findIndex(
|
|
(_item) => _item.productId === item.productId
|
|
)
|
|
|
|
if (itemIndex >= 0) {
|
|
items.splice(itemIndex, 1)
|
|
}
|
|
|
|
api.set(items)
|
|
|
|
return items
|
|
},
|
|
update: (item: LineItem) => {
|
|
const items = api.get()
|
|
const itemIndex = items.findIndex(
|
|
(_item) => _item.productId === item.productId
|
|
)
|
|
|
|
if (itemIndex >= 0) {
|
|
items[itemIndex] = item
|
|
} else {
|
|
items.push(item)
|
|
}
|
|
|
|
api.set(items)
|
|
|
|
return items
|
|
},
|
|
}
|
|
|
|
export default api
|