From b35d48d248969d8a3d287ac7ab65893decbc8387 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 26 Aug 2021 18:08:32 +0700 Subject: [PATCH 01/31] feat: component SelectCommon --- pages/index.tsx | 11 +-- .../SelectCommon/SelectCommon.module.scss | 73 +++++++++++++++--- .../common/SelectCommon/SelectCommon.tsx | 76 +++++++++++++++---- src/components/icons/IconVectorDown.tsx | 21 +++++ src/components/icons/index.ts | 3 +- 5 files changed, 149 insertions(+), 35 deletions(-) create mode 100644 src/components/icons/IconVectorDown.tsx diff --git a/pages/index.tsx b/pages/index.tsx index 539a8c74a..3a1c2a7fe 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -26,18 +26,11 @@ export default function Home() { return ( <>
This is home page
- Button default - {ButonType.light} - Button light - {ButonType.light} - Button light - {ButonType.light} - Button light - }>{ButtonSize.large} - Button default large - } disabled isIconSuffix={true}>Button with icon disabled - } type={ButonType.light}>Button with icon - - + Sort by + States ) } diff --git a/src/components/common/SelectCommon/SelectCommon.module.scss b/src/components/common/SelectCommon/SelectCommon.module.scss index dcb9120da..7de2c9c03 100644 --- a/src/components/common/SelectCommon/SelectCommon.module.scss +++ b/src/components/common/SelectCommon/SelectCommon.module.scss @@ -1,32 +1,81 @@ @import "../../../styles/utilities"; .select{ - @apply rounded-lg border-solid; - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - padding: 1.2rem 1.6rem; + background-color: var(--white); + margin-left: 2rem; &.base{ - width: 18.6rem; - height: 4.8rem; + width: 20.6rem; + .selectTrigger{ + width: 20.6rem; + padding: 1.2rem 1.6rem; + } } &.large{ width: 34.25rem; - height: 5.6rem; + .selectTrigger{ + width: 34.25rem; + padding: 1.6rem 1.6rem; + } } &.default{ - @apply border; + .selectTrigger{ + @apply border-solid border border-current; + } + } + &.custom{ + .selectTrigger{ + @apply border-2; + border-color: var(--border-line); + color: var(--text-label); + } + } + &.isActive{ + .selectOptionWrapper{ + @apply block; + } + } +} +.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; + .selectOption{ + padding: 1.2rem 1.6rem; + } + } + &.large{ + width: 34.25rem; + .selectOption{ + padding: 1.6rem 1.6rem; + } + } + &.default{ + @apply border-solid border border-current; } &.custom{ @apply border-2; border-color: var(--border-line); color: var(--text-label); } - .option{ + &.active{ + @apply hidden; + } + .selectOption{ &:hover{ - background-color: black; + background-color: var(--background); } } } + + diff --git a/src/components/common/SelectCommon/SelectCommon.tsx b/src/components/common/SelectCommon/SelectCommon.tsx index 8360a700f..fcfdc4e56 100644 --- a/src/components/common/SelectCommon/SelectCommon.tsx +++ b/src/components/common/SelectCommon/SelectCommon.tsx @@ -1,26 +1,76 @@ import s from './SelectCommon.module.scss' import classNames from 'classnames' +import { useState, useRef, useEffect } from 'react' +import { IconVectorDown } from 'src/components/icons' interface Props { - placeHolder? : string, + children? : React.ReactNode, size?: 'base' | 'large', type?: 'default' | 'custom', option: {name: string}[], } -const SelectCommon = ({ type = 'default', size = 'base', option, placeHolder }: Props) => { - return( - + else{ + setActive(false) + } + } + document.addEventListener('click', handleClick) + return () => { + document.removeEventListener('click', handleClick) + } + }, [ref]) + + const changeActiveStatus = () => { + setActive(!isActive) + } + + return( + <> +
+
{selectedName}
+ +
+ { + option.map(item => +
setSelectedName(item.name)} + >{item.name}
+ ) + } +
+
+ ) } diff --git a/src/components/icons/IconVectorDown.tsx b/src/components/icons/IconVectorDown.tsx new file mode 100644 index 000000000..019fc2806 --- /dev/null +++ b/src/components/icons/IconVectorDown.tsx @@ -0,0 +1,21 @@ + + +const IconVectorDown = ({ ...props }) => { + return ( + + + + ) + } + + export default IconVectorDown \ No newline at end of file diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index 74f5ca62f..86fe02e22 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -1,3 +1,4 @@ export { default as IconBuy } from './IconBuy' export { default as IconHeart } from './IconHeart' -export { default as IconVector } from './IconVector' \ No newline at end of file +export { default as IconVector } from './IconVector' +export { default as IconVectorDown } from './IconVectorDown' \ No newline at end of file From 90ca41529898869d8dc97fdb9289b07a159d8af9 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 26 Aug 2021 18:14:15 +0700 Subject: [PATCH 02/31] style: remove margin-left (use for test) --- src/components/common/SelectCommon/SelectCommon.module.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/common/SelectCommon/SelectCommon.module.scss b/src/components/common/SelectCommon/SelectCommon.module.scss index 7de2c9c03..418c9d0e6 100644 --- a/src/components/common/SelectCommon/SelectCommon.module.scss +++ b/src/components/common/SelectCommon/SelectCommon.module.scss @@ -2,7 +2,6 @@ .select{ background-color: var(--white); - margin-left: 2rem; &.base{ width: 20.6rem; .selectTrigger{ From de5278fa964fc1fcee74e310b0ccc24568e6a2b9 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 30 Aug 2021 09:31:19 +0700 Subject: [PATCH 03/31] refactor: format code --- src/components/common/SelectCommon/SelectCommon.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/common/SelectCommon/SelectCommon.tsx b/src/components/common/SelectCommon/SelectCommon.tsx index fcfdc4e56..e0e8c390c 100644 --- a/src/components/common/SelectCommon/SelectCommon.tsx +++ b/src/components/common/SelectCommon/SelectCommon.tsx @@ -64,7 +64,7 @@ const SelectCommon = ({ type = 'default', size = 'base', option, children }: Pro [s.selectOption] : true, [s[size]] : !!size, })} - onClick = { () => setSelectedName(item.name)} + onClick = { () => setSelectedName(item.name) } >{item.name} ) } From e0ccff890d0947c2e7cea27f49473c99ef59b152 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 30 Aug 2021 10:19:17 +0700 Subject: [PATCH 04/31] :art: styles: change bg color to gray when hover menu dropdown item :%s --- src/components/common/MenuDropdown/MenuDropdown.module.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/common/MenuDropdown/MenuDropdown.module.scss b/src/components/common/MenuDropdown/MenuDropdown.module.scss index ca79464e1..8fc270b2a 100644 --- a/src/components/common/MenuDropdown/MenuDropdown.module.scss +++ b/src/components/common/MenuDropdown/MenuDropdown.module.scss @@ -78,7 +78,7 @@ @apply block; } &:hover { - @apply bg-primary-lightest; + @apply bg-gray; color: var(--primary); } } From 37197743ce78935d77a73dc7eaab9f49ed131c7f Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 30 Aug 2021 11:10:23 +0700 Subject: [PATCH 05/31] :art: styles: modal create user info :%s --- pages/index.tsx | 4 +- .../components/FormAuthen.module.scss | 13 ++---- .../components/FormLogin/FormLogin.tsx | 5 +-- .../components/FormRegister/FormRegister.tsx | 1 - .../ModalCommon/ModalCommon.module.scss | 2 +- .../ModalCreateUserInfo.module.scss | 19 +++++++++ .../ModalCreateUserInfo.tsx | 40 +++++++++++++++++++ src/components/common/index.ts | 1 + src/styles/_utilities.scss | 20 +++++++++- 9 files changed, 88 insertions(+), 17 deletions(-) create mode 100644 src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.module.scss create mode 100644 src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx diff --git a/pages/index.tsx b/pages/index.tsx index 1d3072ef7..95af77b83 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,5 +1,5 @@ -import { Layout } from 'src/components/common' +import { Layout, ModalCreateUserInfo } from 'src/components/common' import { HomeBanner, HomeCollection, HomeCTA, HomeSubscribe, HomeVideo, HomeCategories, HomeFeature, HomeRecipe } from 'src/components/modules/home'; export default function Home() { @@ -13,6 +13,8 @@ export default function Home() { + + ) } diff --git a/src/components/common/ModalAuthenticate/components/FormAuthen.module.scss b/src/components/common/ModalAuthenticate/components/FormAuthen.module.scss index bdfc69387..2ec8bf91f 100644 --- a/src/components/common/ModalAuthenticate/components/FormAuthen.module.scss +++ b/src/components/common/ModalAuthenticate/components/FormAuthen.module.scss @@ -1,17 +1,12 @@ +@import '../../../../styles/utilities'; + .formAuthen { - @apply bg-white w-full; + @apply bg-white w-full u-form; .inner { @screen md { - max-width: 52rem; + width: 60rem; margin: auto; } - .body { - > div { - &:not(:last-child) { - margin-bottom: 1.6rem; - } - } - } .others { @apply font-bold text-center; margin-top: 4rem; diff --git a/src/components/common/ModalAuthenticate/components/FormLogin/FormLogin.tsx b/src/components/common/ModalAuthenticate/components/FormLogin/FormLogin.tsx index 7ef3ec9ba..de553a6aa 100644 --- a/src/components/common/ModalAuthenticate/components/FormLogin/FormLogin.tsx +++ b/src/components/common/ModalAuthenticate/components/FormLogin/FormLogin.tsx @@ -23,10 +23,7 @@ const FormLogin = ({ onSwitch, isHide }: Props) => { }, [isHide]) return ( -
+
diff --git a/src/components/common/ModalAuthenticate/components/FormRegister/FormRegister.tsx b/src/components/common/ModalAuthenticate/components/FormRegister/FormRegister.tsx index 1624f2c1c..40d4ef355 100644 --- a/src/components/common/ModalAuthenticate/components/FormRegister/FormRegister.tsx +++ b/src/components/common/ModalAuthenticate/components/FormRegister/FormRegister.tsx @@ -24,7 +24,6 @@ const FormRegister = ({ onSwitch, isHide }: Props) => {
diff --git a/src/components/common/ModalCommon/ModalCommon.module.scss b/src/components/common/ModalCommon/ModalCommon.module.scss index d4967b04e..d1434ed21 100644 --- a/src/components/common/ModalCommon/ModalCommon.module.scss +++ b/src/components/common/ModalCommon/ModalCommon.module.scss @@ -8,7 +8,7 @@ @apply flex justify-center items-center min-h-screen; .modal{ @apply inline-block align-bottom bg-white relative; - max-width: 60rem; + max-width: 66.4rem; padding: 3.2rem; box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.24); border-radius: 1.2rem; diff --git a/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.module.scss b/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.module.scss new file mode 100644 index 000000000..199028061 --- /dev/null +++ b/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.module.scss @@ -0,0 +1,19 @@ +@import "../../../styles/utilities"; + +.formUserInfo { + @apply u-form; + .inner { + @screen md { + width: 60rem; + margin: auto; + } + .bottom { + @apply grid grid-cols-2; + margin-top: 4rem; + grid-gap: 1.6rem; + > button { + @apply w-full; + } + } + } +} diff --git a/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx b/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx new file mode 100644 index 000000000..f6c3d7a6f --- /dev/null +++ b/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx @@ -0,0 +1,40 @@ +import classNames from 'classnames'; +import Link from 'next/link'; +import React, { useRef } from 'react'; +import { useModalCommon } from 'src/components/hooks/useModalCommon'; +import { CustomInputCommon } from 'src/utils/type.utils'; +import { Inputcommon } from '..'; +import ButtonCommon from '../ButtonCommon/ButtonCommon'; +import ModalCommon from '../ModalCommon/ModalCommon'; +import s from './ModalCreateUserInfo.module.scss'; + + +const ModalCreateUserInfo = () => { + const { visible, closeModal } = useModalCommon({ initialValue: true }) + const firstInputRef = useRef(null) + + return ( + +
+
+
+ + +
+ + +
+ +
+
+ Skip + Submit + +
+
+
+
+ ); +} + +export default ModalCreateUserInfo; \ No newline at end of file diff --git a/src/components/common/index.ts b/src/components/common/index.ts index dc0288966..86b242fb9 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -28,3 +28,4 @@ export { default as NotiMessage} from './NotiMessage/NotiMessage' export { default as VideoPlayer} from './VideoPlayer/VideoPlayer' export { default as SelectCommon} from './SelectCommon/SelectCommon' export { default as ModalCommon} from './ModalCommon/ModalCommon' +export { default as ModalCreateUserInfo} from './ModalCreateUserInfo/ModalCreateUserInfo' diff --git a/src/styles/_utilities.scss b/src/styles/_utilities.scss index 93291dc3a..26cea17c0 100644 --- a/src/styles/_utilities.scss +++ b/src/styles/_utilities.scss @@ -80,7 +80,7 @@ font-size: 10px; line-height: 16px; } - + .spacing-horizontal { padding-left: 2rem; padding-right: 2rem; @@ -119,4 +119,22 @@ .font-logo { font-family: var(--font-logo); } + + .u-form { + .body { + > div { + &:not(:last-child) { + margin-bottom: 1.6rem; + } + } + .line { + @apply flex justify-between items-center; + > div { + &:not(:last-child) { + margin-right: 1.6rem; + } + } + } + } + } } From 2a808cb767c7bfd6fb1fa26fda38df4a51fe55a6 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 30 Aug 2021 11:12:37 +0700 Subject: [PATCH 06/31] :art: styles: increase padding right modal common title :%s --- src/components/common/ModalCommon/ModalCommon.module.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/common/ModalCommon/ModalCommon.module.scss b/src/components/common/ModalCommon/ModalCommon.module.scss index d1434ed21..87900b1a1 100644 --- a/src/components/common/ModalCommon/ModalCommon.module.scss +++ b/src/components/common/ModalCommon/ModalCommon.module.scss @@ -17,7 +17,7 @@ } .title{ @apply font-heading heading-3; - padding: 0 0.8rem 0 0.8rem; + padding: 0 1.6rem 0 0.8rem; } .close{ @apply absolute; From f94aded113d3cf5b4135a2f63e0d222bae8d8164 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 30 Aug 2021 11:23:10 +0700 Subject: [PATCH 07/31] :recycle: enhan: shorcut demo modal create user info :%s --- pages/index.tsx | 7 ++++--- src/components/common/Header/Header.tsx | 7 ++++++- .../Header/components/HeaderMenu/HeaderMenu.tsx | 7 ++++++- .../ModalCreateUserInfo/ModalCreateUserInfo.tsx | 12 +++++++++--- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/pages/index.tsx b/pages/index.tsx index 95af77b83..7ed22f1bc 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,6 +1,6 @@ -import { Layout, ModalCreateUserInfo } from 'src/components/common' -import { HomeBanner, HomeCollection, HomeCTA, HomeSubscribe, HomeVideo, HomeCategories, HomeFeature, HomeRecipe } from 'src/components/modules/home'; +import { Layout } from 'src/components/common'; +import { HomeBanner, HomeCategories, HomeCollection, HomeCTA, HomeFeature, HomeRecipe, HomeSubscribe, HomeVideo } from 'src/components/modules/home'; export default function Home() { return ( @@ -14,7 +14,8 @@ export default function Home() { - + // todo: uncomment + {/* */} ) } diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index 12d656026..e9a06b9a8 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -3,6 +3,7 @@ import React, { memo, useEffect, useState } from 'react' import { useModalCommon } from 'src/components/hooks/useModalCommon' import { isMobile } from 'src/utils/funtion.utils' import ModalAuthenticate from '../ModalAuthenticate/ModalAuthenticate' +import ModalCreateUserInfo from '../ModalCreateUserInfo/ModalCreateUserInfo' import HeaderHighLight from './components/HeaderHighLight/HeaderHighLight' import HeaderMenu from './components/HeaderMenu/HeaderMenu' import HeaderSubMenu from './components/HeaderSubMenu/HeaderSubMenu' @@ -13,6 +14,7 @@ import s from './Header.module.scss' const Header = memo(() => { const [isFullHeader, setIsFullHeader] = useState(true) const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: false }) + const { visible: visibleModalInfo, closeModal: closeModalInfo, openModal: openModalInfo } = useModalCommon({ initialValue: false }) useEffect(() => { window.addEventListener('scroll', handleScroll) @@ -35,12 +37,15 @@ const Header = memo(() => {
- +
+ ) }) diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index a5ef71951..969964608 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -11,14 +11,19 @@ interface Props { children?: any, isFull: boolean, openModalAuthen: () => void, + openModalInfo: () => void, } -const HeaderMenu = memo(({ isFull, openModalAuthen }: Props) => { +const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo }: Props) => { const optionMenu = useMemo(() => [ { onClick: openModalAuthen, name: 'Login (Demo)', }, + { + onClick: openModalInfo, + name: 'Create User Info (Demo)', + }, { link: ROUTE.ACCOUNT, name: 'Account', diff --git a/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx b/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx index f6c3d7a6f..85817c930 100644 --- a/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx +++ b/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx @@ -8,9 +8,15 @@ import ButtonCommon from '../ButtonCommon/ButtonCommon'; import ModalCommon from '../ModalCommon/ModalCommon'; import s from './ModalCreateUserInfo.module.scss'; +// todo: remove +interface Props { + demoVisible: boolean, + demoCloseModal: () => void, +} -const ModalCreateUserInfo = () => { - const { visible, closeModal } = useModalCommon({ initialValue: true }) + +const ModalCreateUserInfo = ({ demoVisible: visible, demoCloseModal: closeModal }: Props) => { + // const { visible, closeModal } = useModalCommon({ initialValue: false}) const firstInputRef = useRef(null) return ( @@ -21,6 +27,7 @@ const ModalCreateUserInfo = () => {
+ {/* todo: select, not input */}
@@ -29,7 +36,6 @@ const ModalCreateUserInfo = () => {
Skip Submit -
From 0337e10b6a7cc1b372890a59d414e73c0f92fb8e Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 30 Aug 2021 12:49:23 +0700 Subject: [PATCH 08/31] :art: styles: input common with icon, input password :%s --- src/components/common/Header/Header.tsx | 2 +- .../InputCommon/InputCommon.module.scss | 113 ++++++++++++------ .../common/InputCommon/InputCommon.tsx | 58 ++++++--- .../InputPassword/InputPassword.module.scss | 10 ++ .../common/InputPassword/InputPassword.tsx | 40 +++++++ .../components/FormLogin/FormLogin.tsx | 17 +-- src/components/common/index.ts | 1 + src/components/icons/IconCheck.tsx | 11 ++ src/components/icons/IconError.tsx | 11 ++ src/components/icons/IconPassword.tsx | 11 ++ src/components/icons/IconPasswordCross.tsx | 11 ++ src/components/icons/index.ts | 4 + 12 files changed, 229 insertions(+), 60 deletions(-) create mode 100644 src/components/common/InputPassword/InputPassword.module.scss create mode 100644 src/components/common/InputPassword/InputPassword.tsx create mode 100644 src/components/icons/IconCheck.tsx create mode 100644 src/components/icons/IconError.tsx create mode 100644 src/components/icons/IconPassword.tsx create mode 100644 src/components/icons/IconPasswordCross.tsx diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index e9a06b9a8..4b2cf43c6 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -13,7 +13,7 @@ import s from './Header.module.scss' const Header = memo(() => { const [isFullHeader, setIsFullHeader] = useState(true) - const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: false }) + const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: true }) const { visible: visibleModalInfo, closeModal: closeModalInfo, openModal: openModalInfo } = useModalCommon({ initialValue: false }) useEffect(() => { diff --git a/src/components/common/InputCommon/InputCommon.module.scss b/src/components/common/InputCommon/InputCommon.module.scss index 1ef1fdbc7..acfc07647 100644 --- a/src/components/common/InputCommon/InputCommon.module.scss +++ b/src/components/common/InputCommon/InputCommon.module.scss @@ -1,51 +1,94 @@ @import "../../../styles/utilities"; .inputWrap { - @apply flex items-center relative; - .icon { - @apply absolute; - content: ""; - left: 1.6rem; - margin-right: 1.6rem; - svg path { - fill: currentColor; + .inputInner { + @apply flex items-center relative; + .icon { + @apply absolute flex justify-center items-center; + content: ""; + left: 1.6rem; + margin-right: 1.6rem; + svg path { + fill: currentColor; + } } - } - .icon + .inputCommon { - padding-left: 4.8rem; - } - .inputCommon { - @apply block w-full transition-all duration-200 rounded; - padding: 1.2rem 1.6rem; - border: 1px solid var(--border-line); - &:hover, - &:focus, - &:active { - outline: none; - border: 1px solid var(--primary); - @apply shadow-md; + .icon + .inputCommon { + padding-left: 4.8rem; } - &::placeholder { - @apply text-label; - } - - &.custom { - @apply custom-border-radius; - border: 1px solid transparent; - background: var(--gray); + .inputCommon { + @apply block w-full transition-all duration-200 rounded; + padding: 1.2rem 1.6rem; + border: 1px solid var(--border-line); &:hover, &:focus, &:active { + outline: none; border: 1px solid var(--primary); + @apply shadow-md; + } + + &::placeholder { + @apply text-label; + } + + &.custom { + @apply custom-border-radius; + border: 1px solid transparent; + background: var(--gray); + &:hover, + &:focus, + &:active { + border: 1px solid var(--primary); + } + } + &.bgTransparent { + background: rgb(227, 242, 233, 0.3); + color: var(--white); + &::placeholder { + color: var(--white); + } } } - &.bgTransparent { - background: rgb(227, 242, 233, 0.3); - color: var(--white); - &::placeholder { - color: var(--white); + + &.preserve { + @apply flex-row-reverse; + .icon { + left: unset; + right: 1.6rem; + margin-left: 1.6rem; + margin-right: 0; + svg path { + fill: var(--text-label); + } + } + .icon + .inputCommon { + padding-left: 1.6rem; + padding-right: 4.8rem; + } + } + &.success { + .icon { + svg path { + fill: var(--primary); + } + } + } + + &.error { + .icon { + svg path { + fill: var(--negative); + } + } + input { + border-color: var(--negative) !important; } } } + .errorMessage { + @apply caption; + color: var(--negative); + margin-top: 0.4rem; + } } diff --git a/src/components/common/InputCommon/InputCommon.tsx b/src/components/common/InputCommon/InputCommon.tsx index 6a42d5537..943b0a632 100644 --- a/src/components/common/InputCommon/InputCommon.tsx +++ b/src/components/common/InputCommon/InputCommon.tsx @@ -1,5 +1,6 @@ import classNames from 'classnames'; -import React, { forwardRef, useImperativeHandle, useRef } from 'react'; +import React, { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react'; +import { IconCheck, IconError, IconPassword, IconPasswordCross } from 'src/components/icons'; import { KEY } from 'src/utils/constanst.utils'; import s from './InputCommon.module.scss'; @@ -14,14 +15,29 @@ interface Props { styleType?: 'default' | 'custom', backgroundTransparent?: boolean, icon?: React.ReactNode, + isIconSuffix?: boolean, + isShowIconSuccess?: boolean, + error?: string, onChange?: (value: string | number) => void, onEnter?: (value: string | number) => void, } const InputCommon = forwardRef(({ value, placeholder, type, styleType = 'default', icon, backgroundTransparent = false, + isIconSuffix, isShowIconSuccess, error, onChange, onEnter }: Props, ref) => { const inputElementRef = useRef(null); + const iconElement = useMemo(() => { + if (error) { + return + } else if (isShowIconSuccess) { + return + } else if (icon) { + return {icon} + } + return <> + }, [icon, error, isShowIconSuccess]) + useImperativeHandle(ref, () => ({ focus: () => { inputElementRef.current?.focus(); @@ -44,23 +60,33 @@ const InputCommon = forwardRef(({ value, placeholder, type, styleTyp } return ( -
+
+
+ {iconElement} + +
{ - icon && {icon} + error &&
{error}
} -
) diff --git a/src/components/common/InputPassword/InputPassword.module.scss b/src/components/common/InputPassword/InputPassword.module.scss new file mode 100644 index 000000000..598620891 --- /dev/null +++ b/src/components/common/InputPassword/InputPassword.module.scss @@ -0,0 +1,10 @@ +.iconPassword { + all: unset; + cursor: pointer; + &:focus { + outline: none; + } + &:focus-visible { + outline: 2px solid var(--text-active); + } +} diff --git a/src/components/common/InputPassword/InputPassword.tsx b/src/components/common/InputPassword/InputPassword.tsx new file mode 100644 index 000000000..83e91cfcc --- /dev/null +++ b/src/components/common/InputPassword/InputPassword.tsx @@ -0,0 +1,40 @@ +import React, { useState } from 'react'; +import { IconPassword, IconPasswordCross } from 'src/components/icons'; +import { Inputcommon } from '..'; +import s from './InputPassword.module.scss'; + +interface Props { + children?: React.ReactNode, + value?: string | number, + placeholder?: string, + styleType?: 'default' | 'custom', + error?: string, + onChange?: (value: string | number) => void, + onEnter?: (value: string | number) => void, +} + +const InputPassword = ({ value, placeholder, styleType = 'default', error, + onChange, onEnter }: Props) => { + const [isShowPassword, setIsShowPassword] = useState(false) + const toggleShowPassword = () => { + setIsShowPassword(!isShowPassword) + } + + return ( + + {isShowPassword ? : } + } + isIconSuffix={true} + onChange={onChange} + onEnter={onEnter} + /> + ) +} + +export default InputPassword diff --git a/src/components/common/ModalAuthenticate/components/FormLogin/FormLogin.tsx b/src/components/common/ModalAuthenticate/components/FormLogin/FormLogin.tsx index de553a6aa..20a1a60ad 100644 --- a/src/components/common/ModalAuthenticate/components/FormLogin/FormLogin.tsx +++ b/src/components/common/ModalAuthenticate/components/FormLogin/FormLogin.tsx @@ -1,12 +1,12 @@ import Link from 'next/link' -import React, { useRef, useEffect } from 'react' -import { Inputcommon, ButtonCommon } from 'src/components/common' +import React, { useEffect, useRef } from 'react' +import { ButtonCommon, Inputcommon } from 'src/components/common' +import InputPassword from 'src/components/common/InputPassword/InputPassword' import { ROUTE } from 'src/utils/constanst.utils' -import SocialAuthen from '../SocialAuthen/SocialAuthen' -import s from '../FormAuthen.module.scss' -import styles from './FormLogin.module.scss' -import classNames from 'classnames' import { CustomInputCommon } from 'src/utils/type.utils' +import s from '../FormAuthen.module.scss' +import SocialAuthen from '../SocialAuthen/SocialAuthen' +import styles from './FormLogin.module.scss' interface Props { isHide: boolean, @@ -26,8 +26,9 @@ const FormLogin = ({ onSwitch, isHide }: Props) => {
- - + +
diff --git a/src/components/common/index.ts b/src/components/common/index.ts index 86b242fb9..5848f41cd 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -12,6 +12,7 @@ export { default as ViewAllItem} from './ViewAllItem/ViewAllItem' export { default as ItemWishList} from './ItemWishList/ItemWishList' export { default as Logo} from './Logo/Logo' export { default as Inputcommon} from './InputCommon/InputCommon' +export { default as InputPassword} from './InputPassword/InputPassword' export { default as CheckboxCommon} from './CheckboxCommon/CheckboxCommon' export { default as Author} from './Author/Author' export { default as DateTime} from './DateTime/DateTime' diff --git a/src/components/icons/IconCheck.tsx b/src/components/icons/IconCheck.tsx new file mode 100644 index 000000000..cbd1e861c --- /dev/null +++ b/src/components/icons/IconCheck.tsx @@ -0,0 +1,11 @@ +import React from 'react' + +const IconCheck = () => { + return ( + + + + ) +} + +export default IconCheck diff --git a/src/components/icons/IconError.tsx b/src/components/icons/IconError.tsx new file mode 100644 index 000000000..c7c59fb60 --- /dev/null +++ b/src/components/icons/IconError.tsx @@ -0,0 +1,11 @@ +import React from 'react' + +const IconError = () => { + return ( + + + + ) +} + +export default IconError diff --git a/src/components/icons/IconPassword.tsx b/src/components/icons/IconPassword.tsx new file mode 100644 index 000000000..e07c4dc22 --- /dev/null +++ b/src/components/icons/IconPassword.tsx @@ -0,0 +1,11 @@ +import React from 'react' + +const IconPassword = () => { + return ( + + + + ) +} + +export default IconPassword diff --git a/src/components/icons/IconPasswordCross.tsx b/src/components/icons/IconPasswordCross.tsx new file mode 100644 index 000000000..d05bbd713 --- /dev/null +++ b/src/components/icons/IconPasswordCross.tsx @@ -0,0 +1,11 @@ +import React from 'react' + +const IconPasswordCross = () => { + return ( + + + + ) +} + +export default IconPasswordCross diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index 02b4947cb..d71c1bbec 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -15,3 +15,7 @@ export { default as IconApple } from './IconApple' export { default as ArrowLeft } from './ArrowLeft' export { default as ArrowRight } from './ArrowRight' export { default as Close } from './Close' +export { default as IconPassword } from './IconPassword' +export { default as IconPasswordCross } from './IconPasswordCross' +export { default as IconError } from './IconError' +export { default as IconCheck } from './IconCheck' From d9e0cc248f667e4b8f8386bdb491ebc2a809b0f1 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 30 Aug 2021 13:41:45 +0700 Subject: [PATCH 09/31] :sparkles: feat: Modal confirm modal info :%s --- pages/test.tsx | 129 +----------------- .../common/ModalCommon/ModalCommon.tsx | 4 +- .../ModalConfirm/ModalConfirm.module.scss | 4 + .../common/ModalConfirm/ModalConfirm.tsx | 34 +++++ .../common/ModalInfo/ModalInfo.module.scss | 4 + src/components/common/ModalInfo/ModalInfo.tsx | 27 ++++ src/components/common/index.ts | 2 + 7 files changed, 79 insertions(+), 125 deletions(-) create mode 100644 src/components/common/ModalConfirm/ModalConfirm.module.scss create mode 100644 src/components/common/ModalConfirm/ModalConfirm.tsx create mode 100644 src/components/common/ModalInfo/ModalInfo.module.scss create mode 100644 src/components/common/ModalInfo/ModalInfo.tsx diff --git a/pages/test.tsx b/pages/test.tsx index 5ac220819..6a1922f5a 100644 --- a/pages/test.tsx +++ b/pages/test.tsx @@ -3,99 +3,11 @@ import { ButtonCommon, Layout, ModalCommon, + ModalConfirm, + ModalInfo, ProductCarousel, } from 'src/components/common' -import { CollectionCarcousel } from 'src/components/modules/home' -import image5 from '../public/assets/images/image5.png' -import image6 from '../public/assets/images/image6.png' -import image7 from '../public/assets/images/image7.png' -import image8 from '../public/assets/images/image8.png' -const dataTest = [ - { - name: 'Tomato', - weight: '250g', - category: 'VEGGIE', - price: 'Rp 27.500', - imageSrc: image5.src, - }, - { - name: 'Cucumber', - weight: '250g', - category: 'VEGGIE', - price: 'Rp 27.500', - imageSrc: image6.src, - }, - { - name: 'Carrot', - weight: '250g', - category: 'VEGGIE', - price: 'Rp 27.500', - imageSrc: image7.src, - }, - { - name: 'Salad', - weight: '250g', - category: 'VEGGIE', - price: 'Rp 27.500', - imageSrc: image8.src, - }, - { - name: 'Tomato', - weight: '250g', - category: 'VEGGIE', - price: 'Rp 27.500', - imageSrc: image5.src, - }, - { - name: 'Cucumber', - weight: '250g', - category: 'VEGGIE', - price: 'Rp 27.500', - imageSrc: image6.src, - }, - { - name: 'Tomato', - weight: '250g', - category: 'VEGGIE', - price: 'Rp 27.500', - imageSrc: image5.src, - }, - { - name: 'Cucumber', - weight: '250g', - category: 'VEGGIE', - price: 'Rp 27.500', - imageSrc: image6.src, - }, - { - name: 'Carrot', - weight: '250g', - category: 'VEGGIE', - price: 'Rp 27.500', - imageSrc: image7.src, - }, - { - name: 'Salad', - weight: '250g', - category: 'VEGGIE', - price: 'Rp 27.500', - imageSrc: image8.src, - }, - { - name: 'Tomato', - weight: '250g', - category: 'VEGGIE', - price: 'Rp 27.500', - imageSrc: image5.src, - }, - { - name: 'Cucumber', - weight: '250g', - category: 'VEGGIE', - price: 'Rp 27.500', - imageSrc: image6.src, - }, -] + export default function Test() { const [visible, setVisible] = useState(false) const onClose = () => { @@ -107,38 +19,9 @@ export default function Test() { return ( <> open - -
- Lorem ipsum dolor sit amet consectetur adipisicing elit. Consectetur - officiis dolorum ea incidunt. Sint, cum ullam. Labore vero quod - itaque, officia magni molestias! Architecto deserunt soluta laborum - commodi nesciunt delectus similique temporibus distinctio? Facere - eaque minima enim modi magni, laudantium, animi mollitia beatae - repudiandae maxime labore error nesciunt, nisi est? -
-
- + + Lorem, ipsum dolor sit amet consectetur adipisicing elit. Nisi qui, esse eos nobis soluta suscipit aliquid nostrum corporis. Nihil eligendi similique recusandae minus mollitia aliquam, molestias fugit tenetur voluptatibus maiores et. Quaerat labore corporis inventore nostrum, amet autem exercitationem eligendi? + ) } diff --git a/src/components/common/ModalCommon/ModalCommon.tsx b/src/components/common/ModalCommon/ModalCommon.tsx index 2ed90a3b3..75222c162 100644 --- a/src/components/common/ModalCommon/ModalCommon.tsx +++ b/src/components/common/ModalCommon/ModalCommon.tsx @@ -2,7 +2,7 @@ import React, { useRef } from 'react' import { Close } from 'src/components/icons' import { useOnClickOutside } from 'src/utils/useClickOutSide' import s from './ModalCommon.module.scss' -interface Props { +export interface ModalCommonProps { onClose: () => void visible: boolean children: React.ReactNode @@ -10,7 +10,7 @@ interface Props { maxWidth?:string } -const ModalCommon = ({ onClose, visible, children, title="Modal",maxWidth }: Props) => { +const ModalCommon = ({ onClose, visible, children, title="Modal",maxWidth }: ModalCommonProps) => { const modalRef = useRef(null) const clickOutSide = () => { onClose && onClose() diff --git a/src/components/common/ModalConfirm/ModalConfirm.module.scss b/src/components/common/ModalConfirm/ModalConfirm.module.scss new file mode 100644 index 000000000..ac167b2a2 --- /dev/null +++ b/src/components/common/ModalConfirm/ModalConfirm.module.scss @@ -0,0 +1,4 @@ +.footer{ + margin-top: 4rem; + @apply flex justify-end items-center; +} \ No newline at end of file diff --git a/src/components/common/ModalConfirm/ModalConfirm.tsx b/src/components/common/ModalConfirm/ModalConfirm.tsx new file mode 100644 index 000000000..1e425482f --- /dev/null +++ b/src/components/common/ModalConfirm/ModalConfirm.tsx @@ -0,0 +1,34 @@ +import React from 'react' +import ButtonCommon from '../ButtonCommon/ButtonCommon' +import ModalCommon, { ModalCommonProps } from '../ModalCommon/ModalCommon' +import s from './ModalConfirm.module.scss' +interface ModalConfirmProps extends ModalCommonProps { + okText?: String + cancelText?: String + onOk?: () => void + onCancel?: () => void +} + +const ModalConfirm = ({ + okText = 'Ok', + cancelText = 'cancel', + onOk, + onCancel, + children, + title = 'Confirm', + ...props +}: ModalConfirmProps) => { + return ( + + {children} +
+
+ {cancelText} +
+ {okText} +
+
+ ) +} + +export default ModalConfirm diff --git a/src/components/common/ModalInfo/ModalInfo.module.scss b/src/components/common/ModalInfo/ModalInfo.module.scss new file mode 100644 index 000000000..ac167b2a2 --- /dev/null +++ b/src/components/common/ModalInfo/ModalInfo.module.scss @@ -0,0 +1,4 @@ +.footer{ + margin-top: 4rem; + @apply flex justify-end items-center; +} \ No newline at end of file diff --git a/src/components/common/ModalInfo/ModalInfo.tsx b/src/components/common/ModalInfo/ModalInfo.tsx new file mode 100644 index 000000000..1880d8f63 --- /dev/null +++ b/src/components/common/ModalInfo/ModalInfo.tsx @@ -0,0 +1,27 @@ +import React from 'react' +import ButtonCommon from '../ButtonCommon/ButtonCommon' +import ModalCommon, { ModalCommonProps } from '../ModalCommon/ModalCommon' +import s from './ModalInfo.module.scss' +interface ModalInfoProps extends ModalCommonProps { + okText?: String + onOk?: () => void +} + +const ModalInfo = ({ + okText = 'Ok', + onOk, + children, + title = 'Confirm', + ...props +}: ModalInfoProps) => { + return ( + + {children} +
+ {okText} +
+
+ ) +} + +export default ModalInfo diff --git a/src/components/common/index.ts b/src/components/common/index.ts index dc0288966..ba7743f70 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -28,3 +28,5 @@ export { default as NotiMessage} from './NotiMessage/NotiMessage' export { default as VideoPlayer} from './VideoPlayer/VideoPlayer' export { default as SelectCommon} from './SelectCommon/SelectCommon' export { default as ModalCommon} from './ModalCommon/ModalCommon' +export { default as ModalConfirm} from "./ModalConfirm/ModalConfirm" +export { default as ModalInfo} from "./ModalInfo/ModalInfo" From 648a7349c59ffdd01cb01970da1c671b66d9d77d Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 30 Aug 2021 13:54:37 +0700 Subject: [PATCH 10/31] refactor: remove inline function --- src/components/common/SelectCommon/SelectCommon.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/common/SelectCommon/SelectCommon.tsx b/src/components/common/SelectCommon/SelectCommon.tsx index e0e8c390c..b60eb2bee 100644 --- a/src/components/common/SelectCommon/SelectCommon.tsx +++ b/src/components/common/SelectCommon/SelectCommon.tsx @@ -35,6 +35,10 @@ const SelectCommon = ({ type = 'default', size = 'base', option, children }: Pro setActive(!isActive) } + const changeSelectedName = (props:string) => { + setSelectedName(props) + } + return( <>
setSelectedName(item.name) } + onClick = { changeSelectedName(item.name) } >{item.name}
) } From ca41dcd19410bc49ff2daa0f15659a228c42d2e5 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 30 Aug 2021 14:03:04 +0700 Subject: [PATCH 11/31] refactor: select common --- src/components/common/SelectCommon/SelectCommon.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/common/SelectCommon/SelectCommon.tsx b/src/components/common/SelectCommon/SelectCommon.tsx index b60eb2bee..d8eb9e904 100644 --- a/src/components/common/SelectCommon/SelectCommon.tsx +++ b/src/components/common/SelectCommon/SelectCommon.tsx @@ -68,7 +68,7 @@ const SelectCommon = ({ type = 'default', size = 'base', option, children }: Pro [s.selectOption] : true, [s[size]] : !!size, })} - onClick = { changeSelectedName(item.name) } + onClick = { changeSelectedName!.(item.name) } >{item.name}
) } From a772d3fca90ce260de80caba6d282c9ed5187aee Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 30 Aug 2021 14:07:50 +0700 Subject: [PATCH 12/31] Remove conflict --- pages/index.tsx | 9 --------- src/components/common/SelectCommon/SelectCommon.tsx | 6 +----- src/components/icons/index.ts | 3 --- 3 files changed, 1 insertion(+), 17 deletions(-) diff --git a/pages/index.tsx b/pages/index.tsx index 6629096ac..1d3072ef7 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -5,14 +5,6 @@ import { HomeBanner, HomeCollection, HomeCTA, HomeSubscribe, HomeVideo, HomeCate export default function Home() { return ( <> -<<<<<<< HEAD -
This is home page
- - - - Sort by - States -======= @@ -21,7 +13,6 @@ export default function Home() { ->>>>>>> 08cd011b5ebb28ba4205d167dc07c81e3b9c3072 ) } diff --git a/src/components/common/SelectCommon/SelectCommon.tsx b/src/components/common/SelectCommon/SelectCommon.tsx index d8eb9e904..e0e8c390c 100644 --- a/src/components/common/SelectCommon/SelectCommon.tsx +++ b/src/components/common/SelectCommon/SelectCommon.tsx @@ -35,10 +35,6 @@ const SelectCommon = ({ type = 'default', size = 'base', option, children }: Pro setActive(!isActive) } - const changeSelectedName = (props:string) => { - setSelectedName(props) - } - return( <>
setSelectedName(item.name) } >{item.name}
) } diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index 0c3dfde93..b272e9a83 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -9,13 +9,10 @@ export { default as IconHome } from './IconHome' export { default as IconShopping } from './IconShopping' export { default as IconHeart } from './IconHeart' export { default as IconVector } from './IconVector' -<<<<<<< HEAD export { default as IconVectorDown } from './IconVectorDown' -======= export { default as IconFacebookColor } from './IconFacebookColor' export { default as IconGoogleColor } from './IconGoogleColor' export { default as IconApple } from './IconApple' export { default as ArrowLeft } from './ArrowLeft' export { default as ArrowRight } from './ArrowRight' export { default as Close } from './Close' ->>>>>>> 08cd011b5ebb28ba4205d167dc07c81e3b9c3072 From 99b043eaf15f29238461eb82577c4104a3275859 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 30 Aug 2021 14:09:01 +0700 Subject: [PATCH 13/31] :sparkles: feat: banner carousel :%s --- pages/index.tsx | 2 +- .../common/Banner/Banner.module.scss | 52 ----------------- src/components/common/Banner/Banner.tsx | 53 +++++------------- .../Banner/BannerItem/BannerItem.module.scss | 52 +++++++++++++++++ .../common/Banner/BannerItem/BannerItem.tsx | 48 ++++++++++++++++ src/components/common/Header/Header.tsx | 2 +- .../components/FormLogin/FormLogin.tsx | 5 +- .../components/FormRegister/FormRegister.tsx | 2 +- .../home/HomeBanner/HomeBanner.module.scss | 1 + .../modules/home/HomeBanner/HomeBanner.tsx | 22 ++++++-- .../home/HomeBanner/assets/banner_product.png | Bin 0 -> 216898 bytes 11 files changed, 139 insertions(+), 100 deletions(-) create mode 100644 src/components/common/Banner/BannerItem/BannerItem.module.scss create mode 100644 src/components/common/Banner/BannerItem/BannerItem.tsx create mode 100644 src/components/modules/home/HomeBanner/assets/banner_product.png diff --git a/pages/index.tsx b/pages/index.tsx index 7ed22f1bc..0ddbcfe80 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -5,7 +5,7 @@ import { HomeBanner, HomeCategories, HomeCollection, HomeCTA, HomeFeature, HomeR export default function Home() { return ( <> - + diff --git a/src/components/common/Banner/Banner.module.scss b/src/components/common/Banner/Banner.module.scss index f4b374dd0..e69de29bb 100644 --- a/src/components/common/Banner/Banner.module.scss +++ b/src/components/common/Banner/Banner.module.scss @@ -1,52 +0,0 @@ -@import "../../../styles/utilities"; - -.banner { - @apply bg-primary-light custom-border-radius-lg overflow-hidden; - @screen md { - border: 1px solid var(--primary); - } - &.large { - margin-bottom: 2.8rem; - .inner { - @screen xl { - @apply bg-right-bottom; - background-size: unset; - } - } - } - .inner { - @apply bg-no-repeat; - background-size: 90%; - background-position: right -500% bottom 0%; - .content { - background-image: linear-gradient( - to right, - rgb(227, 242, 233, 0.9), - rgb(227, 242, 233, 0.5) 80%, - rgb(227, 242, 233, 0) - ); - padding: 1.6rem; - max-width: 37rem; - @screen md { - max-width: 49.6rem; - padding: 4.8rem; - } - .top { - .heading { - @apply heading-1 font-heading; - margin-bottom: 1.6rem; - } - .subHeading { - @apply sub-headline; - @screen md { - @apply caption; - } - } - } - - .bottom { - margin-top: 4rem; - } - } - } -} diff --git a/src/components/common/Banner/Banner.tsx b/src/components/common/Banner/Banner.tsx index a953052b6..1dbc04d9f 100644 --- a/src/components/common/Banner/Banner.tsx +++ b/src/components/common/Banner/Banner.tsx @@ -1,47 +1,24 @@ -import classNames from 'classnames' -import Link from 'next/link' import React, { memo } from 'react' -import { IconArrowRight } from 'src/components/icons' -import { ROUTE } from 'src/utils/constanst.utils' -import { LANGUAGE } from 'src/utils/language.utils' -import ButtonCommon from '../ButtonCommon/ButtonCommon' -import s from './Banner.module.scss' +import CarouselCommon from '../CarouselCommon/CarouselCommon' +import BannerItem, { BannerItemProps } from './BannerItem/BannerItem' interface Props { - imgLink: string, - title: string, - subtitle: string, - buttonLabel?: string, - linkButton?: string, - size?: 'small' | 'large', + data: BannerItemProps[], } -const Banner = memo(({ imgLink, title, subtitle, buttonLabel = LANGUAGE.BUTTON_LABEL.SHOP_NOW, linkButton = ROUTE.HOME, size = 'large' }: Props) => { +const option = { + slidesPerView: 1, + breakpoints: {} +} +const Banner = memo(({ data }: Props) => { return ( -
-
-
-
-

- {title} -

-
- {subtitle} -
-
- -
-
-
+ + data={data} + itemKey="banner" + Component={BannerItem} + option={option} + isDot = {true} + /> ) }) diff --git a/src/components/common/Banner/BannerItem/BannerItem.module.scss b/src/components/common/Banner/BannerItem/BannerItem.module.scss new file mode 100644 index 000000000..72690f92d --- /dev/null +++ b/src/components/common/Banner/BannerItem/BannerItem.module.scss @@ -0,0 +1,52 @@ +@import "../../../../styles/utilities"; + +.bannerItem { + @apply bg-primary-light custom-border-radius-lg overflow-hidden; + @screen md { + border: 1px solid var(--primary); + } + &.large { + margin-bottom: 2.8rem; + .inner { + @screen xl { + @apply bg-right-bottom; + background-size: unset; + } + } + } + .inner { + @apply bg-no-repeat; + background-size: 90%; + background-position: right -500% bottom 0%; + .content { + background-image: linear-gradient( + to right, + rgb(227, 242, 233, 0.9), + rgb(227, 242, 233, 0.5) 80%, + rgb(227, 242, 233, 0) + ); + padding: 1.6rem; + max-width: 37rem; + @screen md { + max-width: 49.6rem; + padding: 4.8rem; + } + .top { + .heading { + @apply heading-1 font-heading; + margin-bottom: 1.6rem; + } + .subHeading { + @apply sub-headline; + @screen md { + @apply caption; + } + } + } + + .bottom { + margin-top: 4rem; + } + } + } +} diff --git a/src/components/common/Banner/BannerItem/BannerItem.tsx b/src/components/common/Banner/BannerItem/BannerItem.tsx new file mode 100644 index 000000000..c7516d362 --- /dev/null +++ b/src/components/common/Banner/BannerItem/BannerItem.tsx @@ -0,0 +1,48 @@ +import classNames from 'classnames' +import Link from 'next/link' +import React, { memo } from 'react' +import { IconArrowRight } from 'src/components/icons' +import { ROUTE } from 'src/utils/constanst.utils' +import { LANGUAGE } from 'src/utils/language.utils' +import ButtonCommon from '../../ButtonCommon/ButtonCommon' +import s from './BannerItem.module.scss' + +export interface BannerItemProps { + imgLink: string, + title: string, + subtitle: string, + buttonLabel?: string, + linkButton?: string, + size?: 'small' | 'large', +} + +const BannerItem = memo(({ imgLink, title, subtitle, buttonLabel = LANGUAGE.BUTTON_LABEL.SHOP_NOW, linkButton = ROUTE.HOME, size = 'large' }: BannerItemProps) => { + return ( +
+
+
+
+

+ {title} +

+
+ {subtitle} +
+
+ +
+
+
+ ) +}) + +export default BannerItem diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index 4b2cf43c6..e9a06b9a8 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -13,7 +13,7 @@ import s from './Header.module.scss' const Header = memo(() => { const [isFullHeader, setIsFullHeader] = useState(true) - const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: true }) + const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: false }) const { visible: visibleModalInfo, closeModal: closeModalInfo, openModal: openModalInfo } = useModalCommon({ initialValue: false }) useEffect(() => { diff --git a/src/components/common/ModalAuthenticate/components/FormLogin/FormLogin.tsx b/src/components/common/ModalAuthenticate/components/FormLogin/FormLogin.tsx index 20a1a60ad..bedb993f4 100644 --- a/src/components/common/ModalAuthenticate/components/FormLogin/FormLogin.tsx +++ b/src/components/common/ModalAuthenticate/components/FormLogin/FormLogin.tsx @@ -26,8 +26,9 @@ const FormLogin = ({ onSwitch, isHide }: Props) => {
- + + {/* */}
diff --git a/src/components/common/ModalAuthenticate/components/FormRegister/FormRegister.tsx b/src/components/common/ModalAuthenticate/components/FormRegister/FormRegister.tsx index 40d4ef355..d03dbc39e 100644 --- a/src/components/common/ModalAuthenticate/components/FormRegister/FormRegister.tsx +++ b/src/components/common/ModalAuthenticate/components/FormRegister/FormRegister.tsx @@ -28,7 +28,7 @@ const FormRegister = ({ onSwitch, isHide }: Props) => {
- +
Must contain 8 characters with at least 1 uppercase and 1 lowercase letter and either 1 number or 1 special character.
diff --git a/src/components/modules/home/HomeBanner/HomeBanner.module.scss b/src/components/modules/home/HomeBanner/HomeBanner.module.scss index 3f41797d0..507558cad 100644 --- a/src/components/modules/home/HomeBanner/HomeBanner.module.scss +++ b/src/components/modules/home/HomeBanner/HomeBanner.module.scss @@ -5,6 +5,7 @@ margin-bottom: 2.8rem; .left { @apply hidden; + margin-bottom: 3rem; } @screen xl { @apply grid; diff --git a/src/components/modules/home/HomeBanner/HomeBanner.tsx b/src/components/modules/home/HomeBanner/HomeBanner.tsx index 8bbf75138..2a3a632fb 100644 --- a/src/components/modules/home/HomeBanner/HomeBanner.tsx +++ b/src/components/modules/home/HomeBanner/HomeBanner.tsx @@ -2,6 +2,7 @@ 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' interface Props { className?: string @@ -13,14 +14,25 @@ const HomeBanner = ({ }: Props) => {
- Freshness
guaranteed + Freshness
guaranteed
) diff --git a/src/components/modules/home/HomeBanner/assets/banner_product.png b/src/components/modules/home/HomeBanner/assets/banner_product.png new file mode 100644 index 0000000000000000000000000000000000000000..82f1b7feee4e41559750b053e116e7336daea394 GIT binary patch literal 216898 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 kY@>Wlv37?5WCmx(j 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�|z)4>BRYDMvI6a^U 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 Date: Mon, 30 Aug 2021 15:26:35 +0700 Subject: [PATCH 14/31] :sparkles: feat: Modal confirm modal info :%s --- .../CarouselCommon/CarouselCommon.module.scss | 10 ++++++++-- .../CustomCarouselArrow.module.scss | 20 +------------------ .../PaginationCommon.module.scss | 0 .../PaginationCommon/PaginationCommon.tsx | 15 ++++++++++++++ 4 files changed, 24 insertions(+), 21 deletions(-) create mode 100644 src/components/common/PaginationCommon/PaginationCommon.module.scss create mode 100644 src/components/common/PaginationCommon/PaginationCommon.tsx diff --git a/src/components/common/CarouselCommon/CarouselCommon.module.scss b/src/components/common/CarouselCommon/CarouselCommon.module.scss index 802c25bb0..da306f38f 100644 --- a/src/components/common/CarouselCommon/CarouselCommon.module.scss +++ b/src/components/common/CarouselCommon/CarouselCommon.module.scss @@ -13,10 +13,16 @@ } @apply absolute top-1/2 bg-background-arrow transform -translate-y-1/2 flex justify-center items-center transition duration-100; &:global(.leftArrow) { - @apply left-0; + @apply hidden left-0; + @screen md { + @apply flex + } } &:global(.rightArrow) { - @apply right-0; + @apply hidden right-0; + @screen md { + @apply flex; + } } &:global(.isDisabledArrow) { @apply hidden; diff --git a/src/components/common/CarouselCommon/CustomArrow/CustomCarouselArrow.module.scss b/src/components/common/CarouselCommon/CustomArrow/CustomCarouselArrow.module.scss index fb174c66c..139597f9c 100644 --- a/src/components/common/CarouselCommon/CustomArrow/CustomCarouselArrow.module.scss +++ b/src/components/common/CarouselCommon/CustomArrow/CustomCarouselArrow.module.scss @@ -1,20 +1,2 @@ -.navigationWrapper{ - :global(.customArrow) { - width: 64px; - height: 64px; - &:focus{ - outline: none; - } - @apply absolute top-1/2 bg-background-arrow transform -translate-y-1/2 flex justify-center items-center transition duration-100; - &.leftArrow{ - @apply left-0; - } - &.rightArrow{ - @apply right-0; - } - &.isDisabled{ - @apply hidden ; - } - } -} + diff --git a/src/components/common/PaginationCommon/PaginationCommon.module.scss b/src/components/common/PaginationCommon/PaginationCommon.module.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src/components/common/PaginationCommon/PaginationCommon.tsx b/src/components/common/PaginationCommon/PaginationCommon.tsx new file mode 100644 index 000000000..59bbd3baa --- /dev/null +++ b/src/components/common/PaginationCommon/PaginationCommon.tsx @@ -0,0 +1,15 @@ +import React from 'react' + +interface PaginationCommonProps { + +} + +const PaginationCommon = (props: PaginationCommonProps) => { + return ( +

+ +
+ ) +} + +export default PaginationCommon From 38be2e7a7df37f54dd54f4cf5fad9961b30dd294 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 30 Aug 2021 15:42:58 +0700 Subject: [PATCH 15/31] feat: SelectOption --- pages/index.tsx | 19 ++++++++++++-- .../SelectCommon/SelectCommon.module.scss | 11 -------- .../common/SelectCommon/SelectCommon.tsx | 11 ++++---- .../SelectOption/SelectOption.module.scss | 17 +++++++++++++ .../SelectOption/SelectOption.tsx | 25 +++++++++++++++++++ 5 files changed, 64 insertions(+), 19 deletions(-) create mode 100644 src/components/common/SelectCommon/SelectOption/SelectOption.module.scss create mode 100644 src/components/common/SelectCommon/SelectOption/SelectOption.tsx diff --git a/pages/index.tsx b/pages/index.tsx index 7ed22f1bc..8938f34a9 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,18 +1,33 @@ import { Layout } from 'src/components/common'; import { HomeBanner, HomeCategories, HomeCollection, HomeCTA, HomeFeature, HomeRecipe, HomeSubscribe, HomeVideo } from 'src/components/modules/home'; +import {SelectCommon} from 'src/components/common' + +const OPTION_SORT = [ + { + name: "By Name" + }, + { + name: "Price (High to Low)" + }, + { + name: "On Sale" + } +] export default function Home() { return ( <> - + {/* - + */} + Sort By + Sort By // todo: uncomment {/* */} diff --git a/src/components/common/SelectCommon/SelectCommon.module.scss b/src/components/common/SelectCommon/SelectCommon.module.scss index 418c9d0e6..d91b1831e 100644 --- a/src/components/common/SelectCommon/SelectCommon.module.scss +++ b/src/components/common/SelectCommon/SelectCommon.module.scss @@ -48,15 +48,9 @@ margin-top: 0.6rem; &.base{ width: 20.6rem; - .selectOption{ - padding: 1.2rem 1.6rem; - } } &.large{ width: 34.25rem; - .selectOption{ - padding: 1.6rem 1.6rem; - } } &.default{ @apply border-solid border border-current; @@ -69,11 +63,6 @@ &.active{ @apply hidden; } - .selectOption{ - &:hover{ - background-color: var(--background); - } - } } diff --git a/src/components/common/SelectCommon/SelectCommon.tsx b/src/components/common/SelectCommon/SelectCommon.tsx index e0e8c390c..5bb3d15d6 100644 --- a/src/components/common/SelectCommon/SelectCommon.tsx +++ b/src/components/common/SelectCommon/SelectCommon.tsx @@ -2,6 +2,7 @@ import s from './SelectCommon.module.scss' import classNames from 'classnames' import { useState, useRef, useEffect } from 'react' import { IconVectorDown } from 'src/components/icons' +import SelectOption from './SelectOption/SelectOption' interface Props { children? : React.ReactNode, @@ -35,6 +36,9 @@ const SelectCommon = ({ type = 'default', size = 'base', option, children }: Pro setActive(!isActive) } + const changeSelectedName = (item:string) => { + setSelectedName(item) + } return( <>
{ option.map(item => -
setSelectedName(item.name) } - >{item.name}
+ ) }
diff --git a/src/components/common/SelectCommon/SelectOption/SelectOption.module.scss b/src/components/common/SelectCommon/SelectOption/SelectOption.module.scss new file mode 100644 index 000000000..5448f9879 --- /dev/null +++ b/src/components/common/SelectCommon/SelectOption/SelectOption.module.scss @@ -0,0 +1,17 @@ +@import "../../../../styles/utilities"; + +.selectOption { + @apply outline-none; + background-color: var(--white); + &.base{ + width: 20.4rem; + padding: 0.8rem 1.6rem; + } + &.large{ + width: 33.75rem; + padding: 0.8rem 1.6rem; + } + &:hover{ + 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 new file mode 100644 index 000000000..54877d5fe --- /dev/null +++ b/src/components/common/SelectCommon/SelectOption/SelectOption.tsx @@ -0,0 +1,25 @@ +import s from './SelectOption.module.scss' +import classNames from 'classnames' + +interface Props{ + onClick: (value: string) => void, + itemName: string, + size: 'base' | 'large', +} + +const SelectOption = ({onClick, itemName, size}: Props) => { + + const changeName = () => { + onClick(itemName) + } + return( +
{itemName}
+ ) +} + +export default SelectOption \ No newline at end of file From 887c3ae2e33ab223c3f98331203a98e0e87f4196 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 30 Aug 2021 17:20:35 +0700 Subject: [PATCH 16/31] :art: styles: product info detail :%s --- grocery-vercel-commerce | 1 - pages/product/[slug].tsx | 77 ++----------------- src/components/common/Header/Header.tsx | 2 +- src/components/hooks/index.ts | 1 + src/components/hooks/useModalCommon.tsx | 4 +- .../ProductInfoDetail.module.scss | 0 .../ProductInfoDetail/ProductInfoDetail.tsx | 20 +++++ .../ProductImgs/ProductImgs.module.scss | 6 ++ .../components/ProductImgs/ProductImgs.tsx | 24 ++++++ .../ProductInfo/ProductInfo.module.scss | 40 ++++++++++ .../components/ProductInfo/ProductInfo.tsx | 37 +++++++++ .../modules/product-detail/index.ts | 1 + src/styles/_base.scss | 2 +- src/utils/language.utils.ts | 1 + 14 files changed, 141 insertions(+), 75 deletions(-) delete mode 160000 grocery-vercel-commerce create mode 100644 src/components/hooks/index.ts create mode 100644 src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.module.scss create mode 100644 src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.tsx create mode 100644 src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss create mode 100644 src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx create mode 100644 src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss create mode 100644 src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx create mode 100644 src/components/modules/product-detail/index.ts diff --git a/grocery-vercel-commerce b/grocery-vercel-commerce deleted file mode 160000 index 3c7aa8e86..000000000 --- a/grocery-vercel-commerce +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3c7aa8e862bfd8d44719be44c6c0a31ab01524a3 diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx index c5bcbdba1..b26de19bb 100644 --- a/pages/product/[slug].tsx +++ b/pages/product/[slug].tsx @@ -1,76 +1,11 @@ -import { Layout } from '@components/common' -import commerce from '@lib/api/commerce' -import type { - GetStaticPathsContext, - GetStaticPropsContext, - InferGetStaticPropsType -} from 'next' -import { useRouter } from 'next/router' -export async function getStaticProps({ - params, - locale, - locales, - preview, -}: GetStaticPropsContext<{ slug: string }>) { - const config = { locale, locales } - const pagesPromise = commerce.getAllPages({ config, preview }) - const siteInfoPromise = commerce.getSiteInfo({ config, preview }) - const productPromise = commerce.getProduct({ - variables: { slug: params!.slug }, - config, - preview, - }) +import { Layout } from 'src/components/common' +import { ProductInfoDetail } from 'src/components/modules/product-detail' - const allProductsPromise = commerce.getAllProducts({ - variables: { first: 4 }, - config, - preview, - }) - const { pages } = await pagesPromise - const { categories } = await siteInfoPromise - const { product } = await productPromise - const { products: relatedProducts } = await allProductsPromise - - if (!product) { - throw new Error(`Product with slug '${params!.slug}' not found`) - } - - return { - props: { - pages, - product, - relatedProducts, - categories, - }, - revalidate: 200, - } -} - -export async function getStaticPaths({ locales }: GetStaticPathsContext) { - const { products } = await commerce.getAllProductPaths() - - return { - paths: locales - ? locales.reduce((arr, locale) => { - // Add a product path for every locale - products.forEach((product: any) => { - arr.push(`/${locale}/product${product.path}`) - }) - return arr - }, []) - : products.map((product: any) => `/product${product.path}`), - fallback: 'blocking', - } -} - -export default function Slug({ - product, - relatedProducts, -}: InferGetStaticPropsType) { - const router = useRouter() - - return
This is product page
+export default function Slug() { + return <> + + } Slug.Layout = Layout diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index e9a06b9a8..a9926f765 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -1,6 +1,6 @@ import classNames from 'classnames' import React, { memo, useEffect, useState } from 'react' -import { useModalCommon } from 'src/components/hooks/useModalCommon' +import { useModalCommon } from 'src/components/hooks' import { isMobile } from 'src/utils/funtion.utils' import ModalAuthenticate from '../ModalAuthenticate/ModalAuthenticate' import ModalCreateUserInfo from '../ModalCreateUserInfo/ModalCreateUserInfo' diff --git a/src/components/hooks/index.ts b/src/components/hooks/index.ts new file mode 100644 index 000000000..cf83feb42 --- /dev/null +++ b/src/components/hooks/index.ts @@ -0,0 +1 @@ +export { default as useModalCommon } from './useModalCommon' diff --git a/src/components/hooks/useModalCommon.tsx b/src/components/hooks/useModalCommon.tsx index 02626ce94..41aed648f 100644 --- a/src/components/hooks/useModalCommon.tsx +++ b/src/components/hooks/useModalCommon.tsx @@ -4,7 +4,7 @@ interface Props { initialValue?: boolean, } -export const useModalCommon = ({ initialValue = false }: Props) => { +const useModalCommon = ({ initialValue = false }: Props) => { const [visible, setVisible] = useState(initialValue) const openModal = (e?: any) => { @@ -21,3 +21,5 @@ export const useModalCommon = ({ initialValue = false }: Props) => { visible, openModal, closeModal } }; + +export default useModalCommon \ No newline at end of file diff --git a/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.module.scss b/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.module.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.tsx b/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.tsx new file mode 100644 index 000000000..d1047bd3a --- /dev/null +++ b/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.tsx @@ -0,0 +1,20 @@ +import React from 'react' +import ProductImgs from './components/ProductImgs/ProductImgs' +import ProductInfo from './components/ProductInfo/ProductInfo' +import s from './ProductInfoDetail.module.scss' + +interface Props { + className?: string + children?: any +} + +const ProductInfoDetail = ({ }: Props) => { + return ( +
+ + +
+ ) +} + +export default ProductInfoDetail diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss new file mode 100644 index 000000000..b368095e0 --- /dev/null +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss @@ -0,0 +1,6 @@ +.productImgs { + .img { + @apply w-full h-full; + object-fit: cover; + } +} diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx new file mode 100644 index 000000000..3a20a6f64 --- /dev/null +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx @@ -0,0 +1,24 @@ +import React from 'react' +import { CarouselCommon } from 'src/components/common' +import s from './ProductImgs.module.scss' + +interface ImgProps { + src: string, alt?: string +} + +interface Props { + className?: string + children?: any, + // data: ImgProps[] +} + +const ProductImgs = ({ }: Props) => { + return ( +
+ {/* /> */} + +
+ ) +} + +export default ProductImgs diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss new file mode 100644 index 000000000..468e352ed --- /dev/null +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss @@ -0,0 +1,40 @@ +@import "../../../../../../styles/utilities"; + +.productInfo { + .info { + margin-bottom: 3.2rem; + .heading { + @apply heading-2 font-heading; + margin-top: 0.8rem; + } + .price { + margin-top: 0.8rem; + .old { + margin-bottom: 0.8rem; + .number { + margin-right: 0.8rem; + color: var(--text-label); + text-decoration: line-through; + } + } + .current { + @apply text-active; + } + } + .description { + margin-top: 0.8rem; + } + } + .bottom { + @screen md { + margin-top: 2.4rem; + max-width: 39rem; + button { + @apply w-full; + &:first-child { + margin-bottom: 0.8rem; + } + } + } + } +} diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx new file mode 100644 index 000000000..aeaf3e699 --- /dev/null +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx @@ -0,0 +1,37 @@ +import React from 'react' +import { ButtonCommon, LabelCommon, QuanittyInput } from 'src/components/common' +import { LANGUAGE } from 'src/utils/language.utils' +import s from './ProductInfo.module.scss' + +interface Props { + className?: string + children?: any, +} + +const ProductInfo = ({ }: Props) => { + return ( +
+
+ SEAFOOD +

SeaPAk

+
+
+ Rp 32.000 + -15% +
+
Rp 27.500
+
+
+ In a large non-reactive dish, mix together the orange juice, soy sauce, olive oil, lemon juice, parsley +
+
+ +
+ {LANGUAGE.BUTTON_LABEL.BUY_NOW} + {LANGUAGE.BUTTON_LABEL.ADD_TO_CARD} +
+
+ ) +} + +export default ProductInfo diff --git a/src/components/modules/product-detail/index.ts b/src/components/modules/product-detail/index.ts new file mode 100644 index 000000000..79dd056d0 --- /dev/null +++ b/src/components/modules/product-detail/index.ts @@ -0,0 +1 @@ +export { default as ProductInfoDetail } from './ProductInfoDetail/ProductInfoDetail' diff --git a/src/styles/_base.scss b/src/styles/_base.scss index 67eb96726..e17e36944 100644 --- a/src/styles/_base.scss +++ b/src/styles/_base.scss @@ -21,7 +21,7 @@ --warning-light: #fef8eb; --negative-dark: #741a06; - --negative: #f34f2b; + --negative: #D1644D; --negative-border-line: #fddfd8; --negative-light: #feefec; diff --git a/src/utils/language.utils.ts b/src/utils/language.utils.ts index 3f8d61926..cb7760943 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', + ADD_TO_CARD: 'Add to Cart' }, PLACE_HOLDER: { SEARCH: 'Search', From f6504be74f6ec48106fd4f312efc0c16a4cd78ae Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 30 Aug 2021 18:22:03 +0700 Subject: [PATCH 17/31] :art: styles: product info responsive :%s --- .../ProductInfoDetail.module.scss | 9 ++++ .../ProductImgs/ProductImgs.module.scss | 7 +++ .../ProductInfo/ProductInfo.module.scss | 45 ++++++++++++++++++- .../components/ProductInfo/ProductInfo.tsx | 16 +++++-- tailwind.config.js | 17 ++++--- 5 files changed, 81 insertions(+), 13 deletions(-) diff --git a/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.module.scss b/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.module.scss index e69de29bb..f9b621b82 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.module.scss +++ b/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.module.scss @@ -0,0 +1,9 @@ +@import '../../../../styles/utilities'; + +.productInfoDetail { + @apply spacing-horizontal; + margin: 0 auto 4rem; + @screen md { + @apply flex; + } +} \ No newline at end of file diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss index b368095e0..20f296a4a 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss @@ -1,4 +1,11 @@ .productImgs { + @apply w-full; + @screen sm-only { + margin-bottom: 2rem; + } + @screen lg { + max-width: 60rem; + } .img { @apply w-full h-full; object-fit: cover; diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss index 468e352ed..749725c89 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss @@ -1,6 +1,13 @@ @import "../../../../../../styles/utilities"; .productInfo { + @screen md { + max-width: 39rem; + margin-left: 4.8rem; + } + @screen lg { + margin-left: 11.2rem; + } .info { margin-bottom: 3.2rem; .heading { @@ -25,12 +32,46 @@ margin-top: 0.8rem; } } + .actions { + @screen sm-only { + @apply fixed flex justify-between items-center bg-white w-full; + z-index: 10000; + bottom: 0; + left: 0; + padding: 2rem; + } + } .bottom { + @screen sm-only { + @apply flex justify-between items-center flex-row-reverse; + margin-left: 1rem; + flex: 1; + button { + &:first-child { + min-width: 13rem; + } + &:nth-child(n + 1) { + margin-left: 0.8rem; + } + } + } + .buttonWithIcon { + @apply flex items-center; + .label { + @apply hidden; + @screen md { + @apply inline-block; + margin-left: 0.8rem; + } + } + } + button { + @apply w-full; + } + @screen md { margin-top: 2.4rem; - max-width: 39rem; button { - @apply w-full; &:first-child { margin-bottom: 0.8rem; } diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx index aeaf3e699..25fea44aa 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx @@ -1,5 +1,6 @@ import React from 'react' import { ButtonCommon, LabelCommon, QuanittyInput } from 'src/components/common' +import { IconBuy } from 'src/components/icons' import { LANGUAGE } from 'src/utils/language.utils' import s from './ProductInfo.module.scss' @@ -25,10 +26,17 @@ const ProductInfo = ({ }: Props) => { In a large non-reactive dish, mix together the orange juice, soy sauce, olive oil, lemon juice, parsley
- -
- {LANGUAGE.BUTTON_LABEL.BUY_NOW} - {LANGUAGE.BUTTON_LABEL.ADD_TO_CARD} +
+ +
+ {LANGUAGE.BUTTON_LABEL.BUY_NOW} + + + + {LANGUAGE.BUTTON_LABEL.ADD_TO_CARD} + + +
) diff --git a/tailwind.config.js b/tailwind.config.js index f94c85fd8..894a7ab6e 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -49,17 +49,17 @@ module.exports = { 'background': 'var(--background)', 'white': 'var(--white)', - 'background-arrow':'var(--background-arrow)', + 'background-arrow': 'var(--background-arrow)', + - 'disabled': 'var(--text-disabled)', line: 'var(--border-line)', background: 'var(--background)', white: 'var(--white)', gray: 'var(--gray)', disabled: 'var(--text-disabled)', - 'background-arrow':'var(--background-arrow)', - + 'background-arrow': 'var(--background-arrow)', + // @deprecated (NOT use these variables) 'primary-2': 'var(--primary-2)', secondary: 'var(--secondary)', @@ -93,7 +93,7 @@ module.exports = { label: 'var(--text-label)', placeholder: 'var(--text-placeholder)', primary: 'var(--primary)', - + // @deprecated (NOT use these variables) secondary: 'var(--text-secondary)', }, @@ -109,12 +109,15 @@ module.exports = { rounded: '.8rem', }, screens: { + 'sm-only': {'min': '0', 'max': '767px'}, 'sm': '640px', // => @media (min-width: 640px) { ... } + 'md-only': {'min': '768px', 'max': '1023px'}, 'md': '768px', // => @media (min-width: 768px) { ... } + 'lg-only': {'min': '1024px', 'max': '1279px'}, 'lg': '1024px', // => @media (min-width: 1024px) { ... } @@ -124,8 +127,8 @@ module.exports = { '2xl': '1536px', // => @media (min-width: 1536px) { ... } }, - caroucel:{ - "arrow-height":"64px" + caroucel: { + "arrow-height": "64px" }, }, }, From a7d0eb051c3e040c12e7708874d8531f97b70e91 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 30 Aug 2021 18:32:45 +0700 Subject: [PATCH 18/31] :art: styles: product detail imgs :%s --- .../ImgWithLink/ImgWithLink.module.scss | 4 +++ .../common/ImgWithLink/ImgWithLink.tsx | 16 ++++++++++ src/components/common/index.ts | 1 + .../ProductImgs/ProductImgs.module.scss | 6 +--- .../components/ProductImgs/ProductImgs.tsx | 32 ++++++++++++++----- .../ProductInfo/ProductInfo.module.scss | 2 +- 6 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 src/components/common/ImgWithLink/ImgWithLink.module.scss create mode 100644 src/components/common/ImgWithLink/ImgWithLink.tsx diff --git a/src/components/common/ImgWithLink/ImgWithLink.module.scss b/src/components/common/ImgWithLink/ImgWithLink.module.scss new file mode 100644 index 000000000..b1587bfa6 --- /dev/null +++ b/src/components/common/ImgWithLink/ImgWithLink.module.scss @@ -0,0 +1,4 @@ +.imgWithLink { + @apply w-full h-full; + object-fit: cover; +} diff --git a/src/components/common/ImgWithLink/ImgWithLink.tsx b/src/components/common/ImgWithLink/ImgWithLink.tsx new file mode 100644 index 000000000..43ac1caa6 --- /dev/null +++ b/src/components/common/ImgWithLink/ImgWithLink.tsx @@ -0,0 +1,16 @@ +import React from 'react' +import s from './ImgWithLink.module.scss' + +export interface ImgWithLinkProps { + src: string, + alt?: string, +} + +const ImgWithLink = ({ src, alt }: ImgWithLinkProps) => { + return ( + {alt} + + ) +} + +export default ImgWithLink \ No newline at end of file diff --git a/src/components/common/index.ts b/src/components/common/index.ts index 5848f41cd..def6d83b0 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -30,3 +30,4 @@ export { default as VideoPlayer} from './VideoPlayer/VideoPlayer' export { default as SelectCommon} from './SelectCommon/SelectCommon' export { default as ModalCommon} from './ModalCommon/ModalCommon' export { default as ModalCreateUserInfo} from './ModalCreateUserInfo/ModalCreateUserInfo' +export { default as ImgWithLink} from './ImgWithLink/ImgWithLink' diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss index 20f296a4a..a10eb5865 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss @@ -1,13 +1,9 @@ .productImgs { - @apply w-full; + @apply w-full flex justify-between items-center; @screen sm-only { margin-bottom: 2rem; } @screen lg { max-width: 60rem; } - .img { - @apply w-full h-full; - object-fit: cover; - } } diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx index 3a20a6f64..325c6b453 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx @@ -1,22 +1,38 @@ import React from 'react' -import { CarouselCommon } from 'src/components/common' +import { CarouselCommon, ImgWithLink } from 'src/components/common' +import { ImgWithLinkProps } from 'src/components/common/ImgWithLink/ImgWithLink' import s from './ProductImgs.module.scss' -interface ImgProps { - src: string, alt?: string -} - interface Props { className?: string children?: any, - // data: ImgProps[] +} + +const DATA = [ + { + src: 'https://user-images.githubusercontent.com/76729908/130574371-3b75fa72-9552-4605-aba9-a4b31cd9dce7.png', + alt: 'Broccoli', + }, + { + src: 'https://user-images.githubusercontent.com/76729908/130574371-3b75fa72-9552-4605-aba9-a4b31cd9dce7.png', + alt: 'Broccoli', + } +] + +const option = { + slidesPerView: 1, } const ProductImgs = ({ }: Props) => { return (
- {/* /> */} - + + data={DATA} + itemKey="product-detail-img" + Component={ImgWithLink} + option={option} + isDot={true} + />
) } diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss index 749725c89..403782c51 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss @@ -25,7 +25,7 @@ } } .current { - @apply text-active; + @apply text-active font-bold sm-headline; } } .description { From 6169634dcafb1d89799710f9963937a7ff610139 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 1 Sep 2021 16:04:07 +0700 Subject: [PATCH 19/31] :art: styles: component recipe detail :%s --- pages/demo.tsx | 13 ++++ pages/index.tsx | 2 +- pages/product/[slug].tsx | 3 +- .../RecipeDetail/RecipeDetail.module.scss | 62 +++++++++++++++++++ .../common/RecipeDetail/RecipeDetail.tsx | 59 ++++++++++++++++++ .../RecipeBriefInfo.module.scss | 19 ++++++ .../RecipeBriefInfo/RecipeBriefInfo.tsx | 29 +++++++++ src/components/common/index.ts | 1 + src/components/icons/IconLocation.tsx | 11 ++++ src/components/icons/IconPeople.tsx | 11 ++++ src/components/icons/IconTime.tsx | 11 ++++ src/components/icons/index.ts | 3 + src/styles/_base.scss | 3 +- 13 files changed, 224 insertions(+), 3 deletions(-) create mode 100644 pages/demo.tsx create mode 100644 src/components/common/RecipeDetail/RecipeDetail.module.scss create mode 100644 src/components/common/RecipeDetail/RecipeDetail.tsx create mode 100644 src/components/common/RecipeDetail/components/RecipeBriefInfo/RecipeBriefInfo.module.scss create mode 100644 src/components/common/RecipeDetail/components/RecipeBriefInfo/RecipeBriefInfo.tsx create mode 100644 src/components/icons/IconLocation.tsx create mode 100644 src/components/icons/IconPeople.tsx create mode 100644 src/components/icons/IconTime.tsx diff --git a/pages/demo.tsx b/pages/demo.tsx new file mode 100644 index 000000000..5ca1c8040 --- /dev/null +++ b/pages/demo.tsx @@ -0,0 +1,13 @@ +import { Layout, RecipeDetail } from 'src/components/common'; +import { ProductInfoDetail } from 'src/components/modules/product-detail' + + + +export default function Demo() { + return <> + + + +} + +Demo.Layout = Layout diff --git a/pages/index.tsx b/pages/index.tsx index 0ddbcfe80..203cf253d 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -14,7 +14,7 @@ export default function Home() { - // todo: uncomment + {/* // todo: uncomment */} {/* */} ) diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx index b26de19bb..adf1fd8dd 100644 --- a/pages/product/[slug].tsx +++ b/pages/product/[slug].tsx @@ -1,10 +1,11 @@ -import { Layout } from 'src/components/common' +import { Layout, RecipeDetail } from 'src/components/common' import { ProductInfoDetail } from 'src/components/modules/product-detail' export default function Slug() { return <> + } diff --git a/src/components/common/RecipeDetail/RecipeDetail.module.scss b/src/components/common/RecipeDetail/RecipeDetail.module.scss new file mode 100644 index 000000000..64c8db389 --- /dev/null +++ b/src/components/common/RecipeDetail/RecipeDetail.module.scss @@ -0,0 +1,62 @@ +@import "../../../styles/utilities"; + +.recipeDetail { + @apply spacing-horizontal; + margin: 5.6rem auto; + @screen md { + @apply flex; + } + .img { + width: fit-content; + margin: auto; + margin-top: 0; + + @screen sm-only { + margin-bottom: 2rem; + } + @screen lg { + max-width: 60rem; + } + img { + @apply w-full; + object-fit: contain; + max-height: 64rem; + border-radius: 2.4rem; + @screen md { + max-height: 90rem; + } + } + } + + .recipeInfo { + @screen md { + max-width: 39rem; + margin-left: 4.8rem; + } + @screen lg { + margin-left: 11.2rem; + } + .top { + margin-bottom: 4.8rem; + .name { + @apply heading-1 font-heading; + margin-bottom: 1.6rem; + } + } + .detail { + .item { + &:not(:last-child) { + margin-bottom: 2.4rem; + } + .heading { + @apply heading-3 font-heading; + margin-bottom: 0.8rem; + } + .content { + list-style: disc; + margin-left: 2rem; + } + } + } + } +} diff --git a/src/components/common/RecipeDetail/RecipeDetail.tsx b/src/components/common/RecipeDetail/RecipeDetail.tsx new file mode 100644 index 000000000..715c61ed2 --- /dev/null +++ b/src/components/common/RecipeDetail/RecipeDetail.tsx @@ -0,0 +1,59 @@ +import React from 'react' +import RecipeBriefInfo from './components/RecipeBriefInfo/RecipeBriefInfo' +import s from './RecipeDetail.module.scss' + + +interface Props { + className?: string + children?: any +} + +const RecipeDetail = ({ }: Props) => { + return ( +
+ ) +} + +export default RecipeDetail diff --git a/src/components/common/RecipeDetail/components/RecipeBriefInfo/RecipeBriefInfo.module.scss b/src/components/common/RecipeDetail/components/RecipeBriefInfo/RecipeBriefInfo.module.scss new file mode 100644 index 000000000..56f1e6500 --- /dev/null +++ b/src/components/common/RecipeDetail/components/RecipeBriefInfo/RecipeBriefInfo.module.scss @@ -0,0 +1,19 @@ +.recipeBriefInfo { + @apply flex; + .item { + @apply flex; + &:not(:last-child) { + margin-right: 2.4rem; + } + svg { + width: 2rem; + height: 2rem; + path { + fill: var(--text-label); + } + } + .content { + margin-left: 0.8rem; + } + } +} diff --git a/src/components/common/RecipeDetail/components/RecipeBriefInfo/RecipeBriefInfo.tsx b/src/components/common/RecipeDetail/components/RecipeBriefInfo/RecipeBriefInfo.tsx new file mode 100644 index 000000000..d06387914 --- /dev/null +++ b/src/components/common/RecipeDetail/components/RecipeBriefInfo/RecipeBriefInfo.tsx @@ -0,0 +1,29 @@ +import React from 'react' +import { IconLocation, IconPeople, IconTime } from 'src/components/icons' +import s from './RecipeBriefInfo.module.scss' + +interface Props { + className?: string + children?: any, +} + +const RecipeBriefInfo = ({ }: Props) => { + return ( +
+
+ +
15 minutes
+
+
+ +
4 People
+
+
+ +
15 minutes
+
+
+ ) +} + +export default RecipeBriefInfo diff --git a/src/components/common/index.ts b/src/components/common/index.ts index def6d83b0..8f193bd5f 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -31,3 +31,4 @@ export { default as SelectCommon} from './SelectCommon/SelectCommon' export { default as ModalCommon} from './ModalCommon/ModalCommon' export { default as ModalCreateUserInfo} from './ModalCreateUserInfo/ModalCreateUserInfo' export { default as ImgWithLink} from './ImgWithLink/ImgWithLink' +export { default as RecipeDetail} from './RecipeDetail/RecipeDetail' diff --git a/src/components/icons/IconLocation.tsx b/src/components/icons/IconLocation.tsx new file mode 100644 index 000000000..3dc0a81b9 --- /dev/null +++ b/src/components/icons/IconLocation.tsx @@ -0,0 +1,11 @@ +import React from 'react' + +const IconLocation = () => { + return ( + + + + ) +} + +export default IconLocation diff --git a/src/components/icons/IconPeople.tsx b/src/components/icons/IconPeople.tsx new file mode 100644 index 000000000..0075b0f75 --- /dev/null +++ b/src/components/icons/IconPeople.tsx @@ -0,0 +1,11 @@ +import React from 'react' + +const IconPeople = () => { + return ( + + + + ) +} + +export default IconPeople diff --git a/src/components/icons/IconTime.tsx b/src/components/icons/IconTime.tsx new file mode 100644 index 000000000..81064df9d --- /dev/null +++ b/src/components/icons/IconTime.tsx @@ -0,0 +1,11 @@ +import React from 'react' + +const IconTime = () => { + return ( + + + + ) +} + +export default IconTime diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index d71c1bbec..8180f1001 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -19,3 +19,6 @@ export { default as IconPassword } from './IconPassword' export { default as IconPasswordCross } from './IconPasswordCross' export { default as IconError } from './IconError' export { default as IconCheck } from './IconCheck' +export { default as IconTime } from './IconTime' +export { default as IconPeople } from './IconPeople' +export { default as IconLocation } from './IconLocation' diff --git a/src/styles/_base.scss b/src/styles/_base.scss index e17e36944..339db22d2 100644 --- a/src/styles/_base.scss +++ b/src/styles/_base.scss @@ -79,5 +79,6 @@ html { } a { - -webkit-tap-highlight-color: var(--text-active); + -webkit-tap-highlight-color: var(--primary); + color: var(--primary); } From 9cc2d2ffc49dc34524cb2aa9201d32327cc6e944 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 1 Sep 2021 17:36:49 +0700 Subject: [PATCH 20/31] :art: styles: recipe ingradients :%s --- pages/demo.tsx | 5 +- .../InfoProducts/InfoProducts.module.scss | 0 .../InfoProducts/InfoProducts.tsx | 18 ++++++ .../ProductCard/ProductCard.module.scss | 5 +- .../common/ProductCard/ProductCard.tsx | 9 +++ .../ProductNotSell/ProductNotSell.module.scss | 27 ++++++++ .../ProductNotSell/ProductNotSell.tsx | 28 +++++++++ .../RecipeDetail/RecipeDetail.module.scss | 62 ------------------- .../common/RecipeDetail/RecipeDetail.tsx | 52 +++------------- .../RecipeDetailInfo.module.scss | 62 +++++++++++++++++++ .../RecipeDetailInfo/RecipeDetailInfo.tsx | 59 ++++++++++++++++++ .../RecipeIngredient.module.scss | 18 ++++++ .../RecipeIngredient/RecipeIngredient.tsx | 33 ++++++++++ src/styles/_base.scss | 1 - src/styles/_utilities.scss | 5 ++ src/utils/types.utils.ts | 1 + 16 files changed, 274 insertions(+), 111 deletions(-) create mode 100644 src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.module.scss create mode 100644 src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.tsx create mode 100644 src/components/common/ProductCard/ProductNotSell/ProductNotSell.module.scss create mode 100644 src/components/common/ProductCard/ProductNotSell/ProductNotSell.tsx create mode 100644 src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss create mode 100644 src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.tsx create mode 100644 src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.module.scss create mode 100644 src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.tsx diff --git a/pages/demo.tsx b/pages/demo.tsx index 5ca1c8040..81714a811 100644 --- a/pages/demo.tsx +++ b/pages/demo.tsx @@ -1,12 +1,13 @@ import { Layout, RecipeDetail } from 'src/components/common'; -import { ProductInfoDetail } from 'src/components/modules/product-detail' +import { ProductInfoDetail } from 'src/components/modules/product-detail'; +import { PRODUCT_DATA_TEST } from 'src/utils/demo-data'; export default function Demo() { return <> - + } diff --git a/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.module.scss b/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.module.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.tsx b/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.tsx new file mode 100644 index 000000000..30ef3bca8 --- /dev/null +++ b/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.tsx @@ -0,0 +1,18 @@ +import React from 'react'; + + +interface Props { + title: string, + subtitle?: string, +} + +const InfoProducts = ({ title, subtitle }: Props) => { + return ( +
+ InfoProducts + {title} +
+ ); +}; + +export default InfoProducts; \ No newline at end of file diff --git a/src/components/common/ProductCard/ProductCard.module.scss b/src/components/common/ProductCard/ProductCard.module.scss index 97dce1794..8f9c5e73f 100644 --- a/src/components/common/ProductCard/ProductCard.module.scss +++ b/src/components/common/ProductCard/ProductCard.module.scss @@ -4,6 +4,9 @@ padding: 1.2rem 1.2rem 0 1.2rem; margin-bottom: 1px; @apply flex flex-col justify-between; + &.notSell { + @apply justify-center; + } .cardTop{ @apply relative; height: 13.8rem; @@ -29,8 +32,6 @@ .cardMidTop{ .productname{ font-weight: bold; - line-height: 2.4rem; - font-size: 1.6rem; color: var(--text-active); &:hover{ cursor: pointer; diff --git a/src/components/common/ProductCard/ProductCard.tsx b/src/components/common/ProductCard/ProductCard.tsx index 7d94be6bc..4f1e3b329 100644 --- a/src/components/common/ProductCard/ProductCard.tsx +++ b/src/components/common/ProductCard/ProductCard.tsx @@ -6,6 +6,7 @@ import ButtonIconBuy from '../ButtonIconBuy/ButtonIconBuy' import ItemWishList from '../ItemWishList/ItemWishList' import LabelCommon from '../LabelCommon/LabelCommon' import s from './ProductCard.module.scss' +import ProductNotSell from './ProductNotSell/ProductNotSell' export interface ProductCardProps extends ProductProps { buttonText?: string @@ -18,7 +19,15 @@ const ProductCard = ({ price, buttonText = 'Buy Now', imageSrc, + isNotSell, }: ProductCardProps) => { + if (isNotSell) { + return
+ +
+ + } + return (
diff --git a/src/components/common/ProductCard/ProductNotSell/ProductNotSell.module.scss b/src/components/common/ProductCard/ProductNotSell/ProductNotSell.module.scss new file mode 100644 index 000000000..4945220a9 --- /dev/null +++ b/src/components/common/ProductCard/ProductNotSell/ProductNotSell.module.scss @@ -0,0 +1,27 @@ +@import "../../../../styles/utilities"; + +.imgWrap { + img { + opacity: 0.5; + } +} + +.name { + @apply text-label cursor-default font-bold; +} + +.info { + @apply flex justify-center items-center custom-border-radius bg-info-light text-center; + padding: .8rem 1.6rem; + margin-top: 1.6rem; + color: var(--info); + svg { + @apply u-icon; + path { + fill: currentColor; + } + } + .text { + margin-left: 0.8rem; + } +} diff --git a/src/components/common/ProductCard/ProductNotSell/ProductNotSell.tsx b/src/components/common/ProductCard/ProductNotSell/ProductNotSell.tsx new file mode 100644 index 000000000..f87d87c43 --- /dev/null +++ b/src/components/common/ProductCard/ProductNotSell/ProductNotSell.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { IconInfo } from 'src/components/icons'; +import ImgWithLink from '../../ImgWithLink/ImgWithLink'; +import s from './ProductNotSell.module.scss'; + +export interface Props { + name: string, + imageSrc: string, +} + +const ProductNotSell = ({ name, imageSrc }: Props) => { + return ( + <> +
+ +
+
{name}
+
+ +
+ Not Sell +
+
+ + ); +}; + +export default ProductNotSell; \ No newline at end of file diff --git a/src/components/common/RecipeDetail/RecipeDetail.module.scss b/src/components/common/RecipeDetail/RecipeDetail.module.scss index 64c8db389..e69de29bb 100644 --- a/src/components/common/RecipeDetail/RecipeDetail.module.scss +++ b/src/components/common/RecipeDetail/RecipeDetail.module.scss @@ -1,62 +0,0 @@ -@import "../../../styles/utilities"; - -.recipeDetail { - @apply spacing-horizontal; - margin: 5.6rem auto; - @screen md { - @apply flex; - } - .img { - width: fit-content; - margin: auto; - margin-top: 0; - - @screen sm-only { - margin-bottom: 2rem; - } - @screen lg { - max-width: 60rem; - } - img { - @apply w-full; - object-fit: contain; - max-height: 64rem; - border-radius: 2.4rem; - @screen md { - max-height: 90rem; - } - } - } - - .recipeInfo { - @screen md { - max-width: 39rem; - margin-left: 4.8rem; - } - @screen lg { - margin-left: 11.2rem; - } - .top { - margin-bottom: 4.8rem; - .name { - @apply heading-1 font-heading; - margin-bottom: 1.6rem; - } - } - .detail { - .item { - &:not(:last-child) { - margin-bottom: 2.4rem; - } - .heading { - @apply heading-3 font-heading; - margin-bottom: 0.8rem; - } - .content { - list-style: disc; - margin-left: 2rem; - } - } - } - } -} diff --git a/src/components/common/RecipeDetail/RecipeDetail.tsx b/src/components/common/RecipeDetail/RecipeDetail.tsx index 715c61ed2..cdec99994 100644 --- a/src/components/common/RecipeDetail/RecipeDetail.tsx +++ b/src/components/common/RecipeDetail/RecipeDetail.tsx @@ -1,57 +1,21 @@ import React from 'react' -import RecipeBriefInfo from './components/RecipeBriefInfo/RecipeBriefInfo' +import { ProductCardProps } from '../ProductCard/ProductCard' +import RecipeDetailInfo from './components/RecipeDetailInfo/RecipeDetailInfo' +import RecipeIngredient from './components/RecipeIngredient/RecipeIngredient' import s from './RecipeDetail.module.scss' interface Props { className?: string - children?: any + children?: any, + ingredients: ProductCardProps[], } -const RecipeDetail = ({ }: Props) => { +const RecipeDetail = ({ ingredients }: Props) => { return (
-
- Recipe -
-
-
-

- Crispy Fried Calamari -

- -
-
-
-

Ingredients

-
    -
  • Canola oil for frying
  • -
  • 1 pound clean squid bodies cut in 1/4 inch rings and dried with a paper towel
  • -
  • 2 cups flour
  • -
  • 1/2 teaspoon kosher salt
  • -
  • 1/2 teaspoon garlic powder
  • -
  • 1/8 teaspoon coarse ground black pepper
  • -
  • 1 lemon cut into wedges
  • -
-
- -
-

Preparation

-
    -
  • 1In a large pot or dutch oven add three inches of oil and bring to 350 degrees.
  • -
  • Add the flour, salt, garlic powder and pepper to a large bowl and stir to combine.
  • -
  • Toss the squid pieces in the flour then into the hot oil.
  • -
  • Fry the squid for 1-2 minutes. You want the color to stay pale like in the pictures.
  • -
  • Remove to a cookie sheet to drain (do not add paper towels as it will steam the calamari and make it soft.)
  • -
  • Serve with lemon wedges.
  • -
-
- -
-
+ +
) } diff --git a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss new file mode 100644 index 000000000..0262705b1 --- /dev/null +++ b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss @@ -0,0 +1,62 @@ +@import "../../../../../styles/utilities"; + +.recipeDetailInfo { + @apply spacing-horizontal; + margin: 5.6rem auto; + @screen md { + @apply flex; + } + .img { + width: fit-content; + margin: auto; + margin-top: 0; + + @screen sm-only { + margin-bottom: 2rem; + } + @screen lg { + max-width: 60rem; + } + img { + @apply w-full; + object-fit: contain; + max-height: 64rem; + border-radius: 2.4rem; + @screen md { + max-height: 90rem; + } + } + } + + .recipeInfo { + @screen md { + max-width: 39rem; + margin-left: 4.8rem; + } + @screen lg { + margin-left: 11.2rem; + } + .top { + margin-bottom: 4.8rem; + .name { + @apply heading-1 font-heading; + margin-bottom: 1.6rem; + } + } + .detail { + .item { + &:not(:last-child) { + margin-bottom: 2.4rem; + } + .heading { + @apply heading-3 font-heading; + margin-bottom: 0.8rem; + } + .content { + list-style: disc; + margin-left: 2rem; + } + } + } + } +} diff --git a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.tsx b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.tsx new file mode 100644 index 000000000..4d212e10a --- /dev/null +++ b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.tsx @@ -0,0 +1,59 @@ +import React from 'react' +import RecipeBriefInfo from '../RecipeBriefInfo/RecipeBriefInfo' +import s from './RecipeDetailInfo.module.scss' + + +interface Props { + className?: string + children?: any +} + +const RecipeDetailInfo = ({ }: Props) => { + return ( +
+
+ Recipe +
+
+
+

+ Crispy Fried Calamari +

+ +
+
+
+

Ingredients

+
    +
  • Canola oil for frying
  • +
  • 1 pound clean squid bodies cut in 1/4 inch rings and dried with a paper towel
  • +
  • 2 cups flour
  • +
  • 1/2 teaspoon kosher salt
  • +
  • 1/2 teaspoon garlic powder
  • +
  • 1/8 teaspoon coarse ground black pepper
  • +
  • 1 lemon cut into wedges
  • +
+
+ +
+

Preparation

+
    +
  • 1In a large pot or dutch oven add three inches of oil and bring to 350 degrees.
  • +
  • Add the flour, salt, garlic powder and pepper to a large bowl and stir to combine.
  • +
  • Toss the squid pieces in the flour then into the hot oil.
  • +
  • Fry the squid for 1-2 minutes. You want the color to stay pale like in the pictures.
  • +
  • Remove to a cookie sheet to drain (do not add paper towels as it will steam the calamari and make it soft.)
  • +
  • Serve with lemon wedges.
  • +
+
+ +
+
+
+ ) +} + +export default RecipeDetailInfo diff --git a/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.module.scss b/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.module.scss new file mode 100644 index 000000000..ba4bcd2e7 --- /dev/null +++ b/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.module.scss @@ -0,0 +1,18 @@ +@import "../../../../../styles/utilities"; + +.recipeIngredient { + margin: 5.6rem auto; + .top { + @apply flex justify-between items-center spacing-horizontal; + } + .bottom { + @apply flex justify-center items-center spacing-horizontal; + margin-top: 4rem; + button { + width: 100%; + @screen md { + width: 39rem; + } + } + } +} diff --git a/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.tsx b/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.tsx new file mode 100644 index 000000000..a879f0b72 --- /dev/null +++ b/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.tsx @@ -0,0 +1,33 @@ +import React from 'react' +import ButtonCommon from 'src/components/common/ButtonCommon/ButtonCommon' +import HeadingCommon from 'src/components/common/HeadingCommon/HeadingCommon' +import { ProductCardProps } from 'src/components/common/ProductCard/ProductCard' +import ProductCarousel from 'src/components/common/ProductCarousel/ProductCarousel' +import ViewAllItem from 'src/components/common/ViewAllItem/ViewAllItem' +import { ROUTE } from 'src/utils/constanst.utils' +import s from './RecipeIngredient.module.scss' + +interface Props { + className?: string + children?: any, + data: ProductCardProps[], +} + +const RecipeIngredient = ({ data }: Props) => { + return ( +
+
+ Ingredients +
+ +
+
+ +
+ Buy all +
+
+ ) +} + +export default RecipeIngredient diff --git a/src/styles/_base.scss b/src/styles/_base.scss index 339db22d2..e90a6434f 100644 --- a/src/styles/_base.scss +++ b/src/styles/_base.scss @@ -80,5 +80,4 @@ html { a { -webkit-tap-highlight-color: var(--primary); - color: var(--primary); } diff --git a/src/styles/_utilities.scss b/src/styles/_utilities.scss index 26cea17c0..56f9494ec 100644 --- a/src/styles/_utilities.scss +++ b/src/styles/_utilities.scss @@ -137,4 +137,9 @@ } } } + + .u-icon { + width: 2rem; + height: 2rem; + } } diff --git a/src/utils/types.utils.ts b/src/utils/types.utils.ts index 2c99df73a..3d2383495 100644 --- a/src/utils/types.utils.ts +++ b/src/utils/types.utils.ts @@ -4,6 +4,7 @@ export interface ProductProps { weight: string price: string imageSrc: string + isNotSell?: boolean } export interface FeaturedProductProps { From 42ebe880b85c5af8b57e21897da45f64b2e847ce Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 1 Sep 2021 17:37:19 +0700 Subject: [PATCH 21/31] :blue_book: docs: data product test :%s --- src/utils/demo-data.ts | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/utils/demo-data.ts diff --git a/src/utils/demo-data.ts b/src/utils/demo-data.ts new file mode 100644 index 000000000..6521f0aa6 --- /dev/null +++ b/src/utils/demo-data.ts @@ -0,0 +1,60 @@ +export const PRODUCT_DATA_TEST = [ + { + name: 'Tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646211-d56b77ac-83f1-4dd2-b55c-e3f1e0ba4e49.png", + }, + { + name: 'Cucumber', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646211-d56b77ac-83f1-4dd2-b55c-e3f1e0ba4e49.png", + isNotSell: true, + }, + { + name: 'Carrot', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646217-23b86160-45c9-4845-8dcc-b3e1a4483edd.png", + }, + { + name: 'Salad', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646221-aaa1d48d-bb80-470f-9400-ae2aa47285b6.png", + isNotSell: true, + }, + { + name: 'Tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646224-d22dc2e4-6ae8-4bbe-adcf-491ce191f09b.png", + }, + { + name: 'Cucumber', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646225-2728f192-481b-4142-99b0-dde92f53c6c6.png", + }, + { + name: 'Tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646227-b5705e64-3b45-47a3-9433-9f4b5ee8d40c.png", + }, + { + name: 'Cucumber', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646231-2d1c3ad1-4f5b-4a8e-9874-ca731f4ce128.png", + }, +] \ No newline at end of file From 9b669335ca470f364f4d0cad1b0aecce4d7e272c Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 6 Sep 2021 09:10:02 +0700 Subject: [PATCH 22/31] :art: styles: list product with info component :%s --- pages/404.tsx | 21 -------- pages/demo.tsx | 3 +- pages/product/[slug].tsx | 3 +- .../InfoProducts/InfoProducts.module.scss | 5 ++ .../InfoProducts/InfoProducts.tsx | 18 +++++-- .../ListProductWithInfo.module.scss | 11 ++++ .../ListProductWithInfo.tsx | 51 +++++++++++++++++++ .../ViewedProducts/ViewedProducts.tsx | 15 ++++++ .../modules/product-detail/index.ts | 1 + 9 files changed, 99 insertions(+), 29 deletions(-) create mode 100644 src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss create mode 100644 src/components/common/ListProductWithInfo/ListProductWithInfo.tsx create mode 100644 src/components/modules/product-detail/ViewedProducts/ViewedProducts.tsx diff --git a/pages/404.tsx b/pages/404.tsx index 38a01bcc4..7fb30b9de 100644 --- a/pages/404.tsx +++ b/pages/404.tsx @@ -1,25 +1,4 @@ -import type { GetStaticPropsContext } from 'next' -import commerce from '@lib/api/commerce' import { Layout } from '@components/common' - -export async function getStaticProps({ - preview, - locale, - locales, -}: GetStaticPropsContext) { - const config = { locale, locales } - const { pages } = await commerce.getAllPages({ config, preview }) - const { categories, brands } = await commerce.getSiteInfo({ config, preview }) - return { - props: { - pages, - categories, - brands, - }, - revalidate: 200, - } -} - export default function NotFound() { return (
diff --git a/pages/demo.tsx b/pages/demo.tsx index 81714a811..49238c906 100644 --- a/pages/demo.tsx +++ b/pages/demo.tsx @@ -1,5 +1,5 @@ import { Layout, RecipeDetail } from 'src/components/common'; -import { ProductInfoDetail } from 'src/components/modules/product-detail'; +import { ProductInfoDetail, ViewedProducts } from 'src/components/modules/product-detail'; import { PRODUCT_DATA_TEST } from 'src/utils/demo-data'; @@ -8,6 +8,7 @@ export default function Demo() { return <> + } diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx index adf1fd8dd..b26de19bb 100644 --- a/pages/product/[slug].tsx +++ b/pages/product/[slug].tsx @@ -1,11 +1,10 @@ -import { Layout, RecipeDetail } from 'src/components/common' +import { Layout } from 'src/components/common' import { ProductInfoDetail } from 'src/components/modules/product-detail' export default function Slug() { return <> - } diff --git a/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.module.scss b/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.module.scss index e69de29bb..9a2f2ceb7 100644 --- a/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.module.scss +++ b/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.module.scss @@ -0,0 +1,5 @@ +.infoProducts { + .top { + + } +} \ No newline at end of file diff --git a/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.tsx b/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.tsx index 30ef3bca8..25e18252c 100644 --- a/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.tsx +++ b/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.tsx @@ -1,6 +1,8 @@ import React from 'react'; - - +import { ROUTE } from 'src/utils/constanst.utils'; +import HeadingCommon from '../../HeadingCommon/HeadingCommon'; +import ViewAllItem from '../../ViewAllItem/ViewAllItem'; +import s from './InfoProducts.module.scss' interface Props { title: string, subtitle?: string, @@ -8,9 +10,15 @@ interface Props { const InfoProducts = ({ title, subtitle }: Props) => { return ( -
- InfoProducts - {title} +
+
+ {title} +
+ {subtitle} +
+
+ +
); }; diff --git a/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss b/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss new file mode 100644 index 000000000..55bca8cd5 --- /dev/null +++ b/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss @@ -0,0 +1,11 @@ +@import '../../../styles/utilities'; + +.listProductWithInfo { + background-color: #F5F4F2; + @screen md { + @apply flex; + } + .productsWrap { + @apply custom-border-radius-lg; + } +} diff --git a/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx b/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx new file mode 100644 index 000000000..5606a6900 --- /dev/null +++ b/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx @@ -0,0 +1,51 @@ +import { TOptionsEvents } from 'keen-slider'; +import React from 'react'; +import CarouselCommon from '../CarouselCommon/CarouselCommon'; +import ProductCard, { ProductCardProps } from '../ProductCard/ProductCard'; +import InfoProducts from './InfoProducts/InfoProducts'; +import s from './ListProductWithInfo.module.scss'; + +interface Props { + data: ProductCardProps[], + title: string, + subtitle?: string, +} +const OPTION_DEFAULT: TOptionsEvents = { + slidesPerView: 2, + mode: 'free', + breakpoints: { + '(min-width: 640px)': { + slidesPerView: 3, + }, + '(min-width: 768px)': { + slidesPerView: 3, + }, + '(min-width: 1024px)': { + slidesPerView: 4, + }, + '(min-width: 1280px)': { + slidesPerView: 4, + }, + }, +} + +const ListProductWithInfo = ({ data, title, subtitle }: Props) => { + return ( +
+ +
+ + data={data} + Component={ProductCard} + itemKey={title} + option={OPTION_DEFAULT} + /> +
+
+ ); +}; + +export default ListProductWithInfo; \ No newline at end of file diff --git a/src/components/modules/product-detail/ViewedProducts/ViewedProducts.tsx b/src/components/modules/product-detail/ViewedProducts/ViewedProducts.tsx new file mode 100644 index 000000000..820af402f --- /dev/null +++ b/src/components/modules/product-detail/ViewedProducts/ViewedProducts.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import ListProductWithInfo from 'src/components/common/ListProductWithInfo/ListProductWithInfo'; +import { PRODUCT_DATA_TEST } from 'src/utils/demo-data'; + +const ViewedProducts = () => { + return ( + + ); +}; + +export default ViewedProducts; \ No newline at end of file diff --git a/src/components/modules/product-detail/index.ts b/src/components/modules/product-detail/index.ts index 79dd056d0..b1a018d8a 100644 --- a/src/components/modules/product-detail/index.ts +++ b/src/components/modules/product-detail/index.ts @@ -1 +1,2 @@ export { default as ProductInfoDetail } from './ProductInfoDetail/ProductInfoDetail' +export { default as ViewedProducts } from './ViewedProducts/ViewedProducts' From 9a085570c119b6d943dcbfc7176c8d492d834952 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 6 Sep 2021 12:25:51 +0700 Subject: [PATCH 23/31] :art: styles: list product with info :%s --- .../ButtonCommon/ButtonCommon.module.scss | 8 +++- .../InfoProducts/InfoProducts.module.scss | 22 ++++++++- .../ListProductWithInfo.module.scss | 47 +++++++++++++++++-- .../ListProductWithInfo.tsx | 6 +-- .../ProductCard/ProductCard.module.scss | 1 + 5 files changed, 73 insertions(+), 11 deletions(-) diff --git a/src/components/common/ButtonCommon/ButtonCommon.module.scss b/src/components/common/ButtonCommon/ButtonCommon.module.scss index 4cfe737de..c7b9f1ffa 100644 --- a/src/components/common/ButtonCommon/ButtonCommon.module.scss +++ b/src/components/common/ButtonCommon/ButtonCommon.module.scss @@ -7,6 +7,9 @@ align-items: center; padding: 1rem 2rem; @screen md { + padding: 0.8rem 1.6rem; + } + @screen lg { padding: 0.8rem 3.2rem; } &:disabled { @@ -84,11 +87,14 @@ padding: 1rem; } @screen md { - padding: 1.6rem 4.8rem; + padding: 1.6rem 3.2rem; &.onlyIcon { padding: 1.6rem; } } + @screen lg { + padding: 1.6rem 4.8rem; + } &.loading { &::before { width: 2.4rem; diff --git a/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.module.scss b/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.module.scss index 9a2f2ceb7..c1cd9966e 100644 --- a/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.module.scss +++ b/src/components/common/ListProductWithInfo/InfoProducts/InfoProducts.module.scss @@ -1,5 +1,23 @@ +@import "../../../../styles/utilities"; + .infoProducts { + @apply flex justify-between items-center spacing-horizontal; + .top { - + .sub { + display: none; + } } -} \ No newline at end of file + @screen lg { + @apply block; + margin-right: 4rem; + padding: 0; + .top { + margin-bottom: 3.2rem; + .sub { + display: block; + margin-top: 0.4rem; + } + } + } +} diff --git a/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss b/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss index 55bca8cd5..d2443dccc 100644 --- a/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss +++ b/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss @@ -1,11 +1,48 @@ -@import '../../../styles/utilities'; +@import "../../../styles/utilities"; .listProductWithInfo { - background-color: #F5F4F2; - @screen md { - @apply flex; + background-color: var(--background); + border-top: 1rem solid var(--gray); + border-bottom: 1rem solid var(--gray); + padding-top: 6rem; + padding-bottom: 6rem; + @screen lg { + @apply flex spacing-horizontal-left; + padding-top: 5.6rem; + padding-bottom: 5.6rem; + border: none; + background-color: #f5f4f2; } .productsWrap { - @apply custom-border-radius-lg; + @apply spacing-horizontal-left; + @screen lg { + max-width: 75%; + @apply custom-border-radius-lg bg-white; + padding: 4rem .8rem; + :global(.customArrow) { + @screen lg { + &:global(.leftArrow) { + left: calc(-6.4rem + 3rem); + } + &:global(.rightArrow) { + right: calc(-6.4rem + 3rem); + } + } + } + } + @screen xl { + padding: 4rem 2.4rem; + max-width: 80%; + :global(.customArrow) { + @screen lg { + &:global(.leftArrow) { + left: calc(-6.4rem + 1rem); + } + &:global(.rightArrow) { + right: calc(-6.4rem + 1rem); + } + } + } + } } } diff --git a/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx b/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx index 5606a6900..66b8253d1 100644 --- a/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx +++ b/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx @@ -18,13 +18,13 @@ const OPTION_DEFAULT: TOptionsEvents = { slidesPerView: 3, }, '(min-width: 768px)': { - slidesPerView: 3, + slidesPerView: 4, }, '(min-width: 1024px)': { - slidesPerView: 4, + slidesPerView: 3, }, '(min-width: 1280px)': { - slidesPerView: 4, + slidesPerView: 4.5, }, }, } diff --git a/src/components/common/ProductCard/ProductCard.module.scss b/src/components/common/ProductCard/ProductCard.module.scss index 8f9c5e73f..73be21ab1 100644 --- a/src/components/common/ProductCard/ProductCard.module.scss +++ b/src/components/common/ProductCard/ProductCard.module.scss @@ -2,6 +2,7 @@ max-width: 20.8rem; min-height: 31.8rem; padding: 1.2rem 1.2rem 0 1.2rem; + margin: auto; margin-bottom: 1px; @apply flex flex-col justify-between; &.notSell { From 97e74db4f7a6cec4b24984d733b5374425d0fc7c Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 6 Sep 2021 12:26:06 +0700 Subject: [PATCH 24/31] :art: styles: remove margin left viewAllItem :%s --- src/components/common/ViewAllItem/ViewAllItem.module.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/common/ViewAllItem/ViewAllItem.module.scss b/src/components/common/ViewAllItem/ViewAllItem.module.scss index 4b8b6fe6d..b4ec26872 100644 --- a/src/components/common/ViewAllItem/ViewAllItem.module.scss +++ b/src/components/common/ViewAllItem/ViewAllItem.module.scss @@ -4,7 +4,7 @@ display: flex; .content { color: var(--primary); - margin: 0.8rem 0.8rem 0.8rem 1.6rem; + margin: 0.8rem 0.8rem 0.8rem 0; font-weight: bold; } .vector { From 2a0e74233276966d03c07537afcff170cb85b722 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 6 Sep 2021 12:26:28 +0700 Subject: [PATCH 25/31] :art: styles: add border radius card recipe :%s --- src/components/common/RecipeCard/RecipeCard.module.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/common/RecipeCard/RecipeCard.module.scss b/src/components/common/RecipeCard/RecipeCard.module.scss index 1fd6fd65e..19f3eb76a 100644 --- a/src/components/common/RecipeCard/RecipeCard.module.scss +++ b/src/components/common/RecipeCard/RecipeCard.module.scss @@ -6,6 +6,9 @@ width: 100%; max-height: 22rem; border-radius: 2.4rem; + img { + border-radius: 2.4rem; + } &:hover{ cursor: pointer; } From 8712ae717db6654a0e834e6b5a51535eba9e17ce Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 6 Sep 2021 12:26:59 +0700 Subject: [PATCH 26/31] :art: styles: recommended recipe :%s --- pages/demo.tsx | 8 +- .../RecipeIngredient.module.scss | 5 +- .../RecommendedRecipes.module.scss | 27 ++++++ .../RecommendedRecipes/RecommendedRecipes.tsx | 51 ++++++++++ .../ReleventProducts/ReleventProducts.tsx | 15 +++ .../modules/product-detail/index.ts | 2 + src/utils/constanst.utils.ts | 1 + src/utils/demo-data.ts | 94 +++++++++++++++++++ 8 files changed, 199 insertions(+), 4 deletions(-) create mode 100644 src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.module.scss create mode 100644 src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.tsx create mode 100644 src/components/modules/product-detail/ReleventProducts/ReleventProducts.tsx diff --git a/pages/demo.tsx b/pages/demo.tsx index 49238c906..f23c10583 100644 --- a/pages/demo.tsx +++ b/pages/demo.tsx @@ -1,13 +1,15 @@ import { Layout, RecipeDetail } from 'src/components/common'; -import { ProductInfoDetail, ViewedProducts } from 'src/components/modules/product-detail'; -import { PRODUCT_DATA_TEST } from 'src/utils/demo-data'; +import { ProductInfoDetail, ViewedProducts, ReleventProducts, RecommendedRecipes } from 'src/components/modules/product-detail'; +import { INGREDIENT_DATA_TEST, RECIPE_DATA_TEST } from 'src/utils/demo-data'; export default function Demo() { return <> - + + + } diff --git a/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.module.scss b/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.module.scss index ba4bcd2e7..0237def44 100644 --- a/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.module.scss +++ b/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.module.scss @@ -1,7 +1,10 @@ @import "../../../../../styles/utilities"; .recipeIngredient { - margin: 5.6rem auto; + margin: 6rem auto; + @screen md { + margin: 5.6rem auto; + } .top { @apply flex justify-between items-center spacing-horizontal; } diff --git a/src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.module.scss b/src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.module.scss new file mode 100644 index 000000000..d43e2d58c --- /dev/null +++ b/src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.module.scss @@ -0,0 +1,27 @@ +@import "../../../../styles/utilities"; + +.recommendedRecipes { + margin: 6rem auto; + @screen md { + margin: 5.6rem auto; + } + .infoProducts { + @apply flex justify-between items-center spacing-horizontal; + margin-bottom: 3.2rem; + } + .productsWrap { + @apply spacing-horizontal-left; + @screen xl { + :global(.customArrow) { + @screen lg { + &:global(.leftArrow) { + left: calc(-6.4rem - 2rem); + } + &:global(.rightArrow) { + right: calc(-6.4rem - 2rem); + } + } + } + } + } +} diff --git a/src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.tsx b/src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.tsx new file mode 100644 index 000000000..34950fbab --- /dev/null +++ b/src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.tsx @@ -0,0 +1,51 @@ +import { TOptionsEvents } from 'keen-slider'; +import React from 'react'; +import { CarouselCommon, HeadingCommon, RecipeCard, ViewAllItem } from 'src/components/common'; +import { RecipeCardProps } from 'src/components/common/RecipeCard/RecipeCard'; +import { ROUTE } from 'src/utils/constanst.utils'; +import s from './RecommendedRecipes.module.scss'; + +const OPTION_DEFAULT: TOptionsEvents = { + slidesPerView: 1.25, + mode: 'free', + spacing: 24, + breakpoints: { + '(min-width: 640px)': { + slidesPerView: 2, + }, + '(min-width: 1024px)': { + slidesPerView: 2.5, + }, + '(min-width: 1440px)': { + slidesPerView: 3, + }, + '(min-width: 1536px)': { + slidesPerView: 3.5, + }, + }, +} + +interface Props { + data: RecipeCardProps[], +} + +const RecommendedRecipes = ({ data }: Props) => { + return ( +
+
+ Recommended Recipes + +
+
+ + data={data} + Component={RecipeCard} + itemKey="Recommended Recipes" + option={OPTION_DEFAULT} + /> +
+
+ ); +}; + +export default RecommendedRecipes; \ No newline at end of file diff --git a/src/components/modules/product-detail/ReleventProducts/ReleventProducts.tsx b/src/components/modules/product-detail/ReleventProducts/ReleventProducts.tsx new file mode 100644 index 000000000..e11d31065 --- /dev/null +++ b/src/components/modules/product-detail/ReleventProducts/ReleventProducts.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import ListProductWithInfo from 'src/components/common/ListProductWithInfo/ListProductWithInfo'; +import { PRODUCT_DATA_TEST } from 'src/utils/demo-data'; + +const ReleventProducts = () => { + return ( + + ); +}; + +export default ReleventProducts; \ No newline at end of file diff --git a/src/components/modules/product-detail/index.ts b/src/components/modules/product-detail/index.ts index b1a018d8a..ef4461432 100644 --- a/src/components/modules/product-detail/index.ts +++ b/src/components/modules/product-detail/index.ts @@ -1,2 +1,4 @@ export { default as ProductInfoDetail } from './ProductInfoDetail/ProductInfoDetail' export { default as ViewedProducts } from './ViewedProducts/ViewedProducts' +export { default as ReleventProducts } from './ReleventProducts/ReleventProducts' +export { default as RecommendedRecipes } from './RecommendedRecipes/RecommendedRecipes' diff --git a/src/utils/constanst.utils.ts b/src/utils/constanst.utils.ts index c7002a730..c732f6ed6 100644 --- a/src/utils/constanst.utils.ts +++ b/src/utils/constanst.utils.ts @@ -10,6 +10,7 @@ export const ROUTE = { PRODUCTS: '/products', ABOUT: '/about', ACCOUNT: '/account', + RECIPES: '/recipes', BUSSINESS: '/bussiness', CONTACT: '/contact', diff --git a/src/utils/demo-data.ts b/src/utils/demo-data.ts index 6521f0aa6..b22668e15 100644 --- a/src/utils/demo-data.ts +++ b/src/utils/demo-data.ts @@ -1,4 +1,65 @@ +import { RecipeCardProps } from "src/components/common/RecipeCard/RecipeCard" + export const PRODUCT_DATA_TEST = [ + { + name: 'Tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646211-d56b77ac-83f1-4dd2-b55c-e3f1e0ba4e49.png", + }, + { + name: 'Cucumber', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646211-d56b77ac-83f1-4dd2-b55c-e3f1e0ba4e49.png", + }, + { + name: 'Carrot', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646217-23b86160-45c9-4845-8dcc-b3e1a4483edd.png", + }, + { + name: 'Salad', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646221-aaa1d48d-bb80-470f-9400-ae2aa47285b6.png", + }, + { + name: 'Tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646224-d22dc2e4-6ae8-4bbe-adcf-491ce191f09b.png", + }, + { + name: 'Cucumber', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646225-2728f192-481b-4142-99b0-dde92f53c6c6.png", + }, + { + name: 'Tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646227-b5705e64-3b45-47a3-9433-9f4b5ee8d40c.png", + }, + { + name: 'Cucumber', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/76729908/131646231-2d1c3ad1-4f5b-4a8e-9874-ca731f4ce128.png", + }, +] + +export const INGREDIENT_DATA_TEST = [ { name: 'Tomato', weight: '250g', @@ -57,4 +118,37 @@ export const PRODUCT_DATA_TEST = [ price: 'Rp 27.500', imageSrc: "https://user-images.githubusercontent.com/76729908/131646231-2d1c3ad1-4f5b-4a8e-9874-ca731f4ce128.png", }, +] + +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' + }, + { + 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' + }, + { + 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' + }, + { + 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' + }, + { + 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' + }, + { + 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' + }, ] \ No newline at end of file From 31d0ec1331f26c8c71914f2076a9c55c14f480cc Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 6 Sep 2021 12:48:47 +0700 Subject: [PATCH 27/31] :art: styles: product detail page :%s --- pages/[...pages].tsx | 86 ------------------- pages/cart.tsx | 50 ----------- .../RecipeDetailInfo.module.scss | 1 - .../RecipeIngredient.module.scss | 4 +- .../ProductInfoDetail.module.scss | 3 +- .../components/ProductInfo/ProductInfo.tsx | 5 +- src/utils/language.utils.ts | 3 +- 7 files changed, 9 insertions(+), 143 deletions(-) delete mode 100644 pages/[...pages].tsx delete mode 100644 pages/cart.tsx diff --git a/pages/[...pages].tsx b/pages/[...pages].tsx deleted file mode 100644 index a8a24b3aa..000000000 --- a/pages/[...pages].tsx +++ /dev/null @@ -1,86 +0,0 @@ -import type { - GetStaticPathsContext, - GetStaticPropsContext, - InferGetStaticPropsType, -} from 'next' -import commerce from '@lib/api/commerce' -import { Text } from '@components/ui' -import { Layout } from '@components/common' -import getSlug from '@lib/get-slug' -import { missingLocaleInPages } from '@lib/usage-warns' -import type { Page } from '@commerce/types/page' -import { useRouter } from 'next/router' - -export async function getStaticProps({ - preview, - params, - locale, - locales, -}: GetStaticPropsContext<{ pages: string[] }>) { - const config = { locale, locales } - const pagesPromise = commerce.getAllPages({ config, preview }) - const siteInfoPromise = commerce.getSiteInfo({ config, preview }) - const { pages } = await pagesPromise - const { categories } = await siteInfoPromise - const path = params?.pages.join('/') - const slug = locale ? `${locale}/${path}` : path - const pageItem = pages.find((p: Page) => - p.url ? getSlug(p.url) === slug : false - ) - const data = - pageItem && - (await commerce.getPage({ - variables: { id: pageItem.id! }, - config, - preview, - })) - - const page = data?.page - - if (!page) { - // We throw to make sure this fails at build time as this is never expected to happen - throw new Error(`Page with slug '${slug}' not found`) - } - - return { - props: { pages, page, categories }, - revalidate: 60 * 60, // Every hour - } -} - -export async function getStaticPaths({ locales }: GetStaticPathsContext) { - const config = { locales } - const { pages }: { pages: Page[] } = await commerce.getAllPages({ config }) - const [invalidPaths, log] = missingLocaleInPages() - const paths = pages - .map((page) => page.url) - .filter((url) => { - if (!url || !locales) return url - // If there are locales, only include the pages that include one of the available locales - if (locales.includes(getSlug(url).split('/')[0])) return url - - invalidPaths.push(url) - }) - log() - - return { - paths, - fallback: 'blocking', - } -} - -export default function Pages({ - page, -}: InferGetStaticPropsType) { - const router = useRouter() - - return router.isFallback ? ( -

Loading...

// TODO (BC) Add Skeleton Views - ) : ( -
- {page?.body && } -
- ) -} - -Pages.Layout = Layout diff --git a/pages/cart.tsx b/pages/cart.tsx deleted file mode 100644 index b9659d21b..000000000 --- a/pages/cart.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import type { GetStaticPropsContext } from 'next' -import commerce from '@lib/api/commerce' -import { Layout } from '@components/common' -// import useCart from '@framework/cart/use-cart' -// import usePrice from '@framework/product/use-price' -// import { Button, Text } from '@components/ui' -// import { Bag, Cross, Check, MapPin, CreditCard } from '@components/icons' -// import { CartItem } from '@components/cart' - -export async function getStaticProps({ - preview, - locale, - locales, -}: GetStaticPropsContext) { - const config = { locale, locales } - const pagesPromise = commerce.getAllPages({ config, preview }) - const siteInfoPromise = commerce.getSiteInfo({ config, preview }) - const { pages } = await pagesPromise - const { categories } = await siteInfoPromise - return { - props: { pages, categories }, - } -} - -export default function Cart() { - // const error = null - // const success = null - // const { data, isLoading, isEmpty } = useCart() - - // const { price: subTotal } = usePrice( - // data && { - // amount: Number(data.subtotalPrice), - // currencyCode: data.currency.code, - // } - // ) - // const { price: total } = usePrice( - // data && { - // amount: Number(data.totalPrice), - // currencyCode: data.currency.code, - // } - // ) - - return ( -
- This is cart page -
- ) -} - -Cart.Layout = Layout diff --git a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss index 0262705b1..86b525083 100644 --- a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss +++ b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss @@ -8,7 +8,6 @@ } .img { width: fit-content; - margin: auto; margin-top: 0; @screen sm-only { diff --git a/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.module.scss b/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.module.scss index 0237def44..b1419699d 100644 --- a/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.module.scss +++ b/src/components/common/RecipeDetail/components/RecipeIngredient/RecipeIngredient.module.scss @@ -1,9 +1,9 @@ @import "../../../../../styles/utilities"; .recipeIngredient { - margin: 6rem auto; + padding: 6rem 0; @screen md { - margin: 5.6rem auto; + padding: 5.6rem 0; } .top { @apply flex justify-between items-center spacing-horizontal; diff --git a/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.module.scss b/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.module.scss index f9b621b82..645ff7259 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.module.scss +++ b/src/components/modules/product-detail/ProductInfoDetail/ProductInfoDetail.module.scss @@ -2,8 +2,9 @@ .productInfoDetail { @apply spacing-horizontal; - margin: 0 auto 4rem; + padding-bottom: 4rem; @screen md { @apply flex; + padding-bottom: 5.6rem; } } \ No newline at end of file diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx index 25fea44aa..859e8a032 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx @@ -29,13 +29,14 @@ const ProductInfo = ({ }: Props) => {
- {LANGUAGE.BUTTON_LABEL.BUY_NOW} + {LANGUAGE.BUTTON_LABEL.PREORDER} + {/* {LANGUAGE.BUTTON_LABEL.BUY_NOW} {LANGUAGE.BUTTON_LABEL.ADD_TO_CARD} - + */}
+
+ Recipe +
+
+
+

+ Crispy Fried Calamari +

+ +
+
+
+

Ingredients

+
    +
  • Canola oil for frying
  • +
  • 1 pound clean squid bodies cut in 1/4 inch rings and dried with a paper towel
  • +
  • 2 cups flour
  • +
  • 1/2 teaspoon kosher salt
  • +
  • 1/2 teaspoon garlic powder
  • +
  • 1/8 teaspoon coarse ground black pepper
  • +
  • 1 lemon cut into wedges
  • +
+
+ +
+

Preparation

+
    +
  • 1In a large pot or dutch oven add three inches of oil and bring to 350 degrees.
  • +
  • Add the flour, salt, garlic powder and pepper to a large bowl and stir to combine.
  • +
  • Toss the squid pieces in the flour then into the hot oil.
  • +
  • Fry the squid for 1-2 minutes. You want the color to stay pale like in the pictures.
  • +
  • Remove to a cookie sheet to drain (do not add paper towels as it will steam the calamari and make it soft.)
  • +
  • Serve with lemon wedges.
  • +
+
+
+
+
+
diff --git a/src/utils/language.utils.ts b/src/utils/language.utils.ts index cb7760943..191215aaa 100644 --- a/src/utils/language.utils.ts +++ b/src/utils/language.utils.ts @@ -2,7 +2,8 @@ export const LANGUAGE = { BUTTON_LABEL: { BUY_NOW: 'Buy now', SHOP_NOW: 'Shop now', - ADD_TO_CARD: 'Add to Cart' + ADD_TO_CARD: 'Add to Cart', + PREORDER: 'Pre-Order Now', }, PLACE_HOLDER: { SEARCH: 'Search', From c78ce4a073130ce93a04f10ff7aaa2ae909942ea Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 6 Sep 2021 12:50:38 +0700 Subject: [PATCH 28/31] :art: styles: hide btn preorder :%s --- .../components/ProductInfo/ProductInfo.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx index 859e8a032..4abb62568 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.tsx @@ -29,14 +29,14 @@ const ProductInfo = ({ }: Props) => {
- {LANGUAGE.BUTTON_LABEL.PREORDER} - {/* {LANGUAGE.BUTTON_LABEL.BUY_NOW} + {/* {LANGUAGE.BUTTON_LABEL.PREORDER} */} + {LANGUAGE.BUTTON_LABEL.BUY_NOW} {LANGUAGE.BUTTON_LABEL.ADD_TO_CARD} - */} +
From 7b5e7af8f9f48b179a4734e4bbec8cf3e80027cf Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 6 Sep 2021 12:55:49 +0700 Subject: [PATCH 29/31] :art: styles: page product detail :%s --- pages/product/[slug].tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx index b26de19bb..c34394af5 100644 --- a/pages/product/[slug].tsx +++ b/pages/product/[slug].tsx @@ -1,10 +1,15 @@ -import { Layout } from 'src/components/common' -import { ProductInfoDetail } from 'src/components/modules/product-detail' +import { Layout, RecipeDetail } from 'src/components/common' +import { ProductInfoDetail, RecommendedRecipes, ReleventProducts, ViewedProducts } from 'src/components/modules/product-detail' +import { INGREDIENT_DATA_TEST, RECIPE_DATA_TEST } from 'src/utils/demo-data' export default function Slug() { return <> - + + + + + } From 5c0dbd9d2f4acd3a876cf9e38a03cf3eddd0edda Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Mon, 6 Sep 2021 14:18:59 +0700 Subject: [PATCH 30/31] :sparkles: feat: Scroll To Top --- .../common/ScrollToTop/ScrollTarget.tsx | 15 --------------- src/components/common/ScrollToTop/ScrollToTop.tsx | 7 +++---- 2 files changed, 3 insertions(+), 19 deletions(-) delete mode 100644 src/components/common/ScrollToTop/ScrollTarget.tsx diff --git a/src/components/common/ScrollToTop/ScrollTarget.tsx b/src/components/common/ScrollToTop/ScrollTarget.tsx deleted file mode 100644 index 50a839c83..000000000 --- a/src/components/common/ScrollToTop/ScrollTarget.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React, { MutableRefObject } from 'react' - -interface ScrollTargetProps { - refScrollUp: MutableRefObject; -} - -const ScrollTarget = ({ refScrollUp } : ScrollTargetProps) => { - - return ( -
- ) - -} - -export default ScrollTarget diff --git a/src/components/common/ScrollToTop/ScrollToTop.tsx b/src/components/common/ScrollToTop/ScrollToTop.tsx index 98e16168d..d148c8937 100644 --- a/src/components/common/ScrollToTop/ScrollToTop.tsx +++ b/src/components/common/ScrollToTop/ScrollToTop.tsx @@ -5,11 +5,10 @@ import s from './ScrollToTop.module.scss' import ArrowUp from '../../icons/IconArrowUp' interface ScrollToTopProps { - target: MutableRefObject; visibilityHeight?: number; } -const ScrollToTop = ({ target, visibilityHeight=450 }: ScrollToTopProps) => { +const ScrollToTop = ({ visibilityHeight=450 }: ScrollToTopProps) => { const [scrollPosition, setSrollPosition] = useState(0); const [showScrollToTop, setShowScrollToTop] = useState("hide"); @@ -26,7 +25,7 @@ const ScrollToTop = ({ target, visibilityHeight=450 }: ScrollToTopProps) => { }; function handleScrollUp() { - target.current.scrollIntoView({ behavior: "smooth" }); + window.scrollTo(0, 0); } function addEventScroll() { @@ -34,7 +33,7 @@ const ScrollToTop = ({ target, visibilityHeight=450 }: ScrollToTopProps) => { } useEffect(() => { - addEventScroll() + addEventScroll(); }); return ( From e4172cf2c760d4153d8925acb56db624703c63b6 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Mon, 6 Sep 2021 14:22:34 +0700 Subject: [PATCH 31/31] update --- pages/index.tsx | 12 +++++++++--- src/components/common/index.ts | 1 - 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pages/index.tsx b/pages/index.tsx index 88b354335..d3c21e8ed 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,17 +1,23 @@ import React, { MutableRefObject, useRef } from 'react'; -import { Banner, ButtonCommon, ButtonIconBuy, CollectionHeading, HeadingCommon, Inputcommon, InputSearch, Layout, ScrollTarget } from 'src/components/common'; +import { Banner, ButtonCommon, ButtonIconBuy, CollectionHeading, HeadingCommon, Inputcommon, InputSearch, Layout, ScrollToTop } from 'src/components/common'; import { IconBuy } from 'src/components/icons'; export default function Home() { - const refScrollUp = useRef() as MutableRefObject; return ( <> - + {/* */} + categories categories + + + + categories + +

Go to src/components to make your awesome component!

Go to src/styles to find global styles!

diff --git a/src/components/common/index.ts b/src/components/common/index.ts index 7d9290c69..d39e1bfbd 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -11,7 +11,6 @@ export { default as Inputcommon} from './InputCommon/InputCommon' export { default as HeadingCommon } from './HeadingCommon/HeadingCommon' export { default as CollectionHeading } from './CollectionHeading/CollectionHeading' export { default as ScrollToTop } from './ScrollToTop/ScrollToTop' -export { default as ScrollTarget } from './ScrollToTop/ScrollTarget' export { default as InputSearch} from './InputSearch/InputSearch' export { default as ButtonIconBuy} from './ButtonIconBuy/ButtonIconBuy' export { default as Banner} from './Banner/Banner'