= pageNum - 1,
+ [s.disable]: currentPage >= pageNum - 1,
})}
onClick={onNextClick}
>
diff --git a/src/components/common/RelevantBlogPosts/RelevantBlogPosts.module.scss b/src/components/common/RelevantBlogPosts/RelevantBlogPosts.module.scss
index d5a13299d..ed232830f 100644
--- a/src/components/common/RelevantBlogPosts/RelevantBlogPosts.module.scss
+++ b/src/components/common/RelevantBlogPosts/RelevantBlogPosts.module.scss
@@ -1,6 +1,9 @@
@import '../../../styles/utilities';
.blogPostWarpper {
+ &.cream{
+ background-color: #F5F4F2;
+ }
padding-top: 5.6rem;
padding-bottom: 5.2rem;
@apply flex flex-col;
diff --git a/src/components/common/RelevantBlogPosts/RelevantBlogPosts.tsx b/src/components/common/RelevantBlogPosts/RelevantBlogPosts.tsx
index 01e19bb25..1d71a6ca1 100644
--- a/src/components/common/RelevantBlogPosts/RelevantBlogPosts.tsx
+++ b/src/components/common/RelevantBlogPosts/RelevantBlogPosts.tsx
@@ -1,6 +1,7 @@
import image15 from '../../../../public/assets/images/image15.png'
import image16 from '../../../../public/assets/images/image16.png'
import image17 from '../../../../public/assets/images/image17.png'
+import classNames from 'classnames'
import React from 'react'
import { HeadingCommon, ViewAllItem } from 'src/components/common'
import { BlogCardProps } from 'src/components/common/CardBlog/CardBlog'
@@ -9,54 +10,59 @@ import s from './RelevantBlogPosts.module.scss'
import { ROUTE } from 'src/utils/constanst.utils';
interface RelevantProps {
- data?: BlogCardProps[]
- itemKey?: string
- title?: string
- viewAllLink?: string
+ data?: BlogCardProps[],
+ itemKey?: string,
+ title?: string,
+ viewAllLink?: string,
+ bgcolor?: "default" | "cream"
}
const recipe:BlogCardProps[] = [
{
title: "Want to Lose Weight? Here are 10 DEBM Diet Guidelines for Beginners",
+ slug: 'have-a-nice-lunch',
description:"The DEBM diet stands for "+'"Delicious Happy Fun Diet"'+". This diet was popularized by Robert...",
imageSrc: image15.src,
- link: `${ROUTE.BLOG_DETAIL}`
},{
title: "9 Ways to Make an Aloe Vera Mask at Home",
+ slug: 'have-a-nice-lunch',
description:"Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...",
imageSrc: image16.src,
- link: `${ROUTE.BLOG_DETAIL}`
},{
title: "Don't Buy Wrong, Here Are 7 Ways to Choose a Ripe Dragon Fruit",
+ slug: 'have-a-nice-lunch',
description:"Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...",
imageSrc: image17.src,
- link: `${ROUTE.BLOG_DETAIL}`
},{
title: "Want to Lose Weight? Here are 10 DEBM Diet Guidelines for Beginners",
+ slug: 'have-a-nice-lunch',
description:"The DEBM diet stands for "+'"Delicious Happy Fun Diet"'+". This diet was popularized by Robert...",
imageSrc: image15.src,
- link: `${ROUTE.BLOG_DETAIL}`
},{
title: "9 Ways to Make an Aloe Vera Mask at Home",
+ slug: 'have-a-nice-lunch',
description:"Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...",
imageSrc: image16.src,
- link: `${ROUTE.BLOG_DETAIL}`
},{
title: "Don't Buy Wrong, Here Are 7 Ways to Choose a Ripe Dragon Fruit",
+ slug: 'have-a-nice-lunch',
description:"Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...",
imageSrc: image17.src,
- link: `${ROUTE.BLOG_DETAIL}`
}]
- const RelevantBlogPosts = ({ data = recipe, itemKey="detail-relevant", title="Relevant Blog Posts" }: RelevantProps) => {
+ const RelevantBlogPosts = ({ data = recipe, itemKey="detail-relevant", title="Relevant Blog Posts", bgcolor = "default" }: RelevantProps) => {
return (
-
+
diff --git a/src/components/common/SelectCommon/SelectCommon.module.scss b/src/components/common/SelectCommon/SelectCommon.module.scss
index d91b1831e..4809a46bb 100644
--- a/src/components/common/SelectCommon/SelectCommon.module.scss
+++ b/src/components/common/SelectCommon/SelectCommon.module.scss
@@ -1,69 +1,90 @@
@import "../../../styles/utilities";
-.select{
+.select {
background-color: var(--white);
- &.base{
+ .selectTrigger {
+ svg {
+ @apply transition-all duration-200;
+ }
+ }
+ &.base {
width: 20.6rem;
- .selectTrigger{
+ .selectTrigger {
width: 20.6rem;
padding: 1.2rem 1.6rem;
}
}
- &.large{
+ &.large {
width: 34.25rem;
- .selectTrigger{
+ .selectTrigger {
width: 34.25rem;
padding: 1.6rem 1.6rem;
}
}
- &.default{
- .selectTrigger{
+ &.default {
+ .selectTrigger {
@apply border-solid border border-current;
- }
+ }
}
- &.custom{
- .selectTrigger{
+ &.custom {
+ .selectTrigger {
@apply border-2;
border-color: var(--border-line);
color: var(--text-label);
}
}
- &.isActive{
- .selectOptionWrapper{
+ &:hover {
+ cursor: pointer;
+ .hoverWrapper {
@apply block;
+ animation: SelectAnimation 0.2s ease-out;
+ }
+ .selectTrigger {
+ svg {
+ transform: rotate(180deg);
+ }
}
}
}
-.selectTrigger{
+.selectTrigger {
@apply outline-none flex justify-between;
color: var(--text-active);
border-radius: 0.8rem;
-
}
-.selectOptionWrapper{
- @apply outline-none hidden z-10 absolute;
- border-radius: 0.8rem;
- background-color: var(--white);
- padding: 0.4rem 0rem 0.4rem 0rem;
- margin-top: 0.6rem;
- &.base{
- width: 20.6rem;
+.hoverWrapper {
+ @apply hidden outline-none absolute z-10;
+ padding-top: 0.6rem;
+ .selectOptionWrapper {
+ border-radius: 0.8rem;
+ background-color: var(--white);
+ padding: 0.4rem 0rem 0.4rem 0rem;
+ &.base {
+ width: 20.6rem;
+ }
+ &.large {
+ width: 34.25rem;
+ }
+ &.default {
+ @apply border-solid border border-current;
+ }
+ &.custom {
+ @apply border-2;
+ border-color: var(--border-line);
+ color: var(--text-label);
+ }
}
- &.large{
- width: 34.25rem;
- }
- &.default{
- @apply border-solid border border-current;
- }
- &.custom{
- @apply border-2;
- border-color: var(--border-line);
- color: var(--text-label);
- }
- &.active{
- @apply hidden;
+ &:hover {
+ @apply block;
}
}
-
-
+@keyframes SelectAnimation {
+ 0% {
+ opacity: 0;
+ transform: translateY(1.6rem);
+ }
+ 100% {
+ opacity: 1;
+ transform: none;
+ }
+}
diff --git a/src/components/common/SelectCommon/SelectCommon.tsx b/src/components/common/SelectCommon/SelectCommon.tsx
index 5bb3d15d6..9b8c88e24 100644
--- a/src/components/common/SelectCommon/SelectCommon.tsx
+++ b/src/components/common/SelectCommon/SelectCommon.tsx
@@ -1,43 +1,25 @@
import s from './SelectCommon.module.scss'
import classNames from 'classnames'
-import { useState, useRef, useEffect } from 'react'
+import { useState } from 'react'
import { IconVectorDown } from 'src/components/icons'
import SelectOption from './SelectOption/SelectOption'
interface Props {
- children? : React.ReactNode,
+ placeholder? : string,
size?: 'base' | 'large',
type?: 'default' | 'custom',
- option: {name: string}[],
+ option: {name: string, value: string}[],
+ onChange?: (value: string) => void,
}
-const SelectCommon = ({ type = 'default', size = 'base', option, children }: Props) => {
- const [isActive, setActive] = useState(false)
- const [selectedName, setSelectedName] = useState(children)
- const ref = useRef
(null)
-
- useEffect(() => {
- const handleClick = (event: MouseEvent) => {
- const { target } = event;
- if (!ref?.current || ref?.current.contains(target as Node)) {
- return
- }
- else{
- setActive(false)
- }
- }
- document.addEventListener('click', handleClick)
- return () => {
- document.removeEventListener('click', handleClick)
- }
- }, [ref])
+const SelectCommon = ({ type = 'default', size = 'base', option, placeholder, onChange}: Props) => {
+ const [selectedName, setSelectedName] = useState(placeholder)
+ const [selectedValue, setSelectedValue] = useState('')
- const changeActiveStatus = () => {
- setActive(!isActive)
- }
-
- const changeSelectedName = (item:string) => {
+ const changeSelectedName = (item:string, value: string) => {
+ setSelectedValue(value)
setSelectedName(item)
+ onChange && onChange(value)
}
return(
<>
@@ -45,29 +27,29 @@ const SelectCommon = ({ type = 'default', size = 'base', option, children }: Pro
[s.select] : true,
[s[size]] : !!size,
[s[type]] : !!type,
- [s.isActive] : isActive,
})}
- onClick = { changeActiveStatus }
- ref = {ref}
>
{selectedName}
-
-
- {
- option.map(item =>
-
- )
- }
+
+
+
+ {
+ option.map(item =>
+
+ )
+ }
+
+
>
)
diff --git a/src/components/common/SelectCommon/SelectOption/SelectOption.module.scss b/src/components/common/SelectCommon/SelectOption/SelectOption.module.scss
index 5448f9879..ef504c112 100644
--- a/src/components/common/SelectCommon/SelectOption/SelectOption.module.scss
+++ b/src/components/common/SelectCommon/SelectOption/SelectOption.module.scss
@@ -13,5 +13,9 @@
}
&:hover{
background-color: var(--gray);
+ color: var(--primary);
+ }
+ &.isChoose{
+ background-color: var(--gray);
}
}
\ No newline at end of file
diff --git a/src/components/common/SelectCommon/SelectOption/SelectOption.tsx b/src/components/common/SelectCommon/SelectOption/SelectOption.tsx
index 54877d5fe..7e1968f9e 100644
--- a/src/components/common/SelectCommon/SelectOption/SelectOption.tsx
+++ b/src/components/common/SelectCommon/SelectOption/SelectOption.tsx
@@ -2,20 +2,22 @@ import s from './SelectOption.module.scss'
import classNames from 'classnames'
interface Props{
- onClick: (value: string) => void,
+ onClick: (name: string, value: string) => void,
itemName: string,
size: 'base' | 'large',
+ value: string,
+ selected?: boolean,
}
-const SelectOption = ({onClick, itemName, size}: Props) => {
-
+const SelectOption = ({onClick, itemName, size, value, selected} : Props) => {
const changeName = () => {
- onClick(itemName)
+ onClick(itemName, value)
}
return(
{itemName}
diff --git a/src/components/icons/IconArrowUp.tsx b/src/components/icons/IconArrowUp.tsx
index 3eac6391b..1f518d612 100644
--- a/src/components/icons/IconArrowUp.tsx
+++ b/src/components/icons/IconArrowUp.tsx
@@ -2,7 +2,7 @@ const ArrowUp = () => {
return (
-
+
)
}
diff --git a/src/components/icons/IconHide.tsx b/src/components/icons/IconHide.tsx
new file mode 100644
index 000000000..a977aff84
--- /dev/null
+++ b/src/components/icons/IconHide.tsx
@@ -0,0 +1,12 @@
+import React from 'react'
+
+const IconHide = () => {
+ return (
+
+
+
+
+ )
+}
+
+export default IconHide
diff --git a/src/components/icons/IconVectorDown.tsx b/src/components/icons/IconVectorDown.tsx
index 019fc2806..0bb1cb8c1 100644
--- a/src/components/icons/IconVectorDown.tsx
+++ b/src/components/icons/IconVectorDown.tsx
@@ -1,5 +1,3 @@
-
-
const IconVectorDown = ({ ...props }) => {
return (
{
+ return (
+ <>
+
+
+
The Best Sesame Soy Broccoli Salad
+
+
+
+ When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces.
+
+
+
+ Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to.
+
+
+ This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing.
+
+
+
+
+
+ What is broccoli salad
+
+ When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces.
+
+
+
+ Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to.
+
+
+ This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing.
+
+
+
+
+
+ What about broccoli stems?
+
+
+ You can eat broccoli stems. In fact, they are delicious. Just use a peeler to peel off the outsides and then trim the stalks into small 1/4”-1/2” cubes.
+
+
+
+
+
+
+
+
+
+ >
+ )
+}
+
+export default BlogContent
diff --git a/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss
new file mode 100644
index 000000000..98206b439
--- /dev/null
+++ b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss
@@ -0,0 +1,21 @@
+.beadcrumb{
+ padding-left: 3.2rem;
+ padding-bottom: 3.2rem;
+}
+.image{
+ width: 100%;
+ padding: 0 2rem;
+ margin-bottom: 2rem;
+ border-radius: 2.4rem;
+ @screen md {
+ width: 90%;
+ margin:0 auto;
+ margin-bottom: 4rem;
+ }
+ @screen xl{
+ width: 63%;
+ margin:0 auto;
+ margin-bottom: 4rem;
+ }
+
+}
\ No newline at end of file
diff --git a/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx
new file mode 100644
index 000000000..b7eb6aaef
--- /dev/null
+++ b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx
@@ -0,0 +1,27 @@
+
+import React from 'react';
+import BreadcrumbCommon from 'src/components/common/BreadcrumbCommon/BreadcrumbCommon';
+import s from './BlogDetailImg.module.scss';
+interface Props {
+ className?: string
+ children?: any
+}
+
+const CRUMBS =[
+ {
+ name:"Blog",
+ link:"/blog"
+ }
+]
+const BlogDetailImg = ({}:Props ) => {
+ return (
+ <>
+
+
+
+
+ >
+ )
+}
+
+export default BlogDetailImg
diff --git a/src/components/modules/blog-detail/BlogDetailImg/img/blogdetail.png b/src/components/modules/blog-detail/BlogDetailImg/img/blogdetail.png
new file mode 100644
index 000000000..ad200ac46
Binary files /dev/null and b/src/components/modules/blog-detail/BlogDetailImg/img/blogdetail.png differ
diff --git a/src/components/modules/blog-detail/index.ts b/src/components/modules/blog-detail/index.ts
new file mode 100644
index 000000000..45d532145
--- /dev/null
+++ b/src/components/modules/blog-detail/index.ts
@@ -0,0 +1,2 @@
+export { default as BlogContent } from './BlogContent/BlogContent';
+export { default as BlogDetailImg } from './BlogDetailImg/BlogDetailImg';
\ No newline at end of file
diff --git a/src/components/modules/home/HomeBanner/HomeBanner.module.scss b/src/components/modules/home/HomeBanner/HomeBanner.module.scss
index 507558cad..fdba411c0 100644
--- a/src/components/modules/home/HomeBanner/HomeBanner.module.scss
+++ b/src/components/modules/home/HomeBanner/HomeBanner.module.scss
@@ -11,11 +11,19 @@
@apply grid;
grid-template-columns: 1fr 1.8fr;
.left {
- @apply flex items-end justify-center custom-border-radius-lg;
+ @apply relative flex items-end justify-center custom-border-radius-lg;
margin-right: 1.6rem;
- background-image: url('./assets/home_banner.png');
- background-repeat: no-repeat;
- background-size: cover;
+ .imgWrap {
+ @apply absolute w-full h-full;
+ top: 0;
+ left: 0;
+ > div {
+ @apply w-full h-full custom-border-radius-lg;
+ }
+ img {
+ object-fit: cover;
+ }
+ }
.text {
@apply relative font-heading text-center;
diff --git a/src/components/modules/home/HomeBanner/HomeBanner.tsx b/src/components/modules/home/HomeBanner/HomeBanner.tsx
index 2a3a632fb..18432ec82 100644
--- a/src/components/modules/home/HomeBanner/HomeBanner.tsx
+++ b/src/components/modules/home/HomeBanner/HomeBanner.tsx
@@ -1,8 +1,9 @@
import React from 'react'
import { Banner } from 'src/components/common'
-import s from './HomeBanner.module.scss'
import BannerImgRight from './assets/banner_full.png'
-import BannerImgRight2 from './assets/banner_product.png'
+import HomeBannerImg from './assets/home_banner.png'
+import s from './HomeBanner.module.scss'
+import Image from 'next/image'
interface Props {
className?: string
@@ -13,6 +14,9 @@ const HomeBanner = ({ }: Props) => {
return (
+
+
+
Freshness guaranteed
@@ -28,10 +32,10 @@ const HomeBanner = ({ }: Props) => {
{
title: "Save 15% on your first order 2",
subtitle: "Last call! Shop deep deals on 100+ bulk picks while you can.",
- imgLink: BannerImgRight2.src,
+ imgLink: BannerImgRight.src,
size: "small",
}
- ]
+ ]
}
/>
diff --git a/src/components/modules/home/HomeBanner/assets/banner_product.png b/src/components/modules/home/HomeBanner/assets/banner_product.png
deleted file mode 100644
index 82f1b7fee..000000000
Binary files a/src/components/modules/home/HomeBanner/assets/banner_product.png and /dev/null differ
diff --git a/src/components/modules/home/HomeVideo/assets/bg_left.svg b/src/components/modules/home/HomeVideo/assets/bg_left.svg
index d730f777d..74b215ae0 100644
--- a/src/components/modules/home/HomeVideo/assets/bg_left.svg
+++ b/src/components/modules/home/HomeVideo/assets/bg_left.svg
@@ -1,19 +1,19 @@
-
-
+
+
-
-
+
+
-
-
+
+
diff --git a/src/components/modules/home/HomeVideo/assets/bg_right.svg b/src/components/modules/home/HomeVideo/assets/bg_right.svg
index e89652a3a..346d14e31 100644
--- a/src/components/modules/home/HomeVideo/assets/bg_right.svg
+++ b/src/components/modules/home/HomeVideo/assets/bg_right.svg
@@ -1,21 +1,21 @@
-
-
+
+
-
-
+
+
-
-
+
+
diff --git a/src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner.module.scss b/src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner.module.scss
new file mode 100644
index 000000000..2e5f65a1c
--- /dev/null
+++ b/src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner.module.scss
@@ -0,0 +1,8 @@
+@import "../../../../styles/_utilities";
+
+.recipeListBanner{
+ @apply spacing-horizontal;
+ @screen md {
+ padding:0 3.2rem;
+ }
+}
\ No newline at end of file
diff --git a/src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner.tsx b/src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner.tsx
new file mode 100644
index 000000000..0db63d2e3
--- /dev/null
+++ b/src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner.tsx
@@ -0,0 +1,27 @@
+import React from 'react'
+import { Banner } from 'src/components/common'
+import BannerRight from './assets/bannerrecipes.png'
+import s from './RecipeListBanner.module.scss'
+
+interface Props {
+}
+
+const RecipeListBanner = ({ }: Props) => {
+ return (
+
+
+
+ )
+}
+
+export default RecipeListBanner
diff --git a/src/components/modules/recipes-list/RecipeListBanner/assets/bannerrecipes.png b/src/components/modules/recipes-list/RecipeListBanner/assets/bannerrecipes.png
new file mode 100644
index 000000000..91271cbd2
Binary files /dev/null and b/src/components/modules/recipes-list/RecipeListBanner/assets/bannerrecipes.png differ
diff --git a/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.module.scss b/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.module.scss
new file mode 100644
index 000000000..2f70eb3ca
--- /dev/null
+++ b/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.module.scss
@@ -0,0 +1,60 @@
+@import "../../../../../styles/_utilities";
+
+.recipesItem {
+ @apply flex justify-between;
+ margin: 1.5rem 0;
+
+ @screen md{
+ @apply block;
+ }
+
+ .recipesItemImage {
+ @apply transition-all duration-200;
+ width: 31%;
+ img {
+ @apply block object-cover;
+ width: 100%;
+ min-height: 12.5rem;
+ border-radius: 1.5rem;
+ }
+
+ @screen md {
+ @apply object-cover cursor-pointer;
+ width: 100%;
+ margin: 0 auto;
+ img{
+ height:100%;
+ border-radius: 2.4rem;
+ }
+ }
+ }
+ .recipesItemText {
+ width: 65%;
+ .recipesItemName{
+ @apply topline font-bold cursor-pointer;
+
+ display: -webkit-box;
+ -webkit-line-clamp: 1;
+ overflow: hidden;
+ -webkit-box-orient: vertical;
+ font-feature-settings: "salt" on;
+ color:var(--text-active);
+ margin-top: 1.6rem;
+ &:hover {
+ color: var(--primary);
+ }
+ }
+ @screen md {
+ width: 100%;
+ }
+ }
+
+ .recipesItemDescription{
+ color:var(--text-label);
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ overflow: hidden;
+ -webkit-box-orient: vertical;
+ }
+
+}
diff --git a/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.tsx b/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.tsx
new file mode 100644
index 000000000..f43227d5a
--- /dev/null
+++ b/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.tsx
@@ -0,0 +1,31 @@
+import Link from 'next/link';
+import React from 'react';
+import s from './RecipesItem.module.scss';
+interface RecipesItem {
+ image:string,
+ name: string,
+ description:string,
+ link: string
+}
+
+const RecipesItem = ({ image, name,description, link }: RecipesItem) => {
+ return (
+
+ )
+}
+
+export default RecipesItem
diff --git a/src/components/modules/recipes-list/RecipesList/RecipesList.module.scss b/src/components/modules/recipes-list/RecipesList/RecipesList.module.scss
new file mode 100644
index 000000000..5f9ded191
--- /dev/null
+++ b/src/components/modules/recipes-list/RecipesList/RecipesList.module.scss
@@ -0,0 +1,94 @@
+@import "../../../../styles/_utilities";
+
+.recipesListWrapper {
+ @apply spacing-horizontal;
+ @screen md{
+ padding:0 3.2rem;
+ padding-bottom:5.6rem;
+ }
+ .breadcrumb{
+ padding:1rem 0;
+ }
+ .recipesListPageMain{
+ @screen md {
+ @apply flex;
+ }
+ .categories{
+ @apply hidden;
+ @screen md {
+ @apply hidden;
+ }
+ @screen xl{
+ @apply block;
+ width:25%;
+ }
+ }
+ .recipesList{
+ @screen md {
+ @apply flex justify-between flex-wrap w-full;
+ margin: 1rem 0;
+ }
+ @screen xl {
+ width:75%;
+ }
+ .inner{
+ @screen md {
+ @apply flex flex-col items-center justify-center;
+ }
+ .boxItem {
+ @screen md {
+ @apply flex justify-between flex-wrap;
+ margin: 1rem 0;
+ }
+ .item {
+ @screen md {
+ width: calc(97% / 2);
+ margin-top:1rem;
+ }
+ @screen lg{
+ width: calc(97% / 3);
+ margin-top:1rem;
+ }
+ }
+ }
+ }
+ .recipesPagination{
+ @apply flex justify-center w-full;
+ margin: 3rem 0;
+ @screen md {
+ @apply flex justify-center ;
+ margin:2rem 0;
+ }
+ }
+ .boxSelect{
+ @apply flex justify-between w-full;
+ padding: 2.5rem 0;
+
+ @screen xl {
+ @apply block;
+ width: auto;
+ padding:0;
+ }
+ .categorySelectCate{
+ @screen xl {
+ @apply hidden;
+ }
+ }
+ label{
+ @apply font-bold topline ;
+ color:var(--text-active);
+ @screen xl {
+ @apply hidden;
+ }
+ }
+ .select{
+ margin-top: 1rem;
+ }
+ }
+
+ }
+
+ }
+
+
+}
diff --git a/src/components/modules/recipes-list/RecipesList/RecipesList.tsx b/src/components/modules/recipes-list/RecipesList/RecipesList.tsx
new file mode 100644
index 000000000..0788e1a47
--- /dev/null
+++ b/src/components/modules/recipes-list/RecipesList/RecipesList.tsx
@@ -0,0 +1,217 @@
+import React from 'react';
+import BreadcrumbCommon from 'src/components/common/BreadcrumbCommon/BreadcrumbCommon';
+import MenuNavigation from 'src/components/common/MenuNavigation/MenuNavigation';
+import PaginationCommon from 'src/components/common/PaginationCommon/PaginationCommon';
+import { RecipeCardProps } from 'src/components/common/RecipeCard/RecipeCard';
+import image12 from "../../../../../public/assets/images/image12.png";
+import image13 from "../../../../../public/assets/images/image13.png";
+import image14 from "../../../../../public/assets/images/image14.png";
+import RecipesItem from './RecipesItem/RecipesItem';
+import HeadingCommon from "../../../common/HeadingCommon/HeadingCommon";
+import s from './RecipesList.module.scss';
+import { OPTION_ALL, QUERY_KEY, ROUTE } from 'src/utils/constanst.utils';
+import { SelectCommon } from 'src/components/common';
+
+const recipe:RecipeCardProps[] = [{
+ title: "Special Recipe of Vietnamese Phở",
+ description:"Alright, before we get to the actual recipe, let’s chat for a sec about the ingredients. To make this pho soup recipe, you will need:",
+ imageSrc: image12.src
+ },{
+ title: "Original Recipe of Curry",
+ description:"Chicken curry is common to several countries including India, countries in Asia and the Caribbean. My favorite of them though is this aromatic Indian...",
+ imageSrc: image13.src
+ },{
+ title: "The Best Recipe of Beef Noodle Soup",
+ description:"The broth for Bun Bo Hue is prepared by slowly simmering various types of beef and pork bones (ox tail, beef shank, pork neck bones, pork feet,...",
+ imageSrc: image14.src
+ },{
+ title: "Special Recipe of Vietnamese Phở",
+ description:"Alright, before we get to the actual recipe, let’s chat for a sec about the ingredients. To make this pho soup recipe, you will need:",
+ imageSrc: image12.src
+ },{
+ title: "Original Recipe of Curry",
+ description:"Chicken curry is common to several countries including India, countries in Asia and the Caribbean. My favorite of them though is this aromatic Indian...",
+ imageSrc: image13.src
+ },{
+ title: "The Best Recipe of Beef Noodle Soup",
+ description:"The broth for Bun Bo Hue is prepared by slowly simmering various types of beef and pork bones (ox tail, beef shank, pork neck bones, pork feet,...",
+ imageSrc: image14.src
+}];
+const BREADCRUMB = [
+ {
+ name: 'Special Recipes',
+ link: `#`,
+ },
+];
+
+const CATEGORY = [
+ {
+ name: 'All',
+ link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=${OPTION_ALL}`,
+ },
+ {
+ name: 'Malaysian',
+ link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=malaysia`,
+ },
+ {
+ name: 'Vietnamese',
+ link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=vietnamese`,
+ },
+ {
+ name: 'Thailand',
+ link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=thailand`,
+ },
+ {
+ name: 'Indian',
+ link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=indian`,
+ },
+ {
+ name: 'Lao',
+ link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=lao`,
+ },
+ {
+ name: 'Chinese',
+ link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=chinese`,
+ },
+ {
+ name: 'Korean',
+ link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=korean`,
+ },
+ {
+ name: 'Japanese',
+ link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=japanese`,
+ },
+ {
+ name: 'Western',
+ link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=western`,
+ },
+ ];
+
+const CATEGORYSELECT = [
+{
+ name: 'All',
+ value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=${OPTION_ALL}`,
+},
+{
+ name: 'Malaysian',
+ value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=malaysia`,
+},
+{
+ name: 'Vietnamese',
+ value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=vietnamese`,
+},
+{
+ name: 'Thailand',
+ value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=thailand`,
+},
+{
+ name: 'Indian',
+ value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=indian`,
+},
+{
+ name: 'Lao',
+ value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=lao`,
+},
+{
+ name: 'Chinese',
+ value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=chinese`,
+},
+{
+ name: 'Korean',
+ value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=korean`,
+},
+{
+ name: 'Japanese',
+ value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=japanese`,
+},
+{
+ name: 'Western',
+ value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=western`,
+},
+];
+
+const OPTIONSLECT=[
+ {
+ name:"Most Viewed",
+ value:"most-viewed"
+ },
+ {
+ name:"Lastest Blogs",
+ value:"lastest-blogs"
+ },
+ {
+ name:"Recent Blogs",
+ value:"recent-blogs"
+ },
+];
+
+interface Props{
+ data?: RecipeCardProps[],
+ recipes?:{
+ id:string,
+ title:string,
+ image:string,
+ description:string,
+ link:string
+ }[],
+}
+
+
+const RecipesList = ({ data =recipe}:Props) => {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
SPECIAL RECIPES
+
+
+
+
+
+ {data?.map((item,index) => (
+
+
+
+ ))}
+
+
+
+
+
+
+
+
+ >
+ )
+}
+
+export default RecipesList
diff --git a/src/components/modules/recipes-list/index.ts b/src/components/modules/recipes-list/index.ts
new file mode 100644
index 000000000..dc665674c
--- /dev/null
+++ b/src/components/modules/recipes-list/index.ts
@@ -0,0 +1,2 @@
+export { default as RecipeListBanner } from './RecipeListBanner/RecipeListBanner'
+export { default as RecipesList} from './RecipesList/RecipesList'
diff --git a/src/styles/_utilities.scss b/src/styles/_utilities.scss
index cc13ea3cf..6b919de76 100644
--- a/src/styles/_utilities.scss
+++ b/src/styles/_utilities.scss
@@ -149,6 +149,7 @@
.line {
@apply flex justify-between items-center;
> div {
+ flex: 1;
&:not(:last-child) {
margin-right: 1.6rem;
}
diff --git a/src/utils/constanst.utils.ts b/src/utils/constanst.utils.ts
index e5966ad7e..1522e477f 100644
--- a/src/utils/constanst.utils.ts
+++ b/src/utils/constanst.utils.ts
@@ -10,10 +10,9 @@ export const ROUTE = {
PRODUCTS: '/products',
PRODUCT_DETAIL: '/product',
ABOUT: '/about',
- BLOG_DETAIL: '/blogdetail',
+ BLOG_DETAIL: '/blog',
ACCOUNT: '/account',
RECIPES: '/recipes',
-
BUSSINESS: '/bussiness',
CONTACT: '/contact',
FAQ: '/faq',
@@ -34,7 +33,9 @@ export const QUERY_KEY = {
TAB: 'tab',
CATEGORY: 'category',
BRAND: 'brand',
- FEATURED: 'feature'
+ FEATURED: 'feature',
+ SORTBY:'sortby',
+ RECIPES:'recipes'
}
export enum ProductFeature {
@@ -48,3 +49,5 @@ export const KEY = {
ENTER: 'Enter',
}
+export const OPTION_ALL = 'all';
+export const DEFAULT_PAGE_SIZE=20
\ No newline at end of file
diff --git a/src/utils/demo-data.ts b/src/utils/demo-data.ts
index a4ebee5dc..ff4ddaab5 100644
--- a/src/utils/demo-data.ts
+++ b/src/utils/demo-data.ts
@@ -186,32 +186,38 @@ export const RECIPE_DATA_TEST: RecipeCardProps[] = [
{
title: "Special Recipe of Vietnamese Phở",
description: "Alright, before we get to the actual recipe, let’s chat for a sec about the ingredients. To make this pho soup recipe, you will need:",
- imageSrc: 'https://user-images.githubusercontent.com/76729908/132159257-f92574c7-d00d-4142-8ea7-0ca9515fb737.png'
+ imageSrc: 'https://user-images.githubusercontent.com/76729908/132159257-f92574c7-d00d-4142-8ea7-0ca9515fb737.png',
+ slug: "special-recipe-of-vietnamese-pho"
},
{
title: "Original Recipe of Curry",
description: "Chicken curry is common to several countries including India, countries in Asia and the Caribbean. My favorite of them though is this aromatic Indian...",
- imageSrc: 'https://user-images.githubusercontent.com/76729908/132159259-ae4c986d-ab53-4758-9137-d06bafdd15d0.png'
+ imageSrc: 'https://user-images.githubusercontent.com/76729908/132159259-ae4c986d-ab53-4758-9137-d06bafdd15d0.png',
+ slug:"original-recipe-of-curry"
},
{
title: "The Best Recipe of Beef Noodle Soup",
description: "The broth for Bun Bo Hue is prepared by slowly simmering various types of beef and pork bones (ox tail, beef shank, pork neck bones, pork feet,...",
- imageSrc: 'https://user-images.githubusercontent.com/76729908/132159262-f28a9fb9-4852-47e6-80b5-d600521b548a.png'
+ imageSrc: 'https://user-images.githubusercontent.com/76729908/132159262-f28a9fb9-4852-47e6-80b5-d600521b548a.png',
+ slug:"the-best-recipe-of-beef-noodle-soup"
},
{
title: "Special Recipe of Vietnamese Phở",
description: "Alright, before we get to the actual recipe, let’s chat for a sec about the ingredients. To make this pho soup recipe, you will need:",
- imageSrc: 'https://user-images.githubusercontent.com/76729908/132159257-f92574c7-d00d-4142-8ea7-0ca9515fb737.png'
+ imageSrc: 'https://user-images.githubusercontent.com/76729908/132159257-f92574c7-d00d-4142-8ea7-0ca9515fb737.png',
+ slug: "special-recipe-of-vietnamese-pho"
},
{
title: "Original Recipe of Curry",
description: "Chicken curry is common to several countries including India, countries in Asia and the Caribbean. My favorite of them though is this aromatic Indian...",
- imageSrc: 'https://user-images.githubusercontent.com/76729908/132159259-ae4c986d-ab53-4758-9137-d06bafdd15d0.png'
+ imageSrc: 'https://user-images.githubusercontent.com/76729908/132159259-ae4c986d-ab53-4758-9137-d06bafdd15d0.png',
+ slug:"original-recipe-of-curry"
},
{
title: "The Best Recipe of Beef Noodle Soup",
description: "The broth for Bun Bo Hue is prepared by slowly simmering various types of beef and pork bones (ox tail, beef shank, pork neck bones, pork feet,...",
- imageSrc: 'https://user-images.githubusercontent.com/76729908/132159262-f28a9fb9-4852-47e6-80b5-d600521b548a.png'
+ imageSrc: 'https://user-images.githubusercontent.com/76729908/132159262-f28a9fb9-4852-47e6-80b5-d600521b548a.png',
+ slug:"the-best-recipe-of-beef-noodle-soup"
},
]
diff --git a/src/utils/language.utils.ts b/src/utils/language.utils.ts
index 191215aaa..8b3d8f8d5 100644
--- a/src/utils/language.utils.ts
+++ b/src/utils/language.utils.ts
@@ -2,6 +2,7 @@ export const LANGUAGE = {
BUTTON_LABEL: {
BUY_NOW: 'Buy now',
SHOP_NOW: 'Shop now',
+ CONFIRM:'Confirm',
ADD_TO_CARD: 'Add to Cart',
PREORDER: 'Pre-Order Now',
},
diff --git a/src/utils/types.utils.ts b/src/utils/types.utils.ts
index c927f977e..532e1ae4c 100644
--- a/src/utils/types.utils.ts
+++ b/src/utils/types.utils.ts
@@ -20,6 +20,14 @@ export interface FeaturedProductProps {
export interface RecipeProps {
title: string
+ slug: string
+ description: string
+ imageSrc: string
+}
+
+export interface BlogProps {
+ title: string
+ slug: string
description: string
imageSrc: string
}