feat: Create Component MenuFilter

This commit is contained in:
quangnhankie
2021-09-07 09:56:45 +07:00
parent db0d16b2c1
commit ec3c2e0b67
2 changed files with 36 additions and 26 deletions

View File

@@ -1,6 +1,6 @@
@import "../../../styles/utilities";
.menuFilterWrapper{
@apply spacing-horizontal ;
@screen md {
@apply hidden;
}
@@ -14,30 +14,27 @@
@apply flex flex-wrap justify-start relative;
margin-bottom: 3rem;
box-sizing: border-box;
&::after{
@apply absolute;
top: 110%;
content: "";
width: 100%;
border-bottom: 1px solid var(--border-line);
}
li{
margin: 1rem 0;
padding:0;
a{
div{
padding: 0.8rem 1.6rem;
margin-right: 0.8rem;
background-color: var(--gray);
border-radius: 0.8rem;
&:hover {
color:white;
background-color: var(--primary);
}
&.active {
color:white;
background-color: var(--primary);
}
}
}
&::after{
@apply absolute;
bottom: -20%;
content: "";
width: 100%;
border-bottom: 1px solid var(--border-line);
}
}
}

View File

@@ -1,18 +1,33 @@
import classNames from 'classnames'
import Link from 'next/link'
import { useRouter } from 'next/router'
import { useEffect, useState } from 'react';
import s from './MenuFilter.module.scss'
interface Props {
children?: any,
heading:string,
categories:{name:string,link:string}[]
heading?:string,
categories:{name:string,link:string}[],
type:string,
onChangeValue?: (value: Object) => void
}
const MenuFilter = ({heading,categories}:Props)=> {
const router = useRouter()
const MenuFilter = ({heading,categories,type,onChangeValue}:Props)=> {
const [active, setActive] = useState<string>('');
function handleClick(link:string){
setActive(link);
if(active === link){
setActive('');
}
}
useEffect(()=>{
let href = active?.split("=");
const linkValue = href[1];
onChangeValue && onChangeValue({[type]:linkValue});
},[active])
return (
<section className={classNames(s.menuFilterWrapper)}>
@@ -20,11 +35,9 @@ const MenuFilter = ({heading,categories}:Props)=> {
<ul className={s.menuFilterList}>
{
categories.map(item => <li key={item.name}>
<Link href={item.link}>
<a className={classNames({ [s.active]: router.asPath === item.link})}>
<div onClick={()=> handleClick(item.link)} className={classNames({ [s.active]: item.link === active? true: false })}>
{item.name}
</a>
</Link>
</div>
</li>)
}
</ul>