From 406890c2aabdcd08cfce9eddfd7dc5d5bc3874b5 Mon Sep 17 00:00:00 2001 From: ImAlpha Date: Sun, 1 Dec 2024 00:06:30 -0800 Subject: [PATCH] Removed redux, swapped to Zustand instead --- frontend/bun.lockb | Bin 201003 -> 203484 bytes frontend/package.json | 6 +- frontend/src/app/StoreProvider.tsx | 18 -- frontend/src/app/layout.tsx | 17 +- frontend/src/app/redux/CartReducer.ts | 42 ----- frontend/src/app/redux/slice.ts | 37 ----- frontend/src/app/routes/cart/page.tsx | 21 +++ frontend/src/app/routes/checkout/page.tsx | 0 .../app/routes/payment-confirmation/page.tsx | 0 .../components/CartTab/AddToCartButton.tsx | 26 +++ .../src/components/CartTab/CartProvider.tsx | 16 ++ .../src/components/CartTab/CartSidebar.tsx | 154 ++++++++++++++++++ frontend/src/components/CartTab/CartTab.tsx | 154 +++++++++--------- frontend/src/components/Navbar/Navbar.tsx | 35 ++-- .../components/ProductPage/ProductPage.tsx | 33 ++-- frontend/src/hooks/use-cart.tsx | 0 frontend/src/lib/Store.ts | 28 ---- frontend/src/lib/store/cart-store.ts | 75 +++++++++ frontend/src/lib/stripe/checkout-form.tsx | 73 +++++++++ frontend/src/lib/stripe/checkout.tsx | 38 +++++ frontend/src/lib/stripe/types.ts | 0 frontend/src/lib/types/product.ts | 8 + frontend/src/store/cartStore.ts | 32 ++++ frontend/src/types/product.ts | 18 ++ frontend/tsconfig.json | 5 +- lib/store/cart-store.ts | 7 + 26 files changed, 597 insertions(+), 246 deletions(-) delete mode 100644 frontend/src/app/StoreProvider.tsx delete mode 100644 frontend/src/app/redux/CartReducer.ts delete mode 100644 frontend/src/app/redux/slice.ts create mode 100644 frontend/src/app/routes/cart/page.tsx create mode 100644 frontend/src/app/routes/checkout/page.tsx create mode 100644 frontend/src/app/routes/payment-confirmation/page.tsx create mode 100644 frontend/src/components/CartTab/AddToCartButton.tsx create mode 100644 frontend/src/components/CartTab/CartProvider.tsx create mode 100644 frontend/src/components/CartTab/CartSidebar.tsx create mode 100644 frontend/src/hooks/use-cart.tsx delete mode 100644 frontend/src/lib/Store.ts create mode 100644 frontend/src/lib/store/cart-store.ts create mode 100644 frontend/src/lib/stripe/checkout-form.tsx create mode 100644 frontend/src/lib/stripe/checkout.tsx create mode 100644 frontend/src/lib/stripe/types.ts create mode 100644 frontend/src/lib/types/product.ts create mode 100644 frontend/src/store/cartStore.ts create mode 100644 frontend/src/types/product.ts create mode 100644 lib/store/cart-store.ts diff --git a/frontend/bun.lockb b/frontend/bun.lockb index 9a6296266164dcdae9a0b1da72758624f0b35a70..bbbc0102b66592e72fbe6f10fb600393582fd9e0 100755 GIT binary patch delta 40272 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 delta 38835 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 Om_rt++Sl}X^#1^V)^f%G diff --git a/frontend/package.json b/frontend/package.json index 7b77491..ca82789 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,6 +14,9 @@ "@react-email/components": "^0.0.22", "@react-email/tailwind": "^0.0.19", "@reduxjs/toolkit": "^2.3.0", + "@stripe/react-stripe-js": "^3.0.0", + "@stripe/stripe-js": "^5.2.0", + "@types/stripe": "^8.0.417", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "dotenv": "^16.4.5", @@ -34,7 +37,8 @@ "sharp": "^0.33.5", "tailwind-merge": "^2.5.2", "tailwindcss-animate": "^1.0.7", - "usehooks-ts": "^3.1.0" + "usehooks-ts": "^3.1.0", + "zustand": "^5.0.1" }, "devDependencies": { "@types/node": "^20.16.1", diff --git a/frontend/src/app/StoreProvider.tsx b/frontend/src/app/StoreProvider.tsx deleted file mode 100644 index 13ccb28..0000000 --- a/frontend/src/app/StoreProvider.tsx +++ /dev/null @@ -1,18 +0,0 @@ -'use client' -import { useRef } from 'react' -import { Provider } from 'react-redux' -import { makeStore, AppStore } from '../lib/Store' - -export default function StoreProvider({ - children -}: { - children: React.ReactNode -}) { - const storeRef = useRef() - if (!storeRef.current) { - // Create the store instance the first time this renders - storeRef.current = makeStore() - } - - return {children} -} \ No newline at end of file diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index d03158b..3d7f4db 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -3,8 +3,7 @@ import { Inter } from "next/font/google"; import "./globals.css"; import Navbar from "@/components/Navbar/Navbar"; import Footer from "@/components/Footer/Footer"; -import StoreProvider from "./StoreProvider"; - +import { CartProvider } from '@/components/CartTab/CartProvider'; const inter = Inter({ subsets: ["latin"] }); @@ -19,14 +18,16 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - - - + + + {children}