├── .gitignore
├── .prettierrc
├── index.html
├── jsconfig.json
├── package-lock.json
├── package.json
├── pnpm-lock.yaml
├── public
└── vite.svg
├── src
├── App.jsx
├── apis
│ ├── authService.js
│ ├── axiosClient.js
│ ├── cartService.js
│ ├── orderService.js
│ └── productsService.js
├── assets
│ ├── icons
│ │ ├── images
│ │ │ └── Logo-retina.png
│ │ └── svgs
│ │ │ ├── boxIcon.svg
│ │ │ ├── cartIcon.svg
│ │ │ ├── chatIcon.svg
│ │ │ ├── debitCardIcon.svg
│ │ │ ├── fbIcon.svg
│ │ │ ├── heart.svg
│ │ │ ├── insIcon.svg
│ │ │ ├── reloadIcon.svg
│ │ │ ├── truckIcon.svg
│ │ │ └── ytbIcon.svg
│ ├── images
│ │ └── Banner-Ecommerse.jpeg
│ ├── react.svg
│ └── styles
│ │ ├── _global.module.scss
│ │ ├── _mixin.module.scss
│ │ ├── _variable.module.scss
│ │ └── main.scss
├── components
│ ├── AccordionMenu
│ │ ├── index.jsx
│ │ └── styles.module.scss
│ ├── AdvanceHeadling
│ │ ├── AdvanceHeadling.jsx
│ │ └── styles.module.scss
│ ├── Banner
│ │ ├── Banner.jsx
│ │ └── styles.module.scss
│ ├── Blog
│ │ └── Blog.jsx
│ ├── Button
│ │ ├── Button.jsx
│ │ └── styles.module.scss
│ ├── ContentSideBar
│ │ ├── Cart
│ │ │ ├── Cart.jsx
│ │ │ └── styles.module.scss
│ │ ├── Compare
│ │ │ ├── Compare.jsx
│ │ │ └── styles.module.scss
│ │ ├── DetailProduct
│ │ │ ├── DetailProduct.jsx
│ │ │ └── styles.module.scss
│ │ ├── Login
│ │ │ ├── Login.jsx
│ │ │ └── styles.module.scss
│ │ ├── WishList
│ │ │ ├── WishList.jsx
│ │ │ └── styles.module.scss
│ │ └── components
│ │ │ ├── HeaderSidebar
│ │ │ ├── HeaderSideBar.jsx
│ │ │ └── styles.module.scss
│ │ │ └── ItemProduct
│ │ │ ├── ItemProduct.jsx
│ │ │ └── styles.module.scss
│ ├── CountdownBanner
│ │ ├── CountdownBanner.jsx
│ │ └── styles.module.scss
│ ├── CountdownTimer
│ │ ├── CountdownTimer.jsx
│ │ └── styles.module.scss
│ ├── Footer
│ │ ├── Footer.jsx
│ │ ├── constant.js
│ │ └── styles.module.scss
│ ├── Header
│ │ ├── BoxIcon
│ │ │ └── BoxIcon.jsx
│ │ ├── Header.jsx
│ │ ├── Menu
│ │ │ └── Menu.jsx
│ │ ├── constants.js
│ │ └── styles.module.scss
│ ├── HeadingListProduct
│ │ ├── HeadingListProducts.jsx
│ │ └── styles.module.scss
│ ├── HomePage
│ │ ├── HomePage.jsx
│ │ └── styles.module.scss
│ ├── Info
│ │ ├── Info.jsx
│ │ ├── InfoCard
│ │ │ └── InfoCard.jsx
│ │ ├── constants.js
│ │ └── styles.module.scss
│ ├── InputCommon
│ │ ├── InputCommon.jsx
│ │ └── styles.module.scss
│ ├── InputCommon2
│ │ ├── Input.jsx
│ │ └── styles.module.scss
│ ├── Layout
│ │ ├── Layout.jsx
│ │ └── styles.module.scss
│ ├── LoadingTextCommon
│ │ ├── LoadingTextCommon.jsx
│ │ └── styles.module.scss
│ ├── MenuContent
│ │ └── MenuContent.jsx
│ ├── PaymentMethods
│ │ ├── PaymentMethods.jsx
│ │ └── styles.module.scss
│ ├── PopularProduct
│ │ ├── PopularProduct.jsx
│ │ └── styles.module.scss
│ ├── ProductItem
│ │ ├── ProductItem.jsx
│ │ ├── ProductItemLine.jsx
│ │ └── styles.module.scss
│ ├── SaleHomepage
│ │ ├── SaleHomepage.jsx
│ │ └── styles.module.scss
│ ├── Sidebar
│ │ ├── Sidebar.jsx
│ │ └── styles.module.scss
│ └── SliderCommon
│ │ ├── SliderCommon.jsx
│ │ └── styles.css
├── contexts
│ ├── OurShopProvider.jsx
│ ├── SideBarProvider.jsx
│ ├── SteperProvider.jsx
│ ├── ToastProvider.jsx
│ └── storeProvider.jsx
├── hooks
│ ├── useScrollHandling.js
│ └── useTranslateXImage.js
├── main.jsx
├── pages
│ ├── AboutUs
│ │ ├── components
│ │ │ └── Logos.jsx
│ │ ├── index.jsx
│ │ └── styles.module.scss
│ ├── Cart
│ │ ├── Cart.jsx
│ │ ├── components
│ │ │ ├── Checkout
│ │ │ │ ├── Checkout.jsx
│ │ │ │ ├── RightBody.jsx
│ │ │ │ └── Styles.module.scss
│ │ │ ├── ContentStep.jsx
│ │ │ ├── Loading.jsx
│ │ │ ├── contents
│ │ │ │ ├── CartSummary.jsx
│ │ │ │ ├── CartTable.jsx
│ │ │ │ └── Contents.jsx
│ │ │ └── steps
│ │ │ │ ├── Stepper.jsx
│ │ │ │ └── Steps.jsx
│ │ └── styles.module.scss
│ ├── DetailProduct
│ │ ├── components
│ │ │ ├── FormItem.jsx
│ │ │ ├── Infomation.jsx
│ │ │ └── Review.jsx
│ │ ├── index.jsx
│ │ └── styles.module.scss
│ ├── Orders
│ │ └── index.jsx
│ └── OurShop
│ │ ├── OurShop.jsx
│ │ ├── components
│ │ ├── Banner.jsx
│ │ ├── Filter.jsx
│ │ ├── ListProducts.jsx
│ │ └── SelectBox.jsx
│ │ └── styles.module.scss
├── routers
│ └── routers.js
└── utils
│ └── helper.js
├── style.css
├── templateAPI.jsx
└── vite.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "arrowParens": "always",
3 | "singleQuote": true,
4 | "jsxSingleQuote": true,
5 | "tabWidth": 4,
6 | "semi": true,
7 | "printWidth": 80,
8 | "trailingComma": "none"
9 | }
10 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
91 |
92 |
93 |
{detailProduct.name}
94 |
${detailProduct.price}
95 |
{detailProduct.description}
96 |
97 |
Size {chooseSize}
98 |
99 | {detailProduct.size.map((item, index) => (
100 |
handleGetSize(item.name)}
106 | >
107 | {item.name}
108 |
109 | ))}
110 |
111 | {chooseSize && (
112 |
120 | clear
121 |
122 | )}
123 |
124 |
125 |
131 |
132 |
133 |
138 | }
139 | onClick={handleAddToCart}
140 | />
141 |
142 |
143 |
144 |