{"version":3,"sources":["app/models/Pagination.ts","app/util/util.ts","features/basket/BasketSlice.ts","features/account/accountSlice.ts","features/catalog/CatalogSlice.ts","features/contact/counterSlice.ts","app/store/configureStore.ts","app/api/agent.ts","features/about/AboutPage.tsx","app/components/AppPagination.tsx","app/components/CheckButtons.tsx","app/components/RadioButtonGroup.tsx","app/layout/LoadingComponent.tsx","features/catalog/ProductCard.tsx","features/catalog/ProductCardSkeleton.tsx","features/catalog/ProductList.tsx","features/catalog/productSearch.tsx","features/catalog/Catalog.tsx","app/errors/NotFound.tsx","features/catalog/ProductDetails.tsx","features/contact/ContactPage.tsx","features/home/HomePage.tsx","app/layout/SignInMenu.tsx","app/layout/Header.tsx","app/errors/Server.tsx","features/Tests/Test.tsx","features/basket/BasketTable.tsx","features/basket/BasketSummary.tsx","features/basket/BasketPage.tsx","features/account/Login.tsx","features/account/Register.tsx","app/layout/PrivateRoute.tsx","features/orders/Orders.tsx","features/orders/OrderDetail.tsx","app/components/AppTextInput.tsx","app/components/AppCheckbox.tsx","features/checkout/AddressForm.tsx","features/checkout/StripeInput.tsx","features/checkout/PaymentForm.tsx","features/checkout/Review.tsx","features/checkout/CheckoutValidation.ts","features/checkout/CheckoutPage.tsx","features/checkout/CheckoutWrapper.tsx","app/layout/App.tsx","reportWebVitals.ts","index.tsx"],"names":["PaginatedResponse","items","metaData","this","currencyFormatter","price","toFixed","fetchBasketAsync","createAsyncThunk","_","thunkAPI","a","agent","Basket","get","rejectWithValue","error","data","condition","key","b","document","cookie","match","pop","getCookie","addBasketItemAsync","productId","quantity","addItem","removeBasketItemAsync","removeItem","basketSlice","createSlice","name","initialState","basket","status","reducers","setBasket","state","action","payload","clearBasket","itemIndex","findIndex","i","undefined","splice","extraReducers","builder","addCase","pending","meta","arg","fulfilled","rejected","console","log","addMatcher","isAnyOf","actions","signInUser","Account","login","userDto","user","dispatch","localStorage","setItem","JSON","stringify","fetchCurrentUser","setUser","parse","getItem","currentUser","accountSlice","signOut","history","push","toast","productsAdapter","createEntityAdapter","getAxiosParams","productParams","params","URLSearchParams","append","pageNumber","toString","pageSize","orderBy","searchTerm","brands","length","types","fetchProductsAsync","getState","catalog","productsParams","Catalog","list","response","setMetaData","fetchProductAsync","details","fetchFilters","CatalogSlice","getInitialState","productsLoaded","filtersLoaded","setProductParams","setPageNumber","resetProductParams","setAll","upsertOne","productSelectors","getSelectors","counterSlice","title","school","increment","decrement","store","configureStore","reducer","counter","account","useAppDispatch","useDispatch","useAppSelector","useSelector","axios","defaults","baseURL","process","withCredentials","responseBody","interceptors","request","use","config","token","headers","Authorization","pagination","errors","modelStateError","flat","pathname","Promise","reject","requests","url","then","body","post","delete","id","TestErrors","get400Error","get401Error","get404Error","get500Error","getValidationError","values","register","fetchAddress","Orders","fetch","create","Payments","createPaymentIntent","AboutPage","useState","validationErrors","setValidationErrors","Container","Typography","variant","gutterBottom","ButtonGroup","fullWidth","Button","onClick","catch","component","Link","to","Alert","severity","AlertTitle","List","map","ListItem","ListItemText","AppPagination","onPageChange","currentPage","totalCount","totalPages","Box","display","justifyContent","Pagination","color","size","count","page","onChange","e","CheckBoxButtons","checked","checkedItems","setCheckedItem","FormGroup","item","FormControlLabel","control","Checkbox","indexOf","value","newChecked","filter","handleChecked","label","RadioButtongroup","options","selectedValue","FormControl","RadioGroup","Radio","LoadingComponent","message","Backdrop","open","invisible","alignItems","height","CircularProgress","sx","position","top","ProductCard","product","Card","CardHeader","avatar","Avatar","bgcolor","charAt","toUpperCase","titleTypographyProps","fontWeight","CardMedia","backgroundSize","image","pictureUrl","CardContent","brand","type","CardActions","LoadingButton","loading","includes","ProductCardSkeleton","Grid","xs","Skeleton","animation","width","style","marginBottom","ProductList","products","container","spacing","ProductSearch","setSearchTerm","debouncedSearch","debounce","event","target","TextField","sortOptions","selectAll","useEffect","Paper","mb","p","NotFound","Divider","ProductDetails","useParams","selectById","productStatus","setQuantity","find","parseInt","src","alt","TableContainer","Table","TableBody","TableRow","TableCell","description","quantityInStock","disabled","updatedQuantity","ContactPage","HomePage","dots","infinite","speed","slidesToShow","slidesToScroll","maxHeight","SignedInMenu","React","anchorEl","setAnchorEl","Boolean","handleClose","currentTarget","typography","email","Menu","onClose","TransitionComponent","Fade","MenuItem","midLinks","path","rightLinks","navStyles","textDecoration","Header","darkMode","handleThemeChange","itemCount","reduce","sum","AppBar","Toolbar","NavLink","exact","Switch","IconButton","Badge","badgeContent","ShoppingCart","ServerError","useHistory","useLocation","detail","Test","BasketTable","isBasket","minWidth","TableHead","align","border","scope","marginRight","Remove","Add","Delete","BasketSummary","subtotal","subTotalForOrders","deliveryFee","total","subTotal","Number","colSpan","fontStyle","BasketPage","nairaEquiv","buyerId","amount","preventDefault","PaystackPop","setup","ref","Math","floor","random","callback","method","openIframe","payWithPaystack","mt","theme","createTheme","Login","location","useForm","mode","handleSubmit","formState","isSubmitting","isValid","from","ThemeProvider","maxWidth","flexDirection","m","onSubmit","noValidate","margin","required","autoFocus","username","helperText","password","Register","setError","success","forEach","handleApiError","pattern","PrivateRoute","Component","rest","render","props","orders","SetOrders","SetLoading","finally","order","orderDate","split","orderStatus","OrderDetail","baskets","setBaskets","SetOrderStatus","SetSubTotalForOrders","orderItems","AppTextInput","useController","defaultValue","fieldState","field","AppCheckbox","AddressForm","useFormContext","sm","isDirty","StripeInput","forwardRef","elementRef","useRef","useImperativeHandle","focus","current","onReady","element","PaymentForm","cardState","onCardInputChange","md","elementError","cardNumber","autoComplete","InputLabelProps","shrink","InputProps","inputComponent","inputProps","CardNumberElement","cardExpiry","CardExpiryElement","cardCvc","CardCvcElement","Review","validationSchema","yup","fullName","address1","address2","city","zip","country","nameOnCard","steps","CheckoutPage","activeStep","setActiveStep","orderNumber","setOrderNumber","SetCardState","cardComplete","setCardCompelete","paymentMessage","setPaymentMessage","paymentSucceeded","setPaymentSucceeded","stripe","useStripe","elements","useElements","elementType","complete","setLoading","currentValidationSchema","methods","resolver","yupResolver","submitOrder","saveAddress","shippingAddress","cardElement","getElement","confirmCardPayment","clientSecret","payment_method","card","billing_details","paymentResult","paymentIntent","reset","getValues","handleNext","handleBack","my","Stepper","pt","pb","Step","StepLabel","step","Error","getStepContent","ml","stripePromise","loadStripe","CheckoutWrapper","App","initApp","useCallback","setDarkMode","palleteType","darkTheme","palette","background","default","hideProgressBar","CssBaseline","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","createBrowserHistory","ReactDOM","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.9b26190b.chunk.js","sourcesContent":["export interface MetaData{\r\n currentPage:number, \r\n totalPages:number,\r\n pageSize:number,\r\n totalCount:number\r\n\r\n}\r\n\r\n\r\nexport class PaginatedResponse{\r\n items:T;\r\n metaData:MetaData;\r\n\r\n constructor(items:T,metaData:MetaData){\r\n this.items = items;\r\n this.metaData = metaData;\r\n }\r\n}","export function getCookie(key: string) {\r\n const b = document.cookie.match(\"(^|;)\\\\s*\" + key + \"\\\\s*=\\\\s*([^;]+)\");\r\n return b ? b.pop() : \"\";\r\n }\r\n\r\n\r\n export function currencyFormatter(price : number) {\r\n return '$' + (price/100).toFixed(2);\r\n }\r\n\r\n\r\n \r\n \r\nexport function payFunction(email,amount)\r\n{\r\n\r\n}\r\n\r\n\r\n export function payWithPaystack(e,email,amount) {\r\n e.preventDefault();\r\n let handler = PaystackPop.setup ({\r\n key: 'pk_test_997deb30eb541fdd600281bc38faa8549e139bd6', // Replace with your public key\r\n // email:( document.getElementById(\"email-address\") as HTMLInputElement).value,\r\n email:email,\r\n amount:amount,\r\n //amount: parseInt((document.getElementById(\"amount\") as HTMLInputElement).value) * 100,\r\n ref: ''+Math.floor((Math.random() * 1000000000) + 1), // generates a pseudo-unique reference. Please replace with a reference you generated. Or remove the line entirely so our API will generate one for you\r\n // label: \"Optional string that replaces customer email\"\r\n onClose: function(){\r\n //alert('Window closed.');\r\n },\r\n callback: function(response){\r\n // let message = 'Payment complete! Reference: ' + response.reference;\r\n // alert(message);\r\n\r\n fetch(process.env.REACT_APP_API_URL,{\r\n method : 'POST',\r\n headers :{'content-type':'application/json'},\r\n body: JSON.stringify({\r\n\r\n })\r\n })\r\n\r\n }\r\n });\r\n handler.openIframe();\r\n }","import { createAsyncThunk, createSlice, isAnyOf } from \"@reduxjs/toolkit\";\r\nimport agent from \"../../app/api/agent\";\r\nimport { Basket } from \"../../app/models/basket\";\r\nimport { getCookie } from \"../../app/util/util\";\r\n\r\ninterface BasketState{\r\n basket : Basket | null,\r\n status : string \r\n}\r\n\r\n\r\n\r\nconst initialState : BasketState ={\r\n basket : null,\r\n status : 'idle'\r\n}\r\n\r\nexport const fetchBasketAsync = createAsyncThunk(\r\n 'basket/fetchBasketAsync',\r\n async (_,thunkAPI) =>{\r\n try {\r\n return await agent.Basket.get()\r\n } catch (error : any) {\r\n return thunkAPI.rejectWithValue({error:error.data}) \r\n }\r\n },\r\n {\r\n condition:() =>{\r\n if(!getCookie('buyerId')) return false;\r\n }\r\n }\r\n)\r\n\r\n\r\nexport const addBasketItemAsync = createAsyncThunk(\r\n\r\n 'basket/addBasketItemAsync',\r\n async({productId,quantity = 1},thunkAPI) =>{\r\n try {\r\n return await agent.Basket.addItem(productId,quantity)\r\n } catch (error : any) {\r\n return thunkAPI.rejectWithValue({error : error.data})\r\n }\r\n }\r\n)\r\n\r\n\r\nexport const removeBasketItemAsync = createAsyncThunk(\r\n 'basket/removeBasketItemAsync',\r\n async({productId,quantity},thunkAPI) =>{\r\n try {\r\n await agent.Basket.removeItem(productId,quantity)\r\n } catch (error : any) {\r\n return thunkAPI.rejectWithValue({error : error.data})\r\n \r\n }\r\n }\r\n)\r\n\r\n\r\n\r\nexport const basketSlice = createSlice({\r\n name : 'basketSlice',\r\n initialState : initialState,\r\n reducers :{\r\n setBasket : (state,action) =>{\r\n state.basket = action.payload\r\n },\r\n clearBasket:(state) =>{\r\n state.basket = null;\r\n },\r\n removeItem : (state,action) =>{\r\n const {productId,quantity} = action.payload;\r\n\r\n const itemIndex = state.basket?.items.findIndex(i => i.productId === productId);\r\n if(itemIndex === -1 || itemIndex === undefined) return;\r\n\r\n state.basket!.items[itemIndex].quantity -= quantity;\r\n\r\n if(state.basket?.items[itemIndex].quantity === 0)\r\n {\r\n state.basket.items.splice(itemIndex,1)\r\n }\r\n\r\n }\r\n },\r\n extraReducers : (builder =>{\r\n builder.addCase(addBasketItemAsync.pending,(state,action) =>{\r\n // console.log(action); \r\n state.status = 'pendingAddItem'+ action.meta.arg.productId;\r\n });\r\n \r\n\r\n builder.addCase(removeBasketItemAsync.pending,(state,action) =>{\r\n state.status = \"pendingremoveItem\" + action.meta.arg.productId + action.meta.arg.name;\r\n })\r\n\r\n builder.addCase(removeBasketItemAsync.fulfilled,(state,action) =>{\r\n\r\n\r\n const {productId,quantity} = action.meta.arg;\r\n\r\n const itemIndex = state.basket?.items.findIndex(i => i.productId === productId);\r\n if(itemIndex === -1 || itemIndex === undefined) return;\r\n\r\n state.basket!.items[itemIndex].quantity -= quantity!;\r\n\r\n if(state.basket?.items[itemIndex].quantity === 0)\r\n {\r\n state.basket.items.splice(itemIndex,1)\r\n }\r\n\r\n state.status = 'idle'\r\n\r\n });\r\n\r\n builder.addCase(removeBasketItemAsync.rejected,(state,action)=>{\r\n console.log(action.payload)\r\n state.status = 'idle'\r\n });\r\n\r\n builder.addMatcher(isAnyOf(addBasketItemAsync.fulfilled,fetchBasketAsync.fulfilled),(state,action) =>{\r\n state.basket = action.payload\r\n state.status = 'idle'\r\n });\r\n\r\n builder.addMatcher(isAnyOf(addBasketItemAsync.rejected,fetchBasketAsync.fulfilled),(state,action) =>{\r\n console.log(action.payload);\r\n \r\n state.status = 'idle'\r\n });\r\n })\r\n})\r\n\r\n\r\nexport const {setBasket,clearBasket} = basketSlice.actions;","import { createAsyncThunk, createSlice, isAnyOf } from \"@reduxjs/toolkit\";\r\nimport { FieldValues } from \"react-hook-form\";\r\nimport { toast } from \"react-toastify\";\r\nimport { history } from \"../..\";\r\nimport agent from \"../../app/api/agent\";\r\nimport { User } from \"../../app/models/user\";\r\nimport { setBasket } from \"../basket/BasketSlice\";\r\n\r\nexport interface AccountState{\r\n user:User | null;\r\n}\r\n\r\nconst initialState : AccountState = {\r\n user : null\r\n}\r\n\r\n\r\n\r\n\r\n//we are returning user hence the first parameter\r\nexport const signInUser = createAsyncThunk(\r\n 'account/signInUser',\r\n async (data, thunkAPI) => {\r\n try {\r\n const userDto = await agent.Account.login(data);\r\n const {basket,...user} = userDto;\r\n if(basket) thunkAPI.dispatch(setBasket(basket))\r\n \r\n localStorage.setItem('user',JSON.stringify(user));\r\n return user;\r\n } catch (error: any) {\r\n return thunkAPI.rejectWithValue({error: error.data});\r\n }\r\n }\r\n)\r\n\r\nexport const fetchCurrentUser = createAsyncThunk(\r\n 'account/fetchCurrentUser',\r\n async (_, thunkAPI) => {\r\n\r\n thunkAPI.dispatch(setUser(JSON.parse(localStorage.getItem('user')!)));\r\n try {\r\n const userDto = await agent.Account.currentUser();\r\n const {basket,...user} = userDto;\r\n if(basket) thunkAPI.dispatch(setBasket(basket))\r\n localStorage.setItem('user',JSON.stringify(user));\r\n return user;\r\n } catch (error: any) {\r\n return thunkAPI.rejectWithValue({error: error.data});\r\n }\r\n }\r\n ,{\r\n condition:() => {\r\n if(!localStorage.getItem('user') ) return false;\r\n }\r\n }\r\n)\r\n\r\n//because we created extras thunk methods\r\n//we need to add them to the extra reducers\r\nexport const accountSlice = createSlice({\r\n name :'account',\r\n initialState : initialState,\r\n reducers : {\r\n signOut:(state ) =>{\r\n state.user = null;\r\n localStorage.removeItem('user');\r\n history.push('/')\r\n },\r\n setUser:(state,action) =>{\r\n state.user = action.payload\r\n\r\n }\r\n\r\n },\r\n extraReducers: (builder => {\r\n\r\n builder.addCase(fetchCurrentUser.rejected,(state) =>{\r\n state.user = null;\r\n localStorage.removeItem('user');\r\n toast.error('Session expired - please login again');\r\n history.push('/.');\r\n })\r\n builder.addMatcher(isAnyOf(signInUser.fulfilled,fetchCurrentUser.fulfilled),(state,action) =>{\r\n state.user = action.payload;\r\n\r\n });\r\n\r\n builder.addMatcher(isAnyOf(signInUser.rejected),(state,action) =>{\r\n throw action.payload\r\n \r\n\r\n })\r\n\r\n })\r\n})\r\n\r\nexport const {signOut,setUser} = accountSlice.actions","\r\nimport { createAsyncThunk, createEntityAdapter, createSlice } from \"@reduxjs/toolkit\";\r\nimport agent from \"../../app/api/agent\";\r\nimport { MetaData } from \"../../app/models/Pagination\";\r\nimport { Product, ProductParams } from \"../../app/models/product\";\r\nimport { RootState } from \"../../app/store/configureStore\";\r\n\r\ninterface CatalogState{\r\n productsLoaded:boolean,\r\n filtersLoaded:boolean,\r\n status:string,\r\n brands:string[],\r\n types:string[],\r\n productsParams:ProductParams,\r\n metaData:MetaData | null\r\n}\r\n\r\n\r\nconst productsAdapter = createEntityAdapter();\r\n\r\n\r\nfunction getAxiosParams(productParams:ProductParams)\r\n{\r\n const params = new URLSearchParams();\r\n params.append('pageNumber',productParams.pageNumber.toString());\r\n params.append('pageSize',productParams.pageSize.toString());\r\n params.append('orderBy',productParams.orderBy);\r\n\r\n if(productParams.searchTerm) params.append(\"searchTerm\",productParams.searchTerm);\r\n if(productParams.brands.length > 0) params.append('brands',productParams.brands.toString());\r\n if(productParams.types.length > 0) params.append('types',productParams.types.toString());\r\n\r\n return params;\r\n \r\n}\r\n\r\nexport const fetchProductsAsync = createAsyncThunk(\r\n 'catalog/fetchProductsAsync',\r\n async (_,thunkAPI) =>{\r\n const params = getAxiosParams(thunkAPI.getState().catalog.productsParams)\r\n try {\r\n const response = await agent.Catalog.list(params);\r\n thunkAPI.dispatch(setMetaData(response.metaData));\r\n return response.items;\r\n } catch (error: any) {\r\n return thunkAPI.rejectWithValue({error:error.data}) \r\n }\r\n }\r\n)\r\n\r\nexport const fetchProductAsync = createAsyncThunk(\r\n 'catalog/fetchProductAsync',\r\n async (productId,thunkAPI) =>{\r\n try {\r\n return await agent.Catalog.details(productId);\r\n } catch (error : any) {\r\n return thunkAPI.rejectWithValue({error : error.data}) \r\n }\r\n }\r\n)\r\n\r\n\r\nexport const fetchFilters = createAsyncThunk(\r\n 'catalog/fetchFilters',\r\n async(_,thunkAPI) =>{\r\n try {\r\n return await agent.Catalog.fetchFilters();\r\n \r\n } catch (error : any) {\r\n return thunkAPI.rejectWithValue({error : error.data})\r\n }\r\n }\r\n)\r\n\r\nfunction initParams()\r\n{\r\n return {\r\n pageNumber:1,\r\n pageSize:6,\r\n orderBy:'name',\r\n brands :[],\r\n types:[]\r\n }\r\n}\r\nexport const CatalogSlice = createSlice({\r\n name : 'catalog',\r\n initialState : productsAdapter.getInitialState({\r\n productsLoaded : false,\r\n filtersLoaded : false,\r\n status : 'idle',\r\n brands:[],\r\n types:[],\r\n productsParams:initParams(),\r\n metaData:null\r\n }),\r\n reducers : {\r\n setProductParams:(state,action) =>{\r\n state.productsLoaded = false;\r\n state.productsParams = {...state.productsParams,...action.payload,pageNumber:1}\r\n },\r\n setPageNumber:(state,action) =>{\r\n state.productsLoaded = false;\r\n state.productsParams = {...state.productsParams,...action.payload}\r\n },\r\n setMetaData:(state,action) =>{\r\n state.metaData = action.payload\r\n\r\n },\r\n resetProductParams:(state,action) =>{\r\n state.productsParams = initParams();\r\n }\r\n },\r\n extraReducers:(builder =>{\r\n\r\n builder.addCase(fetchProductsAsync.pending, (state) => {\r\n state.status = 'pendingFetchProducts';\r\n });\r\n builder.addCase(fetchProductsAsync.fulfilled, (state, action) => {\r\n productsAdapter.setAll(state, action.payload);\r\n state.status = 'idle';\r\n state.productsLoaded = true;\r\n });\r\n builder.addCase(fetchProductsAsync.rejected, (state, action) => {\r\n console.log(action);\r\n console.log(action.payload);\r\n state.status = 'idle';\r\n });\r\n //reducers for products\r\n\r\n builder.addCase(fetchProductAsync.pending,(state) =>{\r\n state.status = 'pendingFetchProduct'\r\n })\r\n\r\n builder.addCase(fetchProductAsync.fulfilled,(state,action) =>{\r\n productsAdapter.upsertOne(state,action.payload);\r\n state.status = 'idle'\r\n })\r\n \r\n builder.addCase(fetchProductAsync.rejected,(state,action) =>{\r\n console.log(action);\r\n state.status = 'idle'\r\n })\r\n\r\n builder.addCase(fetchFilters.pending,(state) =>{\r\n state.status = 'pendingFetchFilters'\r\n });\r\n\r\n \r\n\r\n builder.addCase(fetchFilters.fulfilled,(state,action) =>{\r\n state.brands = action.payload.brands;\r\n state.types = action.payload.types;\r\n state.filtersLoaded = true;\r\n state.status = 'idle';\r\n })\r\n\r\n builder.addCase(fetchFilters.rejected,(state,action) =>{\r\n state.status = 'idle'\r\n console.log(action.payload)\r\n });\r\n })\r\n})\r\n\r\nexport const productSelectors = productsAdapter.getSelectors((state : RootState) => state.catalog)\r\nexport const {setProductParams,resetProductParams,setMetaData,setPageNumber} = CatalogSlice.actions;","import { createSlice } from \"@reduxjs/toolkit\"\r\n\r\n\r\nexport interface CounterState {\r\n data: number;\r\n title: string;\r\n school : string;\r\n}\r\n\r\n\r\n\r\nconst initialState: CounterState = {\r\n data: 42,\r\n title: 'YARC (yet another redux counter with redux toolkit)',\r\n school : 'Ahmadu Bello University'\r\n}\r\n\r\n// const secondState : CounterState ={\r\n// data : 45,\r\n// title : 'Another Second state'\r\n// }\r\n\r\n\r\n\r\nexport const counterSlice = createSlice({\r\n name : 'counter',\r\n initialState : initialState,\r\n reducers :{\r\n increment : (state,action) =>{\r\n state.data += action.payload;\r\n },\r\n\r\n decrement : (state,action) =>{\r\n state.data -= action.payload;\r\n },\r\n }\r\n})\r\n\r\n\r\nexport const {increment,decrement} = counterSlice.actions;","//each react app has a single store\r\n\r\nimport { configureStore } from \"@reduxjs/toolkit\";\r\nimport { TypedUseSelectorHook, useDispatch, useSelector } from \"react-redux\";\r\nimport { accountSlice } from \"../../features/account/accountSlice\";\r\n//import { createStore } from \"redux\";\r\nimport { basketSlice } from \"../../features/basket/BasketSlice\";\r\nimport { CatalogSlice } from \"../../features/catalog/CatalogSlice\";\r\n//import {counterReducer } from \"../../features/contact/counterReducer\";\r\nimport { counterSlice } from \"../../features/contact/counterSlice\";\r\n\r\n// export function configureStore()\r\n// {\r\n// return createStore(counterReducer)\r\n// // return createStore(somethingReducer)\r\n// }\r\n\r\nexport const store = configureStore({\r\n reducer : {\r\n counter : counterSlice.reducer,\r\n basket : basketSlice.reducer,\r\n catalog: CatalogSlice.reducer,\r\n account : accountSlice.reducer\r\n }\r\n})\r\n\r\nexport type RootState = ReturnType;\r\n\r\nexport type AppDispatch = typeof store.dispatch;\r\n\r\nexport const useAppDispatch = () => useDispatch();\r\nexport const useAppSelector : TypedUseSelectorHook = useSelector;\r\n\r\n","import axios, { AxiosError, AxiosResponse } from \"axios\";\r\n//import { resolve } from \"dns\";\r\nimport { toast } from \"react-toastify\";\r\nimport { history } from \"../..\";\r\nimport { PaginatedResponse } from \"../models/Pagination\";\r\nimport { store } from \"../store/configureStore\";\r\n\r\n\r\naxios.defaults.baseURL = process.env.REACT_APP_API_URL;\r\n\r\naxios.defaults.withCredentials = true;\r\n\r\nconst responseBody = (response: AxiosResponse) => response.data;\r\n\r\naxios.interceptors.request.use(config => {\r\n const token = store.getState().account.user?.token;\r\n if (token) config.headers!.Authorization = `Bearer ${token}`;\r\n return config;\r\n})\r\n\r\n\r\nconst sleep = () => new Promise(resolve => setTimeout(resolve, 500))\r\n\r\naxios.interceptors.response.use(async response => {\r\n if(process.env.NODE_ENV === 'development') await sleep();\r\n \r\n const pagination = response.headers['pagination']\r\n if(pagination)\r\n {\r\n response.data = new PaginatedResponse(response.data,JSON.parse(pagination));\r\n console.log(response );\r\n return response\r\n }\r\n return response;\r\n}, (error: AxiosError) => {\r\n // console.log('caught by interceptor');\r\n //to override type safety use ! \r\n const { data, status } = error.response!;\r\n //for the toastify\r\n switch (status) {\r\n case 400:\r\n if (data.errors) {\r\n const modelStateError: string[] = [];\r\n for (const key in data.errors) {\r\n if (data.errors[key]) {\r\n modelStateError.push(data.errors[key]);\r\n }\r\n\r\n }\r\n throw modelStateError.flat();\r\n }\r\n toast.error(data.title)\r\n break;\r\n case 401:\r\n toast.error(data.title)\r\n break;\r\n\r\n case 500:\r\n // history.push('/server-error')\r\n\r\n history.push({\r\n pathname: '/server-error',\r\n state: { error: data }\r\n });\r\n // toast.error(data.title)\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n return Promise.reject(error.response);\r\n})\r\n\r\n\r\nconst requests = {\r\n get: (url: string,params?:URLSearchParams) => axios.get(url,{params}).then(responseBody),\r\n post: (url: string, body: {}) => axios.post(url, body).then(responseBody),\r\n put: (url: string, body: {}) => axios.put(url, body).then(responseBody),\r\n delete: (url: string) => axios.delete(url).then(responseBody),\r\n\r\n\r\n}\r\n\r\n\r\nconst Catalog = {\r\n list: (params:URLSearchParams) => requests.get(\"products\",params),\r\n details: (id: number) => requests.get(`products/${id}`),\r\n fetchFilters:() => requests.get(\"products/filters\")\r\n\r\n\r\n}\r\n\r\n\r\nconst Basket = {\r\n get:() => requests.get(\"basket\"),\r\n addItem : (productId: number,quantity = 1) => requests.post(`basket?productId=${productId}&quantity=${quantity}`,{}),\r\n removeItem : (productId: number,quantity = 1) => requests.delete(`basket?productId=${productId}&quantity=${quantity}`)\r\n\r\n}\r\n\r\n\r\nconst Account ={\r\n login:(values :any) => requests.post(\"account/login\",values),\r\n register:(values :any) => requests.post(\"account/register\",values),\r\n currentUser:() => requests.get(\"account/currentUser\"),\r\n fetchAddress :() => requests.get(\"account/savedAddress\")\r\n}\r\n\r\nconst Orders = {\r\n list : () => requests.get('orders'),\r\n fetch: (id : number) => requests.get(`orders/${id}`),\r\n create : (values : any) => requests.post('orders',values)\r\n\r\n}\r\n\r\nconst TestErrors = {\r\n get400Error: () => requests.get('buggy/bad-request'),\r\n get401Error: () => requests.get('buggy/unauthorised'),\r\n get404Error: () => requests.get('buggy/not-found'),\r\n get500Error: () => requests.get('buggy/server-error'),\r\n getValidationError: () => requests.get('buggy/validation-error')\r\n}\r\n\r\n\r\nconst Payments = {\r\n createPaymentIntent:() => requests.post('payments',{})\r\n\r\n}\r\n\r\n\r\nconst agent = {\r\n Catalog,\r\n TestErrors,\r\n Basket,\r\n Account,\r\n Orders,\r\n Payments\r\n\r\n}\r\n\r\nexport default agent\r\n","import { Alert, AlertTitle, Button, ButtonGroup, Container, List, ListItem, ListItemText, Typography } from \"@mui/material\";\r\nimport { useState } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport agent from \"../../app/api/agent\";\r\n\r\nexport default function AboutPage()\r\n{\r\n\r\n const [validationErrors, setValidationErrors] = useState([]);\r\n\r\n function getValidationErrors()\r\n {\r\n agent.TestErrors.getValidationError()\r\n .then(() => console.log('should not see this'))\r\n .catch(error => setValidationErrors(error));\r\n }\r\n\r\n \r\n return(\r\n \r\n Errors for testing purposes\r\n \r\n \r\n \r\n \r\n \r\n \r\n{/* \r\n */}\r\n \r\n \r\n\r\n {validationErrors.length > 0 && \r\n \r\n \r\n Validation Errors\r\n \r\n {validationErrors.map((error) =>(\r\n \r\n {error}\r\n \r\n\r\n ))}\r\n \r\n \r\n }\r\n \r\n )\r\n}\r\n","import { Box, Typography, Pagination } from \"@mui/material\";\r\nimport { MetaData } from \"../models/Pagination\";\r\n\r\n\r\ninterface Props{\r\n metaData:MetaData;\r\n onPageChange:(page:number) => void\r\n\r\n}\r\nexport default function AppPagination({metaData,onPageChange}:Props)\r\n{\r\n const{currentPage,totalCount,pageSize,totalPages} = metaData;\r\n return(\r\n \r\n \r\n Displaying {(currentPage - 1)*pageSize + 1 } - \r\n {currentPage * pageSize > totalCount ? totalCount : currentPage * pageSize} of {totalCount} items\r\n \r\n onPageChange(page)}\r\n />\r\n\r\n \r\n )\r\n}","import { FormGroup, FormControlLabel, Checkbox } from \"@mui/material\";\r\nimport { useState } from \"react\";\r\n\r\n\r\ninterface Props{\r\n items:string[],\r\n checked?:string[],\r\n onChange:(items:string[]) => void;\r\n\r\n}\r\nexport default function CheckBoxButtons({items,checked,onChange}:Props){\r\n\r\n const [checkedItems,setCheckedItem] = useState(checked || []); //to make it undefined\r\n\r\n\r\n function handleChecked(value:string) {\r\n const currentIndex = checkedItems.findIndex(item => item === value);\r\n let newChecked: string[] = [];\r\n\r\n if(currentIndex === -1) newChecked = [...checkedItems,value];\r\n else newChecked = checkedItems.filter(item => item !== value);\r\n setCheckedItem(newChecked)\r\n onChange(newChecked)\r\n }\r\n\r\n\r\n\r\n return(\r\n \r\n {items.map((item) => (\r\n handleChecked(item)}\r\n \r\n />} \r\n label={item}\r\n key={item} />\r\n ))}\r\n \r\n \r\n )\r\n}","import { FormControl, RadioGroup, FormControlLabel, Radio } from \"@mui/material\";\r\n\r\n\r\ninterface Props{\r\n options :any[],\r\n onChange:(event:any) => void;\r\n selectedValue:string \r\n}\r\nexport default function RadioButtongroup({options,onChange,selectedValue} : Props){\r\n \r\n return(\r\n \r\n\r\n \r\n\r\n {options.map(({ value, label }) => (\r\n } label={label} key={value}/>\r\n ))}\r\n \r\n \r\n\r\n )\r\n}","import { Backdrop, Box, CircularProgress, Typography } from \"@mui/material\";\r\n\r\ninterface Props{\r\n message? :string;\r\n}\r\n\r\nexport default function LoadingComponent({message = 'Loading...'} :Props)\r\n{\r\n \r\n\r\n return(\r\n \r\n \r\n \r\n {message}\r\n \r\n \r\n )\r\n}","import { Avatar, Button, Card, CardActions, CardContent, CardMedia, Typography, CardHeader } from \"@mui/material\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Product } from \"../../app/models/product\";\r\nimport LoadingButton from '@mui/lab/LoadingButton';\r\nimport { currencyFormatter } from \"../../app/util/util\";\r\nimport { useAppDispatch, useAppSelector } from \"../../app/store/configureStore\";\r\nimport { addBasketItemAsync } from \"../basket/BasketSlice\";\r\n\r\ninterface Props {\r\n product: Product;\r\n}\r\nexport default function ProductCard({ product }: Props) {\r\n\r\n //const {setBasket} = useStoreContext();\r\n\r\n const {status} = useAppSelector(state => state.basket)\r\n\r\n const dispatch = useAppDispatch();\r\n\r\n // const[loading,setLoading] =useState(false);\r\n \r\n\r\n // function handleAddItem(productId: number)\r\n // {\r\n // setLoading(true);\r\n // agent.Basket.addItem(productId)\r\n // .then(basket => dispatch(setBasket(basket)))\r\n // .catch(error => console.log(error))\r\n // .finally(() => setLoading(false))\r\n // }\r\n return (\r\n // \r\n // \r\n // \r\n // \r\n // \r\n // {product.name} - {product.price}\r\n // \r\n\r\n // \r\n\r\n \r\n\r\n \r\n {product.name.charAt(0).toUpperCase()}\r\n \r\n }\r\n \r\n title={product.name}\r\n titleTypographyProps={{\r\n sx:{fontWeight:'bold',color:'primary.main'}\r\n }}\r\n \r\n />\r\n \r\n \r\n \r\n {currencyFormatter(product.price)}\r\n \r\n \r\n {product.brand} / {product.type}\r\n \r\n \r\n \r\n dispatch(addBasketItemAsync({productId: product.id}))} size=\"small\" >Add To Cart\r\n \r\n \r\n \r\n )\r\n}","import {\r\n Card,\r\n CardActions,\r\n CardContent,\r\n CardHeader,\r\n Grid,\r\n Skeleton\r\n} from \"@mui/material\";\r\n\r\nexport default function ProductCardSkeleton() {\r\n return (\r\n \r\n \r\n }\r\n title={\r\n \r\n }\r\n />\r\n \r\n \r\n <>\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}","import { Grid } from \"@mui/material\";\r\nimport { Product } from \"../../app/models/product\";\r\nimport { useAppSelector } from \"../../app/store/configureStore\";\r\nimport ProductCard from \"./ProductCard\";\r\nimport ProductCardSkeleton from \"./ProductCardSkeleton\";\r\n\r\ninterface Props {\r\n products: Product[];\r\n}\r\nexport default function ProductList({ products }: Props) {\r\n const {productsLoaded} = useAppSelector(state => state.catalog)\r\n return (\r\n <>\r\n\r\n \r\n {products.map((product) => (\r\n \r\n \r\n {!productsLoaded ? (\r\n \r\n ): (\r\n \r\n )}\r\n \r\n \r\n\r\n ))}\r\n \r\n \r\n )\r\n}","import { debounce, TextField } from \"@mui/material\";\r\nimport { useState } from \"react\";\r\nimport { useAppDispatch, useAppSelector } from \"../../app/store/configureStore\";\r\nimport { setProductParams } from \"./CatalogSlice\";\r\n\r\nexport default function ProductSearch()\r\n{\r\n const {productsParams} = useAppSelector(state => state.catalog)\r\n const dispatch = useAppDispatch();\r\n const [searchTerm,setSearchTerm] = useState(productsParams.searchTerm);\r\n\r\n const debouncedSearch = debounce((event:any) =>{\r\n dispatch(setProductParams({searchTerm:event.target.value}))\r\n },1000)\r\n return (\r\n {\r\n setSearchTerm(event.target.value);\r\n debouncedSearch(event);\r\n }}\r\n\r\n />\r\n )\r\n}","import { Grid, Paper } from \"@mui/material\";\r\nimport { useEffect } from \"react\";\r\nimport AppPagination from \"../../app/components/AppPagination\";\r\nimport CheckBoxButtons from \"../../app/components/CheckButtons\";\r\nimport RadioButtongroup from \"../../app/components/RadioButtonGroup\";\r\n\r\nimport LoadingComponent from \"../../app/layout/LoadingComponent\";\r\nimport { useAppDispatch, useAppSelector } from \"../../app/store/configureStore\";\r\nimport { fetchFilters, fetchProductsAsync, productSelectors, setPageNumber, setProductParams } from \"./CatalogSlice\";\r\nimport ProductList from \"./ProductList\";\r\nimport ProductSearch from \"./productSearch\";\r\n\r\nconst sortOptions = [\r\n { value: 'name', label: 'AlphabeticalOrder' },\r\n { value: 'priceDesc', label: 'Price - High to low ' },\r\n { value: 'price', label: 'Price - Low to high ' },\r\n]\r\n\r\nexport default function Catalog() {\r\n\r\n\r\n\r\n //const [products, setProducts] = useState([]);\r\n\r\n const products = useAppSelector(productSelectors.selectAll);\r\n const dispatch = useAppDispatch();\r\n\r\n const { productsLoaded, filtersLoaded, brands, types,productsParams,metaData } = useAppSelector(state => state.catalog)\r\n\r\n\r\n\r\n useEffect(() => {\r\n if (!productsLoaded) dispatch(fetchProductsAsync());\r\n\r\n }, [productsLoaded, dispatch, filtersLoaded])\r\n\r\n useEffect(() => {\r\n if (!filtersLoaded) dispatch(fetchFilters());\r\n }, [dispatch, filtersLoaded])\r\n\r\n\r\n //we do not have the metadata\r\n\r\n if (!filtersLoaded) return \r\n\r\n\r\n return (\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n dispatch(setProductParams({orderBy:e.target.value}))} />\r\n \r\n\r\n \r\n dispatch(setProductParams({brands:items}))}\r\n />\r\n \r\n\r\n\r\n \r\n dispatch(setProductParams({types:items}))}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {metaData &&\r\n dispatch(setPageNumber ({pageNumber:page}))} />\r\n }\r\n \r\n\r\n \r\n \r\n\r\n )\r\n}","import { Button, Container, Divider, Paper, Typography } from \"@mui/material\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nexport default function NotFound()\r\n{\r\n return (\r\n \r\n Opps - we could not found what you are looking for\r\n \r\n\r\n \r\n \r\n )\r\n}","import { Divider, Grid, Table, TableBody, TableCell, TableContainer, TableRow, TextField, Typography } from \"@mui/material\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router\";\r\n\r\nimport NotFound from \"../../app/errors/NotFound\";\r\nimport LoadingComponent from \"../../app/layout/LoadingComponent\";\r\nimport { LoadingButton } from \"@mui/lab\";\r\nimport { useAppDispatch, useAppSelector } from \"../../app/store/configureStore\";\r\nimport { addBasketItemAsync, removeBasketItemAsync } from \"../basket/BasketSlice\";\r\nimport { fetchProductAsync, productSelectors } from \"./CatalogSlice\";\r\n\r\nexport default function ProductDetails() {\r\n\r\n // debugger;\r\n\r\n const {basket,status} = useAppSelector(state => state.basket);\r\n const dispatch = useAppDispatch();\r\n\r\n const { id } = useParams<{ id: string }>();\r\n\r\n\r\n const product = useAppSelector(state => productSelectors.selectById(state,id));\r\n\r\n const {status : productStatus } = useAppSelector(state => state.catalog);\r\n \r\n const [quantity,setQuantity] = useState(0);\r\n \r\n\r\n const item = basket?.items.find(i => i.productId === product?.id);\r\n\r\n useEffect(() => {\r\n \r\n\r\n if(item) setQuantity(item.quantity);\r\n if(!product) dispatch(fetchProductAsync(parseInt(id))\r\n\r\n )}, [id,item,dispatch,product])\r\n\r\n\r\n function handleInputChange(event : any)\r\n {\r\n if(event.target.value >= 0)\r\n {\r\n setQuantity(parseInt(event.target.value))\r\n }\r\n }\r\n\r\n function handleUpdateCart()\r\n {\r\n //setSumbitting(true);\r\n\r\n if(!item || quantity > item.quantity )\r\n {\r\n const updatedQuantity = item ? quantity - item.quantity : quantity;\r\n\r\n dispatch(addBasketItemAsync({productId:product?.id!,quantity:updatedQuantity}))\r\n // agent.Basket.addItem(product?.id!,updatedQuantity)\r\n // .then(basket => dispatch(setBasket(basket)))\r\n // .catch(error => console.log(error))\r\n // .finally(() =>setSumbitting(false))\r\n }\r\n else{\r\n const updatedQuantity = item.quantity - quantity;\r\n dispatch(removeBasketItemAsync({productId:product?.id!,quantity: updatedQuantity}))\r\n // agent.Basket.removeItem(product?.id! ,updatedQuantity)\r\n // .then(() => dispatch(removeItem({productId : product?.id!,quantity : updatedQuantity})))\r\n // .catch(error => console.log(error))\r\n // .finally(() => setSumbitting(false));\r\n }\r\n }\r\n\r\n if (productStatus.includes(\"pending\")) return \r\n if (!product) return \r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {product.name}\r\n \r\n \r\n {product.name}\r\n \r\n ${(product.price / 100).toFixed(2)}\r\n \r\n \r\n \r\n \r\n Name\r\n {product.name}\r\n \r\n \r\n Description\r\n {product.description}\r\n \r\n \r\n Type\r\n {product.type}\r\n \r\n \r\n Brand\r\n {product.brand}\r\n \r\n \r\n Quantity in stock\r\n {product.quantityInStock}\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n {item ? 'Update Quantity' : 'Add to Cart'}\r\n \r\n\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n","import { Button, ButtonGroup, Typography } from \"@mui/material\";\r\n//import { useDispatch, useSelector } from \"react-redux\";\r\nimport { useAppDispatch, useAppSelector } from \"../../app/store/configureStore\";\r\nimport { decrement, increment } from \"./counterSlice\";\r\n\r\n\r\n\r\n\r\nexport default function ContactPage() {\r\n\r\n //use selector is used to get the counter state\r\n //useSelector hook used to get the data or the state\r\n //to dispatch action we use useDispatch\r\n // const dispatch = useDispatch();\r\n const dispatch = useAppDispatch();\r\n // const { data, title } = useSelector((state: CounterState) => state)\r\n const { data, title } = useAppSelector((state) => state.counter)\r\n\r\n return (\r\n <>\r\n {title}\r\n The data is {data}\r\n\r\n \r\n {/* */}\r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n )\r\n}\r\n","import { Box, Typography } from \"@mui/material\";\r\nimport Slider from \"react-slick\";\r\n\r\nexport default function HomePage(){\r\n const settings = {\r\n dots: true,\r\n infinite: true,\r\n speed: 500,\r\n slidesToShow: 1,\r\n slidesToScroll: 1\r\n };\r\n\r\n return (\r\n <>\r\n \r\n
\r\n \"hero\"\r\n
\r\n
\r\n \"hero\"\r\n
\r\n
\r\n \"hero\"\r\n
\r\n
\r\n \r\n Welcome to the store\r\n \r\n \r\n )\r\n}\r\n","import { Button, Menu, Fade, MenuItem } from \"@mui/material\";\r\nimport React from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { signOut } from \"../../features/account/accountSlice\";\r\nimport { clearBasket } from \"../../features/basket/BasketSlice\";\r\nimport { useAppSelector } from \"../store/configureStore\";\r\n\r\nexport default function SignedInMenu()\r\n{\r\n const dispatch = useDispatch();\r\n const {user} = useAppSelector(state => state.account);\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const open = Boolean(anchorEl);\r\n const handleClick = (event: any) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n \r\n return (\r\n
\r\n \r\n {user?.email}\r\n \r\n \r\n Profile\r\n My orders\r\n \r\n { \r\n dispatch(signOut()) ;\r\n dispatch(clearBasket())\r\n \r\n }\r\n }>Logout\r\n \r\n
\r\n );\r\n}","import { ShoppingCart } from \"@mui/icons-material\";\r\nimport { AppBar, Badge, IconButton, List, ListItem, Switch, Toolbar, Typography } from \"@mui/material\";\r\nimport { Box } from \"@mui/system\";\r\nimport { Link, NavLink } from \"react-router-dom\";\r\n//import { useStoreContext } from \"../context/StoreContext\";\r\nimport { useAppSelector } from \"../store/configureStore\";\r\nimport SignedInMenu from \"./SignInMenu\";\r\n\r\n\r\n\r\n\r\n\r\ninterface Props {\r\n darkMode: boolean;\r\n handleThemeChange: () => void;\r\n}\r\n\r\nconst midLinks = [\r\n { title: 'catalog', path: '/catalog' },\r\n { title: 'about', path: '/about' },\r\n { title: 'contact', path: '/contact' }\r\n]\r\nconst rightLinks = [\r\n { title: 'login', path: '/login' },\r\n { title: 'register', path: '/register' }\r\n]\r\n\r\nconst navStyles = {\r\n color: 'inherit',\r\n typography: 'h6',\r\n '&:hover': {\r\n color: 'grey.500'\r\n },\r\n '&.active': {\r\n color: 'text.secondary'\r\n },\r\n textDecoration: 'none'\r\n}\r\n\r\nexport default function Header({ darkMode, handleThemeChange }: Props) {\r\n\r\n const {user} = useAppSelector(state => state.account);\r\n\r\n // const {basket} = useStoreContext();\r\n const {basket} = useAppSelector(state => state.basket);\r\n\r\n const itemCount = basket?.items.reduce((sum,item) =>sum + item.quantity, 0 )\r\n\r\n return (\r\n \r\n\r\n\r\n \r\n\r\n \r\n RE-STORE\r\n \r\n \r\n\r\n\r\n\r\n \r\n {midLinks.map(({ title, path }) => (\r\n \r\n {title.toUpperCase()}\r\n \r\n ))}\r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n {user ? (\r\n \r\n ) :(\r\n \r\n {rightLinks.map(({ title, path }) => (\r\n \r\n {title.toUpperCase()}\r\n \r\n ))}\r\n \r\n )}\r\n\r\n \r\n\r\n\r\n \r\n\r\n\r\n \r\n \r\n )\r\n}","import { Button, Container, Divider, Paper, Typography } from \"@mui/material\";\r\nimport { useHistory, useLocation } from \"react-router\";\r\n\r\nexport default function ServerError() {\r\n\r\n const history = useHistory();\r\n const { state } = useLocation();\r\n\r\n return (\r\n \r\n\r\n {state?.error ? (\r\n <>\r\n {state.error.title}\r\n \r\n\r\n {state.error.detail || 'internal server error'}\r\n \r\n\r\n ) : (\r\n Server Error\r\n\r\n )}\r\n \r\n \r\n )\r\n}","import { Typography } from \"@mui/material\";\r\n\r\nexport default function Test(){\r\n return(\r\n \r\n Test\r\n \r\n )\r\n}","import { Remove, Add, Delete } from \"@mui/icons-material\";\r\nimport { LoadingButton } from \"@mui/lab\";\r\nimport { TableContainer, Paper, Table, TableHead, TableRow, TableCell, TableBody, Box } from \"@mui/material\";\r\nimport { BasketItem } from \"../../app/models/basket\";\r\nimport { useAppDispatch, useAppSelector } from \"../../app/store/configureStore\";\r\nimport { removeBasketItemAsync, addBasketItemAsync } from \"./BasketSlice\";\r\n\r\n\r\ninterface Props{\r\n items:BasketItem[];\r\n isBasket? : boolean;\r\n}\r\n\r\n\r\nexport default function BasketTable({items,isBasket = true} : Props){\r\n const {status} = useAppSelector(state => state.basket);\r\n const dispatch = useAppDispatch();\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n Product \r\n Price\r\n Quantity \r\n Subtotal\r\n {isBasket && }\r\n \r\n \r\n \r\n \r\n {items.map((item) => (\r\n \r\n \r\n \r\n {item.name}\r\n\r\n {item.name} \r\n\r\n \r\n \r\n ${(item.price /100).toFixed(2)}\r\n \r\n\r\n {isBasket &&\r\n dispatch(removeBasketItemAsync({productId : item.productId, quantity : 1,name : 'rem'} ))} color='error'>\r\n \r\n \r\n \r\n }\r\n \r\n {item.quantity}\r\n \r\n\r\n {isBasket &&\r\n dispatch(addBasketItemAsync({productId : item.productId}))}\r\n >\r\n \r\n }\r\n \r\n ${((item.price /100) * item.quantity).toFixed(2)}\r\n {isBasket &&\r\n \r\n dispatch(removeBasketItemAsync({productId : item.productId,quantity:item.quantity,name : 'del'}))} \r\n >\r\n \r\n\r\n \r\n \r\n}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n \r\n )\r\n \r\n}","import { TableContainer, Paper, Table, TableBody, TableRow, TableCell } from \"@mui/material\";\r\n// import { number } from \"yup\";\r\nimport { useAppSelector } from \"../../app/store/configureStore\";\r\n\r\ninterface Props {\r\n subtotal?: number;\r\n subTotalForOrders?: number ;\r\n}\r\n\r\nexport default function BasketSummary({subtotal,subTotalForOrders =0}: Props) {\r\n const {basket} = useAppSelector(state => state.basket);\r\n if (subtotal === undefined)\r\n subtotal = basket?.items.reduce((sum, item) => sum + (item.quantity * item.price), 0) ?? 0;\r\n \r\n\r\n // let subtotal = 0;\r\n let deliveryFee = 0;\r\n\r\n let total = 0;\r\n \r\n\r\n // const {basket} = useAppSelector(state => state.basket);\r\n\r\n //sum starts at zero\r\n\r\n const subTotal = Number(basket?.items.reduce((sum,item) =>sum + ((item.price / 100) * item.quantity), 0 ))\r\n\r\n console.log(subTotal?.toFixed(2))\r\n\r\n if(Number(subTotal?.toFixed(2)) > 100)\r\n {\r\n deliveryFee = 0;\r\n\r\n }\r\n else{\r\n deliveryFee = 5;\r\n }\r\n\r\n total = Number(subTotal?.toFixed(2)) + deliveryFee;\r\n\r\n\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n Subtotal\r\n ${subTotalForOrders !==0 ? 0.00 : `${subTotal?.toFixed(2)}`} \r\n \r\n \r\n Delivery fee*\r\n ${subTotalForOrders !== 0 ? 0.00 : `${deliveryFee}`}\r\n \r\n \r\n \r\n Total\r\n ${subTotalForOrders !== 0 ? subTotalForOrders : `${total.toFixed(2)}`} \r\n \r\n \r\n \r\n *Orders over $100 qualify for free delivery\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n )\r\n}","import { Button, Grid, Typography } from \"@mui/material\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { useAppSelector } from \"../../app/store/configureStore\";\r\nimport BasketTable from \"./BasketTable\";\r\n//import LoadingComponent from \"../../app/layout/LoadingComponent\";\r\n//import { Basket } from \"../../app/models/basket\";\r\nimport BasketSummary from \"./BasketSummary\";\r\nimport { payWithPaystack } from \"../../app/util/util\";\r\n\r\nexport default function BasketPage() {\r\n\r\n\r\n\r\n\r\n // const {basket,setBasket,removeItem} =useStoreContext();\r\n let subtotal = 0;\r\n\r\n const {basket} = useAppSelector(state => state.basket);\r\n const {user} = useAppSelector(state => state.account);\r\n \r\n if (subtotal === undefined)\r\n subtotal = basket?.items.reduce((sum, item) => sum + (item.quantity * item.price), 0) ?? 0;\r\n \r\n\r\n // let subtotal = 0;\r\n let deliveryFee = 0;\r\n\r\n let total = 0;\r\n \r\n\r\n // const {basket} = useAppSelector(state => state.basket);\r\n\r\n //sum starts at zero\r\n\r\n const subTotal = Number(basket?.items.reduce((sum,item) =>sum + ((item.price / 100) * item.quantity), 0 ))\r\n\r\n console.log(subTotal?.toFixed(2))\r\n\r\n if(Number(subTotal?.toFixed(2)) > 100)\r\n {\r\n deliveryFee = 0;\r\n\r\n }\r\n else{\r\n deliveryFee = 5;\r\n }\r\n\r\n total = Number(subTotal?.toFixed(2)) + deliveryFee;\r\n\r\n const nairaEquiv = (total * 100 ) * 480;\r\n\r\n console.log(basket?.buyerId)\r\n\r\n\r\n\r\n if (!basket) return Your basket is empty\r\n return (\r\n\r\n <>\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Checkout \r\n \r\n payWithPaystack(e,user.email,nairaEquiv)}\r\n variant='contained'\r\n size='large'\r\n fullWidth\r\n sx={{mt : 1}}\r\n \r\n >\r\n \r\n ₦ Pay with Paystack \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n )\r\n}","import Avatar from '@mui/material/Avatar';\r\nimport TextField from '@mui/material/TextField';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\n\r\nimport Grid from '@mui/material/Grid';\r\nimport Box from '@mui/material/Box';\r\nimport LockOutlinedIcon from '@mui/icons-material/LockOutlined';\r\nimport Typography from '@mui/material/Typography';\r\nimport Container from '@mui/material/Container';\r\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\r\nimport { Paper } from '@mui/material';\r\nimport { Link, useHistory, useLocation } from 'react-router-dom';\r\nimport { FieldValues, useForm } from 'react-hook-form';\r\nimport { LoadingButton } from '@mui/lab';\r\nimport { useAppDispatch } from '../../app/store/configureStore';\r\nimport { signInUser } from './accountSlice';\r\n\r\n\r\n\r\nconst theme = createTheme();\r\n\r\nexport default function Login() {\r\n const history = useHistory();\r\n const location = useLocation();\r\n const dispatch = useAppDispatch();\r\n\r\n const {register,handleSubmit,formState:{isSubmitting,errors,isValid}} = useForm(\r\n {\r\n mode : 'all'\r\n }\r\n );\r\n\r\n // const [values,setValues] = useState({\r\n // username: '',\r\n // password :''\r\n // })\r\n // const handleSubmit = (event:any) => {\r\n // // console.log(values);\r\n // event.preventDefault();\r\n // agent.Account.login(values);\r\n \r\n // };\r\n\r\n // function handleInputChange(event :any)\r\n // {\r\n // const {name ,value} = event.target ;\r\n // setValues({...values,[name]:value})\r\n // }\r\n\r\n async function submitForm(data:FieldValues)\r\n {\r\n try {\r\n await dispatch(signInUser(data));\r\n history.push(location.state?.from?.pathname || '/catalog')\r\n } catch (error) {\r\n console.log(error);\r\n \r\n }\r\n \r\n\r\n\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Sign in\r\n \r\n \r\n \r\n \r\n }\r\n label=\"Remember me\"\r\n />\r\n \r\n Sign In\r\n \r\n \r\n \r\n {/* \r\n Forgot password?\r\n */}\r\n \r\n \r\n \r\n {\"Don't have an account? Sign Up\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}","import Avatar from '@mui/material/Avatar';\r\nimport TextField from '@mui/material/TextField';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\n\r\nimport Grid from '@mui/material/Grid';\r\nimport Box from '@mui/material/Box';\r\nimport LockOutlinedIcon from '@mui/icons-material/LockOutlined';\r\nimport Typography from '@mui/material/Typography';\r\nimport Container from '@mui/material/Container';\r\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\r\nimport { Paper } from '@mui/material';\r\nimport { Link, useHistory } from 'react-router-dom';\r\nimport { useForm } from 'react-hook-form';\r\nimport { LoadingButton } from '@mui/lab';\r\n//import { useAppDispatch } from '../../app/store/configureStore';\r\nimport agent from '../../app/api/agent';\r\nimport { toast } from 'react-toastify';\r\n\r\n\r\n\r\nconst theme = createTheme();\r\n\r\nexport default function Register() {\r\n \r\n const history = useHistory();\r\n // const dispatch = useAppDispatch();\r\n\r\n const { register, handleSubmit,setError, formState: { isSubmitting, errors, isValid } } = useForm(\r\n {\r\n mode: 'all'\r\n }\r\n );\r\n\r\n\r\n function handleApiError(errors :any)\r\n {\r\n if(errors)\r\n {\r\n errors.forEach((error :string) => {\r\n if(error.includes(\"Password\"))\r\n {\r\n setError('password',{message:error})\r\n }\r\n else if(error.includes(\"Username\"))\r\n {\r\n setError(\"username\",{message : error})\r\n }\r\n else if(error.includes(\"Eamil\"))\r\n {\r\n setError(\"email\",{message : error})\r\n }\r\n \r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Register\r\n \r\n \r\n agent.Account.register(data)\r\n .then(() =>{\r\n toast.success(\"Registration successfull - you can now login\");\r\n history.push('/login') ;\r\n })\r\n .catch(error => handleApiError(error)))} noValidate sx={{ mt: 1 }}>\r\n \r\n\r\n \r\n \r\n }\r\n label=\"Remember me\"\r\n />\r\n \r\n Register\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Already have an account? Sign In\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}","import { ComponentType } from \"react\";\r\nimport { Redirect, Route, RouteComponentProps, RouteProps } from \"react-router\";\r\nimport { useAppSelector } from \"../store/configureStore\";\r\n\r\ninterface Props extends RouteProps {\r\n component: ComponentType> | ComponentType\r\n}\r\n\r\nexport default function PrivateRoute({ component: Component, ...rest }: Props) {\r\n const {user} = useAppSelector(state => state.account);\r\n return (\r\n \r\n user ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n />\r\n );\r\n }\r\n ","import { TableContainer, Paper, Table, TableHead, TableRow, TableCell, TableBody, Button, Typography } from \"@mui/material\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nimport agent from \"../../app/api/agent\";\r\nimport LoadingComponent from \"../../app/layout/LoadingComponent\";\r\nimport { Order } from \"../../app/models/order\";\r\nimport { currencyFormatter } from \"../../app/util/util\";\r\n\r\n\r\nexport default function Orders() {\r\n\r\n const [orders, SetOrders] = useState(null);\r\n const [loading, SetLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n agent.Orders.list()\r\n .then(orders => SetOrders(orders))\r\n .catch(error => console.log(error))\r\n .finally(() => SetLoading(false));\r\n }, [])\r\n\r\n if (loading) return \r\n\r\n return (\r\n\r\n <>\r\n \r\n Orders\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Order number\r\n Total\r\n Order Date\r\n Order Status\r\n \r\n \r\n \r\n \r\n {orders?.map((order) => {\r\n return (\r\n \r\n \r\n {order.id}\r\n \r\n {currencyFormatter(order.total)}\r\n {order.orderDate.split('T')[0]}\r\n {order.orderStatus}\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\n","import { Box, Button, Grid, Typography } from \"@mui/material\";\r\nimport { useState } from \"react\";\r\nimport { useEffect } from \"react\";\r\nimport { Link, useParams } from \"react-router-dom\";\r\nimport agent from \"../../app/api/agent\";\r\nimport { BasketItem } from \"../../app/models/basket\";\r\nimport BasketSummary from \"../basket/BasketSummary\";\r\nimport BasketTable from '../basket/BasketTable';\r\n\r\nexport default function OrderDetail(){\r\n const { id } = useParams<{ id: string }>();\r\n const [baskets,setBaskets] = useState([]) \r\n const [orderStatus,SetOrderStatus] = useState('');\r\n\r\n const [subTotalForOrders,SetSubTotalForOrders] = useState(0);\r\n \r\n\r\n useEffect(() =>{\r\n agent.Orders.fetch(parseInt(id))\r\n .then(response => {\r\n \r\n console.log(response);\r\n setBaskets(response.orderItems);\r\n SetOrderStatus(response.orderStatus);\r\n SetSubTotalForOrders((response.orderItems.reduce((sum : any, item : any) => sum + (item.quantity * item.price), 0) ?? 0).toFixed(2));\r\n console.log( 'subtotalForOrders = ' + subTotalForOrders);\r\n })\r\n .catch(error => console.log(error))\r\n\r\n },[id, subTotalForOrders])\r\n\r\n\r\n return (\r\n <>\r\n \r\n Order# {id} - {orderStatus} \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n )\r\n}\r\n\r\n","import { TextField } from \"@mui/material\";\r\nimport {useController, UseControllerProps} from 'react-hook-form';\r\n\r\ninterface Props extends UseControllerProps {\r\n\r\n label:string;\r\n}\r\n\r\nexport default function AppTextInput(props: Props) {\r\n const {fieldState, field} = useController({...props, defaultValue: ''})\r\n return (\r\n \r\n )\r\n}","import { Checkbox, FormControlLabel } from \"@mui/material\";\r\nimport { useController, UseControllerProps } from \"react-hook-form\"\r\n\r\ninterface Props extends UseControllerProps {\r\n label: string;\r\n disabled:boolean;\r\n \r\n}\r\n\r\nexport default function AppCheckbox(props: Props) {\r\n const {field} = useController({...props, defaultValue: false});\r\n return (\r\n \r\n }\r\n label={props.label}\r\n />\r\n )\r\n}","import Grid from '@mui/material/Grid';\r\nimport Typography from '@mui/material/Typography';\r\n\r\nimport { useFormContext } from 'react-hook-form';\r\nimport AppTextInput from '../../app/components/AppTextInput';\r\nimport AppCheckbox from '../../app/components/AppCheckbox';\r\n\r\n\r\nexport default function AddressForm() {\r\n\r\n const {control,formState} = useFormContext();\r\n return (\r\n <>\r\n \r\n Shipping address\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n}","\r\n\r\nimport { InputBaseComponentProps } from \"@mui/material\";\r\nimport { forwardRef, Ref, useImperativeHandle, useRef } from \"react\";\r\n\r\ninterface Props extends InputBaseComponentProps {}\r\n\r\nexport const StripeInput = forwardRef(function StripeInput({component: Component, ...props}: Props, \r\n ref: Ref){\r\n const elementRef = useRef();\r\n\r\n useImperativeHandle(ref, () => ({\r\n focus: () => elementRef.current.focus\r\n }));\r\n\r\n return (\r\n elementRef.current = element}\r\n {...props}\r\n />\r\n )\r\n });","import Typography from '@mui/material/Typography';\r\nimport Grid from '@mui/material/Grid';\r\nimport TextField from '@mui/material/TextField';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport AppTextInput from '../../app/components/AppTextInput';\r\nimport { CardCvcElement, CardExpiryElement, CardNumberElement } from '@stripe/react-stripe-js';\r\nimport { StripeInput } from './StripeInput';\r\nimport { StripeElementType } from '@stripe/stripe-js';\r\n\r\n\r\ninterface Props {\r\n cardState: { elementError: { [key in StripeElementType]?: string } };\r\n onCardInputChange: (event: any) => void;\r\n}\r\nexport default function PaymentForm({cardState, onCardInputChange}: Props) {\r\n const { control } = useFormContext();\r\n\r\n\r\n return (\r\n <>\r\n \r\n Payment method\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n label=\"Remember credit card details for next time\"\r\n />\r\n \r\n \r\n \r\n );\r\n}","import { Grid } from '@mui/material';\r\nimport Typography from '@mui/material/Typography';\r\n// import { Link } from 'react-router-dom';\r\nimport { useAppSelector } from '../../app/store/configureStore';\r\nimport BasketSummary from '../basket/BasketSummary';\r\nimport BasketTable from '../basket/BasketTable';\r\n\r\n\r\nexport default function Review() {\r\n const {basket} = useAppSelector(state => state.basket)\r\n return (\r\n <>\r\n \r\n Order summary\r\n \r\n\r\n {basket &&\r\n }\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {/* \r\n {products.map((product) => (\r\n \r\n \r\n {product.price}\r\n \r\n ))}\r\n \r\n \r\n \r\n $34.06\r\n \r\n \r\n \r\n \r\n \r\n \r\n Shipping\r\n \r\n John Smith\r\n {addresses.join(', ')}\r\n \r\n \r\n \r\n Payment details\r\n \r\n \r\n {payments.map((payment) => (\r\n \r\n \r\n {payment.name}\r\n \r\n \r\n {payment.detail}\r\n \r\n \r\n ))}\r\n \r\n \r\n */}\r\n \r\n );\r\n}\r\n","import * as yup from 'yup'\r\n\r\n\r\nexport const validationSchema = [\r\n yup.object({\r\n fullName : yup.string().required('Full name is required'),\r\n address1 : yup.string().required('Address line 1 is required'),\r\n address2 : yup.string().required(),\r\n city : yup.string().required(),\r\n zip : yup.string().required(),\r\n country : yup.string().required(),\r\n }),\r\n yup.object(),\r\n yup.object({\r\n nameOnCard : yup.string().required('name is required')\r\n })\r\n] ","\r\n\r\nimport { Box, Button, Paper, Step, StepLabel, Stepper, Typography } from \"@mui/material\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { FieldValues, FormProvider, useForm } from \"react-hook-form\";\r\nimport AddressForm from \"./AddressForm\";\r\nimport PaymentForm from \"./PaymentForm\";\r\nimport Review from \"./Review\";\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport { validationSchema } from \"./CheckoutValidation\";\r\nimport agent from \"../../app/api/agent\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { clearBasket } from \"../basket/BasketSlice\";\r\nimport LoadingButton from \"@mui/lab/LoadingButton\";\r\nimport { StripeElementType } from \"@stripe/stripe-js\";\r\nimport { useAppSelector } from \"../../app/store/configureStore\";\r\nimport { CardNumberElement, useElements, useStripe } from \"@stripe/react-stripe-js\";\r\nconst steps = ['Shipping address', 'Review your order', 'Payment details'];\r\n\r\n\r\n\r\nexport default function CheckoutPage() {\r\n\r\n\r\n const [activeStep, setActiveStep] = useState(0);\r\n const [orderNumber, setOrderNumber] = useState(0);\r\n\r\n const dispatch = useDispatch();\r\n\r\n\r\n const [cardState, SetCardState] = useState<{ elementError: { [key in StripeElementType]?: string } }>({ elementError: {} })\r\n const [cardComplete, setCardCompelete] = useState({ cardNumber: false, cardExpiry: false, cardCvc: false });\r\n\r\n const [paymentMessage, setPaymentMessage] = useState('');\r\n const [paymentSucceeded, setPaymentSucceeded] = useState(false);\r\n const { basket } = useAppSelector(state => state.basket);\r\n\r\n const stripe = useStripe();\r\n const elements = useElements();\r\n\r\n\r\n function onCardInputChange(event: any) {\r\n SetCardState({\r\n ...cardState,\r\n elementError: {\r\n ...cardState.elementError,\r\n [event.elementType]: event.error?.message\r\n }\r\n })\r\n setCardCompelete({ ...cardComplete, [event.elementType]: event.complete })\r\n }\r\n\r\n\r\n function getStepContent(step: number) {\r\n switch (step) {\r\n case 0:\r\n return ;\r\n case 1:\r\n return ;\r\n case 2:\r\n return ;\r\n default:\r\n throw new Error('Unknown step');\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const currentValidationSchema = validationSchema[activeStep];\r\n\r\n const methods = useForm({\r\n mode: 'all',\r\n resolver: yupResolver(currentValidationSchema)\r\n });\r\n\r\n\r\n useEffect(() => {\r\n agent.Account.fetchAddress()\r\n .then(response => {\r\n if (response) {\r\n methods.reset({ ...methods.getValues(), ...response, saveAddress: false });\r\n }\r\n\r\n })\r\n\r\n }, [methods])\r\n\r\n\r\n async function submitOrder(data: FieldValues) {\r\n\r\n setLoading(true);\r\n const { nameOnCard, saveAddress, ...shippingAddress } = data;\r\n if (!stripe || !elements) return; // stripe not ready\r\n try {\r\n const cardElement = elements.getElement(CardNumberElement);\r\n const paymentResult = await stripe.confirmCardPayment(basket?.clientSecret!, {\r\n payment_method: {\r\n card: cardElement!,\r\n billing_details: {\r\n name: nameOnCard\r\n }\r\n }\r\n });\r\n console.log(paymentResult);\r\n if (paymentResult.paymentIntent?.status === 'succeeded') {\r\n const orderNumber = await agent.Orders.create({ saveAddress, shippingAddress });\r\n setOrderNumber(orderNumber);\r\n setPaymentSucceeded(true);\r\n setPaymentMessage('Thank you - we have received your payment');\r\n setActiveStep(activeStep + 1);\r\n dispatch(clearBasket());\r\n setLoading(false);\r\n } else {\r\n setPaymentMessage(paymentResult.error?.message!);\r\n setPaymentSucceeded(false);\r\n setLoading(false);\r\n setActiveStep(activeStep + 1);\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n setLoading(false);\r\n }\r\n\r\n }\r\n\r\n const handleNext = async (data: FieldValues) => {\r\n\r\n if (activeStep === steps.length - 1) {\r\n\r\n await submitOrder(data);\r\n\r\n\r\n // try {\r\n\r\n // const orderNumber = await agent.Orders.create({saveAddress,shippingAddress});\r\n // //set the order\r\n // setOrderNumber(orderNumber)\r\n // setActiveStep(activeStep + 1);\r\n // //our api is going to remove the cookie\r\n // //we should remove the basket from our redux toolkit\r\n // dispatch(clearBasket());\r\n // setLoading(false);\r\n // } catch (error) {\r\n // console.log(error);\r\n // setLoading(false);\r\n\r\n // }\r\n // console.log(data)\r\n\r\n }\r\n else {\r\n setActiveStep(activeStep + 1);\r\n\r\n }\r\n };\r\n\r\n const handleBack = () => {\r\n setActiveStep(activeStep - 1);\r\n };\r\n\r\n\r\n function submitDisabled(): boolean {\r\n if (activeStep === steps.length - 1) {\r\n return !cardComplete.cardCvc\r\n || !cardComplete.cardExpiry\r\n || !cardComplete.cardNumber\r\n || !methods.formState.isValid\r\n } else {\r\n return !methods.formState.isValid\r\n }\r\n }\r\n\r\n\r\n return (\r\n\r\n\r\n \r\n\r\n \r\n \r\n Checkout\r\n \r\n \r\n {steps.map((label) => (\r\n \r\n {label}\r\n \r\n ))}\r\n \r\n <>\r\n {activeStep === steps.length ? (\r\n <>\r\n \r\n {paymentMessage}\r\n \r\n {paymentSucceeded ? (\r\n \r\n Your order number is #{orderNumber}. We have not emailed your order\r\n confirmation, and will not send you an update when your order has\r\n shipped as this is a fake store!\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n\r\n \r\n ) : (\r\n
\r\n {getStepContent(activeStep)}\r\n \r\n {activeStep !== 0 && (\r\n \r\n )}\r\n \r\n {activeStep === steps.length - 1 ? 'Place order' : 'Next'}\r\n \r\n \r\n
\r\n )}\r\n \r\n
\r\n\r\n
\r\n\r\n );\r\n}\r\n\r\n","import { Elements } from \"@stripe/react-stripe-js\";\r\nimport { loadStripe } from \"@stripe/stripe-js\";\r\nimport { useEffect, useState } from \"react\";\r\nimport agent from \"../../app/api/agent\";\r\nimport LoadingComponent from \"../../app/layout/LoadingComponent\";\r\nimport { useAppDispatch } from \"../../app/store/configureStore\";\r\nimport { setBasket } from \"../basket/BasketSlice\";\r\nimport CheckoutPage from \"./CheckoutPage\";\r\n\r\n\r\nconst stripePromise = loadStripe('pk_test_51KpBpUCJJs9aZRjVtD3OQhaaYzkoYBtauzVry85hcHczdRC9ZNRMNTm3WhF20z4ZYXtcuTRnYPQjDXeiH8MJQC5D00zMVrZsaf')\r\nexport default function CheckoutWrapper(){\r\n\r\n const dispatch = useAppDispatch();\r\n\r\n const [loading,setLoading] = useState(true);\r\n\r\n useEffect(() =>{\r\n agent.Payments.createPaymentIntent()\r\n .then(basket =>dispatch(setBasket(basket)))\r\n .catch(error => console.log(error))\r\n .finally(() => setLoading(false))\r\n },[dispatch])\r\n\r\n\r\n if(loading) return \r\n \r\n return (\r\n \r\n \r\n \r\n )\r\n}","import { ThemeProvider } from \"@emotion/react\";\nimport { Container, createTheme, CssBaseline } from \"@mui/material\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Route } from \"react-router\";\nimport { ToastContainer } from \"react-toastify\";\nimport AboutPage from \"../../features/about/AboutPage\";\nimport Catalog from \"../../features/catalog/Catalog\";\nimport ProductDetails from \"../../features/catalog/ProductDetails\";\nimport ContactPage from \"../../features/contact/ContactPage\";\nimport HomePage from \"../../features/home/HomePage\";\nimport Header from \"./Header\";\nimport 'react-toastify/dist/ReactToastify.css';\nimport ServerError from \"../errors/Server\";\nimport NotFound from \"../errors/NotFound\";\nimport { Switch } from \"react-router-dom\";\nimport Test from \"../../features/Tests/Test\";\nimport BasketPage from \"../../features/basket/BasketPage\";\n//import { useStoreContext } from \"../context/StoreContext\";\nimport LoadingComponent from \"./LoadingComponent\";\n\nimport { fetchBasketAsync } from \"../../features/basket/BasketSlice\";\nimport { useAppDispatch } from \"../store/configureStore\";\nimport Login from \"../../features/account/Login\";\nimport Register from \"../../features/account/Register\";\nimport { fetchCurrentUser } from \"../../features/account/accountSlice\";\nimport PrivateRoute from \"./PrivateRoute\";\nimport Orders from \"../../features/orders/Orders\";\nimport OrderDetail from \"../../features/orders/OrderDetail\";\nimport CheckoutWrapper from \"../../features/checkout/CheckoutWrapper\";\n\n\n\n\nfunction App() {\n\n //const {setBasket} = useStoreContext();\n const dispatch = useAppDispatch();\n const [loading,setLoading] = useState(true);\n\n\n const initApp = useCallback(async () =>\n {\n try {\n await dispatch(fetchCurrentUser())\n await dispatch(fetchBasketAsync());\n } catch (error) {\n console.log(error)\n }\n },[dispatch])\n\n useEffect(() =>{\n // dispatch(fetchCurrentUser());\n // const buyerId = getCookie('buyerId');\n // if(buyerId)\n // {\n // agent.Basket.get()\n // .then(basket => dispatch(setBasket(basket)))\n // .catch(error => console.log(error))\n // .finally(() => setLoading(false))\n // }\n // else{\n // setLoading(false);\n // }\n\n initApp().then(() => setLoading(false))\n },[initApp])\n\n\n\n const [darkMode, setDarkMode] = useState(false);\n\n const palleteType = darkMode ? 'dark' : 'light';\n\n const darkTheme = createTheme({\n palette: {\n mode: palleteType,\n background: {\n default: palleteType === 'light' ? '#eaeaea' : '#121212'\n }\n },\n });\n\n const handleChange = () => {\n\n setDarkMode(!darkMode)\n }\n\n\n if(loading) return \n\n return (\n\n \n \n\n \n
\n \n (\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {/* */}\n \n\n )} />\n\n \n\n\n\n \n );\n}\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './app/layout/styles.css';\nimport App from './app/layout/App';\nimport reportWebVitals from './reportWebVitals';\nimport { Router } from 'react-router-dom';\nimport { createBrowserHistory } from \"history\";\n//import { configureStore } from './app/store/configureStore';\nimport { Provider } from 'react-redux';\nimport { store } from './app/store/configureStore';\nimport 'slick-carousel/slick/slick.css';\nimport 'slick-carousel/slick/slick-theme.css';\n\n\n\n\n//const store = configureStore();\n\n\n//console.log(store.getState());\n\n\n\nexport const history = createBrowserHistory();\n\nReactDOM.render(\n \n \n\n \n \n \n \n \n \n\n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}