This commit is contained in:
2025-10-09 09:02:15 +07:00
parent f7c96a0258
commit 4b11ee2180
4 changed files with 50 additions and 5 deletions

View File

@@ -1,12 +1,27 @@
import { createContext } from 'react' import { createContext, useEffect } from 'react'
import RouterSetup from './RouterSetup' import RouterSetup from './RouterSetup'
import { useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
import type { StoreType } from './stores' import type { StoreType } from './stores'
import Loading from './components/Loading' import Loading from './components/Loading'
import { Apis } from './apis'
import { userAction } from './stores/slices/user.slice'
export default function App() { export default function App() {
const userStore = useSelector((store: StoreType) => store.user) const userStore = useSelector((store: StoreType) => store.user)
const dipatch = useDispatch()
useEffect(() => {
if(userStore.data && !userStore.loading) {
try {
Apis.cart.getCartByUserId(userStore.data.id)
.then(res => {
dipatch(userAction.initCartData(res))
})
}catch(err) {
}
}
}, [userStore.data, userStore.loading])
return ( return (
<> <>
{ {

View File

@@ -8,10 +8,13 @@ import UserManagement from './pages/admin/User/UserManagement'
import CategoryManagement from './pages/admin/Category/CategoryManagement' import CategoryManagement from './pages/admin/Category/CategoryManagement'
import ProductManagement from './pages/admin/Product/ProductManagement' import ProductManagement from './pages/admin/Product/ProductManagement'
import CreateProductForm from './pages/admin/Product/components/CreateProductForm' import CreateProductForm from './pages/admin/Product/components/CreateProductForm'
import Cart from './pages/home/cart/Cart'
export default function RouterSetup() { export default function RouterSetup() {
return <Routes> return <Routes>
<Route path='/' element={<Home />}></Route> <Route path='/' element={<Home />}>
<Route path='cart' element={<Cart />}></Route>
</Route>
<Route path='/auth' element={<Auth />}></Route> <Route path='/auth' element={<Auth />}></Route>
<Route path='admin' element={ <Route path='admin' element={
<ProtectedAdmin> <ProtectedAdmin>

View File

@@ -0,0 +1,22 @@
import React from 'react'
import { useSelector } from 'react-redux'
import type { StoreType } from '../../../stores'
import type { CartItem } from '../../../types/cart.type'
export default function Cart() {
const userStore = useSelector((store: StoreType) => store.user)
return (
<div>
Cart Page
<ul>
{
userStore.cart?.map((item: CartItem) => {
return <li key={item.id}>{item.productId} - {item.quantity}</li>
})
}
</ul>
</div>
)
}

View File

@@ -1,16 +1,19 @@
import { createAsyncThunk, createSlice } from "@reduxjs/toolkit"; import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
import type { User } from "../../types/user.type"; import type { User } from "../../types/user.type";
import { Apis } from "../../apis"; import { Apis } from "../../apis";
import type { CartItem } from "../../types/cart.type";
interface UserState { interface UserState {
data: User | null, data: User | null,
loading: boolean; loading: boolean;
cart: CartItem[] | []
} }
const InitUserState: UserState = { const InitUserState: UserState = {
data: null, data: null,
loading: false loading: false,
cart: []
} }
@@ -18,7 +21,9 @@ const userSlice = createSlice({
name: "user", name: "user",
initialState: InitUserState, initialState: InitUserState,
reducers: { reducers: {
initCartData: (state, action) =>{
state.cart = action.payload
}
}, },
extraReducers: (bd) => { extraReducers: (bd) => {
bd.addCase(fetchUserData.pending, (state, action) => { bd.addCase(fetchUserData.pending, (state, action) => {