From f3751cd389d0d88eaf920fef675a79c32a0a8cca Mon Sep 17 00:00:00 2001 From: goncy Date: Wed, 5 May 2021 13:03:24 -0300 Subject: [PATCH] Checkpoint --- framework/csv/api/cart.ts | 68 +++++++++++++++++++++++++++++ framework/csv/cart/use-add-item.tsx | 8 +++- framework/csv/cart/use-cart.tsx | 8 +++- 3 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 framework/csv/api/cart.ts diff --git a/framework/csv/api/cart.ts b/framework/csv/api/cart.ts new file mode 100644 index 000000000..7d5cf5ad6 --- /dev/null +++ b/framework/csv/api/cart.ts @@ -0,0 +1,68 @@ +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 diff --git a/framework/csv/cart/use-add-item.tsx b/framework/csv/cart/use-add-item.tsx index 9395a9d99..c5464b7c5 100644 --- a/framework/csv/cart/use-add-item.tsx +++ b/framework/csv/cart/use-add-item.tsx @@ -1,7 +1,11 @@ -import { Cart, CartItemBody } from '../types' +import { Cart, CartItemBody, LineItem } from '../types' + +import api from '../api/cart' export default function useAddItem() { - return (_item: CartItemBody): Cart => { + return (item: CartItemBody): Cart => { + api.add(item as LineItem) + return (null as unknown) as Cart } } diff --git a/framework/csv/cart/use-cart.tsx b/framework/csv/cart/use-cart.tsx index 8660d3274..9624886a5 100644 --- a/framework/csv/cart/use-cart.tsx +++ b/framework/csv/cart/use-cart.tsx @@ -1,4 +1,6 @@ -import { Cart } from '@framework/types' +import { Cart } from '../types' + +import api from '../api/cart' export interface CartResponse { data: Cart | null @@ -7,6 +9,10 @@ export interface CartResponse { } export default function useCart(): CartResponse { + const cart = api.get() + + console.log({ cart }) + return { data: null, isLoading: false,