From 9a385a3f14fba5bf89d77a46f97b1072b3c82437 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Mon, 13 Sep 2021 14:59:37 +0700 Subject: [PATCH 01/33] :ambulance: hotfix: Account Page --- .../AccountNavigation.module.scss | 51 ++++++++++--- .../AccountNavigation/AccountNavigation.tsx | 9 ++- .../AccountNavigationItem.module.scss | 17 ----- .../AccountNavigationItem.module.scss | 46 ++++++++++++ .../AccountNavigationItem.tsx | 0 .../account/AccountPage/AccountPage.tsx | 6 +- .../EditInfoModal/EditInfoModal.module.scss | 32 ++------ .../EditInfoModal/EditInfoModal.tsx | 74 ++++++++----------- .../OrderInformation.module.scss | 2 + .../OrderInformation/OrderInformation.tsx | 1 - .../IdAndStatus/IdAndStatus.module.scss | 37 ---------- 11 files changed, 131 insertions(+), 144 deletions(-) delete mode 100644 src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss create mode 100644 src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss rename src/components/modules/account/AccountNavigation/components/{ => AccountNavigationItem}/AccountNavigationItem.tsx (100%) diff --git a/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss b/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss index 8bece6668..eb255a3b4 100644 --- a/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss +++ b/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss @@ -1,27 +1,54 @@ @import '../../../../styles/utilities'; .accountNavigation { - @apply flex; + @apply relative; width: 100%; + @screen md { + @apply flex; + width: 100%; + } + .slider { - @apply inline-block; - width: 0.2rem; - height: 4.8rem; - border-radius: 3px; - background-color: var(--primary); - position: absolute; - left: 11.2rem; - transition: all .2s linear; + @apply hidden; + + @screen md { + @apply inline-block; + width: 0.2rem; + height: 4.8rem; + border-radius: 3px; + background-color: var(--primary); + position: absolute; + left: 0; + top: 450; + transition: all .2s linear; + } } .tabList { - margin-top: 3.8rem; - margin-right: 12.4rem; + @apply flex; + + @screen md { + @apply block; + margin-right: 0rem; + } + + @screen lg { + @apply block; + margin-right: 4.8rem; + } + + @screen xl { + @apply block; + margin-right: 12.4rem; + } } .tabBody { - margin-top: -4.7rem; width: 100%; + + @screen md { + margin-top: -8.6rem; + } } } \ No newline at end of file diff --git a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx index 013b4cbf1..a8da59211 100644 --- a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx +++ b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx @@ -1,7 +1,7 @@ import React, { useRef, useEffect, Children, ReactElement, PropsWithChildren, useState, cloneElement } from "react" import s from './AccountNavigation.module.scss' -import AccountNavigationItem from './components/AccountNavigationItem' +import AccountNavigationItem from './components/AccountNavigationItem/AccountNavigationItem' import {TabPaneProps} from '../../../common/TabCommon/components/TabPane/TabPane' interface AccountNavigationProps { @@ -21,10 +21,12 @@ const AccountNavigation = ({ defaultActiveIndex, children } : AccountNavigationP function slide(index: number) { const active = headerRef.current?.children.item(index)?.getBoundingClientRect() const header = headerRef.current?.getBoundingClientRect() + const firstEl = headerRef.current?.children.item(0)?.getBoundingClientRect() const current = sliderRef.current - if (current && active && header) { - const top = active.top; + if (current && active && header && firstEl) { + const firstElTop = firstEl.top + const top = active.top - firstElTop; current.style.top = top.toString()+"px"; } } @@ -63,7 +65,6 @@ const AccountNavigation = ({ defaultActiveIndex, children } : AccountNavigationP }) } -
) } diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss deleted file mode 100644 index 10037cdc7..000000000 --- a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss +++ /dev/null @@ -1,17 +0,0 @@ -@import '../../../../../styles/utilities'; - -.accountNavigationItem { - width: 28rem; - padding: 1.2rem 0 1.2rem 1.6rem; - margin-bottom: 1.2rem; - - - &:hover { - @apply cursor-pointer; - } - - &.active { - background-color: #FBFBFB; - border-radius: 0 1.6rem 1.6rem 0; - } -} \ No newline at end of file diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss new file mode 100644 index 000000000..07952e6d8 --- /dev/null +++ b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss @@ -0,0 +1,46 @@ +@import '../../../../../../styles/utilities'; + +.accountNavigationItem { + @apply custom-border-radius; + width: fit-content; + padding: 1.2rem 1.6rem 1.2rem 0rem; + + margin-bottom: 1.2rem; + + &:hover { + @apply cursor-pointer; + } + + &.active { + @apply custom-border-radius font-bold; + background-color: var(--primary); + color: white; + padding: 1.2rem 1.6rem 1.2rem 1.6rem; + margin-right: 1.6rem; + + @screen md { + @apply font-normal; + background-color: #FBFBFB; + border-radius: 0 1.6rem 1.6rem 0; + color: #3D3D3D; + } + } + + @screen md { + max-width: 24rem; + min-width: 22rem; + padding: 1.2rem 1.6rem 1.2rem 1.6rem; + } + + @screen lg { + max-width: 26rem; + min-width: 23rem; + padding: 1.2rem 1.6rem 1.2rem 1.6rem; + } + + @screen xl { + max-width: 28rem; + min-width: 24rem; + padding: 1.2rem 1.6rem 1.2rem 1.6rem; + } +} \ No newline at end of file diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.tsx b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.tsx similarity index 100% rename from src/components/modules/account/AccountNavigation/components/AccountNavigationItem.tsx rename to src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.tsx diff --git a/src/components/modules/account/AccountPage/AccountPage.tsx b/src/components/modules/account/AccountPage/AccountPage.tsx index a5a0ef79d..3b0948c40 100644 --- a/src/components/modules/account/AccountPage/AccountPage.tsx +++ b/src/components/modules/account/AccountPage/AccountPage.tsx @@ -1,12 +1,12 @@ import React, { useState } from "react" import s from './AccountPage.module.scss' +import { HeadingCommon, TabPane } from "src/components/common" + import AccountNavigation from '../AccountNavigation/AccountNavigation' -import HeadingCommon from '../../../common/HeadingCommon/HeadingCommon' import AccountInfomation from "./components/AccountInfomation/AccountInfomation" import OrderInfomation from './components/OrderInformation/OrderInformation' import EditInfoModal from './components/EditInfoModal/EditInfoModal' -import TabPane from "src/components/common/TabCommon/components/TabPane/TabPane" const waiting = [ { @@ -46,7 +46,7 @@ interface AccountPageProps { defaultActiveContent?: "info" | "orders" | "favorites" } -const AccountPage = ({defaultActiveContent="orders"} : AccountPageProps) => { +const AccountPage = ({ defaultActiveContent="orders" } : AccountPageProps) => { const [activeTab] = useState(defaultActiveContent==="info" ? 0 : defaultActiveContent==="orders" ? 1 : 2) const [modalVisible, setModalVisible] = useState(false); diff --git a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss index be1384ab7..fb67ab24c 100644 --- a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss +++ b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss @@ -5,50 +5,30 @@ @apply bg-white; margin-bottom: 1.6rem; width: 100%; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; } .inputDisable { margin-bottom: 1.6rem; width: 100%; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; - background-color: #EBEBEB; color: #CCCCCC; } - .inputStateWrapper { - @apply bg-white; - margin-bottom: 1.6rem; - margin-right: 1.6rem; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; - - .inputState { - @apply bg-white cursor-pointer; - border: white; - } + .inputState { + @apply bg-white cursor-pointer; + border: white; + margin-right: 0.8rem; } .inputPostalCode { @apply bg-white; - margin-bottom: 1.6rem; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; + margin-left: 0.8rem; } .inputPhoneNumber { @apply bg-white; margin-bottom: 4rem; width: 100%; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; + margin-top: 1.6rem; } .buttons { diff --git a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx index d2be8b1a1..5f88df01b 100644 --- a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx +++ b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx @@ -1,10 +1,7 @@ -import classNames from "classnames" -import React, { useState } from "react" +import React from "react" import s from './EditInfoModal.module.scss' -import {ModalCommon, MenuDropdown} from '../../../../../common' - -import {ButtonCommon} from '../../../../../common' +import { ModalCommon, Inputcommon, SelectCommon } from '../../../../../common' interface EditInfoModalProps { accountInfo: {name: string, email: string, address: string, state: string, city: string, postalCode: string, phoneNumber: string}; @@ -14,14 +11,6 @@ interface EditInfoModalProps { const EditInfoModal = ({ accountInfo, visible = false, closeModal }: EditInfoModalProps) => { - const [name, setName] = useState(accountInfo.name); - const [email, setEmail] = useState(accountInfo.email); - const [address, setAddress] = useState(accountInfo.address); - const [state, setState] = useState(accountInfo.state); - const [city, setCity] = useState(accountInfo.city); - const [postalCode, setPostalCode] = useState(accountInfo.postalCode); - const [phoneNumber, setPhoneNumber] = useState(accountInfo.phoneNumber); - function saveInfo() { console.log("saved !!!"); @@ -29,46 +18,43 @@ const EditInfoModal = ({ accountInfo, visible = false, closeModal }: EditInfoMod } const states = [ - {name: "D1", onClick: () => {setState("D1")}}, - {name: "D2", onClick: () => {setState("D2")}}, - {name: "D3", onClick: () => {setState("D3")}} + {name: "District 1", value: "D1"}, + {name: "District 2", value: "D2"}, + {name: "District 3", value: "D3"} ] return (
-
- {setName(e.target.value)}} /> +
+
-
- {setEmail(e.target.value)}} /> -
-
- {setAddress(e.target.value)}}/> -
-
- {setCity(e.target.value)}} /> -
-
-
- - - -
- - {setPostalCode(e.target.value)}} /> +
+ +
+ +
+
-
- {setPhoneNumber(e.target.value)}} /> +
+ +
+ + +
+
+ +
+ +
+ +
+
+ +
+
diff --git a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.module.scss b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.module.scss index 0096a67d7..cfa30c6ad 100644 --- a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.module.scss +++ b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.module.scss @@ -8,6 +8,8 @@ .tabs { margin-top: 3.2rem; + width: 100%; + border-bottom: black; .blank { margin-bottom: 2.4rem; diff --git a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx index 76985b9fd..98f305b9e 100644 --- a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx +++ b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx @@ -10,7 +10,6 @@ interface OrderInformationProps { waiting: {id: string, products: string[], totalPrice: number}[], delivering: {id: string, products: string[], totalPrice: number}[], delivered: {id: string, products: string[], totalPrice: number}[], - // active?: boolean } const OrderInformation = ({ waiting, delivering, delivered} : OrderInformationProps) => { diff --git a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss index d50ecd115..bc0d692b3 100644 --- a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss +++ b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss @@ -1,42 +1,5 @@ @import '../../../../../../styles/utilities'; -.idAndStatus { - @apply items-center; - padding: 2.4rem 0 2.4rem 1rem; - - @screen md { - padding: 2.4rem 0 2.4rem 1.2rem; - } - - @screen lg { - padding: 2.4rem 0 2.4rem 2.4rem; - } - - .id { - @apply font-bold; - margin-bottom: .8rem; - } - - .deliveryStatus { - @apply font-bold text-white; - font-size: 1.2rem; - line-height: 2rem; - padding: 0 .8rem; - border-radius: 0.5rem; - width: fit-content; - - &.waiting { - background-color: #D9A645; - } - &.delivering { - background-color: var(--info-dark); - } - &.delivered { - background-color: var(--primary); - } - } -}@import '../../../../../../styles/utilities'; - .idAndStatus { @apply items-center; padding: 2.4rem 0 2.4rem 1rem; From 3c8f01fa7e470ce9e68ab87d172def72d4ccc284 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2021 16:04:19 +0700 Subject: [PATCH 02/33] feat: notificationpage mobile --- pages/notification.tsx | 13 ++++ src/components/icons/IconBell.tsx | 19 ++++++ src/components/icons/IconBill.tsx | 25 ++++++++ src/components/icons/index.ts | 2 + .../NotificationEmptyPage.module.scss | 15 +++++ .../NotificationEmptyPage.tsx | 18 ++++++ .../NotificationItem.module.scss | 39 ++++++++++++ .../NotificationItem/NotificationItem.tsx | 49 +++++++++++++++ .../NotificationPage/NotificationPage.tsx | 60 +++++++++++++++++++ src/components/modules/Notification/index.tsx | 2 + 10 files changed, 242 insertions(+) create mode 100644 pages/notification.tsx create mode 100644 src/components/icons/IconBell.tsx create mode 100644 src/components/icons/IconBill.tsx create mode 100644 src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss create mode 100644 src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.tsx create mode 100644 src/components/modules/Notification/NotificationItem/NotificationItem.module.scss create mode 100644 src/components/modules/Notification/NotificationItem/NotificationItem.tsx create mode 100644 src/components/modules/Notification/NotificationPage/NotificationPage.tsx create mode 100644 src/components/modules/Notification/index.tsx diff --git a/pages/notification.tsx b/pages/notification.tsx new file mode 100644 index 000000000..df76e6c58 --- /dev/null +++ b/pages/notification.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import { Layout } from 'src/components/common'; +import { NotificationPage } from 'src/components/modules/Notification'; + +const Notification = () => { + return ( + + ) +} + +Notification.Layout = Layout + +export default Notification; \ No newline at end of file diff --git a/src/components/icons/IconBell.tsx b/src/components/icons/IconBell.tsx new file mode 100644 index 000000000..278edc640 --- /dev/null +++ b/src/components/icons/IconBell.tsx @@ -0,0 +1,19 @@ +const IconBell = ({ ...props }) => { + return ( + + + + ) + } + + export default IconBell + \ No newline at end of file diff --git a/src/components/icons/IconBill.tsx b/src/components/icons/IconBill.tsx new file mode 100644 index 000000000..4892a0b07 --- /dev/null +++ b/src/components/icons/IconBill.tsx @@ -0,0 +1,25 @@ +const IconBill = ({ ...props }) => { + return ( + + + + + ) + } + + export default IconBill + \ No newline at end of file diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index 7dd36b14f..184e107e1 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -33,3 +33,5 @@ export { default as IconMinus } from './IconMinus' export { default as IconCirclePlus } from './IconCirclePlus' export { default as IconDoneCheckout } from './IconDoneCheckout' export { default as IconFilter } from './IconFilter' +export { default as IconBell } from './IconBell' +export { default as IconBill } from './IconBill' \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss new file mode 100644 index 000000000..457b22e77 --- /dev/null +++ b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss @@ -0,0 +1,15 @@ +@import "../../../../styles/utilities"; + +.emptyPage { + @apply flex justify-center items-center flex-col; + .emptyIcon { + padding-bottom: 2.6rem; + } + .emptyContent { + font-size: 2.4rem; + line-height: 3.2rem; + letter-spacing: -0.01em; + align-content: center; + color: var(--disabled); + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.tsx b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.tsx new file mode 100644 index 000000000..b698b0f50 --- /dev/null +++ b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.tsx @@ -0,0 +1,18 @@ +import React from 'react' +import { IconBell } from 'src/components/icons' +import s from '../NotificationEmptyPage/NotificationEmptyPage.module.scss' + + +const NotificationEmptyPage = () => { + return ( +
+
+ +
+
+

Your Notification is empty

+
+
+ ) +} +export default NotificationEmptyPage \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss new file mode 100644 index 000000000..38ce184d1 --- /dev/null +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss @@ -0,0 +1,39 @@ +@import '../../../../styles/utilities'; + +.notificationItem { + @apply flex flex-row; + padding-left: 1.6rem; + padding-bottom: 1.4rem; + &:hover{ + cursor: pointer; + } + .contentWrapper { + padding-left: 1.6rem; + max-width: 26.3rem; + .title { + font-weight: bold; + color: var(--text-active); + } + .date { + font-size: 1.2rem; + line-height: 2rem; + letter-spacing: 0.01em; + } + } + &.isChecked { + .icon { + rect { + fill: var(--gray) + } + path { + fill: var(--disabled) + } + } + .title { + color: var(--label); + } + .content, .date { + color: #828282; + } + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.tsx b/src/components/modules/Notification/NotificationItem/NotificationItem.tsx new file mode 100644 index 000000000..83de0ff8f --- /dev/null +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.tsx @@ -0,0 +1,49 @@ +import React, {useState} from 'react' +import s from '../NotificationItem/NotificationItem.module.scss' +import ClassNames from 'classnames' +import { IconBill } from 'src/components/icons' +import Link from 'next/link' + +export interface NotificationItemProps { + ID?: string, + title?: string, + content?: string, + date?: string, + link: string, + checked?: boolean, +} + +const NotificationItem = ({ ID, title, content, date, link, checked}: NotificationItemProps) => { + const [isChecked, setChecked] = useState(checked) + const Check = () => { + setChecked(true) + } + return ( +
+
+ +
+ +
+
+ {title} +
+
+ {content} +
+
+ {date} +
+
+ + +
+ ) +} + +export default NotificationItem \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationPage/NotificationPage.tsx b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx new file mode 100644 index 000000000..8abd39d9f --- /dev/null +++ b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx @@ -0,0 +1,60 @@ +import React from 'react' +import NotificationEmptyPage from '../NotificationEmptyPage/NotificationEmptyPage' +import NotificationItem, { NotificationItemProps } from '../NotificationItem/NotificationItem' +import {ROUTE , QUERY_KEY, ACCOUNT_TAB } from 'src/utils/constanst.utils' + + +interface NotificationPageProps { + isEmpty?: boolean, + data?: NotificationItemProps[], +} +const NOTIFICATION_DATA = [ + { + ID: "ID33455", + title: "Your order ID33455", + content: "The order has been deliveried successfully!", + date: "2 days ago", + link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.ORDER}`, + checked: false, + }, + { + ID: "ID33456", + title: "Your order ID33456", + content: "The order has been deliveried successfully!", + date: "2 days ago", + link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.ORDER}`, + checked: false, + }, + { + ID: "ID33457", + title: "Your order ID33457", + content: "The order has been deliveried successfully!", + date: "2 days ago", + link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.ORDER}`, + checked: true, + } +] + + +const NotificationPage = ({ isEmpty=false, data = NOTIFICATION_DATA }: NotificationPageProps) => { + return ( + <> + { + isEmpty ? + + : + <> + { + data.map(item => { + return ( + + ) + }) + } + + } + + ) +} + +export default NotificationPage \ No newline at end of file diff --git a/src/components/modules/Notification/index.tsx b/src/components/modules/Notification/index.tsx new file mode 100644 index 000000000..64413501a --- /dev/null +++ b/src/components/modules/Notification/index.tsx @@ -0,0 +1,2 @@ +export { default as NotificationPage } from './NotificationPage/NotificationPage' +export { default as NotificationEmptyPage } from './NotificationEmptyPage/NotificationEmptyPage' \ No newline at end of file From 66cb8728fe369fdc36d79243575fb4ab13554451 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2021 16:19:56 +0700 Subject: [PATCH 03/33] styles: add padding top --- src/components/icons/index.ts | 3 --- .../Notification/NotificationItem/NotificationItem.module.scss | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index 586ff3cb7..70575e11d 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -33,9 +33,6 @@ export { default as IconMinus } from './IconMinus' export { default as IconCirclePlus } from './IconCirclePlus' export { default as IconDoneCheckout } from './IconDoneCheckout' export { default as IconFilter } from './IconFilter' -<<<<<<< HEAD export { default as IconBell } from './IconBell' export { default as IconBill } from './IconBill' -======= export { default as IconNoti } from './IconNoti' ->>>>>>> 83b5f9048687e555a978ae71e26a1d19aac2247c diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss index 38ce184d1..ca7531981 100644 --- a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss @@ -2,13 +2,14 @@ .notificationItem { @apply flex flex-row; + padding-top: 1.2rem; padding-left: 1.6rem; - padding-bottom: 1.4rem; &:hover{ cursor: pointer; } .contentWrapper { padding-left: 1.6rem; + padding-bottom: 1.4rem; max-width: 26.3rem; .title { font-weight: bold; From ff5deb23125732c83b0f80d4567145271bf7d9ee Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2021 16:25:53 +0700 Subject: [PATCH 04/33] styles: fix name color --- .../NotificationItem/NotificationItem.module.scss | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss index ca7531981..3ffaf1499 100644 --- a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss @@ -16,6 +16,7 @@ color: var(--text-active); } .date { + color: #828282; font-size: 1.2rem; line-height: 2rem; letter-spacing: 0.01em; @@ -30,11 +31,8 @@ fill: var(--disabled) } } - .title { - color: var(--label); - } - .content, .date { - color: #828282; + .title, .content { + color: var(--text-label); } } } \ No newline at end of file From 72cb99f1cae8aefb527be9c18848120c9b80611e Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Tue, 14 Sep 2021 16:48:27 +0700 Subject: [PATCH 05/33] :art: restyle: Home Feature --- .../home/HomeFeature/HomeFeature.module.scss | 13 +---- .../modules/home/HomeFeature/HomeFeature.tsx | 41 ++++++++------ .../HomeFeature/assets/10h30-11h-mobile.png | Bin 2341 -> 0 bytes .../{10h30-11h-desktop.png => 10h30-11h.png} | Bin .../home/HomeFeature/assets/8h-mobile.png | Bin 2456 -> 0 bytes .../assets/{8h-desktop.png => 8h.png} | Bin .../assets/{green-desktop.png => green.png} | Bin .../HomeFeatureCarousel.tsx | 48 +++++++++++++++++ .../HomeFeatureItem.module.scss | 50 +++--------------- .../HomeFeatureItem/HomeFeatureItem.tsx | 16 +++--- 10 files changed, 88 insertions(+), 80 deletions(-) delete mode 100644 src/components/modules/home/HomeFeature/assets/10h30-11h-mobile.png rename src/components/modules/home/HomeFeature/assets/{10h30-11h-desktop.png => 10h30-11h.png} (100%) delete mode 100644 src/components/modules/home/HomeFeature/assets/8h-mobile.png rename src/components/modules/home/HomeFeature/assets/{8h-desktop.png => 8h.png} (100%) rename src/components/modules/home/HomeFeature/assets/{green-desktop.png => green.png} (100%) create mode 100644 src/components/modules/home/HomeFeature/components/HomeFeatureCarousel/HomeFeatureCarousel.tsx diff --git a/src/components/modules/home/HomeFeature/HomeFeature.module.scss b/src/components/modules/home/HomeFeature/HomeFeature.module.scss index 1753edf99..3275bfb3b 100644 --- a/src/components/modules/home/HomeFeature/HomeFeature.module.scss +++ b/src/components/modules/home/HomeFeature/HomeFeature.module.scss @@ -1,16 +1,5 @@ @import "../../../../styles/utilities"; .homeFeature { - @apply spacing-horizontal; - background-color: #ffffff; - height: fit-content; - margin: 3.2rem auto; - @screen md { - @apply grid grid-cols-3; - grid-gap: 2.4rem; - margin: 6.4rem auto; - } - @screen md { - grid-gap: 4rem; - } + @apply spacing-horizontal-left bg-white; } diff --git a/src/components/modules/home/HomeFeature/HomeFeature.tsx b/src/components/modules/home/HomeFeature/HomeFeature.tsx index af6ec7287..d8851aa30 100644 --- a/src/components/modules/home/HomeFeature/HomeFeature.tsx +++ b/src/components/modules/home/HomeFeature/HomeFeature.tsx @@ -1,25 +1,34 @@ import React from 'react' import s from './HomeFeature.module.scss' -import HomeFeatureItem from './components/HomeFeatureItem/HomeFeatureItem' +import FirstPic from './assets/10h30-11h.png' +import SecondPic from './assets/8h.png' +import ThirdPic from './assets/green.png' -const HomeFeature = () => { +import HomeFeatureCarousel from './components/HomeFeatureCarousel/HomeFeatureCarousel' + +const CAROUSEL_DATA = [ + { + image: FirstPic, + children: Webshop owner will upload products at 10:30pm shoppers can buy fresh products at 11pm., + }, + { + image: SecondPic, + children: Most fresh fish and seafood will be listed at 8am from inventory., + }, + { + image: ThirdPic, + children: Show that food will be shipped in a greengrocery plastic bag., + }, +] + +const HomeFeature = () => { return ( -
- - Webshop owner will upload products at 10:30pm shoppers can buy fresh products at 11pm. - - - - Most fresh fish and seafood will be listed at 8am from inventory. - - - - Show that food will be shipped in a greengrocery plastic bag. - -
+
+ +
) } -export default HomeFeature +export default HomeFeature \ No newline at end of file diff --git a/src/components/modules/home/HomeFeature/assets/10h30-11h-mobile.png b/src/components/modules/home/HomeFeature/assets/10h30-11h-mobile.png deleted file mode 100644 index 871e0e15b17c918a00970be758bf94e1c682243a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2341 zcmV+=3EK9FP)-w@p)@BvoOcCSq!|s5q!#Qj>z6@GvnoGN?_|R0q{MlcuARb|iKtohghokQAGU z)!GzsQ01E1L~tVDs~RBzn((lxymUg>x9?epa}VbrkA0zka&s@-dmd}Awf^<5wa=n) zfthDCKW;It&)dz&>rs=Joofo;&oj&3S!&XOMd>tfn#ybEtYM4fPSn`S zvT`@x98UxKUJi~QtoeHUi}T-(_x(GV^4;**sD1Ao=pH|Jvp)H`Klz#CYVZ7PkFEZ_ ze%uA#GHF2T^EUgA2Q=>#%N8%O@0Gutv)&|xpAYod&$WMCHKp4M?e`sjKQ%7!ws8nZ zrBd>)Q*JowJ4mFlEn$rr76t_vtP9dVG-x_{lZIujSY=$mse!e3u2|!;R;)B7+Y8Lr zH5={!AslkDB)7m^7gi#_ID9o z`oyVmz?lcBXUH$0;dMv~cG(9d)@!gS;aYp=YUJ_!=0Wc>G4MU(63z^SEEMDxp1@mu zl2@ubI|sY1H^W#iA^?KH^A&r)G%n%Hz>!zU+@kj3%~QXgwSPxRwJ>tTYY)YH97hRp z#h}1h4rY1z2XjIg7&aZ_K<8kO*`HTrKNG@Hb#%6HW}vP*9)K-#0=b02yrMuTQ&M=9 ziIIeIMMKr3j$^iPDz+Q$HKo)wfMMmuN33Vb&C8N!DyZoNkBjhD`4&D0HFK_{6tpYk(ltdLRMnGs+-m>c@8x@nl6ur?O1FPxKl=u@cugnnR^3R! zWhKZDpa~7)lDgS;=@WvQyb9)owofRZWs8?e_mJyGrR!_X6lSDJ>XC znV$;^Bo4k3cSNyH7NPOAxRbVY#2@q)Hw@a zsus+_*`l$%*}jwKL8%7{z3Bkn)bi5RAI-dJnTxuB5>aD&B6h*><{r;$adT8B9;~`? z-iA|o(a{udg1LAU+9yvrN1U?J`D)x8)rkk~7TBhIdqXaP;83GS$refSgm^GDAgWx8)K}rn0V8YvF0(dq41l31*2LV8R1u$rw zwDb*B&meUG22p&Mdn?Cw7UA&FlS_;xqNdMzQux&)ORW@}804~0KYaF$`At@SRFo6n zv+}{4Q^k^%@veyjHTaBIBTKw-M;v?ubuW&U-6Nd@`Y=3%ReGKZQ(X+$4bBLU0rg0@ zi_wi6V^TL(De7_OQuqc=NTFx;1ca4N%F+#VF!`t*L5|JOi7;<$YqsgZ_=6nBI2Hg| z$nTO15>0TShIiBoY?ouZ`9f4T4EA zb|u6xii^y5!>r>*u6tStQFGXtRBQ3J$=Dm5Z{q-*f#=B2jzIo8k!pmeCcbw6`b0%R zh_ixk#%$;TODs*D;C^? z2zXs=H)x;WR`8~;&*}5W?-f_%E%1m z)>Jn`FUeyk`V=CtJ)g`)5fRL15|3K!Zve_g2f}f1Cbo}X_|AqGgQB>iJ6+hPqrAO^ z@Jtk_@nOxY6TFkfN8Cy^P~z?8)W`;E|IqXvABh7-ar05e0lo_xhs3kfbqU$6>1dbi z;~$r*{KVgqrotVC;1g6T^At{>vLJLW$x6C<#$_hJbH}8!2ruk^*D%_;X8}Lr00000 LNkvXXu0mjfxE5{5 diff --git a/src/components/modules/home/HomeFeature/assets/10h30-11h-desktop.png b/src/components/modules/home/HomeFeature/assets/10h30-11h.png similarity index 100% rename from src/components/modules/home/HomeFeature/assets/10h30-11h-desktop.png rename to src/components/modules/home/HomeFeature/assets/10h30-11h.png diff --git a/src/components/modules/home/HomeFeature/assets/8h-mobile.png b/src/components/modules/home/HomeFeature/assets/8h-mobile.png deleted file mode 100644 index e734cf1e54e143da4adf7d5ae34291b9e5e1a7e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2456 zcmV;J31{|+P)z7j=OFyNh;#Ej8WL z#=`=+HVcm>?6!&mzVcwFNZY?B&Y< zkt7nbiadZI4^TJQ=C7PH>x3a|q!a-mq@T}IB;_^BqA_Sl>hvLZ7bCI)=r)x~Zu$NG zaGaKbClbDX;84>@%h8B)|4v_fNH^#RD>FpJJDFmA`_s2$e1tF%(@gA$G>4~XiCC2I z(Cmt&0U_IzAVS2|11W=cBNAmXvS?IVVoD_KwsvJ8Soi0 zL>g78nWXglg8P;frxcCaw~v|)HFC+OA&yP^lHq6(4K|!;znUHZn@#RO zL|js;i-cAsFe4>q(T$=G+jye=h?KH3E$Ns@Qdg3aam^yXX6S)wUuw(|y8d`uQ230! zrjhK*H3iF(*EAu5lB{Ez)B;klsbwHpv)Um1*j0x2qpX-~tf07+OvNpYrqHi2&C_^C zl86=*9>VYxb=qyw!Qqzfa88w&`$jX2IyR#wzU<0vO9=XkbA7V4yR*LUP+aJO2Ot72 zf#V`2nk_C9It^M`amrBXXi?(ZJ+RV1S5Q(CE5KCv7{ zfXxbOUSM=Qm5HRt8vV*SBPdPzAv$atY|9chpWSmEe>Vcd-p_s$E9|h+8f69u={lXRKhYi@+1H)1Ww!qM*B# znio3EPx3TdL;1RaG8+32zr{|>5m+?oy3tfW&=D0g)@kFMXh+9*#6x951 z>(MaRLWh1uVQD}!OntqUE^2Vk4isq^XqPGuSOdbF9 z3SADebDq`_ogE5g@^IQJ%JcODOn+ot<;xhf?G9G-G{Gi_nJg&0TCdDdK$uGSDVa#_ za5$Ep5iAfMW}zF#V4+A?wR!_JZhMn9uYZxsiCh1jr2Y$kpb0)ZSYY$IZYujyp`WmZ z5pnyPXx++H^vgH)mtAmRT`WY~xw&OIzuK>mMx?-m)}5dpJA27IOr5V}-9m zb^5C_eKhlEE>n(9Zr%G2wQPTzesSt3-FIJ<|_+n9-)~dUN398uD-wHw9l7lR)IwzP}%PB{*`k|@U4NDX;*cvDhr<* zqKlu6(>K_hAP~$8eu0i42<-IY&2gR`yZ(6mx~k`HV_?j-XSCx8esJer)y9>H>pYtu z(OI5R%#edDn|~bfc#$MzU4m&58x9W1yPZ0BAKX*tUDdBE+sCnS&3aY#mq~k?Q3g}8 z&o8SonAp2#eyfg|N4B}a`JFa4Z+Njt8`Y}JF|oYD1BiH7-KiVqa}^*KNsnv4Y-?qF z;s#IiKj=#Q25aqx{p|VGszJ(L`z{N4mj{`UtqIi!g)o);*%wn4}yYzQdBHYJ6>!zKm6fhwl9N_KF}089o`?zUGi z;A!f^2_UdhI2&;C@~EP=PbdGT4i6F2O4UHb<+XjrVJn}rsp?^x;{nH!W*^Nic;8KJ z7yml04hIkC=UmtJyUy&)xZ8hlpB6&+jZ%WEi0g7#m;)RU8U=Ns6E{6VI8Yl{1(;y| z2R5#Kfx;Yw02O@xe4frSC4$@0hBIrgaUeX)Gll!yHfq^t9JYf@dNJXHyK4uz(s!JD z(AFLnU?wq3AOGt!6>R=D`#=S+pMQU!Vie5G$N#>mp5aKOlCd zqSV(`|N~Kd7;vZQe;vwMv2;4D@){Nn1Lc1 zX`DyY0#r^|BL1)<8Fg>+pEyXR)6$WA&(t1w-e_WPs-Y!-wK`#0$;e_;-=0NSBxGem zhHd^@TH2qNAiR?^jxbq-hxc_KELGnV;X$jsg-NFbWkja53$z3X%?j}d_F^^51E5j^ z@I-hgv7{2Rtvz8{IwG9l4Xca=4}e*(t5{ZU*}^Mka+VLADB=WEFL{JV@E_i&6?$HB zVO9!ANz>;9k>`Vk8=g5VYdHz{ysWs^^*TNIj!d@&GLO_Qllma5ExW~fr_oCey*_%bv, 'Component' | "option"> { + option?: TOptionsEvents +} + +const OPTION_DEFAULT: TOptionsEvents = { + slidesPerView: 1.2, + mode: 'free', + breakpoints: { + '(min-width: 640px)': { + slidesPerView: 1.8, + }, + '(min-width: 768px)': { + slidesPerView: 2.1, + }, + '(min-width: 1008px)': { + slidesPerView: 2.3, + }, + '(min-width: 1280px)': { + slidesPerView: 2.8, + }, + '(min-width: 1440px)': { + slidesPerView: 3, + }, + }, + } + +const HomeFeatureCarousel = ({option, data, ...props} : HomeFeatureCarouselProps) => { + return ( +
+ + data={data} + Component={HomeFeatureItem} + {...props} + option={{ ...OPTION_DEFAULT, ...option }} + /> +
+ ) + +} + +export default HomeFeatureCarousel \ No newline at end of file diff --git a/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.module.scss b/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.module.scss index d3dcb518b..c0b8d49ba 100644 --- a/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.module.scss +++ b/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.module.scss @@ -1,56 +1,18 @@ @import "../../../../../../styles/utilities"; .homeFeatureItem { - @apply flex items-center; - width: fit-content; - margin: auto; - - @screen md { - @apply flex flex-col items-center justify-between; - } - - @screen lg { - @apply flex flex-row; - } + @apply flex items-center justify-center; + margin-right: 0.8rem; + height: 100%; .itemImg { - @apply flex float-left clear-both; margin-right: 2.4rem; - align-items: center; - &.firstImg { - margin-top: 1rem; - content: url("../../assets/10h30-11h-desktop.png"); - } - &.secondImg { - margin-top: 1rem; - content: url("../../assets/8h-desktop.png"); - } - &.thirdImg { - margin-top: 1rem; - content: url("../../assets/green-desktop.png"); - } - - @screen md { - @apply flex flex-col justify-center items-center; - margin: auto; - margin-top: 0.8rem; - } - - @screen lg { - @apply flex float-left clear-both; - margin-right: 2.4rem; - margin-top: 0; - } + max-width: 12rem; + min-width: 8rem; } .itemText { max-width: 28rem; - min-width: 12rem; - @screen md { - @apply text-center; - } - @screen lg { - @apply text-left; - } + min-width: none; } } diff --git a/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.tsx b/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.tsx index eb566bdc9..3cc2db47f 100644 --- a/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.tsx +++ b/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.tsx @@ -1,21 +1,21 @@ import React from 'react' -import classNames from 'classnames' import s from './HomeFeatureItem.module.scss' +import { StaticImage } from 'src/components/common' -interface HomeFeatureItemProps { - image: string; - children: any; +export interface HomeFeatureItemProps { + image: StaticImageData; + children: React.ReactNode; } const HomeFeatureItem = ({ image, children }: HomeFeatureItemProps) => { return (
- home feature item img +
+ +
+
{children}
) From d6f0ef298de9f5b3f39f32c33b5ff04d34d1a59d Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2021 17:15:40 +0700 Subject: [PATCH 06/33] styles: add spacing --- pages/notification.tsx | 13 --------- pages/notifications.tsx | 16 +++++++++++ .../NotificationBreadcrumb.module.scss | 7 +++++ .../NotificationBreadcrumb.tsx | 16 +++++++++++ .../NotificationEmptyPage.module.scss | 4 +-- .../NotificationItem.module.scss | 7 ++--- .../NotificationItem/NotificationItem.tsx | 28 ++++++++++--------- .../NotificationPage/NotificationPage.tsx | 6 +--- src/components/modules/Notification/index.tsx | 4 ++- 9 files changed, 61 insertions(+), 40 deletions(-) delete mode 100644 pages/notification.tsx create mode 100644 pages/notifications.tsx create mode 100644 src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.module.scss create mode 100644 src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.tsx diff --git a/pages/notification.tsx b/pages/notification.tsx deleted file mode 100644 index df76e6c58..000000000 --- a/pages/notification.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import { Layout } from 'src/components/common'; -import { NotificationPage } from 'src/components/modules/Notification'; - -const Notification = () => { - return ( - - ) -} - -Notification.Layout = Layout - -export default Notification; \ No newline at end of file diff --git a/pages/notifications.tsx b/pages/notifications.tsx new file mode 100644 index 000000000..235a60005 --- /dev/null +++ b/pages/notifications.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import { Layout } from 'src/components/common'; +import { NotificationBreadcrumb, NotificationPage } from 'src/components/modules/Notification'; + +const Notification = () => { + return ( + <> + + + + ) +} + +Notification.Layout = Layout + +export default Notification; \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.module.scss b/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.module.scss new file mode 100644 index 000000000..d347ad872 --- /dev/null +++ b/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.module.scss @@ -0,0 +1,7 @@ +@import "../../../../styles/utilities"; +.breadCrumbWrapper { + @apply py-12 spacing-horizontal; + @screen lg { + padding-left: 3.2rem; + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.tsx b/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.tsx new file mode 100644 index 000000000..5f713e2db --- /dev/null +++ b/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.tsx @@ -0,0 +1,16 @@ +import { BreadcrumbCommon } from "src/components/common" +import s from './NotificationBreadcrumb.module.scss' + +const NOTIFICATION_DATA = [ + {link: "/notifications", name: "Notifications"}, +]; + +const NotificationBreadcrumb = () => { + return ( +
+ +
+ ) +} + +export default NotificationBreadcrumb \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss index 457b22e77..21c4e9cc3 100644 --- a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss +++ b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss @@ -6,9 +6,7 @@ padding-bottom: 2.6rem; } .emptyContent { - font-size: 2.4rem; - line-height: 3.2rem; - letter-spacing: -0.01em; + @apply sub-headline; align-content: center; color: var(--disabled); } diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss index 3ffaf1499..ac064e19f 100644 --- a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss @@ -1,9 +1,8 @@ @import '../../../../styles/utilities'; .notificationItem { - @apply flex flex-row; + @apply flex flex-row spacing-horizontal; padding-top: 1.2rem; - padding-left: 1.6rem; &:hover{ cursor: pointer; } @@ -16,10 +15,8 @@ color: var(--text-active); } .date { + @apply caption; color: #828282; - font-size: 1.2rem; - line-height: 2rem; - letter-spacing: 0.01em; } } &.isChecked { diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.tsx b/src/components/modules/Notification/NotificationItem/NotificationItem.tsx index 83de0ff8f..402575daf 100644 --- a/src/components/modules/Notification/NotificationItem/NotificationItem.tsx +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.tsx @@ -3,17 +3,17 @@ import s from '../NotificationItem/NotificationItem.module.scss' import ClassNames from 'classnames' import { IconBill } from 'src/components/icons' import Link from 'next/link' +import {ROUTE , QUERY_KEY, ACCOUNT_TAB } from 'src/utils/constanst.utils' export interface NotificationItemProps { ID?: string, title?: string, content?: string, date?: string, - link: string, checked?: boolean, } -const NotificationItem = ({ ID, title, content, date, link, checked}: NotificationItemProps) => { +const NotificationItem = ({ ID, title, content, date, checked}: NotificationItemProps) => { const [isChecked, setChecked] = useState(checked) const Check = () => { setChecked(true) @@ -28,18 +28,20 @@ const NotificationItem = ({ ID, title, content, date, link, checked}: Notificati
- -
diff --git a/src/components/modules/Notification/NotificationPage/NotificationPage.tsx b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx index 8abd39d9f..c5c274ee0 100644 --- a/src/components/modules/Notification/NotificationPage/NotificationPage.tsx +++ b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx @@ -1,7 +1,6 @@ import React from 'react' import NotificationEmptyPage from '../NotificationEmptyPage/NotificationEmptyPage' import NotificationItem, { NotificationItemProps } from '../NotificationItem/NotificationItem' -import {ROUTE , QUERY_KEY, ACCOUNT_TAB } from 'src/utils/constanst.utils' interface NotificationPageProps { @@ -14,7 +13,6 @@ const NOTIFICATION_DATA = [ title: "Your order ID33455", content: "The order has been deliveried successfully!", date: "2 days ago", - link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.ORDER}`, checked: false, }, { @@ -22,7 +20,6 @@ const NOTIFICATION_DATA = [ title: "Your order ID33456", content: "The order has been deliveried successfully!", date: "2 days ago", - link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.ORDER}`, checked: false, }, { @@ -30,7 +27,6 @@ const NOTIFICATION_DATA = [ title: "Your order ID33457", content: "The order has been deliveried successfully!", date: "2 days ago", - link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.ORDER}`, checked: true, } ] @@ -47,7 +43,7 @@ const NotificationPage = ({ isEmpty=false, data = NOTIFICATION_DATA }: Notificat { data.map(item => { return ( - + ) }) } diff --git a/src/components/modules/Notification/index.tsx b/src/components/modules/Notification/index.tsx index 64413501a..dbc87c8cc 100644 --- a/src/components/modules/Notification/index.tsx +++ b/src/components/modules/Notification/index.tsx @@ -1,2 +1,4 @@ export { default as NotificationPage } from './NotificationPage/NotificationPage' -export { default as NotificationEmptyPage } from './NotificationEmptyPage/NotificationEmptyPage' \ No newline at end of file +export { default as NotificationEmptyPage } from './NotificationEmptyPage/NotificationEmptyPage' +export { default as NotificationItem } from './NotificationItem/NotificationItem' +export { default as NotificationBreadcrumb } from './NotificationBreadcrum/NotificationBreadcrumb' \ No newline at end of file From 56cba86a1d6403d0a13aa2b0b0d26cebec8c088f Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2021 17:26:47 +0700 Subject: [PATCH 07/33] feat: Notifications title --- pages/notifications.tsx | 3 ++- .../NotificationHeading.module.scss | 9 +++++++++ .../NotificationHeading.tsx | 18 ++++++++++++++++++ .../NotificationPage.module.scss | 6 ++++++ .../NotificationPage/NotificationPage.tsx | 6 +++--- src/components/modules/Notification/index.tsx | 3 ++- 6 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 src/components/modules/Notification/NotificationHeading/NotificationHeading.module.scss create mode 100644 src/components/modules/Notification/NotificationHeading/NotificationHeading.tsx create mode 100644 src/components/modules/Notification/NotificationPage/NotificationPage.module.scss diff --git a/pages/notifications.tsx b/pages/notifications.tsx index 235a60005..f124519f9 100644 --- a/pages/notifications.tsx +++ b/pages/notifications.tsx @@ -1,11 +1,12 @@ import React from 'react'; import { Layout } from 'src/components/common'; -import { NotificationBreadcrumb, NotificationPage } from 'src/components/modules/Notification'; +import { NotificationBreadcrumb, NotificationHeading, NotificationPage } from 'src/components/modules/Notification'; const Notification = () => { return ( <> + ) diff --git a/src/components/modules/Notification/NotificationHeading/NotificationHeading.module.scss b/src/components/modules/Notification/NotificationHeading/NotificationHeading.module.scss new file mode 100644 index 000000000..2833c5f10 --- /dev/null +++ b/src/components/modules/Notification/NotificationHeading/NotificationHeading.module.scss @@ -0,0 +1,9 @@ +@import "../../../../styles/utilities"; + +.headingWrapper { + @apply flex spacing-horizontal-left pb-16; + .heading{ + max-width: 121.6rem; + flex-grow: 1; + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationHeading/NotificationHeading.tsx b/src/components/modules/Notification/NotificationHeading/NotificationHeading.tsx new file mode 100644 index 000000000..573bac2a9 --- /dev/null +++ b/src/components/modules/Notification/NotificationHeading/NotificationHeading.tsx @@ -0,0 +1,18 @@ +import { HeadingCommon } from "src/components/common" +import s from './NotificationHeading.module.scss' + +interface NotificationHeadingProps { + children?: React.ReactNode, + heading?: string, +} + +const NotificationHeading = ({heading = "NOTIFICATIONS"}: NotificationHeadingProps) => { + return ( +
+
+ {heading} +
+
+ ) +} +export default NotificationHeading \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationPage/NotificationPage.module.scss b/src/components/modules/Notification/NotificationPage/NotificationPage.module.scss new file mode 100644 index 000000000..1a214dccc --- /dev/null +++ b/src/components/modules/Notification/NotificationPage/NotificationPage.module.scss @@ -0,0 +1,6 @@ +.notificationPage { + padding-bottom: 5.4rem; + @screen md { + padding-bottom: 12.8rem; + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationPage/NotificationPage.tsx b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx index c5c274ee0..954b7727c 100644 --- a/src/components/modules/Notification/NotificationPage/NotificationPage.tsx +++ b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx @@ -1,7 +1,7 @@ import React from 'react' import NotificationEmptyPage from '../NotificationEmptyPage/NotificationEmptyPage' import NotificationItem, { NotificationItemProps } from '../NotificationItem/NotificationItem' - +import s from './NotificationPage.module.scss' interface NotificationPageProps { isEmpty?: boolean, @@ -34,7 +34,7 @@ const NOTIFICATION_DATA = [ const NotificationPage = ({ isEmpty=false, data = NOTIFICATION_DATA }: NotificationPageProps) => { return ( - <> +
{ isEmpty ? @@ -49,7 +49,7 @@ const NotificationPage = ({ isEmpty=false, data = NOTIFICATION_DATA }: Notificat } } - +
) } diff --git a/src/components/modules/Notification/index.tsx b/src/components/modules/Notification/index.tsx index dbc87c8cc..413535595 100644 --- a/src/components/modules/Notification/index.tsx +++ b/src/components/modules/Notification/index.tsx @@ -1,4 +1,5 @@ export { default as NotificationPage } from './NotificationPage/NotificationPage' export { default as NotificationEmptyPage } from './NotificationEmptyPage/NotificationEmptyPage' export { default as NotificationItem } from './NotificationItem/NotificationItem' -export { default as NotificationBreadcrumb } from './NotificationBreadcrum/NotificationBreadcrumb' \ No newline at end of file +export { default as NotificationBreadcrumb } from './NotificationBreadcrum/NotificationBreadcrumb' +export { default as NotificationHeading } from './NotificationHeading/NotificationHeading' \ No newline at end of file From 3e8b2eeb11b0454b09f4f1a847d5e8226ba7efc0 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 17:36:29 +0700 Subject: [PATCH 08/33] :bug: bug: missing import in HeaderMenu :%s --- next-env.d.ts | 3 --- .../common/Header/components/HeaderMenu/HeaderMenu.tsx | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/next-env.d.ts b/next-env.d.ts index 9bc3dd46b..c6643fda1 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,3 @@ /// /// /// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index 4487fa83c..c9403a49d 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -1,3 +1,4 @@ +import classNames from 'classnames' import Link from 'next/link' import { useRouter } from 'next/router' import { memo, useMemo } from 'react' From 99b43daa8ae9fefc88ca9772409d3c9938e1802d Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 17:38:27 +0700 Subject: [PATCH 09/33] :art: styles: move scroll to top to bottom :%s --- src/components/common/ScrollToTop/ScrollToTop.module.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/common/ScrollToTop/ScrollToTop.module.scss b/src/components/common/ScrollToTop/ScrollToTop.module.scss index 940bc0ac2..bfaa5cb99 100644 --- a/src/components/common/ScrollToTop/ScrollToTop.module.scss +++ b/src/components/common/ScrollToTop/ScrollToTop.module.scss @@ -8,7 +8,7 @@ &.show { @apply block rounded-lg fixed cursor-pointer; right: 6.4rem; - bottom: 21.6rem; + bottom: 10.6rem; width: 6.4rem; height: 6.4rem; background-color: var(--border-line); From 2e66e0108eee801a118bafff3b6451ef6db9d0ff Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2021 17:53:54 +0700 Subject: [PATCH 10/33] feat: add demo page --- pages/demo.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pages/demo.tsx b/pages/demo.tsx index 38f91037c..47fb1eea1 100644 --- a/pages/demo.tsx +++ b/pages/demo.tsx @@ -1,13 +1,13 @@ import { Layout } from 'src/components/common'; - - - +import { NotificationEmptyPage, NotificationHeading, NotificationBreadcrumb } from 'src/components/modules/Notification'; export default function Demo() { - return <> - Lorem ipsum dolor sit amet consectetur adipisicing elit. Molestias possimus tempore, nulla voluptate sed iste unde qui. Natus, amet minus, fugiat unde optio iste perferendis ea quae iusto asperiores voluptates enim sunt ducimus? Perferendis velit maxime sint pariatur beatae, veniam nulla sed, impedit, consectetur minus est libero enim? Quia reiciendis dolor, porro nisi harum fuga ullam pariatur facilis quas, praesentium quae, eveniet officiis officia animi aspernatur ut sunt commodi vero totam! Rerum, placeat perferendis laborum itaque blanditiis natus aperiam, eum delectus enim architecto eos, et voluptates! Illo at sed, pariatur ullam suscipit rerum recusandae doloremque natus nihil. Et temporibus quae necessitatibus quam alias, repellat laudantium a perspiciatis dolorum accusamus officiis pariatur ipsum facilis, nobis magni molestiae accusantium assumenda tempora consequuntur natus nostrum? Id, mollitia alias quidem hic aperiam error, blanditiis vero distinctio sit neque assumenda odio praesentium, perspiciatis aspernatur exercitationem. Eveniet nostrum tempore saepe cupiditate totam fuga doloremque placeat natus beatae quibusdam labore tempora delectus alias architecto vel, recusandae facilis nam rerum dolores magni? Eaque fugiat ut dicta. Aperiam, excepturi ad molestias non corrupti, officia dolore sequi, provident laborum officiis praesentium beatae quos? Totam et consequatur atque fugit voluptate. Aliquam neque, ab hic suscipit obcaecati ut aut quos. Expedita, ipsam. - Lorem ipsum dolor sit amet consectetur adipisicing elit. Molestias possimus tempore, nulla voluptate sed iste unde qui. Natus, amet minus, fugiat unde optio iste perferendis ea quae iusto asperiores voluptates enim sunt ducimus? Perferendis velit maxime sint pariatur beatae, veniam nulla sed, impedit, consectetur minus est libero enim? Quia reiciendis dolor, porro nisi harum fuga ullam pariatur facilis quas, praesentium quae, eveniet officiis officia animi aspernatur ut sunt commodi vero totam! Rerum, placeat perferendis laborum itaque blanditiis natus aperiam, eum delectus enim architecto eos, et voluptates! Illo at sed, pariatur ullam suscipit rerum recusandae doloremque natus nihil. Et temporibus quae necessitatibus quam alias, repellat laudantium a perspiciatis dolorum accusamus officiis pariatur ipsum facilis, nobis magni molestiae accusantium assumenda tempora consequuntur natus nostrum? Id, mollitia alias quidem hic aperiam error, blanditiis vero distinctio sit neque assumenda odio praesentium, perspiciatis aspernatur exercitationem. Eveniet nostrum tempore saepe cupiditate totam fuga doloremque placeat natus beatae quibusdam labore tempora delectus alias architecto vel, recusandae facilis nam rerum dolores magni? Eaque fugiat ut dicta. Aperiam, excepturi ad molestias non corrupti, officia dolore sequi, provident laborum officiis praesentium beatae quos? Totam et consequatur atque fugit voluptate. Aliquam neque, ab hic suscipit obcaecati ut aut quos. Expedita, ipsam. - Lorem ipsum dolor sit amet consectetur adipisicing elit. Molestias possimus tempore, nulla voluptate sed iste unde qui. Natus, amet minus, fugiat unde optio iste perferendis ea quae iusto asperiores voluptates enim sunt ducimus? Perferendis velit maxime sint pariatur beatae, veniam nulla sed, impedit, consectetur minus est libero enim? Quia reiciendis dolor, porro nisi harum fuga ullam pariatur facilis quas, praesentium quae, eveniet officiis officia animi aspernatur ut sunt commodi vero totam! Rerum, placeat perferendis laborum itaque blanditiis natus aperiam, eum delectus enim architecto eos, et voluptates! Illo at sed, pariatur ullam suscipit rerum recusandae doloremque natus nihil. Et temporibus quae necessitatibus quam alias, repellat laudantium a perspiciatis dolorum accusamus officiis pariatur ipsum facilis, nobis magni molestiae accusantium assumenda tempora consequuntur natus nostrum? Id, mollitia alias quidem hic aperiam error, blanditiis vero distinctio sit neque assumenda odio praesentium, perspiciatis aspernatur exercitationem. Eveniet nostrum tempore saepe cupiditate totam fuga doloremque placeat natus beatae quibusdam labore tempora delectus alias architecto vel, recusandae facilis nam rerum dolores magni? Eaque fugiat ut dicta. Aperiam, excepturi ad molestias non corrupti, officia dolore sequi, provident laborum officiis praesentium beatae quos? Totam et consequatur atque fugit voluptate. Aliquam neque, ab hic suscipit obcaecati ut aut quos. Expedita, ipsam. + return ( + <> + + + + ) } Demo.Layout = Layout From 24bacba766506c6d9eec5135eeddd8819e6b7251 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 18:18:06 +0700 Subject: [PATCH 11/33] :sparkles: feat: change active tab from query in page account :%s --- .../AccountNavigation/AccountNavigation.tsx | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx index a8da59211..91f827636 100644 --- a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx +++ b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx @@ -3,17 +3,40 @@ import s from './AccountNavigation.module.scss' import AccountNavigationItem from './components/AccountNavigationItem/AccountNavigationItem' import {TabPaneProps} from '../../../common/TabCommon/components/TabPane/TabPane' +import { ACCOUNT_TAB, QUERY_KEY } from "src/utils/constanst.utils" +import { useRouter } from "next/router" interface AccountNavigationProps { defaultActiveIndex: number; children: React.ReactNode } +const getTabIndex = (tab?: string): number => { + switch (tab) { + case ACCOUNT_TAB.CUSTOMER_INFO: + return 0; + case ACCOUNT_TAB.ORDER: + return 1; + case ACCOUNT_TAB.FAVOURITE: + return 2; + default: + return 0 + } +} + const AccountNavigation = ({ defaultActiveIndex, children } : AccountNavigationProps) => { + const router = useRouter() + const [active, setActive] = useState(defaultActiveIndex) const sliderRef = useRef(null); const headerRef = useRef(null) + useEffect(() => { + const query = router.query[QUERY_KEY.TAB] as string + const index = getTabIndex(query) + setActive(index) + }, [router.query[QUERY_KEY.TAB]]) + const onTabClick = (index: number) => { setActive(index) } From eab45e229c0e4b37f59785c0a2c252cb06f498e8 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Tue, 14 Sep 2021 18:38:33 +0700 Subject: [PATCH 12/33] :ambulance: fix Account Page --- next-env.d.ts | 3 + .../common/TabCommon/TabCommon.module.scss | 2 +- .../AccountPage/AccountPage.module.scss | 2 + .../account/AccountPage/AccountPage.tsx | 5 +- .../AccountInfomation.module.scss | 1 + .../AccountInfomation/AccountInfomation.tsx | 40 +++++----- .../EditInfoModal/EditInfoModal.module.scss | 27 +------ .../EditInfoModal/EditInfoModal.tsx | 6 +- .../FavouriteProducts.module.scss | 5 ++ .../FavouriteProducts/FavouriteProducts.tsx | 20 +++++ .../OrderInformation/OrderInformation.tsx | 74 +++++++++---------- .../DeliveryItem/DeliveryItem.module.scss | 3 +- .../IdAndStatus/IdAndStatus.module.scss | 6 +- .../components/IdAndStatus/IdAndStatus.tsx | 6 +- .../components/ReOrder/ReOrder.module.scss | 7 +- .../TotalPrice/TotalPrice.module.scss | 6 +- 16 files changed, 101 insertions(+), 112 deletions(-) create mode 100644 src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.module.scss create mode 100644 src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.tsx diff --git a/next-env.d.ts b/next-env.d.ts index c6643fda1..9bc3dd46b 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,3 +1,6 @@ /// /// /// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/src/components/common/TabCommon/TabCommon.module.scss b/src/components/common/TabCommon/TabCommon.module.scss index d8b5d0f9a..ff90e8979 100644 --- a/src/components/common/TabCommon/TabCommon.module.scss +++ b/src/components/common/TabCommon/TabCommon.module.scss @@ -7,7 +7,7 @@ .tabList { @apply flex; position: relative; - border-bottom: 2px solid #FBFBFB; + border-bottom: 2px solid #EBEBEB; padding: 0.8rem 0; &.center{ margin: auto; diff --git a/src/components/modules/account/AccountPage/AccountPage.module.scss b/src/components/modules/account/AccountPage/AccountPage.module.scss index 3f8307750..5eece6c80 100644 --- a/src/components/modules/account/AccountPage/AccountPage.module.scss +++ b/src/components/modules/account/AccountPage/AccountPage.module.scss @@ -6,6 +6,8 @@ margin-top: -3.2rem; padding-top: 3.2rem; padding-bottom: 3.2rem; + min-height: 70rem; + @screen md { padding-left: 3.2rem; diff --git a/src/components/modules/account/AccountPage/AccountPage.tsx b/src/components/modules/account/AccountPage/AccountPage.tsx index 3b0948c40..c463b056a 100644 --- a/src/components/modules/account/AccountPage/AccountPage.tsx +++ b/src/components/modules/account/AccountPage/AccountPage.tsx @@ -5,9 +5,12 @@ import { HeadingCommon, TabPane } from "src/components/common" import AccountNavigation from '../AccountNavigation/AccountNavigation' import AccountInfomation from "./components/AccountInfomation/AccountInfomation" +import FavouriteProducts from "./components/FavouriteProducts/FavouriteProducts" import OrderInfomation from './components/OrderInformation/OrderInformation' import EditInfoModal from './components/EditInfoModal/EditInfoModal' +import { PRODUCT_CART_DATA_TEST } from 'src/utils/demo-data'; + const waiting = [ { id: "NO 123456", @@ -74,7 +77,7 @@ const AccountPage = ({ defaultActiveContent="orders" } : AccountPageProps) => { - {/* */} + diff --git a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss index 442dae2eb..466dc3127 100644 --- a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss +++ b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss @@ -38,6 +38,7 @@ .shippingInfo { @apply heading-3 font-heading; + margin-bottom: .8rem; } .accountAddress { diff --git a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.tsx b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.tsx index f24b36216..dac651fea 100644 --- a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.tsx +++ b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.tsx @@ -21,34 +21,30 @@ const AccountInfomation = ({ account, onClick } : AccountInfomationProps) => { return (
- { -
-
- avatar -
+
+ avatar +
-
- {account.name} -
-
- {account.email} -
+
+ {account.name} +
+
+ {account.email} +
-
+
-
Shipping Infomation
+
Shipping Infomation
-
- {account.address + `, ${account.state}, ${account.city}, ${account.postalCode}`} -
+
+ {account.address + `, ${account.state}, ${account.city}, ${account.postalCode}`} +
-
- {account.phoneNumber} -
+
+ {account.phoneNumber} +
-
Edit
-
- } +
Edit
) } diff --git a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss index fb67ab24c..1215ac2a3 100644 --- a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss +++ b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss @@ -32,30 +32,7 @@ } .buttons { - @apply flex; - - .buttonCancel { - @apply bg-white text-center font-bold custom-border-radius-lg; - color: #141414; - border: 1px solid #141414; - padding: 1.6rem; - margin-right: 1.6rem; - width: 100%; - - &:hover { - @apply cursor-pointer; - } - } - - .buttonSave { - @apply text-center font-bold custom-border-radius-lg; - background-color: var(--primary); - color: white; - padding: 1.6rem; - width: 100%; - &:hover { - @apply cursor-pointer; - } - } + @apply grid grid-cols-2; + grid-gap: 1.6rem; } } \ No newline at end of file diff --git a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx index 5f88df01b..4f1b8296b 100644 --- a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx +++ b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx @@ -1,7 +1,7 @@ import React from "react" import s from './EditInfoModal.module.scss' -import { ModalCommon, Inputcommon, SelectCommon } from '../../../../../common' +import { ModalCommon, Inputcommon, SelectCommon, ButtonCommon } from '../../../../../common' interface EditInfoModalProps { accountInfo: {name: string, email: string, address: string, state: string, city: string, postalCode: string, phoneNumber: string}; @@ -58,8 +58,8 @@ const EditInfoModal = ({ accountInfo, visible = false, closeModal }: EditInfoMod
-
Cancel
-
Save
+ Cancel + Save
diff --git a/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.module.scss b/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.module.scss new file mode 100644 index 000000000..e6eef3499 --- /dev/null +++ b/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.module.scss @@ -0,0 +1,5 @@ +@import '../../../../../../styles/utilities'; + +.favouriteProducts { + +} \ No newline at end of file diff --git a/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.tsx b/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.tsx new file mode 100644 index 000000000..f88605242 --- /dev/null +++ b/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.tsx @@ -0,0 +1,20 @@ +import React from "react" +import s from './FavouriteProducts.module.scss' +import {ProductList} from '../../../../../common' +import { ProductCardProps } from '../../../../../common/ProductCard/ProductCard' + + +interface FavouriteProductsProps { + products: ProductCardProps[]; +} + +const FavouriteProducts = ({ products } : FavouriteProductsProps) => { + + return ( +
+ +
+ ) +} + +export default FavouriteProducts \ No newline at end of file diff --git a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx index 98f305b9e..211cebe3b 100644 --- a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx +++ b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx @@ -16,48 +16,44 @@ const OrderInformation = ({ waiting, delivering, delivered} : OrderInformationPr return (
- { -
-
Order Information
+
Order Information
-
- - -
- { - waiting.map((order, i) => { - return ( - - ) - }) - } -
+
+ + +
+ { + waiting.map((order, i) => { + return ( + + ) + }) + } +
- -
- { - delivering.map((order, i) => { - return ( - - ) - }) - } -
+ +
+ { + delivering.map((order, i) => { + return ( + + ) + }) + } +
- -
- { - delivered.map((order, i) => { - return ( - - ) - }) - } -
-
-
-
- } + +
+ { + delivered.map((order, i) => { + return ( + + ) + }) + } +
+ +
) } diff --git a/src/components/modules/account/DeliveryItem/DeliveryItem.module.scss b/src/components/modules/account/DeliveryItem/DeliveryItem.module.scss index b83b77fd3..44cc3a5c9 100644 --- a/src/components/modules/account/DeliveryItem/DeliveryItem.module.scss +++ b/src/components/modules/account/DeliveryItem/DeliveryItem.module.scss @@ -1,9 +1,8 @@ @import '../../../../styles/utilities'; .deliveryItem { - @apply flex bg-white items-center custom-border-radius; + @apply flex bg-white items-center shape-common; margin-bottom: 1.6rem; - border: 1px solid var(--primary) } .separator { diff --git a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss index bc0d692b3..5e8cbdd83 100644 --- a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss +++ b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss @@ -2,11 +2,7 @@ .idAndStatus { @apply items-center; - padding: 2.4rem 0 2.4rem 1rem; - - @screen md { - padding: 2.4rem 0 2.4rem 1.2rem; - } + padding: 2.4rem 0 2.4rem 1.2rem; @screen lg { padding: 2.4rem 0 2.4rem 2.4rem; diff --git a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.tsx b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.tsx index 841dd530f..578c94f97 100644 --- a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.tsx +++ b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.tsx @@ -5,10 +5,10 @@ import s from './IdAndStatus.module.scss' interface IdAndStatusProps { id?: string; - status: "waiting" | "delivering" | "delivered"; + status: "Waiting" | "Delivering" | "Delivered"; } -const IdAndStatus = ({ id, status="waiting" } : IdAndStatusProps) => { +const IdAndStatus = ({ id, status="Waiting" } : IdAndStatusProps) => { return (
@@ -16,7 +16,7 @@ const IdAndStatus = ({ id, status="waiting" } : IdAndStatusProps) => {
{status} + })}> {status.charAt(0).toUpperCase() + status.slice(1)}
) diff --git a/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss b/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss index b46b528e1..ce36380da 100644 --- a/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss +++ b/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss @@ -3,14 +3,9 @@ .reOrder { @apply text-white custom-border-radius hidden font-bold; padding: .4rem .6rem; - margin-right: 1rem; + margin-right: 1.2rem; background-color: var(--primary); - @screen md { - padding: .4rem .6rem; - margin-right: 1.2rem; - } - @screen lg { padding: .8rem 1.2rem; margin-right: 2.4rem; diff --git a/src/components/modules/account/DeliveryItem/components/TotalPrice/TotalPrice.module.scss b/src/components/modules/account/DeliveryItem/components/TotalPrice/TotalPrice.module.scss index 9a4f795b3..e987f30c1 100644 --- a/src/components/modules/account/DeliveryItem/components/TotalPrice/TotalPrice.module.scss +++ b/src/components/modules/account/DeliveryItem/components/TotalPrice/TotalPrice.module.scss @@ -2,11 +2,7 @@ .totalPrice { margin-left: auto; - margin-right: 1rem; - - @screen md { - margin-right: 1.2rem; - } + margin-right: 1.2rem; @screen lg { margin-right: 2.4rem; From c20150902e77cee4261bb707327714905e9a6a63 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Tue, 14 Sep 2021 19:08:05 +0700 Subject: [PATCH 13/33] :ambulance: fix Account Page --- .../AccountNavigationItem.module.scss | 4 ++-- .../AccountInfomation.module.scss | 21 +++++++++++++------ .../EditInfoModal/EditInfoModal.module.scss | 1 + 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss index 07952e6d8..8725597cf 100644 --- a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss +++ b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss @@ -1,7 +1,7 @@ @import '../../../../../../styles/utilities'; .accountNavigationItem { - @apply custom-border-radius; + @apply shape-common; width: fit-content; padding: 1.2rem 1.6rem 1.2rem 0rem; @@ -12,7 +12,7 @@ } &.active { - @apply custom-border-radius font-bold; + @apply shape-common font-bold; background-color: var(--primary); color: white; padding: 1.2rem 1.6rem 1.2rem 1.6rem; diff --git a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss index 466dc3127..6e8150f1b 100644 --- a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss +++ b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss @@ -1,13 +1,11 @@ @import '../../../../../../styles/utilities'; .accountInfomation { - @apply flex justify-center items-center; - text-align: center; + @apply block text-center; margin-top: 1.6rem; @screen md { - @apply block; - text-align: left; + @apply text-left; margin-top: 0; } @@ -32,8 +30,13 @@ border: 1px solid var(--disabled); max-width: 39.2rem; min-width: 30rem; + margin: auto; margin-top: 2.4rem; margin-bottom: 2.4rem; + + @screen md { + margin-left: 0; + } } .shippingInfo { @@ -42,8 +45,14 @@ } .accountAddress { - max-width: 31rem; - min-width: none; + margin: auto; + max-width: 28rem; + + @screen md { + max-width: 31rem; + min-width: none; + margin-left: 0; + } } .editInfoBtn { diff --git a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss index 1215ac2a3..20acd257b 100644 --- a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss +++ b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss @@ -17,6 +17,7 @@ @apply bg-white cursor-pointer; border: white; margin-right: 0.8rem; + height: fit-content; } .inputPostalCode { From cda96f21e3b7ac2960828c1e01e35e1ce6f3beb7 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 09:35:04 +0700 Subject: [PATCH 14/33] :art: styles: change query tab logic in acc page :%s --- .../AccountNavigation/AccountNavigation.tsx | 26 ++---------- .../account/AccountPage/AccountPage.tsx | 41 +++++++++++++++++-- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx index 91f827636..4fd534148 100644 --- a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx +++ b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx @@ -1,41 +1,23 @@ import React, { useRef, useEffect, Children, ReactElement, PropsWithChildren, useState, cloneElement } from "react" import s from './AccountNavigation.module.scss' - import AccountNavigationItem from './components/AccountNavigationItem/AccountNavigationItem' import {TabPaneProps} from '../../../common/TabCommon/components/TabPane/TabPane' -import { ACCOUNT_TAB, QUERY_KEY } from "src/utils/constanst.utils" -import { useRouter } from "next/router" interface AccountNavigationProps { defaultActiveIndex: number; children: React.ReactNode } -const getTabIndex = (tab?: string): number => { - switch (tab) { - case ACCOUNT_TAB.CUSTOMER_INFO: - return 0; - case ACCOUNT_TAB.ORDER: - return 1; - case ACCOUNT_TAB.FAVOURITE: - return 2; - default: - return 0 - } -} - const AccountNavigation = ({ defaultActiveIndex, children } : AccountNavigationProps) => { - const router = useRouter() - const [active, setActive] = useState(defaultActiveIndex) const sliderRef = useRef(null); const headerRef = useRef(null) useEffect(() => { - const query = router.query[QUERY_KEY.TAB] as string - const index = getTabIndex(query) - setActive(index) - }, [router.query[QUERY_KEY.TAB]]) + if (defaultActiveIndex !== undefined) { + setActive(defaultActiveIndex) + } + }, [defaultActiveIndex]) const onTabClick = (index: number) => { setActive(index) diff --git a/src/components/modules/account/AccountPage/AccountPage.tsx b/src/components/modules/account/AccountPage/AccountPage.tsx index c463b056a..47f5cf955 100644 --- a/src/components/modules/account/AccountPage/AccountPage.tsx +++ b/src/components/modules/account/AccountPage/AccountPage.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react" +import React, { useEffect, useState } from "react" import s from './AccountPage.module.scss' import { HeadingCommon, TabPane } from "src/components/common" @@ -10,12 +10,19 @@ import OrderInfomation from './components/OrderInformation/OrderInformation' import EditInfoModal from './components/EditInfoModal/EditInfoModal' import { PRODUCT_CART_DATA_TEST } from 'src/utils/demo-data'; +import { ACCOUNT_TAB, QUERY_KEY } from "src/utils/constanst.utils" +import { useRouter } from "next/router" const waiting = [ { id: "NO 123456", products: ["Tomato", "Fish", "Pork", "Onion"], totalPrice : 1000 + }, + { + id: "NO 123457", + products: ["Tomato", "Fish", "Pork", "Onion"], + totalPrice : 1000 } ] @@ -24,6 +31,11 @@ const delivering = [ id: "NO 123456", products: ["Tomato", "Fish", "Pork", "Onion", "Tomato", "Fish", "Pork", "Onion"], totalPrice : 1000 + }, + { + id: "NO 123457", + products: ["Tomato", "Fish", "Pork", "Onion", "Tomato", "Fish", "Pork", "Onion"], + totalPrice : 1000 } ] @@ -32,6 +44,11 @@ const delivered = [ id: "NO 123456", products: ["Tomato", "Fish", "Pork", "Onion", "Tomato", "Fish", "Pork", "Onion"], totalPrice : 1000 + }, + { + id: "NO 123457", + products: ["Tomato", "Fish", "Pork", "Onion", "Tomato", "Fish", "Pork", "Onion"], + totalPrice : 1000 } ] @@ -48,12 +65,30 @@ let account = { interface AccountPageProps { defaultActiveContent?: "info" | "orders" | "favorites" } +const getTabIndex = (tab?: string): number => { + switch (tab) { + case ACCOUNT_TAB.CUSTOMER_INFO: + return 0; + case ACCOUNT_TAB.ORDER: + return 1; + case ACCOUNT_TAB.FAVOURITE: + return 2; + default: + return 0 + } +} const AccountPage = ({ defaultActiveContent="orders" } : AccountPageProps) => { - - const [activeTab] = useState(defaultActiveContent==="info" ? 0 : defaultActiveContent==="orders" ? 1 : 2) + const router = useRouter() + const [activeTab, setActiveTab] = useState(defaultActiveContent==="info" ? 0 : defaultActiveContent==="orders" ? 1 : 2) const [modalVisible, setModalVisible] = useState(false); + useEffect(() => { + const query = router.query[QUERY_KEY.TAB] as string + const index = getTabIndex(query) + setActiveTab(index) + }, [router.query[QUERY_KEY.TAB]]) + function showModal() { setModalVisible(true); } From 407acb7415ccd322eb9856f054a2e3e3151c5997 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 09:38:18 +0700 Subject: [PATCH 15/33] :art: styles: fix style active tab in acc page :%s --- .../AccountNavigationItem/AccountNavigationItem.module.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss index 8725597cf..6ae8f42e2 100644 --- a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss +++ b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss @@ -1,7 +1,6 @@ @import '../../../../../../styles/utilities'; .accountNavigationItem { - @apply shape-common; width: fit-content; padding: 1.2rem 1.6rem 1.2rem 0rem; @@ -17,12 +16,13 @@ color: white; padding: 1.2rem 1.6rem 1.2rem 1.6rem; margin-right: 1.6rem; - + @screen md { @apply font-normal; background-color: #FBFBFB; border-radius: 0 1.6rem 1.6rem 0; color: #3D3D3D; + clip-path: none; } } From 77b016ef379e927790abf6a9fe0e974edb9a8116 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 09:47:14 +0700 Subject: [PATCH 16/33] :fire: remove: account (without login) :%s --- pages/account.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/pages/account.tsx b/pages/account.tsx index 84f0d8d74..7da102c52 100644 --- a/pages/account.tsx +++ b/pages/account.tsx @@ -1,13 +1,10 @@ import React from 'react'; import { Layout } from 'src/components/common'; -import { AccountPage, AccountSignIn } from 'src/components/modules/account'; +import { AccountPage } from 'src/components/modules/account'; const Account = () => { return ( - // - <> - - + ); }; From 2c3d9e690b47ec277e9b336b91eb8f65419ae95c Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 09:50:06 +0700 Subject: [PATCH 17/33] :art: styles: add spacing bottom for noti page (empty) :%s --- .../NotificationEmptyPage/NotificationEmptyPage.module.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss index 21c4e9cc3..13efe5e14 100644 --- a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss +++ b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss @@ -2,6 +2,10 @@ .emptyPage { @apply flex justify-center items-center flex-col; + margin-bottom: 5.4rem; + @screen lg { + margin-bottom: 12.8rem; + } .emptyIcon { padding-bottom: 2.6rem; } From 0cfb2beab46ec31f78ad23d49f63af8199008938 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 10:08:34 +0700 Subject: [PATCH 18/33] :recycle: enhan: add page noti (empty) demo :%s --- .../common/Header/components/HeaderMenu/HeaderMenu.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index c9403a49d..ed7fe7ca0 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -37,6 +37,10 @@ const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleF link: '/account-not-login', name: 'Account Not Login', }, + { + link: '/demo', + name: 'Notifications (Demo case empty)', + }, { link: ROUTE.NOTIFICATION, name: 'Notifications', From 72e16697becf30dad9e531da7c61e65df22bf7ed Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 10:08:58 +0700 Subject: [PATCH 19/33] :art: styles: set max width for content = 1536px :%s --- src/components/common/Layout/Layout.module.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/common/Layout/Layout.module.scss b/src/components/common/Layout/Layout.module.scss index 30e4a077d..fec46538b 100644 --- a/src/components/common/Layout/Layout.module.scss +++ b/src/components/common/Layout/Layout.module.scss @@ -4,6 +4,8 @@ min-height: 100vh; > main { flex: 1; + max-width: min( 100%, 1536px); + margin: auto; } } .filter{ From bd02bff282cc5cc01fbf1a6186da99b4606e4855 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 10:20:39 +0700 Subject: [PATCH 20/33] :art: styles: set max width for content = 1536px :%s --- .../common/Header/components/HeaderMenu/HeaderMenu.tsx | 4 ++-- src/components/common/Layout/Layout.module.scss | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index ed7fe7ca0..ea4e7ab19 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -35,11 +35,11 @@ const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleF }, { link: '/account-not-login', - name: 'Account Not Login', + name: 'Account Not Login (Demo)', }, { link: '/demo', - name: 'Notifications (Demo case empty)', + name: 'Notifications Empty (Demo)', }, { link: ROUTE.NOTIFICATION, diff --git a/src/components/common/Layout/Layout.module.scss b/src/components/common/Layout/Layout.module.scss index fec46538b..679b0b48f 100644 --- a/src/components/common/Layout/Layout.module.scss +++ b/src/components/common/Layout/Layout.module.scss @@ -4,6 +4,7 @@ min-height: 100vh; > main { flex: 1; + width: 100%; max-width: min( 100%, 1536px); margin: auto; } From 3641ffa6e70b0a0a5c024a06208a89c954ed0b32 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 12:52:34 +0700 Subject: [PATCH 21/33] :art: styles: header mobile animation :%s --- next-env.d.ts | 3 -- src/components/common/Header/Header.tsx | 26 +++++---- .../HeaderMenu/HeaderMenu.module.scss | 54 ++++++++++++++----- .../components/HeaderMenu/HeaderMenu.tsx | 27 +++++++--- .../home/HomeBanner/HomeBanner.module.scss | 3 +- src/styles/_base.scss | 2 +- tailwind.config.js | 2 +- 7 files changed, 76 insertions(+), 41 deletions(-) diff --git a/next-env.d.ts b/next-env.d.ts index 9bc3dd46b..c6643fda1 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,3 @@ /// /// /// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index b86b36fb7..ad55d1feb 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -12,10 +12,10 @@ import HeaderSubMenuMobile from './components/HeaderSubMenuMobile/HeaderSubMenuM import s from './Header.module.scss' interface props { toggleFilter: () => void, - visibleFilter:boolean + visibleFilter: boolean } -const Header = memo(({ toggleFilter,visibleFilter }: props) => { +const Header = memo(({ toggleFilter, visibleFilter }: props) => { const headeFullRef = useRef(null) const [isFullHeader, setIsFullHeader] = useState(true) const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: false }) @@ -30,27 +30,23 @@ const Header = memo(({ toggleFilter,visibleFilter }: props) => { } } - const headerHeight = useMemo(() => { - return headeFullRef.current?.offsetHeight - }, [headeFullRef.current]) - useEffect(() => { const handleScroll = () => { - if (!isMobile()) { - if (!headerHeight || window.scrollY > headerHeight) { - setIsFullHeader(false) - } else { - setIsFullHeader(true) - } + if (!headeFullRef.current || window.scrollY > headeFullRef.current?.offsetHeight) { + setIsFullHeader(false) } else { setIsFullHeader(true) } + // if (!isMobile()) { + // } else { + // setIsFullHeader(true) + // } } window.addEventListener('scroll', handleScroll) return () => { window.removeEventListener('scroll', handleScroll) } - }, [headerHeight]) + }, [headeFullRef.current]) return ( <> @@ -59,16 +55,18 @@ const Header = memo(({ toggleFilter,visibleFilter }: props) => { [s.show]: !isFullHeader })}> - +
void, openModalInfo: () => void, toggleFilter: () => void, @@ -20,7 +22,7 @@ interface Props { const FILTER_PAGE = [ROUTE.HOME, ROUTE.PRODUCTS] -const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleFilter, toggleCart}: Props) => { +const HeaderMenu = memo(({ isFull, isStickyHeader, visibleFilter, openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => { const router = useRouter() @@ -56,7 +58,11 @@ const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleF ], [openModalAuthen]) return ( -
+
@@ -64,8 +70,8 @@ const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleF { FILTER_PAGE.includes(router.pathname) && ( ) } @@ -75,8 +81,13 @@ const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleF
-
- +
+
+ +
+
+ Search +
    diff --git a/src/components/modules/home/HomeBanner/HomeBanner.module.scss b/src/components/modules/home/HomeBanner/HomeBanner.module.scss index bb65a2549..3191b5515 100644 --- a/src/components/modules/home/HomeBanner/HomeBanner.module.scss +++ b/src/components/modules/home/HomeBanner/HomeBanner.module.scss @@ -31,13 +31,14 @@ width: min-content; color: var(--white); - font-size: 7rem; + font-size: 7.6rem; line-height: 8rem; letter-spacing: -0.03em; font-weight: bold; text-transform: uppercase; @screen 2xl { + font-size: 7.8rem; line-height: 8rem; } &::after { diff --git a/src/styles/_base.scss b/src/styles/_base.scss index e8719581f..99537fd65 100644 --- a/src/styles/_base.scss +++ b/src/styles/_base.scss @@ -41,7 +41,7 @@ --line-height: 2.4rem; --font-sans: "Nunito", -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "Helvetica", sans-serif; - --font-heading: "Righteous", -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "Helvetica", sans-serif; + --font-heading: "Norquay-bold", "Righteous", -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "Helvetica", sans-serif; --font-logo: "Poppins", -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "Helvetica", sans-serif; } diff --git a/tailwind.config.js b/tailwind.config.js index ec9f0e5d1..9d51fd1ba 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -122,7 +122,7 @@ module.exports = { 'xl': '1280px', // => @media (min-width: 1280px) { ... } - '2xl': '1536px', + '2xl': '1440px', // => @media (min-width: 1536px) { ... } }, caroucel: { From 9467250fbb778e1a0105cd35ce30889c4a7e1322 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 13:10:02 +0700 Subject: [PATCH 22/33] :wrench: config: font heading :%s --- public/fonts/Norquay-bold.otf | Bin 0 -> 100880 bytes public/fonts/Norquay-bold.woff | Bin 0 -> 45365 bytes public/fonts/style.css | 4 ++++ src/styles/_base.scss | 1 + 4 files changed, 5 insertions(+) create mode 100644 public/fonts/Norquay-bold.otf create mode 100644 public/fonts/Norquay-bold.woff create mode 100644 public/fonts/style.css diff --git a/public/fonts/Norquay-bold.otf b/public/fonts/Norquay-bold.otf new file mode 100644 index 0000000000000000000000000000000000000000..37212fd9fe1ad4e3f614f1a36f4d22d16cfaa983 GIT binary patch literal 100880 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 M=P&y-5QB677YoIKQUCw| literal 0 HcmV?d00001 diff --git a/public/fonts/Norquay-bold.woff b/public/fonts/Norquay-bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..28564d5d41c2ddac47cf1d62d65e1c9f0674a7ce GIT binary patch literal 45365 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 n#AH+e&;aoN?6JPS{$l|E2^j?u5P+C4%y+Cn%5 Date: Wed, 15 Sep 2021 13:10:18 +0700 Subject: [PATCH 23/33] :art: styles: color btn carousel :%s --- src/components/common/Banner/Banner.tsx | 1 - .../common/CarouselCommon/CarouselCommon.module.scss | 1 + .../modules/home/HomeBanner/HomeBanner.module.scss | 6 +----- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/components/common/Banner/Banner.tsx b/src/components/common/Banner/Banner.tsx index 410fded77..e8c86f53e 100644 --- a/src/components/common/Banner/Banner.tsx +++ b/src/components/common/Banner/Banner.tsx @@ -8,7 +8,6 @@ interface Props { const option = { slidesPerView: 1, - mode: 'free', } const Banner = memo(({ data }: Props) => { if (data.length === 1) { diff --git a/src/components/common/CarouselCommon/CarouselCommon.module.scss b/src/components/common/CarouselCommon/CarouselCommon.module.scss index ef2671947..4b3c7d537 100644 --- a/src/components/common/CarouselCommon/CarouselCommon.module.scss +++ b/src/components/common/CarouselCommon/CarouselCommon.module.scss @@ -9,6 +9,7 @@ width: 64px; height: 64px; border-radius: .8rem; + backdrop-filter: saturate(180%) blur(10px); &:focus { outline: none; } diff --git a/src/components/modules/home/HomeBanner/HomeBanner.module.scss b/src/components/modules/home/HomeBanner/HomeBanner.module.scss index 3191b5515..ed8c5c7a7 100644 --- a/src/components/modules/home/HomeBanner/HomeBanner.module.scss +++ b/src/components/modules/home/HomeBanner/HomeBanner.module.scss @@ -31,16 +31,12 @@ width: min-content; color: var(--white); - font-size: 7.6rem; + font-size: 8.8rem; line-height: 8rem; letter-spacing: -0.03em; font-weight: bold; text-transform: uppercase; - @screen 2xl { - font-size: 7.8rem; - line-height: 8rem; - } &::after { @apply absolute; content: ""; From b9e47ef299e4472a448c83a4e765d3c8a746c129 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 13:53:24 +0700 Subject: [PATCH 24/33] :art: styles: add cart drawer layer :%s --- .../common/CartDrawer/CartDrawer.module.scss | 2 +- .../DrawerCommon/DrawerCommon.module.scss | 38 +++++++++++++++---- .../common/DrawerCommon/DrawerCommon.tsx | 32 ++++++++++------ 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/src/components/common/CartDrawer/CartDrawer.module.scss b/src/components/common/CartDrawer/CartDrawer.module.scss index d5bba6c57..8d97f971e 100644 --- a/src/components/common/CartDrawer/CartDrawer.module.scss +++ b/src/components/common/CartDrawer/CartDrawer.module.scss @@ -4,6 +4,6 @@ .cartDrawer { @apply flex flex-col h-full; .body { - @apply flex flex-col justify-center overflow-y-auto overflow-x-hidden h-full custom-scroll; + @apply flex flex-col overflow-y-auto overflow-x-hidden h-full custom-scroll; } } \ No newline at end of file diff --git a/src/components/common/DrawerCommon/DrawerCommon.module.scss b/src/components/common/DrawerCommon/DrawerCommon.module.scss index d118d45e8..fe42289f9 100644 --- a/src/components/common/DrawerCommon/DrawerCommon.module.scss +++ b/src/components/common/DrawerCommon/DrawerCommon.module.scss @@ -1,21 +1,36 @@ @import "../../../styles/utilities"; .drawerCommon { - @apply fixed flex justify-end transition-all duration-200; + @apply fixed flex justify-end transition-all duration-500; overflow: hidden; top: 0; right: 0; height: 100vh; - width: 90%; - box-shadow: -3px 0 10px rgba(0, 0, 0, 0.15); + width: 100%; z-index: 20000; + transform: translateX(110%); + &.show { + .innerWrap { + background: rgba(0, 0, 0, 0.2); + animation: animateBackground 0.8s; + } + transform: none; + } + + .innerWrap { + @apply w-full; + background: none; + } .inner { @apply flex flex-col bg-white; width: fit-content; height: 100vh; width: 100%; - margin-right: 0; + margin-left: auto; + box-shadow: -3px 0 10px rgba(0, 0, 0, 0.15); + // transform: none; + @screen md { max-width: 52rem; } @@ -39,14 +54,21 @@ overflow-y: auto; height: 100%; } - &.hide { - transform: translateX(110%); - } @screen md { - width: unset; .inner { min-width: 48rem; } } } + +@keyframes animateBackground { + 0%, + 50% { + background: none; + } + + 100% { + background: rgba(0, 0, 0, 0.2); + } +} diff --git a/src/components/common/DrawerCommon/DrawerCommon.tsx b/src/components/common/DrawerCommon/DrawerCommon.tsx index deb1af3eb..301e516c2 100644 --- a/src/components/common/DrawerCommon/DrawerCommon.tsx +++ b/src/components/common/DrawerCommon/DrawerCommon.tsx @@ -11,22 +11,32 @@ interface Props { } const DrawerCommon = ({ title, visible, children, onClose }: Props) => { +const refInner = useRef(null) + +const handleClickOut = (e: any) => { + if (e.target.contains(refInner.current)) { + onClose() + } +} + return (
    -
    -
    -

    - {title} -

    -
    - +
    +
    +
    +

    + {title} +

    +
    + +
    +
    +
    + {children}
    -
    -
    - {children}
    From 8412ca6ecd7f174656b8cf867f3187439e81fc97 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 14:25:03 +0700 Subject: [PATCH 25/33] :art: styles: cart drawer animation :%s --- src/components/common/Banner/Banner.tsx | 1 + .../common/DrawerCommon/DrawerCommon.module.scss | 10 +++++++--- src/components/common/DrawerCommon/DrawerCommon.tsx | 3 ++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/components/common/Banner/Banner.tsx b/src/components/common/Banner/Banner.tsx index e8c86f53e..410fded77 100644 --- a/src/components/common/Banner/Banner.tsx +++ b/src/components/common/Banner/Banner.tsx @@ -8,6 +8,7 @@ interface Props { const option = { slidesPerView: 1, + mode: 'free', } const Banner = memo(({ data }: Props) => { if (data.length === 1) { diff --git a/src/components/common/DrawerCommon/DrawerCommon.module.scss b/src/components/common/DrawerCommon/DrawerCommon.module.scss index fe42289f9..0fc8b5b35 100644 --- a/src/components/common/DrawerCommon/DrawerCommon.module.scss +++ b/src/components/common/DrawerCommon/DrawerCommon.module.scss @@ -8,19 +8,23 @@ height: 100vh; width: 100%; z-index: 20000; - transform: translateX(110%); + transform: none; + &.hide { + .innerWrap { + background: none; + } + transform: translateX(110%); + } &.show { .innerWrap { background: rgba(0, 0, 0, 0.2); animation: animateBackground 0.8s; } - transform: none; } .innerWrap { @apply w-full; - background: none; } .inner { @apply flex flex-col bg-white; diff --git a/src/components/common/DrawerCommon/DrawerCommon.tsx b/src/components/common/DrawerCommon/DrawerCommon.tsx index 301e516c2..9e486dd23 100644 --- a/src/components/common/DrawerCommon/DrawerCommon.tsx +++ b/src/components/common/DrawerCommon/DrawerCommon.tsx @@ -22,7 +22,8 @@ const handleClickOut = (e: any) => { return (
    From f4fc30a79212e2dbb1faabe68746a1586beef7ca Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 14:28:39 +0700 Subject: [PATCH 26/33] :recycle: enhan: fix warning :%s --- src/components/common/Banner/Banner.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/common/Banner/Banner.tsx b/src/components/common/Banner/Banner.tsx index 410fded77..3b0c0fe85 100644 --- a/src/components/common/Banner/Banner.tsx +++ b/src/components/common/Banner/Banner.tsx @@ -1,3 +1,4 @@ +import { TOptionsEvents } from 'keen-slider' import React, { memo } from 'react' import CarouselCommon from '../CarouselCommon/CarouselCommon' import BannerItem, { BannerItemProps } from './BannerItem/BannerItem' @@ -6,7 +7,7 @@ interface Props { data: BannerItemProps[], } -const option = { +const option: TOptionsEvents = { slidesPerView: 1, mode: 'free', } From a7d39f3d1a27007ace37806aad6a11cde6f25bf6 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 14:37:21 +0700 Subject: [PATCH 27/33] :recycle: enhan: replace link in delivery item to button common :%s --- .../OrderInformation/OrderInformation.tsx | 6 +++--- .../modules/account/DeliveryItem/DeliveryItem.tsx | 7 +++---- .../components/ReOrder/ReOrder.module.scss | 15 +-------------- .../DeliveryItem/components/ReOrder/ReOrder.tsx | 9 +++------ 4 files changed, 10 insertions(+), 27 deletions(-) diff --git a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx index 211cebe3b..858526f26 100644 --- a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx +++ b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx @@ -25,7 +25,7 @@ const OrderInformation = ({ waiting, delivering, delivered} : OrderInformationPr { waiting.map((order, i) => { return ( - + ) }) } @@ -36,7 +36,7 @@ const OrderInformation = ({ waiting, delivering, delivered} : OrderInformationPr { delivering.map((order, i) => { return ( - + ) }) } @@ -47,7 +47,7 @@ const OrderInformation = ({ waiting, delivering, delivered} : OrderInformationPr { delivered.map((order, i) => { return ( - + ) }) } diff --git a/src/components/modules/account/DeliveryItem/DeliveryItem.tsx b/src/components/modules/account/DeliveryItem/DeliveryItem.tsx index fe8f5cdef..a8ccbb69d 100644 --- a/src/components/modules/account/DeliveryItem/DeliveryItem.tsx +++ b/src/components/modules/account/DeliveryItem/DeliveryItem.tsx @@ -9,20 +9,19 @@ import ReOrder from './components/ReOrder/ReOrder' interface DeliveryItemProps { id: string; - status: "waiting" | "delivering" | "delivered"; + status: "Waiting" | "Delivering" | "Delivered"; products: string[]; totalPrice: number; - reOrderLink?: string; } -const DeliveryItem = ({ id, status, products, totalPrice, reOrderLink } : DeliveryItemProps) => { +const DeliveryItem = ({ id, status, products, totalPrice } : DeliveryItemProps) => { return (
    - +
    ) } diff --git a/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss b/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss index ce36380da..517dd2e4f 100644 --- a/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss +++ b/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss @@ -1,22 +1,9 @@ @import '../../../../../../styles/utilities'; .reOrder { - @apply text-white custom-border-radius hidden font-bold; - padding: .4rem .6rem; + @apply hidden; margin-right: 1.2rem; - background-color: var(--primary); - - @screen lg { - padding: .8rem 1.2rem; - margin-right: 2.4rem; - } - &.show { @apply block; } - - &:hover { - @apply cursor-pointer; - } - } \ No newline at end of file diff --git a/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.tsx b/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.tsx index 2fbc546f4..aaef9153c 100644 --- a/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.tsx +++ b/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.tsx @@ -1,21 +1,18 @@ import classNames from "classnames" import React from "react" +import { ButtonCommon } from "src/components/common" import s from './ReOrder.module.scss' -import Link from 'next/link' interface ReOrderProps { show: boolean; - href?: string; } -const ReOrder = ({ show=false, href="#" } : ReOrderProps) => { +const ReOrder = ({ show=false } : ReOrderProps) => { return (
    - - Re-Order - + Re-Order
    ) } From 4371fa9d9f20e96bfd3152d3d24011150ff22b28 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 14:41:33 +0700 Subject: [PATCH 28/33] :art: styles: remove -webkit-tap-highlight-color for link :%s --- src/styles/_base.scss | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/styles/_base.scss b/src/styles/_base.scss index 859aaec7d..a3ba0a6db 100644 --- a/src/styles/_base.scss +++ b/src/styles/_base.scss @@ -80,6 +80,3 @@ html { font-feature-settings: "case" 1, "rlig" 1, "calt" 0; } -a { - -webkit-tap-highlight-color: var(--primary); -} From 76635845ea4716fec85addad3fc4bb6fc5e673df Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 14:44:55 +0700 Subject: [PATCH 29/33] :recycle: enhan: close cart drawer when checkout :%s --- src/components/common/CartDrawer/CartDrawer.tsx | 2 +- .../components/CartCheckoutButton/CartCheckoutButton.tsx | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/common/CartDrawer/CartDrawer.tsx b/src/components/common/CartDrawer/CartDrawer.tsx index 31da985ef..9410cfd9c 100644 --- a/src/components/common/CartDrawer/CartDrawer.tsx +++ b/src/components/common/CartDrawer/CartDrawer.tsx @@ -25,7 +25,7 @@ const CartDrawer = ({ visible, onClose }: Props) => {
    - +
    diff --git a/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.tsx b/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.tsx index 5cc8f5f6f..97cb3e0eb 100644 --- a/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.tsx +++ b/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.tsx @@ -4,11 +4,16 @@ import s from './CartCheckoutButton.module.scss'; import Link from 'next/link' import { ROUTE } from 'src/utils/constanst.utils'; -const CartCheckoutButton = memo(() => { +interface Props { + onClose: () => void +} + + +const CartCheckoutButton = memo(({ onClose }: Props) => { return ( - Check out - Rp 120.500 + Check out - Rp 120.500 ) From 4434f44dd1958d0df38c1093691dc610ed096f2e Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 14:47:05 +0700 Subject: [PATCH 30/33] :art: styles: change animation header sticky :%s --- src/components/common/Header/Header.module.scss | 2 +- src/components/common/Header/Header.tsx | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/common/Header/Header.module.scss b/src/components/common/Header/Header.module.scss index 1a73bbae5..f0cdf4efd 100644 --- a/src/components/common/Header/Header.module.scss +++ b/src/components/common/Header/Header.module.scss @@ -47,7 +47,7 @@ @keyframes showHeaderSticky { 0% { - transform: translateY(-7rem); + transform: scale(.9); } 100% { transform: none; diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index ad55d1feb..d1d88adda 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -1,7 +1,6 @@ import classNames from 'classnames' import React, { memo, useEffect, useMemo, useRef, useState } from 'react' import { useModalCommon } from 'src/components/hooks' -import { isMobile } from 'src/utils/funtion.utils' import { CartDrawer } from '..' import ModalAuthenticate from '../ModalAuthenticate/ModalAuthenticate' import ModalCreateUserInfo from '../ModalCreateUserInfo/ModalCreateUserInfo' From 8af039d14e2a9a99dc42b972a70908a07d52b8f1 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 14:56:24 +0700 Subject: [PATCH 31/33] :art: styles: header spacing, animation :%s --- src/components/common/Header/Header.module.scss | 4 ++-- .../Header/components/HeaderMenu/HeaderMenu.module.scss | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/common/Header/Header.module.scss b/src/components/common/Header/Header.module.scss index f0cdf4efd..8f1124fb8 100644 --- a/src/components/common/Header/Header.module.scss +++ b/src/components/common/Header/Header.module.scss @@ -41,13 +41,13 @@ transition: all 0.2s; &.show { display: block; - animation: showHeaderSticky 0.2s; + animation: showHeaderSticky 0.4s; } } @keyframes showHeaderSticky { 0% { - transform: scale(.9); + transform: scale(.95); } 100% { transform: none; diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.module.scss b/src/components/common/Header/components/HeaderMenu/HeaderMenu.module.scss index f0cff0937..6a16505bc 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.module.scss +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.module.scss @@ -6,6 +6,10 @@ padding-bottom: 0.8rem; &.full { @apply flex; + padding-top: 1.6rem; + @screen md { + padding-top: 0.8rem; + } } &.small { @apply flex; @@ -20,8 +24,6 @@ } @screen md { @apply flex justify-between items-center; - padding-top: 0.8rem; - padding-bottom: 0.8rem; } .left { // margin-bottom: 3.2rem; From e256cece62525f2691ab7fbd1f9ba537dc319990 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 16:38:20 +0700 Subject: [PATCH 32/33] :recycle: enhan: move CustomShapeSvg to _app :%s --- pages/_app.tsx | 5 +++-- src/components/common/Layout/Layout.tsx | 18 ++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/pages/_app.tsx b/pages/_app.tsx index bd7f0f066..ff8845072 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,8 +1,8 @@ import { ThemeProvider } from 'next-themes'; import type { AppProps } from 'next/app'; import React, { FC, useEffect } from 'react'; -import { Head } from 'src/components/common'; -import 'keen-slider/keen-slider.min.css'; +import { CustomShapeSvg, Head } from 'src/components/common'; +import 'keen-slider/keen-slider.min.css'; import '../src/styles/main.scss'; @@ -19,6 +19,7 @@ export default function MyApp({ Component, pageProps }: AppProps) { <> + diff --git a/src/components/common/Layout/Layout.tsx b/src/components/common/Layout/Layout.tsx index 76ea316b4..233c53bbc 100644 --- a/src/components/common/Layout/Layout.tsx +++ b/src/components/common/Layout/Layout.tsx @@ -3,7 +3,7 @@ import { useRouter } from 'next/router' import { FC } from 'react' import { useModalCommon } from 'src/components/hooks' import { BRAND, CATEGORY, FEATURED } from 'src/utils/constanst.utils' -import { CustomShapeSvg, ScrollToTop } from '..' +import { ScrollToTop } from '..' import Footer from '../Footer/Footer' import Header from '../Header/Header' import MenuNavigationProductList from '../MenuNavigationProductList/MenuNavigationProductList' @@ -28,15 +28,13 @@ const Layout: FC = ({ children }) => { } return ( -
    -
    -
    {children}
    - - -
    - -
    -
    +
    +
    +
    {children}
    +
    + +
    +
    ) From 40b825cb0fef350c7a5dc914ec843c6255be5ba5 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 16:57:43 +0700 Subject: [PATCH 33/33] :art: styles: set default bg for banner large :%s --- src/components/common/Banner/BannerItem/BannerItem.module.scss | 3 +++ src/components/common/Banner/BannerItem/pattern.svg | 1 + 2 files changed, 4 insertions(+) create mode 100644 src/components/common/Banner/BannerItem/pattern.svg diff --git a/src/components/common/Banner/BannerItem/BannerItem.module.scss b/src/components/common/Banner/BannerItem/BannerItem.module.scss index 9331a7aff..5a37e252a 100644 --- a/src/components/common/Banner/BannerItem/BannerItem.module.scss +++ b/src/components/common/Banner/BannerItem/BannerItem.module.scss @@ -5,6 +5,9 @@ padding: 0; &.large { margin-bottom: 2.8rem; + background-image: url("./pattern.svg"); + background-repeat: repeat; + background-size: auto; .inner { background-size: cover; background-position: center bottom; diff --git a/src/components/common/Banner/BannerItem/pattern.svg b/src/components/common/Banner/BannerItem/pattern.svg new file mode 100644 index 000000000..fab63f17f --- /dev/null +++ b/src/components/common/Banner/BannerItem/pattern.svg @@ -0,0 +1 @@ + \ No newline at end of file