bug: add dot MenuFilter, add page AccountSignIn , fix spacing MenuFilter

This commit is contained in:
Quangnhankie 2021-09-14 10:41:00 +07:00
parent 6cad0d89ca
commit ee496c95b4
13 changed files with 121 additions and 17 deletions

View File

@ -1,10 +1,13 @@
import React from 'react'; import React from 'react';
import { Layout } from 'src/components/common'; import { Layout } from 'src/components/common';
import { AccountPage } from 'src/components/modules/account'; import { AccountPage, AccountSignIn } from 'src/components/modules/account';
const Account = () => { const Account = () => {
return ( return (
<AccountPage/> // <AccountPage/>
<>
<AccountSignIn/>
</>
); );
}; };

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -11,10 +11,11 @@ import HeaderSubMenu from './components/HeaderSubMenu/HeaderSubMenu'
import HeaderSubMenuMobile from './components/HeaderSubMenuMobile/HeaderSubMenuMobile' import HeaderSubMenuMobile from './components/HeaderSubMenuMobile/HeaderSubMenuMobile'
import s from './Header.module.scss' import s from './Header.module.scss'
interface props { interface props {
toggleFilter: () => void toggleFilter: () => void,
visibleFilter:boolean
} }
const Header = memo(({ toggleFilter }: props) => { const Header = memo(({ toggleFilter,visibleFilter }: props) => {
const headeFullRef = useRef<HTMLDivElement>(null) const headeFullRef = useRef<HTMLDivElement>(null)
const [isFullHeader, setIsFullHeader] = useState<boolean>(true) const [isFullHeader, setIsFullHeader] = useState<boolean>(true)
const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: false }) const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: false })
@ -55,6 +56,7 @@ const Header = memo(({ toggleFilter }: props) => {
<HeaderHighLight /> <HeaderHighLight />
<div className={s.menu}> <div className={s.menu}>
<HeaderMenu <HeaderMenu
visibleFilter={visibleFilter}
toggleFilter={toggleFilter} toggleFilter={toggleFilter}
toggleCart={toggleCart} toggleCart={toggleCart}
isFull={isFullHeader} isFull={isFullHeader}

View File

@ -22,10 +22,25 @@
margin-left: 1.6rem; margin-left: 1.6rem;
} }
.iconFilter{ .iconFilter{
@apply relative;
.dot{
@apply absolute;
top: -0.08rem;
right: -0.2rem;
background-color: var(--negative);
width: 1.2rem;
height: 1.2rem;
border-radius: 1.2rem;
@apply hidden;
&.isShow{
@apply block;
}
}
@screen md { @screen md {
display: none; display: none;
} }
} }
} }
.inputSearch { .inputSearch {
margin-top: 2.4rem; margin-top: 2.4rem;

View File

@ -1,6 +1,6 @@
import classNames from 'classnames' import classNames from 'classnames'
import Link from 'next/link' import Link from 'next/link'
import { memo, useMemo } from 'react' import { memo, useEffect, useMemo, useState } from 'react'
import InputSearch from 'src/components/common/InputSearch/InputSearch' import InputSearch from 'src/components/common/InputSearch/InputSearch'
import MenuDropdown from 'src/components/common/MenuDropdown/MenuDropdown' import MenuDropdown from 'src/components/common/MenuDropdown/MenuDropdown'
import { IconBuy, IconFilter, IconHeart, IconHistory, IconUser } from 'src/components/icons' import { IconBuy, IconFilter, IconHeart, IconHistory, IconUser } from 'src/components/icons'
@ -11,6 +11,7 @@ import { useRouter } from 'next/router'
interface Props { interface Props {
children?: any, children?: any,
isFull: boolean, isFull: boolean,
visibleFilter?:boolean,
openModalAuthen: () => void, openModalAuthen: () => void,
openModalInfo: () => void, openModalInfo: () => void,
toggleFilter:() => void, toggleFilter:() => void,
@ -19,8 +20,10 @@ interface Props {
const FILTER_PAGE = [ROUTE.HOME,ROUTE.PRODUCTS] const FILTER_PAGE = [ROUTE.HOME,ROUTE.PRODUCTS]
const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => { const HeaderMenu = memo(({ visibleFilter,isFull, openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => {
const router = useRouter() const router = useRouter()
const optionMenu = useMemo(() => [ const optionMenu = useMemo(() => [
{ {
onClick: openModalAuthen, onClick: openModalAuthen,
@ -50,6 +53,7 @@ const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo, toggleFilter,
FILTER_PAGE.includes(router.pathname) && ( FILTER_PAGE.includes(router.pathname) && (
<button className={s.iconFilter} onClick={toggleFilter}> <button className={s.iconFilter} onClick={toggleFilter}>
<IconFilter/> <IconFilter/>
<div className={classNames({[s.dot]:true,[s.isShow]:visibleFilter})}></div>
</button> </button>
) )
} }

View File

@ -29,7 +29,7 @@ const Layout: FC<Props> = ({ children }) => {
return ( return (
<CommerceProvider locale={locale}> <CommerceProvider locale={locale}>
<div className={s.mainLayout}> <div className={s.mainLayout}>
<Header toggleFilter={toggleFilter}/> <Header toggleFilter={toggleFilter} visibleFilter={visibleFilter}/>
<main >{children}</main> <main >{children}</main>
<CustomShapeSvg/> <CustomShapeSvg/>

View File

@ -1,5 +1,6 @@
@import "../../../styles/utilities"; @import "../../../styles/utilities";
.menuNavigationWrapper{ .menuNavigationWrapper{
@apply hidden;
.menuNavigationHeading{ .menuNavigationHeading{
@screen md { @screen md {
@apply sub-headline font-bold ; @apply sub-headline font-bold ;

View File

@ -10,8 +10,6 @@
} }
.menuNavigationProductListMobile{ .menuNavigationProductListMobile{
@apply relative transition-all duration-100; @apply relative transition-all duration-100;
&.isShow{ &.isShow{
&::after{ &::after{
content: ""; content: "";
@ -39,13 +37,14 @@
transform: translateY(0%) transform: translateY(0%)
} }
.content{ .content{
@apply relative w-full h-full; @apply absolute w-full h-full;
margin-top: 3rem; margin-top: 3rem;
padding-top: 8rem ; padding-top: 10rem ;
padding-bottom: 10rem; padding-bottom: 10rem;
background-color: white; background-color: white;
overflow-y: auto; overflow-y: auto;
height: 100vh; height: 96%;
bottom: 0;
border-radius: 2.4rem 2.4rem 0 0; border-radius: 2.4rem 2.4rem 0 0;
.head{ .head{
@apply flex justify-between fixed; @apply flex justify-between fixed;
@ -53,7 +52,7 @@
left:0; left:0;
margin-top: 3rem; margin-top: 3rem;
border-radius: 2.4rem 2.4rem 0 0; border-radius: 2.4rem 2.4rem 0 0;
padding: 3rem 2rem 1rem 2rem; padding: 4rem 2rem 2rem 2rem;
width: 100%; width: 100%;
background-color: white; background-color: white;
z-index: 10000; z-index: 10000;
@ -68,7 +67,8 @@
left:0; left:0;
width: 100%; width: 100%;
background-color: white; background-color: white;
padding: 0 1rem 2rem 1rem; padding: 0 1rem 3rem 1rem;
} }
button{ button{
margin-top: 2rem; margin-top: 2rem;

View File

@ -9,7 +9,7 @@
margin: 0.8rem 0; margin: 0.8rem 0;
} }
.menuSortList{ .menuSortList{
margin-bottom: 2rem; padding-bottom: 1rem;
box-sizing: border-box; box-sizing: border-box;
li{ li{
@ -22,7 +22,7 @@
&.active { &.active {
@apply font-bold relative; @apply font-bold relative;
color:var(--text-active); color:var(--text-active);
background-color: var(--primary-lightest); background-color: var(--gray);
&::after{ &::after{
@apply absolute; @apply absolute;
content:""; content:"";

View File

@ -0,0 +1,37 @@
@import "../../../../styles/utilities";
.accountSignInWrapper{
@screen sm-only{
@apply w-full;
.imgError{
width: 30%;
margin: 0 auto;
}
.text{
@apply sub-headline;
color:var(--text-placeholder);
text-align: center;
margin-top: 3.6rem;
}
.btn{
@apply flex justify-center;
margin: 2.6rem auto;
button{
padding: 1.6rem 7rem;
}
}
.dontHaveAccount{
@apply flex justify-center font-bold;
div{
color:var(--text-active);
}
span{
color:var(--positive);
}
}
}
@screen md{
@apply hidden;
}
}

View File

@ -0,0 +1,40 @@
import React from "react"
import { ButtonCommon, StaticImage } from "src/components/common";
import s from './AccountSignIn.module.scss';
import {LANGUAGE} from 'src/utils/language.utils';
import AccountSignInImg from '../../../../../public/assets/images/accountsignin.png'
import Link from 'next/link';
import { useRouter } from 'next/router';
interface AccountSignIn {
}
const AccountSignIn = ({ } : AccountSignIn) => {
const router = useRouter();
function openLogin(){
router.push({
pathname: '/account/query',
search: '?openLogin=true'
});
}
return (
<>
<div className={s.accountSignInWrapper}>
<div className={s.imgError}>
<StaticImage src={AccountSignInImg} />
</div>
<div className={s.text}>
Sign in to get more interesting <br/> features
</div>
<div className={s.btn}>
<ButtonCommon size="default" onClick={openLogin}>{LANGUAGE.BUTTON_LABEL.SIGNIN}</ButtonCommon>
</div>
<div className={s.dontHaveAccount}>
<div>Don't have an account? &nbsp;</div> <span><a><Link href="/"> Create Account</Link></a></span>
</div>
</div>
</>
)
}
export default AccountSignIn

View File

@ -1,3 +1,4 @@
export { default as AccountNavigation } from './AccountNavigation/AccountNavigation' export { default as AccountNavigation } from './AccountNavigation/AccountNavigation'
export { default as DeliveryItem } from './DeliveryItem/DeliveryItem' export { default as DeliveryItem } from './DeliveryItem/DeliveryItem'
export { default as AccountPage } from './AccountPage/AccountPage' export { default as AccountPage } from './AccountPage/AccountPage'
export { default as AccountSignIn } from './AccountSignIn/AccountSignIn'

View File

@ -5,6 +5,7 @@ export const LANGUAGE = {
CONFIRM:'Confirm', CONFIRM:'Confirm',
ADD_TO_CARD: 'Add to Cart', ADD_TO_CARD: 'Add to Cart',
PREORDER: 'Pre-Order Now', PREORDER: 'Pre-Order Now',
SIGNIN :'Sign In'
}, },
PLACE_HOLDER: { PLACE_HOLDER: {
SEARCH: 'Search', SEARCH: 'Search',