From b72aba0eb38b14e0f130bce518074fe25f6e461e Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Tue, 7 Sep 2021 15:40:34 +0700 Subject: [PATCH 001/100] update --- next-env.d.ts | 3 +++ pages/test.tsx | 1 + 2 files changed, 4 insertions(+) diff --git a/next-env.d.ts b/next-env.d.ts index c6643fda1..9bc3dd46b 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,3 +1,6 @@ /// /// /// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/pages/test.tsx b/pages/test.tsx index 970588581..0e95fddf6 100644 --- a/pages/test.tsx +++ b/pages/test.tsx @@ -3,6 +3,7 @@ import { ButtonCommon, Layout, ModalInfo } from 'src/components/common' + export default function Test() { const [visible, setVisible] = useState(false) const onClose = () => { From 3f0af5ac858c2524b94c68f8386c7076e0e4dad4 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Wed, 8 Sep 2021 09:51:06 +0700 Subject: [PATCH 002/100] update --- pages/index.tsx | 7 ++- pages/test.tsx | 20 ++------ src/components/common/Layout/Layout.tsx | 22 ++++---- .../CheckoutSuccess.module.scss | 48 ++++++++++++++++++ .../CheckoutSuccess/CheckoutSuccess.tsx | 46 +++++++++++++++++ .../CheckoutSuccess/assets/checkIcon.png | Bin 0 -> 2445 bytes .../CheckoutSuccess/assets/coffeeBean.png | Bin 0 -> 4206 bytes .../checkout/CheckoutSuccess/assets/fish.png | Bin 0 -> 5868 bytes .../CheckoutSuccess/assets/freezeShrimp.png | Bin 0 -> 6799 bytes .../checkout/CheckoutSuccess/assets/veget.png | Bin 0 -> 6634 bytes 10 files changed, 115 insertions(+), 28 deletions(-) create mode 100644 src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss create mode 100644 src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx create mode 100644 src/components/modules/checkout/CheckoutSuccess/assets/checkIcon.png create mode 100644 src/components/modules/checkout/CheckoutSuccess/assets/coffeeBean.png create mode 100644 src/components/modules/checkout/CheckoutSuccess/assets/fish.png create mode 100644 src/components/modules/checkout/CheckoutSuccess/assets/freezeShrimp.png create mode 100644 src/components/modules/checkout/CheckoutSuccess/assets/veget.png diff --git a/pages/index.tsx b/pages/index.tsx index 7d23ebadd..cc77bafca 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,17 +1,20 @@ import { Layout } from 'src/components/common'; import { HomeBanner, HomeCategories, HomeCollection, HomeCTA, HomeFeature, HomeRecipe, HomeSubscribe, HomeVideo } from 'src/components/modules/home'; +import Test from './test'; export default function Home() { return ( <> - + + + {/* - + */} {/* // todo: uncomment */} {/* */} diff --git a/pages/test.tsx b/pages/test.tsx index 0e95fddf6..73945053e 100644 --- a/pages/test.tsx +++ b/pages/test.tsx @@ -1,23 +1,13 @@ import { useState } from 'react' -import { - ButtonCommon, - Layout, ModalInfo -} from 'src/components/common' +import { ButtonCommon, Layout, ModalInfo } from 'src/components/common' + +import CheckoutSuccess from 'src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess' export default function Test() { - const [visible, setVisible] = useState(false) - const onClose = () => { - setVisible(false) - } - const onOpen = () => { - setVisible(true) - } + return ( <> - open - - 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/Layout/Layout.tsx b/src/components/common/Layout/Layout.tsx index 17f520185..18fa73b33 100644 --- a/src/components/common/Layout/Layout.tsx +++ b/src/components/common/Layout/Layout.tsx @@ -15,24 +15,24 @@ interface Props { // note: demo code const Layout: FC = ({ children }) => { const { locale = 'en-US' } = useRouter() - const { visible: visibleCartDrawer, openModal, closeModal: closeCartDrawer } = useModalCommon({ initialValue: false }) + // const { visible: visibleCartDrawer, openModal, closeModal: closeCartDrawer } = useModalCommon({ initialValue: false }) - const toggle = () => { - if (visibleCartDrawer) { - closeCartDrawer() - } else { - openModal() - } - } + // const toggle = () => { + // if (visibleCartDrawer) { + // closeCartDrawer() + // } else { + // openModal() + // } + // } return (
{children}
- - toggle card: {visibleCartDrawer.toString()} */} + {/* + onClose={closeCartDrawer} /> */}
diff --git a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss new file mode 100644 index 000000000..73f69f7bf --- /dev/null +++ b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss @@ -0,0 +1,48 @@ +@import '../../../../styles/utilities'; + +.checkoutSuccessWrapper { + @apply flex items-center justify-center; + margin-top: -3.2rem; + + .checkoutSuccess { + border-radius: 80% 90% 18% 10% / 20% 10% 27% 20%; + max-width: 77.6rem; + height: fit-content; + background: + url('./assets/veget.png') left 0 top 0 no-repeat, + url('./assets/fish.png') right 0 top 0 no-repeat, + url('./assets/freezeShrimp.png') right 0 bottom 0 no-repeat, + url('./assets/coffeeBean.png') left 0 bottom 0 no-repeat; + background-color: #E3F2E9; + + .checkoutContent { + @apply text-center; + margin: 7.2rem 4.8rem 6.4rem 4.8rem; + + .checkoutMsg { + @apply heading-1 font-heading; + margin-top: 3.2rem; + margin-bottom: 1.6rem; + } + + .checkoutSubMsg { + @apply sub-headline; + margin-bottom: 4rem; + } + + .backToHomeBtn { + @apply flex cursor-pointer font-bold items-center justify-center; + color: white; + background-color: var(--primary); + margin: auto; + // border-radius: 80% 90% 18% 10% / 20% 10% 27% 20%; // to do + width: fit-content; + padding: 1.6rem 3.2rem 1.6rem 3.2rem; + + .arrowRight { + margin-left: 1.4rem; + } + } + } + } +} \ No newline at end of file diff --git a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx new file mode 100644 index 000000000..23f98046e --- /dev/null +++ b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx @@ -0,0 +1,46 @@ +import React from "react"; +import s from './CheckoutSuccess.module.scss'; + +import Image from "next/image"; +import Link from "next/link"; + +import checkIcon from './assets/checkIcon.png'; + +const CheckoutSuccess = () => { + + return ( +
+
+
+
+ check icon +
+ +
Your purchase has been successed!
+
Last call! Shop deep deals on 100+ bulk picks while you can.
+ + +
+ +
+ + +
+ +
+
+ ) +} + +export default CheckoutSuccess \ No newline at end of file diff --git a/src/components/modules/checkout/CheckoutSuccess/assets/checkIcon.png b/src/components/modules/checkout/CheckoutSuccess/assets/checkIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..9d97234fb0a3730cf088465d468da7e21d1b5f7b GIT binary patch literal 2445 zcmV;833B#{P)hY7(W}HgJXFGh{}MUCYJ3~DsLt$ zu)KnFRuILNs_@f&Pwu%b*_M#*Pj^e*;(M?~^%d&=bndz5AA}0Ae6+Lp=lNh6B}M}2 zbBP!sV3b{@Xkalx7Z76t>I$M*622pX&TmQ5IooP>p&}qm5t^_tT*5h6Q>3k5BPlnq zgD5*G!OQP9p0r_#m7q#-QAB%ve~1+~)zkH7ox;TcRA6C;qN?bbrL z4H9-HPTE+gEl=se>-%4~U_vOJz|JvQNBc$ zLg3$zcA~lY@JRi#Wtahw!1mSeSGzxKHDf4WnUt+$}1Nxe3&| zZa#dhUhY5<5Ovi}v@^So;!vb9Ttc@!BpvHY%Ao;^i3}nka0wAVCy-0(5h5r80nJzc zI^2bv$VDJ;*~a|b3-$C%kOKs8rVg2x!Bx_37u-hcCp$|ih$VqSnMrw72zD+nuI}a8 z(%uC2$a~{`P$)@LANNdLCarb}x@Q#DpYKGHf_?S!Z~l^ru_AHBmqafDbCLIvxMq7w zE|(@!hMR!&z>i3O5}gUmL!MN`g%?-*?TUQWj}nOw+~4I#q7#As>H#Olc&+pLeB7CV?YMgs4ie7T7zj=%xRDBYT*(_SXLp35Q>V+quHuMxg= z@i1fxD|OnkE@1mnqIy0%x|bKp?Q!~WtPY%?pL^;;9!uV=k;iD?Z+7_J9hNS#pFi&6 zNCH{JRrqHeY#=z8m2Eo;eD5Ts)s5pI2}hbnT^mUtVqjIWeA>Rcf4C1bj@SSBy6JK{ zbC_<_seFyVUUVe_Bb3vx3}m<=5SQsbKa+VCMYkH^HEZO$1ftz!5ty#DE6jwI4Sp6j z{H+TSwuhx~fI!xLHt9p878|B;!=MjB`&M2Ymcju7?YfU*g!BMzDD+m=!4CtJ6b`(n z|AJGGR^3N}g-BaaW3Z`#fZJJa24j_MKl}AO z-Sw$l;INx)1lwvmj2yv~>4$&ns^uMAEV>(IqN+E&qcdteIAG z4x_HpXC^NL7cPMZ_*t>HMaLpQy<;;13C+nNlE+X(xRA#nz`uYeq)K|3t}EiS(24bI zFB=IAAm~8N;7T4t`Mcf~TS1Um-a`@VL6P+KvSDG|zW-IN2=pOOp_3=zk*O?4Ne zQK-|^Od#Srs1bb06Bo$}B~c25ucqT8lRmHC!tvUt7(x$ zss(}5CXd0TCZ_9>Fbb84VzmE45;5dJzbaLK5YUfB0xv5Rp)UryYV`z zG>4172RY#|WlG%xomi(VEgHZ8omz-IZ3R{&I=mC5@-h9=$)A{BwtzF$>Zu=Th|kJ$MgT1z)rbIulgbPt(|u;?Q;x@g?j9hJOS`NEh7xu@t&h7Y$aEiW znpaUgoE#e<(6PV}M1V(S9w=3VpQYhY21g^fxfT!9Qs`2#euK7hHoCyxnJ}v5>l%Ss z#X8t$2&k>>TX$DS=s>PRGv%=E>tk#}cQ)Yfgk z-uP-{JYZ}{A2Hdo9w^z$))yy_Y>s#BkR60}@|c4Fug31ku>^8bd7Rh|BSdc_>9KaKa|NrM5Bb}2+ol4V z?|)AY>gKKF7!=fbwQ+dcw#b^+56Mtg4f`kJS6ILfg0fAlAhk!$!^Mq>B^To0BZ=;31|k5dRb-xurvVA9gL za9wHhwF2`CJFN5aG!qq?AGmt*u&ET?HWUJn=Y$Rtz2kapNg{4sUX2`ociEU*6ey$q z*knSnZ1-W!C_0|15P=L`kqY?KR_R(hC=Y`W4~h;7Doh}Qw=_}kRF65H0k8@Ql&e}s z|6eHt_K{5l!pHsx%(OtU1lTQeSa+!e_Hp-rU+$n_-G~v?0TY~II1vK-s9YkaF#K_% z1opwMln7{3DWA28A2z+AwyB))QSjry-SH}vqz)V8+PjkCh+G^cU#i@8o2x9QnV6qC zfuDjSJ=|`~9izIC6EV`QXIb~ukfdf6WV$5z!=J;Tn9K93tYr8DAA<=|wjAFR00000 LNkvXXu0mjf^b?Jr literal 0 HcmV?d00001 diff --git a/src/components/modules/checkout/CheckoutSuccess/assets/coffeeBean.png b/src/components/modules/checkout/CheckoutSuccess/assets/coffeeBean.png new file mode 100644 index 0000000000000000000000000000000000000000..742f30b684a14e6368a258583b52ebf656501a25 GIT binary patch literal 4206 zcmV-!5RvbRP)K~#7F?Oj=K z8`l*+;-Za$JGGPX3iJ$e!l$0gub{JpjlBp%;3(%w*zcVj zbJ3W)pX!aZ^-c0EEYq#~^RyI-`1sK8X^)fKF+SWM{Nag1jz$owgiI#G)*PfyZqCrG zKj`B_=SY%|J%^6p{p#hM)|1U96S0Mp*=!QejYfkw&e}`MYaz;HHUB9=@{Moj=+oP? z6p5$a;zMuK9)qde4-JM6a@wtA>Fp-gVSa5;JvSDQ(<19@M@NSk{Hx-8qss3XjYfLv z*aVHZ9Q6K`8-Lu0Ci+N{iai5Ga@iXo*MLJjYDGMmW=|ol_%kCj4KmFpBboTI5bgmd zz5enUdhef~UkXQJK0fp(+9TMKgxMG5)2DsVWoK8NZ@@z zGVB*}ff-}$FnE0al`FIdtk*y-07%V7G)7tWHl983FqtQeLe#Egx z0RFY5r~7PpGfuk|CXkv;COFDUS3DWki}R#&6XKXmvWXv!CKGAJ;?gSFY!(oxdXCFs zo$@b-Xt%-?i$$mw$YiGq$To?LnM8Ui5E0J%m&w1pCSH$^4AHPlIo;{7^+I>Yc|4$9 z2os_tOg%(oT%zHXI>nJwMy%QZLQ^A4L8sX$GF;tVCLW#C$@zh9PCu67v1PN2h^&}V zke%Z=EU*%y#pTtakov*=qIgsy7`n@tpxsLDH#7dSCxGN^mMt?a5f&~mbP$jHKqr$2 z^6^?uGvcCUd8BZ`knl;Qls^FHg!^p0}&IP!bxlSvbnR9Y+bf3d23Z(t^Uh3n_87>HBM>an*u*gO^=vWPH z(h?_~0>KD{He#r5farH<2Z}0p~@ao+oTrK%aLm!jLq*#ceoPvxe()<_` z&-JDw?N$rFM{g0Suuu@{^RIFdGeSoXxClj3_dp+)l)8#?zFLsr&zfR)62;KFb4#ex z;qYaWsvJIQB066C$x}Ie>1qISK{SX@vaY6iisBfO=kf*W;zbV^ua_@cp_Oj3mEL7i z?=b;K4!8xOBZE%eWR?Ryho2YFPjCC=Vkj)RX|=kJ-<*G;sj>i4zqm6e@&}WnZaOi! zUnI;M37O=7{O1H7Z{eEjm4BrSjqLrva-R-h4NIk+hj;kA$o_fCvVHXki!RjVZi5vohBpg=R* z&mN~ir`BFQKATWgl5|fBbnV#fPRwSQt zxFS+1sh}`=`sg^>EL{$k2@s5eXhSTxVX^>g#TSCL>eW;%kcb%3WYUOioLm_7Ed-#$ zAto3F(Yg~{_k1oEtj})GvIj6Ev{fsyAQ6P3#Evq4IzROr0a!9>b|db6bmsUt@)v(2 zx+v3>Vb%)qVfF zB=xP;4Ry2JYwTY2+byiElV#5vaN6jJi4l&v`lQ8%r|9rLXVZz5ff@4D6Jwm-w0QaD zZ>f%`nOw-gzd!q?q9!M_O>R&OP&l>N${sgDeB3 z#G+N|*1b8pGyABehy_qRdHxh~^8|TtP>s+{?k6|zi$o0EEHwyXN8F-fAp=B$R16T@ zs&Mw%=;VYO#MZpH=_2>awQq&CY9ZEaeylkDr8T;KXLd(Oz5if=9&ybsyb%$>NhQE~ zkB$%G>6=ue^_pVQh$ti)@@4Z5Df6*yMF+76AN3FmFJSgjfR@(QX(xb04Ym^$;+a!N zw>4mwqNlqHu9<_i_X5?Ry{5u~q8hHv-nv1pp!X<}iu!S#)z zV}k?QW;v?X4z9}ZO!ZO?(omM%yAM}r#=l0t`0;5jxpbh>L zFgU>?JlL;|CrBb%2i#6kp{cst((w2H-l3~sKjgyRrYM8U2y&6{?%Xn3>8ZcZs`>{| z0UpUmW)J-T-(jJw;W*6p1G%X8pLD$NO{9_{*E%2I^7U~FQIZK=>H1(Zzb)WS!KVAcs{4 z!%+%tL{F9R|#GVChr-Dv%s**aUUhsTA3!%kJLjaRv&Qk2IzT1qDMwcn?>hzMUB z#Fj2pr5JMc)98?^s9maBRCDpwAd~B5tyQ&JX@9W(H-#0%Vo}YOAY17AW?a+zVQoNg zP>TeV0!@5HpGlgnRW)DBajC0&&)Gbvg|vl?!Oq1Jv{59CBQ z&*O`VR#d8?rwrs`A)9h@sE2l+Qox7QD+gMLMSsF-C{l6C%fLc~>5s>HlPV*TEdDG> z$rJHWl>oV3#L%6b@luk6gwC#UAq8cK#cGczs**bg0?~Hb@37LoerLl7m5~$vb@2=h zO53za@xq9ww2hTvB zR?yf|VlnlPaE7Yd9Yc*mnhioNB%fUn`;u$EznMvCu}SNZguEQUZNuVK^v7$+sWuW= zd=qhHViA?)Z{&HIYJ`EKkPr%!g`sCIt3BnG&gTG@S2wnK1qa7RT94Q*UtIY+-rxcN>4Z9(I zp^3iDKAx~%lZG2gKmv|Uj&BtQ(OA6GAuimkXmqn;g9(WJ@Y)O{4HoO82BFYIAx;T) zt6uTA9U{M5DS2b!j2iZD;g&3iI2zkYNkBN8OjIu4%fzzVg$1mkcMU0J<7yFYia3yu8)H3@2S8S>!G zQO@IXpfcRp8~kX6xFK7c8HD1=^iTQad(=dfGfBj-U!FMV_B?%boI1O- z|3i*?L+&?20aPogNTc5L1?cYFijQ{a|NoR*g|PH~z`@1&Og8Os^;v}b)l7+yNlnC~ zx*Fu5uaE%_5)gU8Vi#!#poJ+9kB?x%rw$EMPmiVS|LCa)psA?Kq0?M%4=+btu+~sM zSJ1Q@v?)QW8G3kpgs$_G6Vgs}b7xmwNzUfm^$`eE(;tgOH}bLh!eUcy%2o+_=lI)} z?#?&aiV3~E*o2H=!+;wR>m<5xLrFDl`!YZ(td-@kB0oe?J9(P$582JYniIaluud{;gA4$;rl3w4(CssI2007*qoM6N<$ Ef_O~{wg3PC literal 0 HcmV?d00001 diff --git a/src/components/modules/checkout/CheckoutSuccess/assets/fish.png b/src/components/modules/checkout/CheckoutSuccess/assets/fish.png new file mode 100644 index 0000000000000000000000000000000000000000..14f676f641b2856bf444711fc4dfde3e0beaabf6 GIT binary patch literal 5868 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 literal 0 HcmV?d00001 diff --git a/src/components/modules/checkout/CheckoutSuccess/assets/veget.png b/src/components/modules/checkout/CheckoutSuccess/assets/veget.png new file mode 100644 index 0000000000000000000000000000000000000000..83b8f51cc1b5e1a15e6fa92a919882e386ffff67 GIT binary patch literal 6634 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 XIwYHdI#2r_G=rtBuBTQDw2As3D|@-b literal 0 HcmV?d00001 From c614b8d42879c2ed32bbcd2119d306af0bae936d Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Wed, 8 Sep 2021 10:10:01 +0700 Subject: [PATCH 003/100] update --- pages/test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/test.tsx b/pages/test.tsx index 73945053e..dd5b91a2b 100644 --- a/pages/test.tsx +++ b/pages/test.tsx @@ -1,5 +1,5 @@ import { useState } from 'react' -import { ButtonCommon, Layout, ModalInfo } from 'src/components/common' +import { ButtonCommon, Layout } from 'src/components/common' import CheckoutSuccess from 'src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess' From 943c739143a17aef8793cbebaba0189d6f185032 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Wed, 8 Sep 2021 14:28:26 +0700 Subject: [PATCH 004/100] :sparkles: feat: Checkout Success --- .../CheckoutSuccess.module.scss | 2 +- .../CheckoutSuccess/CheckoutSuccess.tsx | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss index 73f69f7bf..5b4f4cc66 100644 --- a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss +++ b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss @@ -35,7 +35,7 @@ color: white; background-color: var(--primary); margin: auto; - // border-radius: 80% 90% 18% 10% / 20% 10% 27% 20%; // to do + border-radius: 76% 80% 17% 30% / 40% 35% 80% 30%; width: fit-content; padding: 1.6rem 3.2rem 1.6rem 3.2rem; diff --git a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx index 23f98046e..f190602dd 100644 --- a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx +++ b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; import s from './CheckoutSuccess.module.scss'; import Image from "next/image"; @@ -7,8 +7,15 @@ import Link from "next/link"; import checkIcon from './assets/checkIcon.png'; const CheckoutSuccess = () => { - - return ( + const [isShown, setIsShown] = useState(false); + + useEffect(() => { + setTimeout(() => { + setIsShown(true); + }, 3000); + }, [3000]); + + return isShown ? (
@@ -32,15 +39,9 @@ const CheckoutSuccess = () => {
- -
- - -
-
- ) + ) : null } export default CheckoutSuccess \ No newline at end of file From 1cc64c6fd06654783a613f88d1ed645df643380c Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Wed, 8 Sep 2021 14:28:47 +0700 Subject: [PATCH 005/100] :sparkles: feat: Loading Common --- .../LoadingCommon/LoadingCommon.module.scss | 31 +++++++++++++++++++ .../common/LoadingCommon/LoadingCommon.tsx | 26 ++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/components/common/LoadingCommon/LoadingCommon.module.scss create mode 100644 src/components/common/LoadingCommon/LoadingCommon.tsx diff --git a/src/components/common/LoadingCommon/LoadingCommon.module.scss b/src/components/common/LoadingCommon/LoadingCommon.module.scss new file mode 100644 index 000000000..12eaed54d --- /dev/null +++ b/src/components/common/LoadingCommon/LoadingCommon.module.scss @@ -0,0 +1,31 @@ +@import '../../../styles/utilities'; + +.loadingCommon:empty { + @apply bg-white; + border-radius: 50%; + border: .7rem solid var(--primary-lightest); + border-top: .7rem solid var(--primary); + animation: spin 2s linear infinite; + margin: auto; + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + + + &.small { + height: 5rem; + width: 5rem; + } + + &.default { + height: 7rem; + width: 7rem; + } + + &.large { + height: 10rem; + width: 10rem; + } +} \ No newline at end of file diff --git a/src/components/common/LoadingCommon/LoadingCommon.tsx b/src/components/common/LoadingCommon/LoadingCommon.tsx new file mode 100644 index 000000000..bc2b4e53a --- /dev/null +++ b/src/components/common/LoadingCommon/LoadingCommon.tsx @@ -0,0 +1,26 @@ +import classNames from "classnames"; +import React from "react"; +import s from './LoadingCommon.module.scss' + +interface LoadingCommonProps { + visible: boolean + size?: "small" | "default" | "large", + children? : React.ReactNode; +} + +const LoadingCommon = ({ visible, size="default", children }: LoadingCommonProps) => { + + return ( + <> + { + visible &&
+ {children} +
+ } + + ) +} + +export default LoadingCommon \ No newline at end of file From bfbdb23c70bfdc57f8dead8e94159418bb8ff2d7 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Thu, 9 Sep 2021 08:24:47 +0700 Subject: [PATCH 006/100] :sparkles: feat: Skeleton Common --- .../SkeletonCommon/SkeletonCommon.module.scss | 32 ++++++++++++ .../common/SkeletonCommon/SkeletonCommon.tsx | 17 +++++++ .../SkeletonAvatar/SkeletonAvatar.module.scss | 51 +++++++++++++++++++ .../SkeletonAvatar/SkeletonAvatar.tsx | 25 +++++++++ .../SkeletonParagraph.module.scss | 41 +++++++++++++++ .../SkeletonParagraph/SkeletonParagraph.tsx | 30 +++++++++++ .../SkeletonTitle/SkeletonTitle.module.scss | 27 ++++++++++ .../SkeletonTitle/SkeletonTitle.tsx | 28 ++++++++++ 8 files changed, 251 insertions(+) create mode 100644 src/components/common/SkeletonCommon/SkeletonCommon.module.scss create mode 100644 src/components/common/SkeletonCommon/SkeletonCommon.tsx create mode 100644 src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.module.scss create mode 100644 src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.tsx create mode 100644 src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.module.scss create mode 100644 src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.tsx create mode 100644 src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.module.scss create mode 100644 src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.tsx diff --git a/src/components/common/SkeletonCommon/SkeletonCommon.module.scss b/src/components/common/SkeletonCommon/SkeletonCommon.module.scss new file mode 100644 index 000000000..e388525e5 --- /dev/null +++ b/src/components/common/SkeletonCommon/SkeletonCommon.module.scss @@ -0,0 +1,32 @@ +@import '../../../styles/utilities'; + +$base-color: #ddd; +$shine-color: #e8e8e8; +$animation-duration: 1.6s; + +@mixin background-gradient { + background-image: linear-gradient(90deg, $base-color 0px, $shine-color 40px, $base-color 80px) ; + background-size: 600px; +} + +.skeletonCommon:empty { + margin: auto; + height: 14rem; + width: 14rem; + animation: name duration timing-function delay iteration-count direction fill-mode; + + @include background-gradient; + animation: shine-lines $animation-duration infinite linear; +} + +@keyframes shine-lines { + 0% { + background-position: -100px; + } + 40% { + background-position: 140px; + } + 100% { + background-position: 140px; + } +} \ No newline at end of file diff --git a/src/components/common/SkeletonCommon/SkeletonCommon.tsx b/src/components/common/SkeletonCommon/SkeletonCommon.tsx new file mode 100644 index 000000000..6b0631aef --- /dev/null +++ b/src/components/common/SkeletonCommon/SkeletonCommon.tsx @@ -0,0 +1,17 @@ +import React from "react"; +import s from './SkeletonCommon.module.scss' + +interface SkeletonCommonProps { + children? : React.ReactNode; +} + +const SkeletonCommon = ({ children }: SkeletonCommonProps) => { + + return ( +
+ {children} +
+ ) +} + +export default SkeletonCommon \ No newline at end of file diff --git a/src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.module.scss b/src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.module.scss new file mode 100644 index 000000000..82286d7a0 --- /dev/null +++ b/src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.module.scss @@ -0,0 +1,51 @@ +@import '../../../../../styles/utilities'; + +$base-color: #8F8F8F; +$shine-color: #ebebeb; +$animation-duration: 1.6s; +$avatar-offset: 52 + 16; + +@mixin background-gradient { + background-image: linear-gradient(90deg, $base-color 0px, $shine-color 40px, $base-color 80px) ; + background-size: 600px; +} + +.skeletonAvatar { + + &.active { + @include background-gradient; + animation: shine-avatar $animation-duration infinite linear; + } + + &.circle { + border-radius: 50%; + } + + &.square { + border-radius: 0; + } + + &.small { + width: 3.2rem; + height: 3.2rem; + } + &.default { + width: 4.8rem; + height: 4.8rem; + } + &.large { + width: 6.4rem; + height: 6.4rem; + } +} + +@keyframes shine-avatar { + 0% { + background-position: -100px + $avatar-offset + } + + 40%, 100% { + background-position: 140px + $avatar-offset + } + +} diff --git a/src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.tsx b/src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.tsx new file mode 100644 index 000000000..d5d20165b --- /dev/null +++ b/src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.tsx @@ -0,0 +1,25 @@ +import classNames from "classnames"; +import React from "react"; +import s from './SkeletonAvatar.module.scss' + +interface SkeletonAvatarProps { + active?: boolean, + shape?: "circle" | "square", + size?: "small" | "default" | "large", + children: React.ReactNode +} + +const SkeletonAvatar = ({ active=true, shape="circle", size="default", children }: SkeletonAvatarProps) => { + + return ( +
+ {children} +
+ ) +} + +export default SkeletonAvatar \ No newline at end of file diff --git a/src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.module.scss b/src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.module.scss new file mode 100644 index 000000000..259c1574c --- /dev/null +++ b/src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.module.scss @@ -0,0 +1,41 @@ +@import '../../../../../styles/utilities'; + +$base-color: #DDD; +$shine-color: #ebebeb; +$animation-duration: 2s; + +@mixin background-gradient { + background-image: linear-gradient(90deg, $base-color 0px, $shine-color 40px, $base-color 80px) ; + background-size: 100%; +} + +.skeletonParagraph { + @apply bg-white; + height: fit-content; + width: 100%; + + .row { + height: 2rem; + margin: 1rem; + animation: shine-lines $animation-duration infinite linear; + @include background-gradient; + } + + .lastRow { + height: 2rem; + margin: 1rem; + width: 85%; + animation: shine-lines $animation-duration infinite linear; + @include background-gradient; + } +} + +@keyframes shine-lines { + 0% { + background-position: -100px; + } + 40%, 100% { + background-position: 100%; + } +} + diff --git a/src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.tsx b/src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.tsx new file mode 100644 index 000000000..5c3620f0a --- /dev/null +++ b/src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.tsx @@ -0,0 +1,30 @@ +import classNames from "classnames"; +import React from "react"; +import s from './SkeletonParagraph.module.scss' + +interface SkeletonParagraphProps { + active?: boolean, + rows?: number // number of rows in paragraph + children: React.ReactNode +} + +const SkeletonParagraph = ({ active=true, rows=2, children }: SkeletonParagraphProps) => { + + return ( +
+ { + [...Array(rows)].map((e, i) => { + if (i === rows-1) { + return

+ } + return

+ }) + } + {children} +
+ ) +} + +export default SkeletonParagraph \ No newline at end of file diff --git a/src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.module.scss b/src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.module.scss new file mode 100644 index 000000000..0dbb139d3 --- /dev/null +++ b/src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.module.scss @@ -0,0 +1,27 @@ +@import '../../../../../styles/utilities'; + +$base-color: #8F8F8F; +$shine-color: #ebebeb; +$animation-duration: 1.6s; + +@mixin background-gradient { + background-image: linear-gradient(90deg, $base-color 0px, $shine-color 40px, $base-color 80px) ; + background-size: 600px; +} + +.skeletonTitle { + &.active { + @include background-gradient; + animation: shine-lines $animation-duration infinite linear; + } +} + +@keyframes shine-lines { + 0% { + background-position: -100px; + } + 40%, 100% { + background-position: 50rem; + } +} + diff --git a/src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.tsx b/src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.tsx new file mode 100644 index 000000000..40d747d8f --- /dev/null +++ b/src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.tsx @@ -0,0 +1,28 @@ +import classNames from "classnames"; +import React from "react"; +import s from './SkeletonTitle.module.scss' + +interface SkeletonTitleProps { + active?: boolean, + width: string | number, // number px + height: string | number, + children: React.ReactNode +} + +const SkeletonTitle = ({ active=true, width, height, children }: SkeletonTitleProps) => { + + const styles = { + width: width, + height: height + } + + return ( +
+ {children} +
+ ) +} + +export default SkeletonTitle \ No newline at end of file From 21684697b514bdcb680217a052c94b2fbc6c952d Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Thu, 9 Sep 2021 08:25:09 +0700 Subject: [PATCH 007/100] :sparkles: feat: Checkout Success --- .../modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx index f190602dd..16bfc67bd 100644 --- a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx +++ b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx @@ -12,8 +12,8 @@ const CheckoutSuccess = () => { useEffect(() => { setTimeout(() => { setIsShown(true); - }, 3000); - }, [3000]); + }, 1000); + }, [1000]); return isShown ? (
From d6686b8e2dfd4fe59e864814f8635a95bba7b759 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Thu, 9 Sep 2021 08:25:28 +0700 Subject: [PATCH 008/100] :sparkles: feat: Loading Common --- .../common/LoadingCommon/LoadingCommon.module.scss | 1 - src/components/common/LoadingCommon/LoadingCommon.tsx | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/common/LoadingCommon/LoadingCommon.module.scss b/src/components/common/LoadingCommon/LoadingCommon.module.scss index 12eaed54d..f8bca225d 100644 --- a/src/components/common/LoadingCommon/LoadingCommon.module.scss +++ b/src/components/common/LoadingCommon/LoadingCommon.module.scss @@ -12,7 +12,6 @@ 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } - &.small { height: 5rem; diff --git a/src/components/common/LoadingCommon/LoadingCommon.tsx b/src/components/common/LoadingCommon/LoadingCommon.tsx index bc2b4e53a..20377c0ed 100644 --- a/src/components/common/LoadingCommon/LoadingCommon.tsx +++ b/src/components/common/LoadingCommon/LoadingCommon.tsx @@ -3,17 +3,16 @@ import React from "react"; import s from './LoadingCommon.module.scss' interface LoadingCommonProps { - visible: boolean size?: "small" | "default" | "large", children? : React.ReactNode; } -const LoadingCommon = ({ visible, size="default", children }: LoadingCommonProps) => { +const LoadingCommon = ({ size="default", children }: LoadingCommonProps) => { return ( <> { - visible &&
{children} From 2e3def034e90970c2656fc0d07e39f2e4b05ebae Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Sat, 11 Sep 2021 13:08:39 +0700 Subject: [PATCH 009/100] config: yarn lock changed --- yarn.lock | 1007 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 987 insertions(+), 20 deletions(-) diff --git a/yarn.lock b/yarn.lock index 96275a4eb..7d98b108e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -428,6 +428,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/runtime-corejs3@^7.10.2": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz#403139af262b9a6e8f9ba04a6fdcebf8de692bf1" + integrity sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg== + dependencies: + core-js-pure "^3.16.0" + regenerator-runtime "^0.13.4" + "@babel/runtime@7.12.5": version "7.12.5" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz" @@ -449,6 +457,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" + integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.14.5": version "7.14.5" resolved "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz" @@ -529,6 +544,21 @@ ts-node "^9" tslib "^2" +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@fullhuman/postcss-purgecss@^4.0.3": version "4.0.3" resolved "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-4.0.3.tgz" @@ -926,6 +956,20 @@ resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz" integrity sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug== +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + "@iarna/toml@^2.2.5": version "2.2.5" resolved "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz" @@ -948,6 +992,13 @@ resolved "https://registry.npmjs.org/@next/env/-/env-11.0.1.tgz" integrity sha512-yZfKh2U6R9tEYyNUrs2V3SBvCMufkJ07xMH5uWy8wqcl5gAXoEw6A/1LDqwX3j7pUutF9d1ZxpdGDA3Uag+aQQ== +"@next/eslint-plugin-next@11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-11.1.2.tgz#f26cf90bcb6cd2e4645e2ba253bbc9aaaa43a170" + integrity sha512-cN+ojHRsufr9Yz0rtvjv8WI5En0RPZRJnt0y16Ha7DD+0n473evz8i1ETEJHmOLeR7iPJR0zxRrxeTN/bJMOjg== + dependencies: + glob "7.1.7" + "@next/polyfill-module@11.0.1": version "11.0.1" resolved "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-11.0.1.tgz" @@ -1046,6 +1097,11 @@ "@react-spring/shared" "~9.2.0" "@react-spring/types" "~9.2.0" +"@rushstack/eslint-patch@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.0.6.tgz#023d72a5c4531b4ce204528971700a78a85a0c50" + integrity sha512-Myxw//kzromB9yWgS8qYGuGVf91oBUUJpNvy5eM50sqvmKLbKjwLxohJnkWGTeeI9v9IBMtPLxz5Gc60FIfvCA== + "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" resolved "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz" @@ -1107,6 +1163,11 @@ resolved "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.33.tgz" integrity sha512-qEWiQff6q2tA5gcJGWwzplQcXdJtm+0oy6IHGHzlOf3eFAkGE/FIPXZK9ofWgNSHVp8AFFI33PJJshS0ei3Gvw== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/jsonwebtoken@^8.5.0": version "8.5.5" resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.5.tgz" @@ -1198,6 +1259,50 @@ dependencies: "@types/node" "*" +"@typescript-eslint/parser@^4.20.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.0.tgz#87b7cd16b24b9170c77595d8b1363f8047121e05" + integrity sha512-oWbzvPh5amMuTmKaf1wp0ySxPt2ZXHnFQBN2Szu1O//7LmOvgaKTCIDNLK2NvzpmVd5A2M/1j/rujBqO37hj3w== + dependencies: + "@typescript-eslint/scope-manager" "4.31.0" + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/typescript-estree" "4.31.0" + debug "^4.3.1" + +"@typescript-eslint/scope-manager@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.0.tgz#9be33aed4e9901db753803ba233b70d79a87fc3e" + integrity sha512-LJ+xtl34W76JMRLjbaQorhR0hfRAlp3Lscdiz9NeI/8i+q0hdBZ7BsiYieLoYWqy+AnRigaD3hUwPFugSzdocg== + dependencies: + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/visitor-keys" "4.31.0" + +"@typescript-eslint/types@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.0.tgz#9a7c86fcc1620189567dc4e46cad7efa07ee8dce" + integrity sha512-9XR5q9mk7DCXgXLS7REIVs+BaAswfdHhx91XqlJklmqWpTALGjygWVIb/UnLh4NWhfwhR5wNe1yTyCInxVhLqQ== + +"@typescript-eslint/typescript-estree@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.0.tgz#4da4cb6274a7ef3b21d53f9e7147cc76f278a078" + integrity sha512-QHl2014t3ptg+xpmOSSPn5hm4mY8D4s97ftzyk9BZ8RxYQ3j73XcwuijnJ9cMa6DO4aLXeo8XS3z1omT9LA/Eg== + dependencies: + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/visitor-keys" "4.31.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.0.tgz#4e87b7761cb4e0e627dc2047021aa693fc76ea2b" + integrity sha512-HUcRp2a9I+P21+O21yu3ezv3GEPGjyGiXoEUQwZXjR8UxRApGeLyWH4ZIIUSalE28aG4YsV6GjtaAVB3QKOu0w== + dependencies: + "@typescript-eslint/types" "4.31.0" + eslint-visitor-keys "^2.0.0" + "@vercel/fetch-cached-dns@^2.0.2": version "2.0.2" resolved "https://registry.npmjs.org/@vercel/fetch-cached-dns/-/fetch-cached-dns-2.0.2.tgz" @@ -1243,6 +1348,11 @@ abort-controller@3.0.0: dependencies: event-target-shim "^5.0.0" +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + acorn-node@^1.6.1: version "1.8.2" resolved "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz" @@ -1262,9 +1372,9 @@ acorn-walk@^8.0.0: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz" integrity sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w== -acorn@^7.0.0: +acorn@^7.0.0, acorn@^7.4.0: version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.0.4: @@ -1294,6 +1404,26 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.6.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" + integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + anser@1.4.9: version "1.4.9" resolved "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz" @@ -1373,11 +1503,26 @@ arg@^5.0.0: resolved "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz" integrity sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA== +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + array-includes-with-glob@^3.0.6: version "3.1.0" resolved "https://registry.npmjs.org/array-includes-with-glob/-/array-includes-with-glob-3.1.0.tgz" @@ -1386,11 +1531,31 @@ array-includes-with-glob@^3.0.6: "@babel/runtime" "^7.14.0" matcher "^4.0.0" +array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" + is-string "^1.0.5" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.flat@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + array.prototype.flatmap@^1.2.4: version "1.2.4" resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz" @@ -1434,6 +1599,11 @@ assert@^1.1.1: object-assign "^4.1.1" util "0.10.3" +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + ast-types@0.13.2: version "0.13.2" resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz" @@ -1498,6 +1668,16 @@ available-typed-arrays@^1.0.4: resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz" integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA== +axe-core@^4.0.2: + version "4.3.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.3.tgz#b55cd8e8ddf659fe89b064680e1c6a4dceab0325" + integrity sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA== + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" @@ -2096,6 +2276,11 @@ cookie@^0.4.1: resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== +core-js-pure@^3.16.0: + version "3.17.3" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.17.3.tgz#98ea3587188ab7ef4695db6518eeb71aec42604a" + integrity sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ== + core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" @@ -2169,7 +2354,7 @@ cross-fetch@3.1.4, cross-fetch@^3.0.4, cross-fetch@^3.0.6: dependencies: node-fetch "2.6.1" -cross-spawn@^7.0.3: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2261,6 +2446,11 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== +damerau-levenshtein@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" + integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== + data-uri-to-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" @@ -2281,7 +2471,7 @@ debounce@^1.2.0: resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@2: +debug@2, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2302,13 +2492,20 @@ debug@4, debug@^4.1.0, debug@^4.3.1: dependencies: ms "2.1.2" -debug@^3.1.0: +debug@^3.1.0, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" +debug@^4.0.1, debug@^4.1.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -2331,6 +2528,11 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + deepmerge@4.2.2, deepmerge@^4.0.0, deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" @@ -2426,6 +2628,20 @@ dlv@^1.1.3: resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + domain-browser@4.19.0: version "4.19.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.19.0.tgz#1093e17c0a17dbd521182fe90d49ac1370054af1" @@ -2499,6 +2715,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.0.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -2518,7 +2739,7 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enquirer@^2.3.6: +enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -2554,6 +2775,30 @@ es-abstract@^1.18.0-next.1: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" +es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: + version "1.18.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.6.tgz#2c44e3ea7a6255039164d26559777a6d978cb456" + integrity sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" + is-regex "^1.1.4" + is-string "^1.0.7" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + es-abstract@^1.18.5: version "1.18.5" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.5.tgz#9b10de7d4c206a3581fd5b2124233e04db49ae19" @@ -2606,6 +2851,224 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +eslint-config-next@^11.1.2: + version "11.1.2" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-11.1.2.tgz#73c918f2fa6120d5f65080bf3fcf6b154905707e" + integrity sha512-dFutecxX2Z5/QVlLwdtKt+gIfmNMP8Qx6/qZh3LM/DFVdGJEAnUKrr4VwGmACB2kx/PQ5bx3R+QxnEg4fDPiTg== + dependencies: + "@next/eslint-plugin-next" "11.1.2" + "@rushstack/eslint-patch" "^1.0.6" + "@typescript-eslint/parser" "^4.20.0" + eslint-import-resolver-node "^0.3.4" + eslint-import-resolver-typescript "^2.4.0" + eslint-plugin-import "^2.22.1" + eslint-plugin-jsx-a11y "^6.4.1" + eslint-plugin-react "^7.23.1" + eslint-plugin-react-hooks "^4.2.0" + +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== + +eslint-import-resolver-node@^0.3.4, eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-import-resolver-typescript@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.4.0.tgz#ec1e7063ebe807f0362a7320543aaed6fe1100e1" + integrity sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA== + dependencies: + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-module-utils@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz#94e5540dd15fe1522e8ffa3ec8db3b7fa7e7a534" + integrity sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q== + dependencies: + debug "^3.2.7" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.22.1: + version "2.24.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz#2c8cd2e341f3885918ee27d18479910ade7bb4da" + integrity sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q== + dependencies: + array-includes "^3.1.3" + array.prototype.flat "^1.2.4" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.6.2" + find-up "^2.0.0" + has "^1.0.3" + is-core-module "^2.6.0" + minimatch "^3.0.4" + object.values "^1.1.4" + pkg-up "^2.0.0" + read-pkg-up "^3.0.0" + resolve "^1.20.0" + tsconfig-paths "^3.11.0" + +eslint-plugin-jsx-a11y@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== + dependencies: + "@babel/runtime" "^7.11.2" + aria-query "^4.2.2" + array-includes "^3.1.1" + ast-types-flow "^0.0.7" + axe-core "^4.0.2" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.6" + emoji-regex "^9.0.0" + has "^1.0.3" + jsx-ast-utils "^3.1.0" + language-tags "^1.0.5" + +eslint-plugin-react-hooks@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" + integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== + +eslint-plugin-react@^7.23.1: + version "7.25.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz#9286b7cd9bf917d40309760f403e53016eda8331" + integrity sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug== + dependencies: + array-includes "^3.1.3" + array.prototype.flatmap "^1.2.4" + doctrine "^2.1.0" + estraverse "^5.2.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.0.4" + object.entries "^1.1.4" + object.fromentries "^2.0.4" + object.values "^1.1.4" + prop-types "^15.7.2" + resolve "^2.0.0-next.3" + string.prototype.matchall "^4.0.5" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^7.32.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2668,6 +3131,11 @@ extract-files@9.0.0, extract-files@^9.0.0: resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + fast-glob@^3.1.1, fast-glob@^3.2.5: version "3.2.5" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" @@ -2680,6 +3148,16 @@ fast-glob@^3.1.1, fast-glob@^3.2.5: micromatch "^4.0.2" picomatch "^2.2.1" +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + fastq@^1.6.0: version "1.12.0" resolved "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz" @@ -2734,6 +3212,13 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" @@ -2750,6 +3235,13 @@ find-cache-dir@3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" @@ -2758,6 +3250,19 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" + integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== + flatten@^1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz" @@ -2815,6 +3320,11 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" @@ -2865,9 +3375,17 @@ get-stream@^6.0.0: resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -glob-parent@^5.1.0, glob-parent@~5.1.0, glob-parent@~5.1.2: +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" @@ -2884,7 +3402,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.6: +glob@7.1.7, glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.6: version "7.1.7" resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -2901,6 +3419,13 @@ globals@^11.1.0: resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^13.6.0, globals@^13.9.0: + version "13.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" + integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== + dependencies: + type-fest "^0.20.2" + globby@11.0.3: version "11.0.3" resolved "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz" @@ -2913,6 +3438,18 @@ globby@11.0.3: merge2 "^1.3.0" slash "^3.0.0" +globby@^11.0.3: + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + got@^9.6.0: version "9.6.0" resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz" @@ -3065,6 +3602,11 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + html-tags@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz" @@ -3144,6 +3686,11 @@ ieee754@^1.1.13, ieee754@^1.1.4: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + ignore@^5.1.4: version "5.1.8" resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" @@ -3173,9 +3720,9 @@ import-cwd@^3.0.0: dependencies: import-from "^3.0.0" -import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -3193,6 +3740,11 @@ import-from@4.0.0: resolved "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz" integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + indent-string@^3.0.0: version "3.2.0" resolved "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz" @@ -3324,7 +3876,12 @@ is-callable@^1.1.4, is-callable@^1.2.3: resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== -is-core-module@^2.2.0: +is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-core-module@^2.2.0, is-core-module@^2.6.0: version "2.6.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz" integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== @@ -3367,7 +3924,7 @@ is-generator-function@^1.0.7: dependencies: has-tostringtag "^1.0.0" -is-glob@4.0.1, is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@4.0.1, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -3436,6 +3993,14 @@ is-regex@^1.1.3: call-bind "^1.0.2" has-symbols "^1.0.2" +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" @@ -3463,6 +4028,13 @@ is-string@^1.0.5, is-string@^1.0.6: resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz" integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== +is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" @@ -3552,6 +4124,14 @@ js-cookie@^2.2.1: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" @@ -3569,11 +4149,31 @@ json-buffer@3.0.0: resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" @@ -3633,6 +4233,14 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" + integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== + dependencies: + array-includes "^3.1.2" + object.assign "^4.1.2" + jwa@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" @@ -3662,6 +4270,18 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +language-subtag-registry@~0.3.2: + version "0.3.21" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + dependencies: + language-subtag-registry "~0.3.2" + latest-version@5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz" @@ -3669,6 +4289,14 @@ latest-version@5.1.0: dependencies: package-json "^6.3.0" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + lilconfig@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz" @@ -3757,6 +4385,16 @@ listr@^0.14.3: p-map "^2.0.0" rxjs "^6.3.3" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + load-script@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" @@ -3771,6 +4409,14 @@ loader-utils@1.2.3: emojis-list "^2.0.0" json5 "^1.0.1" +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -3833,6 +4479,11 @@ lodash.isstring@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" @@ -3863,6 +4514,11 @@ lodash.topath@^4.5.2: resolved "https://registry.yarnpkg.com/lodash.topath/-/lodash.topath-4.5.2.tgz#3616351f3bba61994a0931989660bd03254fd009" integrity sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak= +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -3945,6 +4601,13 @@ lru-cache@5.1.1: dependencies: yallist "^3.0.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + make-dir@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -4110,6 +4773,11 @@ native-url@0.3.4: dependencies: querystring "^0.2.0" +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + next-seo@^4.26.0: version "4.26.0" resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-4.26.0.tgz#4218cfae5651fdc2e330dcdf1cc1b34ce199d41c" @@ -4242,6 +4910,16 @@ node-releases@^1.1.71: resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz" integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" @@ -4351,6 +5029,34 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" +object.entries@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd" + integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + +object.fromentries@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" + integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + has "^1.0.3" + +object.values@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" + integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -4377,6 +5083,18 @@ opener@^1.5.2: resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + os-browserify@0.3.0, os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" @@ -4399,6 +5117,13 @@ p-limit@3.1.0: dependencies: yocto-queue "^0.1.0" +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" @@ -4406,6 +5131,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" @@ -4425,6 +5157,11 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + p-try@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" @@ -4480,6 +5217,14 @@ parse-filepath@^1.0.2: map-cache "^0.2.0" path-root "^0.1.1" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-json@^5.0.0: version "5.2.0" resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" @@ -4516,6 +5261,11 @@ path-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" @@ -4548,6 +5298,13 @@ path-root@^0.1.1: dependencies: path-root-regex "^0.1.0" +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" @@ -4574,6 +5331,18 @@ pify@^2.3.0: resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + pkg-dir@^4.1.0: version "4.2.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" @@ -4581,6 +5350,13 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + platform@1.3.6: version "1.3.6" resolved "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz" @@ -4972,6 +5748,11 @@ postcss@^8.1.6, postcss@^8.2.1, postcss@^8.3.5: nanoid "^3.1.23" source-map-js "^0.6.2" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" @@ -4997,6 +5778,11 @@ process@0.11.10, process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -5202,6 +5988,23 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -5251,6 +6054,19 @@ regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regexp.prototype.flags@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + registry-auth-token@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" @@ -5322,6 +6138,11 @@ require-directory@^2.1.1: resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" @@ -5337,7 +6158,7 @@ resolve-from@^4.0.0: resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.1.7, resolve@^1.20.0: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.20.0: version "1.20.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -5345,6 +6166,14 @@ resolve@^1.1.7, resolve@^1.20.0: is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^2.0.0-next.3: + version "2.0.0-next.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" @@ -5383,9 +6212,9 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.0: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -5457,9 +6286,9 @@ semver-compare@^1.0.0: resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.6.0: version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: @@ -5467,6 +6296,13 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.2.1, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + sentence-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz" @@ -5622,6 +6458,32 @@ source-map@^0.6.0, source-map@^0.6.1: resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.10" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" + integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== + sponge-case@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/sponge-case/-/sponge-case-1.0.1.tgz" @@ -5629,6 +6491,11 @@ sponge-case@^1.0.1: dependencies: tslib "^2.0.3" +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + stacktrace-parser@0.1.10: version "0.1.10" resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" @@ -5726,6 +6593,20 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.matchall@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" + integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + get-intrinsic "^1.1.1" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" + string.prototype.trimend@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" @@ -5786,11 +6667,21 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" @@ -5909,6 +6800,18 @@ tabbable@^5.2.0: resolved "https://registry.npmjs.org/tabbable/-/tabbable-5.2.0.tgz" integrity sha512-0uyt8wbP0P3T4rrsfYg/5Rg3cIJ8Shl1RJ54QMqYxm1TLdWqJD1u6+RQjr2Lor3wmfT7JRHkirIwy99ydBsyPg== +table@^6.0.9: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + tailwindcss@^2.2.2: version "2.2.2" resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.2.tgz" @@ -5946,6 +6849,11 @@ tailwindcss@^2.2.2: resolve "^1.20.0" tmp "^0.2.1" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" @@ -6040,9 +6948,19 @@ ts-pnp@^1.1.6: resolved "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== -tslib@^1.9.0: +tsconfig-paths@^3.11.0, tsconfig-paths@^3.9.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz#954c1fe973da6339c78e06b03ce2e48810b65f36" + integrity sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2, tslib@^2.0.3, tslib@^2.1.0, tslib@~2.2.0: @@ -6065,6 +6983,13 @@ tslib@~2.3.0: resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" @@ -6075,6 +7000,18 @@ tty-browserify@0.0.1: resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz" integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" @@ -6146,6 +7083,13 @@ upper-case@^2.0.2: dependencies: tslib "^2.0.3" +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" @@ -6220,11 +7164,24 @@ uuidv4@^6.2.10: "@types/uuid" "8.3.1" uuid "8.3.2" +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + valid-url@1.0.9, valid-url@^1.0.9: version "1.0.9" resolved "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz" integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + value-or-promise@1.0.10: version "1.0.10" resolved "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.10.tgz" @@ -6317,6 +7274,11 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wrap-ansi@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz" @@ -6373,6 +7335,11 @@ yallist@^3.0.2: resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yaml-ast-parser@^0.0.43: version "0.0.43" resolved "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz" From 206b536a97ad000f79072f2ff7dda0a3a18ca918 Mon Sep 17 00:00:00 2001 From: quangnhan Date: Mon, 13 Sep 2021 10:02:16 +0700 Subject: [PATCH 010/100] bug: conflict --- .../common/TabCommon/components/TabItem/TabItem.tsx | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/components/common/TabCommon/components/TabItem/TabItem.tsx b/src/components/common/TabCommon/components/TabItem/TabItem.tsx index cc1737e44..49750dc55 100644 --- a/src/components/common/TabCommon/components/TabItem/TabItem.tsx +++ b/src/components/common/TabCommon/components/TabItem/TabItem.tsx @@ -1,9 +1,5 @@ import classNames from 'classnames' -<<<<<<< HEAD -import React, { RefObject, useRef } from 'react' -======= import React from 'react' ->>>>>>> 88f90912429447f6ae7bafa77484465965e0ee13 import s from './TabItem.module.scss' interface TabItemProps { @@ -32,8 +28,4 @@ const TabItem = ({ ) } -<<<<<<< HEAD export default TabItem -======= -export default TabItem ->>>>>>> 88f90912429447f6ae7bafa77484465965e0ee13 From 50725d982f616cd8f42dd7a34585b9993d8cf12d Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 10:30:09 +0700 Subject: [PATCH 011/100] styles: banner common --- pages/product/[slug].tsx | 5 ++-- src/components/common/Banner/Banner.tsx | 13 +++++++++- .../Banner/BannerItem/BannerItem.module.scss | 24 +++++++------------ .../ProductListBanner/ProductListBanner.tsx | 2 +- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx index c34394af5..d48c4b604 100644 --- a/pages/product/[slug].tsx +++ b/pages/product/[slug].tsx @@ -1,7 +1,7 @@ -import { Layout, RecipeDetail } from 'src/components/common' +import { Layout, RecipeDetail, RelevantBlogPosts } 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' +import { BLOGS_DATA_TEST, INGREDIENT_DATA_TEST, RECIPE_DATA_TEST } from 'src/utils/demo-data' export default function Slug() { return <> @@ -10,6 +10,7 @@ export default function Slug() { + } diff --git a/src/components/common/Banner/Banner.tsx b/src/components/common/Banner/Banner.tsx index 1dbc04d9f..9b6b1099a 100644 --- a/src/components/common/Banner/Banner.tsx +++ b/src/components/common/Banner/Banner.tsx @@ -11,13 +11,24 @@ const option = { breakpoints: {} } const Banner = memo(({ data }: Props) => { + if (data.length === 1) { + const item = data[0] + return + } return ( data={data} itemKey="banner" Component={BannerItem} option={option} - isDot = {true} + isDot={true} /> ) }) diff --git a/src/components/common/Banner/BannerItem/BannerItem.module.scss b/src/components/common/Banner/BannerItem/BannerItem.module.scss index 72690f92d..72a288374 100644 --- a/src/components/common/Banner/BannerItem/BannerItem.module.scss +++ b/src/components/common/Banner/BannerItem/BannerItem.module.scss @@ -1,31 +1,28 @@ @import "../../../../styles/utilities"; .bannerItem { - @apply bg-primary-light custom-border-radius-lg overflow-hidden; - @screen md { - border: 1px solid var(--primary); - } + @apply bg-primary-light shape-common-lg overflow-hidden; + padding: 0; &.large { margin-bottom: 2.8rem; .inner { - @screen xl { - @apply bg-right-bottom; - background-size: unset; - } + background-size: cover; + background-position: right bottom; } } .inner { @apply bg-no-repeat; background-size: 90%; - background-position: right -500% bottom 0%; + 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) 63%, rgb(227, 242, 233, 0) ); - padding: 1.6rem; + + padding: 2rem; + padding-bottom: 4rem; max-width: 37rem; @screen md { max-width: 49.6rem; @@ -38,9 +35,6 @@ } .subHeading { @apply sub-headline; - @screen md { - @apply caption; - } } } diff --git a/src/components/modules/product-list/ProductListBanner/ProductListBanner.tsx b/src/components/modules/product-list/ProductListBanner/ProductListBanner.tsx index 17d48d637..edeaa9f35 100644 --- a/src/components/modules/product-list/ProductListBanner/ProductListBanner.tsx +++ b/src/components/modules/product-list/ProductListBanner/ProductListBanner.tsx @@ -16,7 +16,7 @@ const ProductListBanner = ({ }: Props) => { subtitle: "Last call! Shop deep deals on 100+ bulk picks while you can.", imgLink: BannerRight.src, size: "large", - }, + } ] } /> From 0eddfe7c91638822ca9a2f64568965530089a848 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 10:30:19 +0700 Subject: [PATCH 012/100] styles: banner home --- .../modules/home/HomeBanner/HomeBanner.module.scss | 4 ++-- src/components/modules/home/HomeBanner/HomeBanner.tsx | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/modules/home/HomeBanner/HomeBanner.module.scss b/src/components/modules/home/HomeBanner/HomeBanner.module.scss index fdba411c0..a8b1b1d27 100644 --- a/src/components/modules/home/HomeBanner/HomeBanner.module.scss +++ b/src/components/modules/home/HomeBanner/HomeBanner.module.scss @@ -11,14 +11,14 @@ @apply grid; grid-template-columns: 1fr 1.8fr; .left { - @apply relative flex items-end justify-center custom-border-radius-lg; + @apply relative flex items-end justify-center shape-common-lg; margin-right: 1.6rem; .imgWrap { @apply absolute w-full h-full; top: 0; left: 0; > div { - @apply w-full h-full custom-border-radius-lg; + @apply w-full h-full shape-common-lg; } img { object-fit: cover; diff --git a/src/components/modules/home/HomeBanner/HomeBanner.tsx b/src/components/modules/home/HomeBanner/HomeBanner.tsx index 18432ec82..90732211a 100644 --- a/src/components/modules/home/HomeBanner/HomeBanner.tsx +++ b/src/components/modules/home/HomeBanner/HomeBanner.tsx @@ -1,9 +1,10 @@ import React from 'react' -import { Banner } from 'src/components/common' +import { Banner, StaticImage } from 'src/components/common' import BannerImgRight from './assets/banner_full.png' import HomeBannerImg from './assets/home_banner.png' import s from './HomeBanner.module.scss' import Image from 'next/image' +import { ROUTE } from 'src/utils/constanst.utils' interface Props { className?: string @@ -15,7 +16,7 @@ const HomeBanner = ({ }: Props) => {
- +
Freshness
guaranteed @@ -28,12 +29,14 @@ const HomeBanner = ({ }: Props) => { subtitle: "Last call! Shop deep deals on 100+ bulk picks while you can.", imgLink: BannerImgRight.src, size: "small", + linkButton: ROUTE.PRODUCTS, }, { title: "Save 15% on your first order 2", subtitle: "Last call! Shop deep deals on 100+ bulk picks while you can.", imgLink: BannerImgRight.src, size: "small", + linkButton: ROUTE.PRODUCTS, } ] } From 46233a1108f5025fdfde95fa7a2e35c3c5d7ffa4 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 11:51:46 +0700 Subject: [PATCH 013/100] styles: banner item --- .../Banner/BannerItem/BannerItem.module.scss | 15 +++++++-------- src/components/common/Header/Header.tsx | 2 ++ src/utils/funtion.utils.ts | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/components/common/Banner/BannerItem/BannerItem.module.scss b/src/components/common/Banner/BannerItem/BannerItem.module.scss index 72a288374..9331a7aff 100644 --- a/src/components/common/Banner/BannerItem/BannerItem.module.scss +++ b/src/components/common/Banner/BannerItem/BannerItem.module.scss @@ -7,20 +7,19 @@ margin-bottom: 2.8rem; .inner { background-size: cover; - background-position: right bottom; + background-position: center bottom; + @screen xl { + background-position: right bottom; + } } } .inner { @apply bg-no-repeat; background-size: 90%; - background-position: right -500% bottom 0%; + background-position: right -500% bottom 0%; .content { - background-image: linear-gradient( - to right, - rgb(227, 242, 233) 63%, - rgb(227, 242, 233, 0) - ); - + background-image: linear-gradient(to right, rgb(227, 242, 233) 63%, rgb(227, 242, 233, 0)); + padding: 2rem; padding-bottom: 4rem; max-width: 37rem; diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index 5b42c6aaf..42dffbe0f 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -41,6 +41,8 @@ const Header = memo(({ toggleFilter }: props) => { } else { setIsFullHeader(true) } + } else { + setIsFullHeader(true) } } window.addEventListener('scroll', handleScroll) diff --git a/src/utils/funtion.utils.ts b/src/utils/funtion.utils.ts index 619e9ae30..43d517589 100644 --- a/src/utils/funtion.utils.ts +++ b/src/utils/funtion.utils.ts @@ -1,5 +1,5 @@ export function isMobile() { - return window.innerWidth <= 768 + return window.innerWidth < 768 } export function removeItem(arr: Array, value: T): Array { From 829aeaa84778d73b390e8729c01b31ce1bcaf04f Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 12:07:55 +0700 Subject: [PATCH 014/100] styles: fix product detail img --- .../ProductImgItem/ProductImgItem.module.scss | 8 ++++++++ .../ProductImgItem/ProductImgItem.tsx | 19 +++++++++++++++++++ .../ProductImgs/ProductImgs.module.scss | 3 +++ .../components/ProductImgs/ProductImgs.tsx | 16 ++++++++++++---- 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.module.scss create mode 100644 src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.tsx diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.module.scss b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.module.scss new file mode 100644 index 000000000..5ce5cc0ce --- /dev/null +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.module.scss @@ -0,0 +1,8 @@ +.productImgItem { + @apply w-full h-full; + min-height: 30rem; + img { + object-fit: contain; + } +} + diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.tsx b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.tsx new file mode 100644 index 000000000..95236266c --- /dev/null +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.tsx @@ -0,0 +1,19 @@ +import React from 'react' +import { ImgWithLink } from 'src/components/common' +import s from './ProductImgItem.module.scss' + +export interface ProductImgItemProps { + src: string + alt?: string +} + + +const ProductImgItem = ({ src, alt }: ProductImgItemProps) => { + return ( +
+ +
+ ) +} + +export default ProductImgItem 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 a10eb5865..94ce13cc1 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 @@ -6,4 +6,7 @@ @screen lg { max-width: 60rem; } + > div { + width: 100%; + } } 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 325c6b453..9a6d3da75 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx @@ -1,6 +1,6 @@ import React from 'react' -import { CarouselCommon, ImgWithLink } from 'src/components/common' -import { ImgWithLinkProps } from 'src/components/common/ImgWithLink/ImgWithLink' +import { CarouselCommon } from 'src/components/common' +import ProductImgItem, { ProductImgItemProps } from '../ProductImgItem/ProductImgItem' import s from './ProductImgs.module.scss' interface Props { @@ -9,6 +9,10 @@ interface Props { } const DATA = [ + { + src: 'https://user-images.githubusercontent.com/76729908/133026929-199799fc-bd75-4445-a24d-15c0e41796eb.png', + alt: 'Meat', + }, { src: 'https://user-images.githubusercontent.com/76729908/130574371-3b75fa72-9552-4605-aba9-a4b31cd9dce7.png', alt: 'Broccoli', @@ -21,15 +25,18 @@ const DATA = [ const option = { slidesPerView: 1, + // mode: "free", + + } const ProductImgs = ({ }: Props) => { return (
- + data={DATA} itemKey="product-detail-img" - Component={ImgWithLink} + Component={ProductImgItem} option={option} isDot={true} /> @@ -38,3 +45,4 @@ const ProductImgs = ({ }: Props) => { } export default ProductImgs + From fa84e88212c8e48966add25e68994462cb8850ba Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 13:14:43 +0700 Subject: [PATCH 015/100] :art: styles: button common with shape common :%s --- pages/test.tsx | 5 + .../ButtonCommon/ButtonCommon.module.scss | 150 ++++++++++-------- .../common/ButtonCommon/ButtonCommon.tsx | 10 +- .../components/ProductImgs/ProductImgs.tsx | 3 - .../ProductInfo/ProductInfo.module.scss | 3 + src/styles/_utilities.scss | 4 +- 6 files changed, 104 insertions(+), 71 deletions(-) diff --git a/pages/test.tsx b/pages/test.tsx index 644dc08ed..aa3fd1780 100644 --- a/pages/test.tsx +++ b/pages/test.tsx @@ -78,6 +78,11 @@ export default function Test() { } return ( <> +
+
+ Lorem ipsum dolor sit amet. +
+
{/* */} {/* */} diff --git a/src/components/common/ButtonCommon/ButtonCommon.module.scss b/src/components/common/ButtonCommon/ButtonCommon.module.scss index c7b9f1ffa..41ecee010 100644 --- a/src/components/common/ButtonCommon/ButtonCommon.module.scss +++ b/src/components/common/ButtonCommon/ButtonCommon.module.scss @@ -1,102 +1,124 @@ @import "../../../styles/utilities"; .buttonCommon { - @apply custom-border-radius bg-primary transition-all duration-200 text-white font-bold; - display: flex; - justify-content: center; - align-items: center; - padding: 1rem 2rem; - @screen md { - padding: 0.8rem 1.6rem; - } - @screen lg { - padding: 0.8rem 3.2rem; - } - &:disabled { - filter: brightness(0.9); - cursor: not-allowed; - color: var(--disabled); - } - &:hover { - @apply shadow-md; - &:not(:disabled) { + @apply shape-common; + .inner { + padding: 1rem 2rem; + @apply bg-primary transition-all duration-200 text-white font-bold; + display: flex; + justify-content: center; + align-items: center; + @screen md { + padding: 1.6rem 1.6rem; + } + @screen lg { + padding: 1.6rem 3.2rem; + } + &:disabled { + filter: brightness(0.9); + cursor: not-allowed; + color: var(--disabled); + } + &:hover { + @apply shadow-md; + &:not(:disabled) { + filter: brightness(1.05); + } + } + &:focus { + outline: none; filter: brightness(1.05); } + &:focus-visible { + outline: 2px solid var(--text-active); + } } - &:focus { - outline: none; - filter: brightness(1.05); - } - &:focus-visible { - outline: 2px solid var(--text-active); - } - &.loading { - &::before { - content: ""; - border-radius: 50%; - width: 1.6rem; - height: 1.6rem; - border: 3px solid rgba(170, 170, 170, 0.5); - border-top: 3px solid var(--white); - -webkit-animation: spin 2s linear infinite; - animation: spin 2s linear infinite; - margin-right: 0.8rem; + .inner { + &::after { + content: ""; + border-radius: 50%; + width: 1.6rem; + height: 1.6rem; + border: 3px solid rgba(170, 170, 170, 0.5); + border-top: 3px solid var(--white); + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; + margin-right: 0.8rem; + } } } &.light { - @apply text-base bg-white; - border: 1px solid var(--text-active); + @apply shape-common-border; + &::before { + background-color: var(--text-active); + } + .inner { + @apply text-base bg-white; + } &.loading { - &::before { - border-top-color: var(--primary); + .inner { + &::after { + border-top-color: var(--primary); + } } } } &.lightBorderNone { - @apply bg-white text-primary; + .inner { + @apply bg-white text-primary; + } &.loading { - &::before { + .inner::after { border-top-color: var(--primary); } } } &.ghost { - @apply bg-white text-primary; - border: 1px solid var(--primary); + @apply shape-common-border; + .inner { + @apply bg-white text-primary; + } + &::before { + background-color: var(--primary); + } &.loading { - &::before { + .inner::after { border-top-color: var(--text-active); } } } &.onlyIcon { - padding: 0.8rem; - .icon { - margin: 0; + .inner { + padding: 1.6rem; + .icon { + margin: 0; + } } } &.large { - padding: 1rem 1.5rem; - &.onlyIcon { - padding: 1rem; - } - @screen md { - padding: 1.6rem 3.2rem; + .inner { + padding: 1rem 1.5rem; &.onlyIcon { - padding: 1.6rem; + padding: 1rem; + } + @screen md { + padding: 1.6rem 3.2rem; + &.onlyIcon { + padding: 1.6rem; + } + } + @screen lg { + padding: 1.6rem 4.8rem; } } - @screen lg { - padding: 1.6rem 4.8rem; - } &.loading { - &::before { + .inner::before { width: 2.4rem; height: 2.4rem; } @@ -104,9 +126,11 @@ } &.preserve { - flex-direction: row-reverse; - .icon { - margin: 0 0 0 1.6rem; + .inner { + flex-direction: row-reverse; + .icon { + margin: 0 0 0 1.6rem; + } } } diff --git a/src/components/common/ButtonCommon/ButtonCommon.tsx b/src/components/common/ButtonCommon/ButtonCommon.tsx index 5b943f65b..965e9519e 100644 --- a/src/components/common/ButtonCommon/ButtonCommon.tsx +++ b/src/components/common/ButtonCommon/ButtonCommon.tsx @@ -27,10 +27,12 @@ const ButtonCommon = memo(({ type = 'primary', size = 'default', loading = false disabled={disabled} onClick={onClick} > - { - icon && {icon} - } - {children} +
+ { + icon && {icon} + } + {children} +
) }) 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 9a6d3da75..c300fba38 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx @@ -25,9 +25,6 @@ const DATA = [ const option = { slidesPerView: 1, - // mode: "free", - - } const ProductImgs = ({ }: Props) => { 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 403782c51..2119b3295 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 @@ -64,6 +64,9 @@ margin-left: 0.8rem; } } + svg path { + fill: currentColor; + } } button { @apply w-full; diff --git a/src/styles/_utilities.scss b/src/styles/_utilities.scss index c73526a27..5ce5f24af 100644 --- a/src/styles/_utilities.scss +++ b/src/styles/_utilities.scss @@ -121,12 +121,13 @@ .shape-common-border { position: relative; - $border: 2px; + $border: 1px; margin: $border; .inner { background: var(--white); clip-path: url(#svg-custom-shape); + margin: 1px; } &::before { position: absolute; @@ -152,6 +153,7 @@ .inner { padding: 2rem; + margin: 1px; clip-path: url(#svg-custom-shape-lg); } &::before { From ab619e7f644dfa02d82db39369c71869778129d7 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 13:30:37 +0700 Subject: [PATCH 016/100] :art: styles: fix shape input common :%s --- .../InputCommon/InputCommon.module.scss | 45 ++++++++++--------- .../common/InputCommon/InputCommon.tsx | 7 +-- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/components/common/InputCommon/InputCommon.module.scss b/src/components/common/InputCommon/InputCommon.module.scss index 6b12d2bbd..1c64c764e 100644 --- a/src/components/common/InputCommon/InputCommon.module.scss +++ b/src/components/common/InputCommon/InputCommon.module.scss @@ -15,10 +15,10 @@ .icon + .inputCommon { padding-left: 4.8rem; } - + .inputCommon { @apply block w-full transition-all duration-200 rounded bg-white; - padding: 1.2rem 1.6rem; + padding: 1.6rem; border: 1px solid var(--border-line); &:hover, &:focus, @@ -31,24 +31,6 @@ &::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); - } - } } &.preserve { @@ -91,4 +73,27 @@ color: var(--negative); margin-top: 0.4rem; } + + &.custom { + @apply shape-common; + .inputCommon { + border: none; + background: var(--background-gray); + &:hover, + &:focus, + &:active { + @apply shadow-md; + border: none; + } + } + } + &.bgTransparent { + .inputCommon { + background: rgb(227, 242, 233, 0.3); + color: var(--white); + &::placeholder { + color: var(--white); + } + } + } } diff --git a/src/components/common/InputCommon/InputCommon.tsx b/src/components/common/InputCommon/InputCommon.tsx index 0389c99b3..fbe1df191 100644 --- a/src/components/common/InputCommon/InputCommon.tsx +++ b/src/components/common/InputCommon/InputCommon.tsx @@ -6,7 +6,7 @@ import s from './InputCommon.module.scss'; type Ref = { focus: () => void - getValue: () => string | number + getValue: () => string | number } | null; interface Props { children?: React.ReactNode, @@ -63,6 +63,9 @@ const InputCommon = forwardRef(({ value, placeholder, type, styleTyp return (
(({ value, placeholder, type, styleTyp onKeyDown={handleKeyDown} className={classNames({ [s.inputCommon]: true, - [s[styleType]]: true, - [s.bgTransparent]: backgroundTransparent })} />
From 6cdad60b0a87f9d9ec35a8fdc5f595c47acfcf6c Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 13:40:53 +0700 Subject: [PATCH 017/100] :art: styles: fix img, bg home categories section :%s --- src/components/common/InputCommon/InputCommon.tsx | 8 +++----- .../CategoriesItem/CategoryItem.module.scss | 2 +- .../home/HomeCategories/CategoriesItem/CategoryItem.tsx | 3 ++- .../home/HomeCategories/HomeCategories.module.scss | 4 ++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/components/common/InputCommon/InputCommon.tsx b/src/components/common/InputCommon/InputCommon.tsx index fbe1df191..7ef9d886f 100644 --- a/src/components/common/InputCommon/InputCommon.tsx +++ b/src/components/common/InputCommon/InputCommon.tsx @@ -1,6 +1,6 @@ import classNames from 'classnames'; -import React, { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react'; -import { IconCheck, IconError, IconPassword, IconPasswordCross } from 'src/components/icons'; +import React, { forwardRef, useImperativeHandle, useMemo, useRef } from 'react'; +import { IconCheck, IconError } from 'src/components/icons'; import { KEY } from 'src/utils/constanst.utils'; import s from './InputCommon.module.scss'; @@ -81,9 +81,7 @@ const InputCommon = forwardRef(({ value, placeholder, type, styleTyp placeholder={placeholder} onChange={handleChange} onKeyDown={handleKeyDown} - className={classNames({ - [s.inputCommon]: true, - })} + className={s.inputCommon} />
{ diff --git a/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.module.scss b/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.module.scss index 41d593b6e..ae2b758e1 100644 --- a/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.module.scss +++ b/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.module.scss @@ -2,7 +2,7 @@ .categoryItem { .categoryItemImage { - @apply transition-all duration-200; + @apply flex justify-center items-center transition-all duration-200; width: 10.6rem; margin: 0 auto; max-height: 14rem; diff --git a/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.tsx b/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.tsx index 64046c1b3..1f94e176e 100644 --- a/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.tsx +++ b/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.tsx @@ -4,6 +4,7 @@ import s from './CategoryItem.module.scss' import classNames from 'classnames'; import Image from "next/image"; import Link from 'next/link'; +import { StaticImage } from 'src/components/common'; interface CategoryItem { image: StaticImageData, @@ -17,7 +18,7 @@ const CategoryItem = ({ image, name, link }: CategoryItem) => { diff --git a/src/components/modules/home/HomeCategories/HomeCategories.module.scss b/src/components/modules/home/HomeCategories/HomeCategories.module.scss index 9865b95ed..f4135bd3c 100644 --- a/src/components/modules/home/HomeCategories/HomeCategories.module.scss +++ b/src/components/modules/home/HomeCategories/HomeCategories.module.scss @@ -4,7 +4,7 @@ margin: 3rem auto; .inner { - @apply relative spacing-horizontal; + @apply relative spacing-horizontal w-full; padding-top: 1.6rem; padding-bottom: 1.6rem; @@ -15,7 +15,7 @@ } @screen md { @apply relative; - margin: 5.6rem auto; + margin: 12.8rem auto; &::before, &::after { From d191ffc535cca035c542a65b34fdccf4ea110869 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 14:04:00 +0700 Subject: [PATCH 018/100] :art: styles: change img recipe to img common :%s --- .../RecipeDetailInfo.module.scss | 24 ++++++++++++------- .../RecipeDetailInfo/RecipeDetailInfo.tsx | 3 ++- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss index 86b525083..fe2c7224b 100644 --- a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss +++ b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss @@ -2,13 +2,16 @@ .recipeDetailInfo { @apply spacing-horizontal; - margin: 5.6rem auto; + margin: 0 auto 5.6rem; @screen md { @apply flex; + margin: 5.6rem auto; } + .img { - width: fit-content; + width: 100%; margin-top: 0; + min-height: 50rem; @screen sm-only { margin-bottom: 2rem; @@ -16,13 +19,16 @@ @screen lg { max-width: 60rem; } - img { - @apply w-full; - object-fit: contain; - max-height: 64rem; - border-radius: 2.4rem; - @screen md { - max-height: 90rem; + > div { + min-height: 64rem; + img { + // object-fit: contain; + // @apply w-full; + min-height: 64rem; + border-radius: 2.4rem; + // @screen md { + // max-height: 90rem; + // } } } } diff --git a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.tsx b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.tsx index 4d212e10a..a853ad869 100644 --- a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.tsx +++ b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.tsx @@ -1,4 +1,5 @@ import React from 'react' +import { ImgWithLink } from 'src/components/common' import RecipeBriefInfo from '../RecipeBriefInfo/RecipeBriefInfo' import s from './RecipeDetailInfo.module.scss' @@ -12,7 +13,7 @@ const RecipeDetailInfo = ({ }: Props) => { return (
- Recipe +
From 4512e8cf24ad66003e3eacdfc5bd73233fc68687 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 14:08:10 +0700 Subject: [PATCH 019/100] :art: styles: fix img height in cart product not sell :%s --- .../ProductNotSell/ProductNotSell.module.scss | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/components/common/ProductCard/ProductNotSell/ProductNotSell.module.scss b/src/components/common/ProductCard/ProductNotSell/ProductNotSell.module.scss index 4945220a9..963a602ec 100644 --- a/src/components/common/ProductCard/ProductNotSell/ProductNotSell.module.scss +++ b/src/components/common/ProductCard/ProductNotSell/ProductNotSell.module.scss @@ -1,8 +1,12 @@ @import "../../../../styles/utilities"; .imgWrap { - img { - opacity: 0.5; + > div { + min-height: 13rem; + img { + opacity: 0.5; + object-fit: contain + } } } @@ -11,7 +15,7 @@ } .info { - @apply flex justify-center items-center custom-border-radius bg-info-light text-center; + @apply flex justify-center items-center shape-common bg-info-light text-center; padding: .8rem 1.6rem; margin-top: 1.6rem; color: var(--info); From fc3ade50db98f032e350119dc413a5e9082c390e Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 14:50:28 +0700 Subject: [PATCH 020/100] :art: styles: product carousel responsive :%s --- .../ButtonCommon/ButtonCommon.module.scss | 5 +- .../ProductCard/ProductCard.module.scss | 49 ++++++++++++------- .../ProductCarousel/ProductCarousel.tsx | 9 ++-- 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/src/components/common/ButtonCommon/ButtonCommon.module.scss b/src/components/common/ButtonCommon/ButtonCommon.module.scss index 41ecee010..1c188af4b 100644 --- a/src/components/common/ButtonCommon/ButtonCommon.module.scss +++ b/src/components/common/ButtonCommon/ButtonCommon.module.scss @@ -94,7 +94,10 @@ &.onlyIcon { .inner { - padding: 1.6rem; + padding: 1rem; + @screen md { + padding: 1.6rem; + } .icon { margin: 0; } diff --git a/src/components/common/ProductCard/ProductCard.module.scss b/src/components/common/ProductCard/ProductCard.module.scss index cffbe063b..2e62cc4d5 100644 --- a/src/components/common/ProductCard/ProductCard.module.scss +++ b/src/components/common/ProductCard/ProductCard.module.scss @@ -1,5 +1,5 @@ -.productCardWarpper{ - max-width: 20.8rem; +.productCardWarpper { + max-width: 22.4rem; min-height: 31.8rem; padding: 1.2rem 1.2rem 0 1.2rem; margin: auto; @@ -8,47 +8,47 @@ &.notSell { @apply justify-center; } - .cardTop{ + .cardTop { @apply relative; height: 13.8rem; width: 100%; - .productImage{ + .productImage { height: 100%; width: 100%; @apply flex justify-center items-center; - img{ + img { @apply inline; } - &:hover{ + &:hover { cursor: pointer; } } - .productLabel{ + .productLabel { @apply absolute left-0 bottom-0; } } - .cardMid{ + .cardMid { min-height: 10.4rem; @apply flex flex-col justify-between; - .cardMidTop{ - .productname{ + .cardMidTop { + .productname { font-weight: bold; color: var(--text-active); - &:hover{ + &:hover { cursor: pointer; } } - .productWeight{ + .productWeight { font-size: 1.2rem; line-height: 2rem; letter-spacing: 0.01em; color: var(--text-base); } } - .cardMidBot{ + .cardMidBot { padding-top: 0.8rem; @apply flex justify-between items-center border-t border-solid border-line; - .productPrice{ + .productPrice { @apply font-bold; font-size: 2rem; line-height: 2.8rem; @@ -56,11 +56,24 @@ } } } - .cardBot{ + .cardBot { min-height: 4rem; - @apply flex justify-between items-center; - .cardIcon{ + @apply flex justify-between items-center; + .cardIcon { margin-right: 0.8rem; } + .cardButton { + button { + > div { + span { + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow-y: hidden; + text-overflow: ellipsis; + } + } + } + } } -} \ No newline at end of file +} diff --git a/src/components/common/ProductCarousel/ProductCarousel.tsx b/src/components/common/ProductCarousel/ProductCarousel.tsx index 533e81ed3..381fc2992 100644 --- a/src/components/common/ProductCarousel/ProductCarousel.tsx +++ b/src/components/common/ProductCarousel/ProductCarousel.tsx @@ -19,11 +19,12 @@ const OPTION_DEFAULT: TOptionsEvents = { slidesPerView: 3, }, '(min-width: 768px)': { - slidesPerView: 4, + slidesPerView: 3, }, - '(min-width: 1024px)': { - slidesPerView: 4.5, - },'(min-width: 1280px)': { + '(min-width: 1008px)': { + slidesPerView: 3.5, + }, + '(min-width: 1440px)': { slidesPerView: 5.5, }, }, From 9a385a3f14fba5bf89d77a46f97b1072b3c82437 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Mon, 13 Sep 2021 14:59:37 +0700 Subject: [PATCH 021/100] :ambulance: hotfix: Account Page --- .../AccountNavigation.module.scss | 51 ++++++++++--- .../AccountNavigation/AccountNavigation.tsx | 9 ++- .../AccountNavigationItem.module.scss | 17 ----- .../AccountNavigationItem.module.scss | 46 ++++++++++++ .../AccountNavigationItem.tsx | 0 .../account/AccountPage/AccountPage.tsx | 6 +- .../EditInfoModal/EditInfoModal.module.scss | 32 ++------ .../EditInfoModal/EditInfoModal.tsx | 74 ++++++++----------- .../OrderInformation.module.scss | 2 + .../OrderInformation/OrderInformation.tsx | 1 - .../IdAndStatus/IdAndStatus.module.scss | 37 ---------- 11 files changed, 131 insertions(+), 144 deletions(-) delete mode 100644 src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss create mode 100644 src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss rename src/components/modules/account/AccountNavigation/components/{ => AccountNavigationItem}/AccountNavigationItem.tsx (100%) diff --git a/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss b/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss index 8bece6668..eb255a3b4 100644 --- a/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss +++ b/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss @@ -1,27 +1,54 @@ @import '../../../../styles/utilities'; .accountNavigation { - @apply flex; + @apply relative; width: 100%; + @screen md { + @apply flex; + width: 100%; + } + .slider { - @apply inline-block; - width: 0.2rem; - height: 4.8rem; - border-radius: 3px; - background-color: var(--primary); - position: absolute; - left: 11.2rem; - transition: all .2s linear; + @apply hidden; + + @screen md { + @apply inline-block; + width: 0.2rem; + height: 4.8rem; + border-radius: 3px; + background-color: var(--primary); + position: absolute; + left: 0; + top: 450; + transition: all .2s linear; + } } .tabList { - margin-top: 3.8rem; - margin-right: 12.4rem; + @apply flex; + + @screen md { + @apply block; + margin-right: 0rem; + } + + @screen lg { + @apply block; + margin-right: 4.8rem; + } + + @screen xl { + @apply block; + margin-right: 12.4rem; + } } .tabBody { - margin-top: -4.7rem; width: 100%; + + @screen md { + margin-top: -8.6rem; + } } } \ No newline at end of file diff --git a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx index 013b4cbf1..a8da59211 100644 --- a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx +++ b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx @@ -1,7 +1,7 @@ import React, { useRef, useEffect, Children, ReactElement, PropsWithChildren, useState, cloneElement } from "react" import s from './AccountNavigation.module.scss' -import AccountNavigationItem from './components/AccountNavigationItem' +import AccountNavigationItem from './components/AccountNavigationItem/AccountNavigationItem' import {TabPaneProps} from '../../../common/TabCommon/components/TabPane/TabPane' interface AccountNavigationProps { @@ -21,10 +21,12 @@ const AccountNavigation = ({ defaultActiveIndex, children } : AccountNavigationP function slide(index: number) { const active = headerRef.current?.children.item(index)?.getBoundingClientRect() const header = headerRef.current?.getBoundingClientRect() + const firstEl = headerRef.current?.children.item(0)?.getBoundingClientRect() const current = sliderRef.current - if (current && active && header) { - const top = active.top; + if (current && active && header && firstEl) { + const firstElTop = firstEl.top + const top = active.top - firstElTop; current.style.top = top.toString()+"px"; } } @@ -63,7 +65,6 @@ const AccountNavigation = ({ defaultActiveIndex, children } : AccountNavigationP }) }
-
) } diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss deleted file mode 100644 index 10037cdc7..000000000 --- a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss +++ /dev/null @@ -1,17 +0,0 @@ -@import '../../../../../styles/utilities'; - -.accountNavigationItem { - width: 28rem; - padding: 1.2rem 0 1.2rem 1.6rem; - margin-bottom: 1.2rem; - - - &:hover { - @apply cursor-pointer; - } - - &.active { - background-color: #FBFBFB; - border-radius: 0 1.6rem 1.6rem 0; - } -} \ No newline at end of file diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss new file mode 100644 index 000000000..07952e6d8 --- /dev/null +++ b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss @@ -0,0 +1,46 @@ +@import '../../../../../../styles/utilities'; + +.accountNavigationItem { + @apply custom-border-radius; + width: fit-content; + padding: 1.2rem 1.6rem 1.2rem 0rem; + + margin-bottom: 1.2rem; + + &:hover { + @apply cursor-pointer; + } + + &.active { + @apply custom-border-radius font-bold; + background-color: var(--primary); + color: white; + padding: 1.2rem 1.6rem 1.2rem 1.6rem; + margin-right: 1.6rem; + + @screen md { + @apply font-normal; + background-color: #FBFBFB; + border-radius: 0 1.6rem 1.6rem 0; + color: #3D3D3D; + } + } + + @screen md { + max-width: 24rem; + min-width: 22rem; + padding: 1.2rem 1.6rem 1.2rem 1.6rem; + } + + @screen lg { + max-width: 26rem; + min-width: 23rem; + padding: 1.2rem 1.6rem 1.2rem 1.6rem; + } + + @screen xl { + max-width: 28rem; + min-width: 24rem; + padding: 1.2rem 1.6rem 1.2rem 1.6rem; + } +} \ No newline at end of file diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.tsx b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.tsx similarity index 100% rename from src/components/modules/account/AccountNavigation/components/AccountNavigationItem.tsx rename to src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.tsx diff --git a/src/components/modules/account/AccountPage/AccountPage.tsx b/src/components/modules/account/AccountPage/AccountPage.tsx index a5a0ef79d..3b0948c40 100644 --- a/src/components/modules/account/AccountPage/AccountPage.tsx +++ b/src/components/modules/account/AccountPage/AccountPage.tsx @@ -1,12 +1,12 @@ import React, { useState } from "react" import s from './AccountPage.module.scss' +import { HeadingCommon, TabPane } from "src/components/common" + import AccountNavigation from '../AccountNavigation/AccountNavigation' -import HeadingCommon from '../../../common/HeadingCommon/HeadingCommon' import AccountInfomation from "./components/AccountInfomation/AccountInfomation" import OrderInfomation from './components/OrderInformation/OrderInformation' import EditInfoModal from './components/EditInfoModal/EditInfoModal' -import TabPane from "src/components/common/TabCommon/components/TabPane/TabPane" const waiting = [ { @@ -46,7 +46,7 @@ interface AccountPageProps { defaultActiveContent?: "info" | "orders" | "favorites" } -const AccountPage = ({defaultActiveContent="orders"} : AccountPageProps) => { +const AccountPage = ({ defaultActiveContent="orders" } : AccountPageProps) => { const [activeTab] = useState(defaultActiveContent==="info" ? 0 : defaultActiveContent==="orders" ? 1 : 2) const [modalVisible, setModalVisible] = useState(false); diff --git a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss index be1384ab7..fb67ab24c 100644 --- a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss +++ b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss @@ -5,50 +5,30 @@ @apply bg-white; margin-bottom: 1.6rem; width: 100%; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; } .inputDisable { margin-bottom: 1.6rem; width: 100%; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; - background-color: #EBEBEB; color: #CCCCCC; } - .inputStateWrapper { - @apply bg-white; - margin-bottom: 1.6rem; - margin-right: 1.6rem; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; - - .inputState { - @apply bg-white cursor-pointer; - border: white; - } + .inputState { + @apply bg-white cursor-pointer; + border: white; + margin-right: 0.8rem; } .inputPostalCode { @apply bg-white; - margin-bottom: 1.6rem; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; + margin-left: 0.8rem; } .inputPhoneNumber { @apply bg-white; margin-bottom: 4rem; width: 100%; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; + margin-top: 1.6rem; } .buttons { diff --git a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx index d2be8b1a1..5f88df01b 100644 --- a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx +++ b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx @@ -1,10 +1,7 @@ -import classNames from "classnames" -import React, { useState } from "react" +import React from "react" import s from './EditInfoModal.module.scss' -import {ModalCommon, MenuDropdown} from '../../../../../common' - -import {ButtonCommon} from '../../../../../common' +import { ModalCommon, Inputcommon, SelectCommon } from '../../../../../common' interface EditInfoModalProps { accountInfo: {name: string, email: string, address: string, state: string, city: string, postalCode: string, phoneNumber: string}; @@ -14,14 +11,6 @@ interface EditInfoModalProps { const EditInfoModal = ({ accountInfo, visible = false, closeModal }: EditInfoModalProps) => { - const [name, setName] = useState(accountInfo.name); - const [email, setEmail] = useState(accountInfo.email); - const [address, setAddress] = useState(accountInfo.address); - const [state, setState] = useState(accountInfo.state); - const [city, setCity] = useState(accountInfo.city); - const [postalCode, setPostalCode] = useState(accountInfo.postalCode); - const [phoneNumber, setPhoneNumber] = useState(accountInfo.phoneNumber); - function saveInfo() { console.log("saved !!!"); @@ -29,46 +18,43 @@ const EditInfoModal = ({ accountInfo, visible = false, closeModal }: EditInfoMod } const states = [ - {name: "D1", onClick: () => {setState("D1")}}, - {name: "D2", onClick: () => {setState("D2")}}, - {name: "D3", onClick: () => {setState("D3")}} + {name: "District 1", value: "D1"}, + {name: "District 2", value: "D2"}, + {name: "District 3", value: "D3"} ] return (
-
- {setName(e.target.value)}} /> +
+
-
- {setEmail(e.target.value)}} /> -
-
- {setAddress(e.target.value)}}/> -
-
- {setCity(e.target.value)}} /> -
-
-
- - - -
- - {setPostalCode(e.target.value)}} /> +
+ +
+ +
+
-
- {setPhoneNumber(e.target.value)}} /> +
+ +
+ + +
+
+ +
+ +
+ +
+
+ +
+
diff --git a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.module.scss b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.module.scss index 0096a67d7..cfa30c6ad 100644 --- a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.module.scss +++ b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.module.scss @@ -8,6 +8,8 @@ .tabs { margin-top: 3.2rem; + width: 100%; + border-bottom: black; .blank { margin-bottom: 2.4rem; diff --git a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx index 76985b9fd..98f305b9e 100644 --- a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx +++ b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx @@ -10,7 +10,6 @@ interface OrderInformationProps { waiting: {id: string, products: string[], totalPrice: number}[], delivering: {id: string, products: string[], totalPrice: number}[], delivered: {id: string, products: string[], totalPrice: number}[], - // active?: boolean } const OrderInformation = ({ waiting, delivering, delivered} : OrderInformationProps) => { diff --git a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss index d50ecd115..bc0d692b3 100644 --- a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss +++ b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss @@ -1,42 +1,5 @@ @import '../../../../../../styles/utilities'; -.idAndStatus { - @apply items-center; - padding: 2.4rem 0 2.4rem 1rem; - - @screen md { - padding: 2.4rem 0 2.4rem 1.2rem; - } - - @screen lg { - padding: 2.4rem 0 2.4rem 2.4rem; - } - - .id { - @apply font-bold; - margin-bottom: .8rem; - } - - .deliveryStatus { - @apply font-bold text-white; - font-size: 1.2rem; - line-height: 2rem; - padding: 0 .8rem; - border-radius: 0.5rem; - width: fit-content; - - &.waiting { - background-color: #D9A645; - } - &.delivering { - background-color: var(--info-dark); - } - &.delivered { - background-color: var(--primary); - } - } -}@import '../../../../../../styles/utilities'; - .idAndStatus { @apply items-center; padding: 2.4rem 0 2.4rem 1rem; From 4cc6255717bed7ef09cf11307c449273f35e717f Mon Sep 17 00:00:00 2001 From: Quangnhankie Date: Mon, 13 Sep 2021 15:17:56 +0700 Subject: [PATCH 022/100] bug: edit tag img to ImageWithLink --- pages/test.tsx | 12 ++++++++++-- .../common/Author/Author.module.scss | 6 +++++- src/components/common/Author/Author.tsx | 5 ++++- .../BlogContent/BlogContent.module.scss | 13 +++++++------ .../blog-detail/BlogContent/BlogContent.tsx | 7 +++++-- .../BlogDetailImg/BlogDetailImg.module.scss | 12 ++++++++---- .../BlogDetailImg/BlogDetailImg.tsx | 5 ++++- ...n-ngon-noi-tieng-khong-an-that-co-loi-2.jpg | Bin 0 -> 182249 bytes .../RecipesItem/RecipesItem.module.scss | 11 ++++++----- .../RecipesList/RecipesItem/RecipesItem.tsx | 3 ++- 10 files changed, 51 insertions(+), 23 deletions(-) create mode 100644 src/components/modules/blog-detail/BlogDetailImg/img/tong-hop-21-dac-san-sai-gon-ngon-noi-tieng-khong-an-that-co-loi-2.jpg diff --git a/pages/test.tsx b/pages/test.tsx index 644dc08ed..47ea40ce2 100644 --- a/pages/test.tsx +++ b/pages/test.tsx @@ -82,9 +82,17 @@ export default function Test() { {/* */} {/**/} - - + {/* + */} {/* */} +
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit. Fugit maiores aut, delectus assumenda explicabo, dolore facilis, quasi quae sed obcaecati doloribus dolorum architecto aperiam nisi dignissimos consequuntur amet neque possimus. +
+
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Temporibus, porro aut. Quas, consequuntur! Officiis magni cum placeat magnam ut hic beatae error facere obcaecati. Labore eius explicabo fugit minus veritatis. +
+
) } diff --git a/src/components/common/Author/Author.module.scss b/src/components/common/Author/Author.module.scss index 8d903546f..5a2dad969 100644 --- a/src/components/common/Author/Author.module.scss +++ b/src/components/common/Author/Author.module.scss @@ -2,11 +2,15 @@ .authorWarper{ @apply flex flex-row items-center; - .authorImage{ + .authorImage { width:3.2rem; height:3.2rem; border-radius:3.2rem; + div{ + min-width:3.2rem !important; + } } + .authorName{ margin-left:1rem; color:var(--text-label); diff --git a/src/components/common/Author/Author.tsx b/src/components/common/Author/Author.tsx index 1cf8e52af..6ec347b2c 100644 --- a/src/components/common/Author/Author.tsx +++ b/src/components/common/Author/Author.tsx @@ -1,6 +1,7 @@ import React from 'react'; import s from './Author.module.scss'; import classNames from 'classnames'; +import ImgWithLink from "../ImgWithLink/ImgWithLink"; interface Props { image:string, @@ -11,7 +12,9 @@ const Author = ({image,name}:Props) =>{ return (
- +
+ +
{name}
) diff --git a/src/components/modules/blog-detail/BlogContent/BlogContent.module.scss b/src/components/modules/blog-detail/BlogContent/BlogContent.module.scss index e081b5f15..7904c99aa 100644 --- a/src/components/modules/blog-detail/BlogContent/BlogContent.module.scss +++ b/src/components/modules/blog-detail/BlogContent/BlogContent.module.scss @@ -31,12 +31,13 @@ padding: 2rem 0; } .content{ - - - - img{ - width: 100%; - border-radius: 2.4rem; + figure{ + div{ + width: 100%; + border-radius: 2.4rem; + min-height: 45.2rem; + object-fit: cover; + } } } .boxShare{ diff --git a/src/components/modules/blog-detail/BlogContent/BlogContent.tsx b/src/components/modules/blog-detail/BlogContent/BlogContent.tsx index 17d8555ae..cb9d6b8d8 100644 --- a/src/components/modules/blog-detail/BlogContent/BlogContent.tsx +++ b/src/components/modules/blog-detail/BlogContent/BlogContent.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Author, DateTime } from "src/components/common"; +import { Author, DateTime, ImgWithLink } from "src/components/common"; import IconFacebook from 'src/components/icons/IconFacebook'; import IconInstagram from 'src/components/icons/IconInstagram'; import IconTwitter from 'src/components/icons/IconTwitter'; @@ -55,7 +55,10 @@ const BlogContent = ({}:BlogContentProps) => { You can eat broccoli stems. In fact, they are delicious. Just use a peeler to peel off the outsides and then trim the stalks into small 1/4”-1/2” cubes.


- blog-detail + +
+ +
diff --git a/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss index 98206b439..aad3aebbf 100644 --- a/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss +++ b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss @@ -3,10 +3,14 @@ padding-bottom: 3.2rem; } .image{ - width: 100%; - padding: 0 2rem; - margin-bottom: 2rem; - border-radius: 2.4rem; + div{ + width: 100%; + padding: 0 2rem; + margin-bottom: 2rem; + border-radius: 2.4rem; + min-height: 45.2rem; + } + @screen md { width: 90%; margin:0 auto; diff --git a/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx index b7eb6aaef..ed9b88a29 100644 --- a/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx +++ b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx @@ -1,5 +1,6 @@ import React from 'react'; +import { ImgWithLink } from 'src/components/common'; import BreadcrumbCommon from 'src/components/common/BreadcrumbCommon/BreadcrumbCommon'; import s from './BlogDetailImg.module.scss'; interface Props { @@ -19,7 +20,9 @@ const BlogDetailImg = ({}:Props ) => {
- Ảnh đại diện +
+ +
) } diff --git a/src/components/modules/blog-detail/BlogDetailImg/img/tong-hop-21-dac-san-sai-gon-ngon-noi-tieng-khong-an-that-co-loi-2.jpg b/src/components/modules/blog-detail/BlogDetailImg/img/tong-hop-21-dac-san-sai-gon-ngon-noi-tieng-khong-an-that-co-loi-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca84eae9268914b2e1fc20d24cb75ac489a9d720 GIT binary patch literal 182249 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

jP6g#k!8yi&=v2eWkl^xDuT#Hk!Ak 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

xUX$v0`nMphjAU-CJHsTzLgw+&`sx zWTE)rbWhXOE8AU(bary>OH4V8dgs_41+^^z`m}g1z62lPfoHYV>Z)ElfOAXHn_}P< z70{+7)AAs!f2m3jLY1qi^GW`AY>}h_iY>3wQ*z<5RqAn|+oc}1on_5Tqz?t2s8_)B z!ZwDLB%-4uB2#>cO|96Ha8Y5&Cgm_{4rGh>rX> z0^Ff&l?^SZ{{Tp$h$tQy=08nUiYryV@|3@~X6A>QNeeJ#r$Hmk5nXzJx}z9%DT48; z*h8c27G=jB%?s8KZ%1TSz1<53LHK80m~?BMrzNdQX5H4xBq2;Rr(>3T#S*lHhCE}s zbq~uY{I&Rea~K9nbW4JUs$G^O6g-xsUABDQ@83h0MkK>|Uq@+6Pzxy?XiZZ}`Qb=w z)owpD&|6mYJ8id#PrUo2yRom$AxM_eQ~v;?DX&t?3N+H9oR30Ng=EuA63wk~S($MU zu-Ydws9$p-#723r+S3|BPv*GVQnRi)kNJrQNI9g}EDT!Cr5firQ%I_Q?b$bI$Z)f6 zRmQ~ffw&|sEtXwP0Tp>^DhkO+AZrIIVJi|uo}5BL@B%$p6jE(d6ZYs*9a~-9cE^?g zb5J?9;7Y)$PD&%w@;G?CYdV}$8wu!>!r(6M?7ItVW#?9;-t8=;DGeVLwBc|iNdDxL zPmOcHRwTB*-abFUN4M$oO~pHJLybRYjHh8O=hG$-AU1`Msck9609icP@h_e0U3y9g#l4FH&Y(N?lqhiex+gRCKB82VPM zCZ&F(ZEDjg@477aY|^w617O#&Eh?glN^(M#OuiJsE%I4#6#njOZvN%HxmfN()37EsDviK?d^l2Riv!^O`7;!Yyif#Q#)P$kP4496& z9reE3aMF|ox``F49*RP>mDeREoj>Wo^lDY5{TG)@T4k*FD)f4h;rNTaT-=q zhrj8sT4^*n0_H{fPxD2;S5)-0yCKNYp*H80_)&KjXp`z`ri$Jzll288fO=OF4XnIZN^7_c!m5H&5oa3R9-Jk~}lDwOg)-5aNYY={c=S01&ScL4leDQctZ` zfm8jXsk-@8kNM!n`6U`i`g2(!DbG;tfT9npEo0^Cr{YC?fyVVd3od)KG8`hDp;Dp33D_NlR63wM&(u)%~=oH2zr2+Rqh)m2gsvF6%;4 z=kyG#PveZj7LH9v>rq~wK3I2;B!t5ZQgRG{=bH9axpk*`&uEGxV;t;3c>N($IL0Z*7q>wTI4+HSSl+@Il?g_378-;omQ~-Ws{uuM=g%ef5DIM)Ks?V=a zL;auf{#ZKSAe#v*YBsGeYOak6(_WSMd~v0~3l%Fe%Z0RuQ>0K)RRrL8GsSMeI+d>O zu%Vz;6dCwe4s8J#;56WnB$s=psmuO2UBFQ=zcinov8;IJ4^QWVhtg=ZDNQ95Z_=86 z6u@4k<*6>6!Aeu%(*#*{UMo)p1?BA^AE=O@1M$YP5(W#)(Mwb`Str0#3AN6yOABs4 z)Xo99`j%4Z?UvlB120J(e+pqFqbRaAnB;nv0>7O1ZVVu9BmfA8N zr4{Y&+~CGx=n>w%ZD}j2A;~Fa_|8`_(w3xa73o9r!xht8)Ts@zJrmx_tCLd0wnP~* zR)hBuoT5v9D-M+q+LhpwP_KnB(C|7UU7ji5E!#`cR4!3WM=GBBiuHoC(@v6ld5__M z-sg;l3k|Agsi?8pb=!25&$R0N=*tRi%AcpUqMVdJ=&gKlh_lBu;`C-EZTy&-xt-Bg-hU~FoUYX=C?$tm*O+8)E zswYi4>c%i$WpPEVu=e3k`nzOJaP^eUwJl(yK?(K6ab+L@)QrcG!#(XZl%zzH>PB=d zIM7UnOn86(BFI&870RUl031go0UE`zYI5Tp30x@hC)*UIB}|1BEh`;X(OFGF9RiQb z0xjgK`+G8b_GM{VdBr*UYfK;YC|MclJ#_)ssKyEq4^nwXlOfnF!rm6+8d4GjE7L1& zPOmRXaj>$ms#3Hc^C(CgMDYo59-LD9X5iTnEW2b<%7i^0V5^<*)V {

From 0369e1dd25dd5d52ae1797f3403dd58a41842362 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 15:18:51 +0700 Subject: [PATCH 023/100] :art: styles: change shape component list product with info :%s --- .../ListProductWithInfo.module.scss | 19 ++++++------------- .../ListProductWithInfo.tsx | 12 +++++++++--- .../ProductCarousel/ProductCarousel.tsx | 9 ++++++--- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss b/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss index ddd8ed901..6acb4aed0 100644 --- a/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss +++ b/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss @@ -17,8 +17,11 @@ @apply spacing-horizontal-left; @screen lg { max-width: 75%; - @apply custom-border-radius-lg bg-white; - padding: 4rem .8rem; + padding: 0 .8rem; + > div > div { + @apply shape-common-lg bg-white; + padding: 4rem 0; + } :global(.customArrow) { @screen lg { &:global(.leftArrow) { @@ -31,18 +34,8 @@ } } @screen xl { - padding: 4rem 2.4rem; + padding: 0 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 66b8253d1..2200fd71e 100644 --- a/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx +++ b/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx @@ -18,12 +18,18 @@ const OPTION_DEFAULT: TOptionsEvents = { slidesPerView: 3, }, '(min-width: 768px)': { - slidesPerView: 4, - }, - '(min-width: 1024px)': { slidesPerView: 3, }, + '(min-width: 1008px)': { + slidesPerView: 3.5, + }, + '(min-width: 1024px)': { + slidesPerView: 2.5, + }, '(min-width: 1280px)': { + slidesPerView: 3.5, + }, + '(min-width: 1440px)': { slidesPerView: 4.5, }, }, diff --git a/src/components/common/ProductCarousel/ProductCarousel.tsx b/src/components/common/ProductCarousel/ProductCarousel.tsx index 381fc2992..8252e08a6 100644 --- a/src/components/common/ProductCarousel/ProductCarousel.tsx +++ b/src/components/common/ProductCarousel/ProductCarousel.tsx @@ -7,9 +7,9 @@ import ProductCard, { ProductCardProps } from '../ProductCard/ProductCard' import s from "./ProductCarousel.module.scss" interface ProductCarouselProps - extends Omit, 'Component'|"option"> { - option?:TOptionsEvents - } + extends Omit, 'Component' | "option"> { + option?: TOptionsEvents +} const OPTION_DEFAULT: TOptionsEvents = { slidesPerView: 2, @@ -24,6 +24,9 @@ const OPTION_DEFAULT: TOptionsEvents = { '(min-width: 1008px)': { slidesPerView: 3.5, }, + '(min-width: 1280px)': { + slidesPerView: 4.5, + }, '(min-width: 1440px)': { slidesPerView: 5.5, }, From 022c905d82fd7c5be5244c9ec85947894f066f9f Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 15:27:19 +0700 Subject: [PATCH 024/100] :art: styles: border viewed product in product detail :%s --- pages/product/[slug].tsx | 2 +- .../ListProductWithInfo/ListProductWithInfo.module.scss | 6 ++++-- .../common/ListProductWithInfo/ListProductWithInfo.tsx | 9 +++++++-- .../product-detail/ViewedProducts/ViewedProducts.tsx | 1 + 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx index d48c4b604..dd06bb337 100644 --- a/pages/product/[slug].tsx +++ b/pages/product/[slug].tsx @@ -10,7 +10,7 @@ export default function Slug() { - + } diff --git a/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss b/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss index 6acb4aed0..9697a8ead 100644 --- a/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss +++ b/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss @@ -3,9 +3,11 @@ .listProductWithInfo { background-color: var(--background); border-top: 1rem solid var(--gray); - border-bottom: 1rem solid var(--gray); padding-top: 6rem; padding-bottom: 6rem; + &.borderBottom { + border-bottom: 1rem solid var(--gray); + } @screen lg { @apply flex spacing-horizontal-left; padding-top: 5.6rem; @@ -17,7 +19,7 @@ @apply spacing-horizontal-left; @screen lg { max-width: 75%; - padding: 0 .8rem; + padding: 0 0.8rem; > div > div { @apply shape-common-lg bg-white; padding: 4rem 0; diff --git a/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx b/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx index 2200fd71e..0bbd1df65 100644 --- a/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx +++ b/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx @@ -1,3 +1,4 @@ +import classNames from 'classnames'; import { TOptionsEvents } from 'keen-slider'; import React from 'react'; import CarouselCommon from '../CarouselCommon/CarouselCommon'; @@ -9,6 +10,7 @@ interface Props { data: ProductCardProps[], title: string, subtitle?: string, + hasBorderBottomMobile?: boolean, } const OPTION_DEFAULT: TOptionsEvents = { slidesPerView: 2, @@ -35,9 +37,12 @@ const OPTION_DEFAULT: TOptionsEvents = { }, } -const ListProductWithInfo = ({ data, title, subtitle }: Props) => { +const ListProductWithInfo = ({ data, title, subtitle, hasBorderBottomMobile }: Props) => { return ( -
+
{ title="viewed Products" subtitle="Last call! Shop deep deals on 100+ bulk picks while you can." data={PRODUCT_DATA_TEST} + hasBorderBottomMobile={true} /> ); }; From a3240ab05942a59eb638d3c72e1e78c8f63c47ac Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 15:38:31 +0700 Subject: [PATCH 025/100] :art: styles: page product detail :%s --- pages/product/[slug].tsx | 2 +- .../common/ButtonCommon/ButtonCommon.module.scss | 9 ++++++--- .../ListProductWithInfo/ListProductWithInfo.module.scss | 3 +++ .../RecipeDetailInfo/RecipeDetailInfo.module.scss | 5 ++++- .../components/ProductInfo/ProductInfo.module.scss | 7 +++++-- 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx index dd06bb337..5413c686a 100644 --- a/pages/product/[slug].tsx +++ b/pages/product/[slug].tsx @@ -10,7 +10,7 @@ export default function Slug() { - + } diff --git a/src/components/common/ButtonCommon/ButtonCommon.module.scss b/src/components/common/ButtonCommon/ButtonCommon.module.scss index 1c188af4b..a0c33947d 100644 --- a/src/components/common/ButtonCommon/ButtonCommon.module.scss +++ b/src/components/common/ButtonCommon/ButtonCommon.module.scss @@ -106,7 +106,7 @@ &.large { .inner { - padding: 1rem 1.5rem; + padding: 1rem 1.6rem; &.onlyIcon { padding: 1rem; } @@ -139,8 +139,11 @@ .icon { margin: 0 1.6rem 0 0; - svg path { - fill: currentColor; + svg { + height: 2rem; + path { + fill: currentColor; + } } } } diff --git a/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss b/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss index 9697a8ead..de7b96d3d 100644 --- a/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss +++ b/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss @@ -7,6 +7,9 @@ padding-bottom: 6rem; &.borderBottom { border-bottom: 1rem solid var(--gray); + @screen lg { + border-bottom: none; + } } @screen lg { @apply flex spacing-horizontal-left; diff --git a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss index fe2c7224b..94647504d 100644 --- a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss +++ b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss @@ -7,7 +7,7 @@ @apply flex; margin: 5.6rem auto; } - + .img { width: 100%; margin-top: 0; @@ -61,6 +61,9 @@ list-style: disc; margin-left: 2rem; } + a { + color: var(--info); + } } } } 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 2119b3295..4235edf66 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 @@ -64,8 +64,11 @@ margin-left: 0.8rem; } } - svg path { - fill: currentColor; + svg { + height: 2rem; + path { + fill: currentColor; + } } } button { From 42207a0756bec3adeaf90ecb46ba101cf8646689 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Mon, 13 Sep 2021 15:45:50 +0700 Subject: [PATCH 026/100] :sparkles: feat: Loading Common --- .../LoadingCommon/LoadingCommon.module.scss | 9 +++++---- .../common/LoadingCommon/LoadingCommon.tsx | 10 ++-------- .../common/LoadingCommon/assets/broccoli.png | Bin 0 -> 2458 bytes .../common/LoadingCommon/assets/carrot.png | Bin 0 -> 2096 bytes 4 files changed, 7 insertions(+), 12 deletions(-) create mode 100644 src/components/common/LoadingCommon/assets/broccoli.png create mode 100644 src/components/common/LoadingCommon/assets/carrot.png diff --git a/src/components/common/LoadingCommon/LoadingCommon.module.scss b/src/components/common/LoadingCommon/LoadingCommon.module.scss index f8bca225d..e1882523c 100644 --- a/src/components/common/LoadingCommon/LoadingCommon.module.scss +++ b/src/components/common/LoadingCommon/LoadingCommon.module.scss @@ -2,12 +2,14 @@ .loadingCommon:empty { @apply bg-white; + height: 7rem; + width: 7rem; border-radius: 50%; - border: .7rem solid var(--primary-lightest); - border-top: .7rem solid var(--primary); animation: spin 2s linear infinite; margin: auto; + background: url('./assets/carrot.png') top 50% left 50% no-repeat; + @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } @@ -19,8 +21,7 @@ } &.default { - height: 7rem; - width: 7rem; + } &.large { diff --git a/src/components/common/LoadingCommon/LoadingCommon.tsx b/src/components/common/LoadingCommon/LoadingCommon.tsx index 20377c0ed..79993507e 100644 --- a/src/components/common/LoadingCommon/LoadingCommon.tsx +++ b/src/components/common/LoadingCommon/LoadingCommon.tsx @@ -1,23 +1,17 @@ -import classNames from "classnames"; import React from "react"; import s from './LoadingCommon.module.scss' interface LoadingCommonProps { - size?: "small" | "default" | "large", children? : React.ReactNode; } -const LoadingCommon = ({ size="default", children }: LoadingCommonProps) => { +const LoadingCommon = ({ children }: LoadingCommonProps) => { return ( <> - { -
+
{children}
- } ) } diff --git a/src/components/common/LoadingCommon/assets/broccoli.png b/src/components/common/LoadingCommon/assets/broccoli.png new file mode 100644 index 0000000000000000000000000000000000000000..9080e23362d4408ad522ea8660adc31684f2dff8 GIT binary patch literal 2458 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 Date: Mon, 13 Sep 2021 15:46:08 +0700 Subject: [PATCH 027/100] :sparkles: feat: Skeleton Common --- .../SkeletonCommon/SkeletonCommon.module.scss | 32 ---------- .../common/SkeletonCommon/SkeletonCommon.tsx | 17 ----- .../SkeletonImage/SkeletonImage.module.scss | 53 ++++++++++++++++ .../SkeletonImage/SkeletonImage.tsx | 22 +++++++ .../SkeletonParagraph.module.scss | 63 +++++++++++++++++++ .../SkeletonParagraph/SkeletonParagraph.tsx | 31 +++++++++ .../SkeletonAvatar/SkeletonAvatar.module.scss | 51 --------------- .../SkeletonAvatar/SkeletonAvatar.tsx | 25 -------- .../SkeletonParagraph.module.scss | 41 ------------ .../SkeletonParagraph/SkeletonParagraph.tsx | 30 --------- .../SkeletonTitle/SkeletonTitle.module.scss | 27 -------- .../SkeletonTitle/SkeletonTitle.tsx | 28 --------- 12 files changed, 169 insertions(+), 251 deletions(-) delete mode 100644 src/components/common/SkeletonCommon/SkeletonCommon.module.scss delete mode 100644 src/components/common/SkeletonCommon/SkeletonCommon.tsx create mode 100644 src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.module.scss create mode 100644 src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.tsx create mode 100644 src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.module.scss create mode 100644 src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.tsx delete mode 100644 src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.module.scss delete mode 100644 src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.tsx delete mode 100644 src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.module.scss delete mode 100644 src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.tsx delete mode 100644 src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.module.scss delete mode 100644 src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.tsx diff --git a/src/components/common/SkeletonCommon/SkeletonCommon.module.scss b/src/components/common/SkeletonCommon/SkeletonCommon.module.scss deleted file mode 100644 index e388525e5..000000000 --- a/src/components/common/SkeletonCommon/SkeletonCommon.module.scss +++ /dev/null @@ -1,32 +0,0 @@ -@import '../../../styles/utilities'; - -$base-color: #ddd; -$shine-color: #e8e8e8; -$animation-duration: 1.6s; - -@mixin background-gradient { - background-image: linear-gradient(90deg, $base-color 0px, $shine-color 40px, $base-color 80px) ; - background-size: 600px; -} - -.skeletonCommon:empty { - margin: auto; - height: 14rem; - width: 14rem; - animation: name duration timing-function delay iteration-count direction fill-mode; - - @include background-gradient; - animation: shine-lines $animation-duration infinite linear; -} - -@keyframes shine-lines { - 0% { - background-position: -100px; - } - 40% { - background-position: 140px; - } - 100% { - background-position: 140px; - } -} \ No newline at end of file diff --git a/src/components/common/SkeletonCommon/SkeletonCommon.tsx b/src/components/common/SkeletonCommon/SkeletonCommon.tsx deleted file mode 100644 index 6b0631aef..000000000 --- a/src/components/common/SkeletonCommon/SkeletonCommon.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; -import s from './SkeletonCommon.module.scss' - -interface SkeletonCommonProps { - children? : React.ReactNode; -} - -const SkeletonCommon = ({ children }: SkeletonCommonProps) => { - - return ( -
- {children} -
- ) -} - -export default SkeletonCommon \ No newline at end of file diff --git a/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.module.scss b/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.module.scss new file mode 100644 index 000000000..57fdf3ebc --- /dev/null +++ b/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.module.scss @@ -0,0 +1,53 @@ +@import '../../../../styles/utilities'; + +.skeletonImage:empty { + @apply relative; + background: #DDDBDD; + + &.small { + width: 10rem; + height: 10rem; + } + + &.default { + width: 15rem; + height: 15rem; + } + + &.large { + width: 20rem; + height: 20rem; + } + + &.left { + margin-left: 0; + } + + &.center { + margin: auto; + } + + &::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + transform: translateX(-100%); + background-image: linear-gradient( + 90deg, + rgba(#fff, 0) 0, + rgba(#fff, 0.2) 20%, + rgba(#fff, 0.5) 60%, + rgba(#fff, 0) + ); + animation: shimmer 2s infinite; + content: ''; + } +} + +@keyframes shimmer { + 100% { + transform: translateX(100%); + } +} diff --git a/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.tsx b/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.tsx new file mode 100644 index 000000000..7ab20b037 --- /dev/null +++ b/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.tsx @@ -0,0 +1,22 @@ +import classNames from "classnames"; +import React from "react"; +import s from './SkeletonImage.module.scss' + +interface SkeletonImageProps { + align?: "left" | "center" + size?: "small" | "default" | "large" + children?: React.ReactNode +} + +const SkeletonImage = ({ align="center", size="default", children }: SkeletonImageProps) => { + return ( +
+ {children} +
+ ) +} + +export default SkeletonImage \ No newline at end of file diff --git a/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.module.scss b/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.module.scss new file mode 100644 index 000000000..2c98d00e5 --- /dev/null +++ b/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.module.scss @@ -0,0 +1,63 @@ +@import '../../../../styles/utilities'; + +.skeletonParagraph { + .row { + display: inline-block; + height: 2rem; + width: 100%; + position: relative; + overflow: hidden; + background-color: #DDDBDD; + + &::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + transform: translateX(-100%); + background-image: linear-gradient( + 90deg, + rgba(#fff, 0) 0, + rgba(#fff, 0.2) 20%, + rgba(#fff, 0.5) 60%, + rgba(#fff, 0) + ); + animation: shimmer 2s infinite; + content: ''; + } + } + + .lastRow { + display: inline-block; + height: 2rem; + width: 80%; + position: relative; + overflow: hidden; + background-color: #DDDBDD; + + &::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + transform: translateX(-100%); + background-image: linear-gradient( + 90deg, + rgba(#fff, 0) 0, + rgba(#fff, 0.2) 20%, + rgba(#fff, 0.5) 60%, + rgba(#fff, 0) + ); + animation: shimmer 2s infinite; + content: ''; + } + } +} + +@keyframes shimmer { + 100% { + transform: translateX(100%); + } +} diff --git a/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.tsx b/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.tsx new file mode 100644 index 000000000..4baa35a52 --- /dev/null +++ b/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.tsx @@ -0,0 +1,31 @@ +import React, { useEffect, useState } from "react"; +import s from './SkeletonParagraph.module.scss' + +interface SkeletonParagraphProps { + rows?: number // number of rows in paragraph + children?: React.ReactNode +} + +const SkeletonParagraph = ({ rows=2, children }: SkeletonParagraphProps) => { + + const [isChildLoaded, setIsChildLoaded] = useState(false) + + useEffect(() => { + setIsChildLoaded(true); + }, []) + + return ( +
+ { + isChildLoaded ? children : [...Array(rows)].map((e, i) => { + if (i === rows-1) { + return
+ } + return
+ }) + } +
+ ) +} + +export default SkeletonParagraph \ No newline at end of file diff --git a/src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.module.scss b/src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.module.scss deleted file mode 100644 index 82286d7a0..000000000 --- a/src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.module.scss +++ /dev/null @@ -1,51 +0,0 @@ -@import '../../../../../styles/utilities'; - -$base-color: #8F8F8F; -$shine-color: #ebebeb; -$animation-duration: 1.6s; -$avatar-offset: 52 + 16; - -@mixin background-gradient { - background-image: linear-gradient(90deg, $base-color 0px, $shine-color 40px, $base-color 80px) ; - background-size: 600px; -} - -.skeletonAvatar { - - &.active { - @include background-gradient; - animation: shine-avatar $animation-duration infinite linear; - } - - &.circle { - border-radius: 50%; - } - - &.square { - border-radius: 0; - } - - &.small { - width: 3.2rem; - height: 3.2rem; - } - &.default { - width: 4.8rem; - height: 4.8rem; - } - &.large { - width: 6.4rem; - height: 6.4rem; - } -} - -@keyframes shine-avatar { - 0% { - background-position: -100px + $avatar-offset - } - - 40%, 100% { - background-position: 140px + $avatar-offset - } - -} diff --git a/src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.tsx b/src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.tsx deleted file mode 100644 index d5d20165b..000000000 --- a/src/components/common/SkeletonCommon/components/SkeletonAvatar/SkeletonAvatar.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import classNames from "classnames"; -import React from "react"; -import s from './SkeletonAvatar.module.scss' - -interface SkeletonAvatarProps { - active?: boolean, - shape?: "circle" | "square", - size?: "small" | "default" | "large", - children: React.ReactNode -} - -const SkeletonAvatar = ({ active=true, shape="circle", size="default", children }: SkeletonAvatarProps) => { - - return ( -
- {children} -
- ) -} - -export default SkeletonAvatar \ No newline at end of file diff --git a/src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.module.scss b/src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.module.scss deleted file mode 100644 index 259c1574c..000000000 --- a/src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.module.scss +++ /dev/null @@ -1,41 +0,0 @@ -@import '../../../../../styles/utilities'; - -$base-color: #DDD; -$shine-color: #ebebeb; -$animation-duration: 2s; - -@mixin background-gradient { - background-image: linear-gradient(90deg, $base-color 0px, $shine-color 40px, $base-color 80px) ; - background-size: 100%; -} - -.skeletonParagraph { - @apply bg-white; - height: fit-content; - width: 100%; - - .row { - height: 2rem; - margin: 1rem; - animation: shine-lines $animation-duration infinite linear; - @include background-gradient; - } - - .lastRow { - height: 2rem; - margin: 1rem; - width: 85%; - animation: shine-lines $animation-duration infinite linear; - @include background-gradient; - } -} - -@keyframes shine-lines { - 0% { - background-position: -100px; - } - 40%, 100% { - background-position: 100%; - } -} - diff --git a/src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.tsx b/src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.tsx deleted file mode 100644 index 5c3620f0a..000000000 --- a/src/components/common/SkeletonCommon/components/SkeletonParagraph/SkeletonParagraph.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import classNames from "classnames"; -import React from "react"; -import s from './SkeletonParagraph.module.scss' - -interface SkeletonParagraphProps { - active?: boolean, - rows?: number // number of rows in paragraph - children: React.ReactNode -} - -const SkeletonParagraph = ({ active=true, rows=2, children }: SkeletonParagraphProps) => { - - return ( -
- { - [...Array(rows)].map((e, i) => { - if (i === rows-1) { - return

- } - return

- }) - } - {children} -
- ) -} - -export default SkeletonParagraph \ No newline at end of file diff --git a/src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.module.scss b/src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.module.scss deleted file mode 100644 index 0dbb139d3..000000000 --- a/src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.module.scss +++ /dev/null @@ -1,27 +0,0 @@ -@import '../../../../../styles/utilities'; - -$base-color: #8F8F8F; -$shine-color: #ebebeb; -$animation-duration: 1.6s; - -@mixin background-gradient { - background-image: linear-gradient(90deg, $base-color 0px, $shine-color 40px, $base-color 80px) ; - background-size: 600px; -} - -.skeletonTitle { - &.active { - @include background-gradient; - animation: shine-lines $animation-duration infinite linear; - } -} - -@keyframes shine-lines { - 0% { - background-position: -100px; - } - 40%, 100% { - background-position: 50rem; - } -} - diff --git a/src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.tsx b/src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.tsx deleted file mode 100644 index 40d747d8f..000000000 --- a/src/components/common/SkeletonCommon/components/SkeletonTitle/SkeletonTitle.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import classNames from "classnames"; -import React from "react"; -import s from './SkeletonTitle.module.scss' - -interface SkeletonTitleProps { - active?: boolean, - width: string | number, // number px - height: string | number, - children: React.ReactNode -} - -const SkeletonTitle = ({ active=true, width, height, children }: SkeletonTitleProps) => { - - const styles = { - width: width, - height: height - } - - return ( -
- {children} -
- ) -} - -export default SkeletonTitle \ No newline at end of file From 214c9b868036f4b0328c38a194efff907c5e6a7c Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Mon, 13 Sep 2021 15:46:57 +0700 Subject: [PATCH 028/100] :sparkles: feat: Checkout Success --- .../CheckoutSuccess/CheckoutSuccess.module.scss | 3 +-- .../checkout/CheckoutSuccess/CheckoutSuccess.tsx | 14 +++----------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss index 5b4f4cc66..6307f49b7 100644 --- a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss +++ b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss @@ -31,11 +31,10 @@ } .backToHomeBtn { - @apply flex cursor-pointer font-bold items-center justify-center; + @apply flex cursor-pointer font-bold items-center justify-center custom-border-radius; color: white; background-color: var(--primary); margin: auto; - border-radius: 76% 80% 17% 30% / 40% 35% 80% 30%; width: fit-content; padding: 1.6rem 3.2rem 1.6rem 3.2rem; diff --git a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx index 16bfc67bd..c9ca54ed4 100644 --- a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx +++ b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React from "react"; import s from './CheckoutSuccess.module.scss'; import Image from "next/image"; @@ -7,15 +7,7 @@ import Link from "next/link"; import checkIcon from './assets/checkIcon.png'; const CheckoutSuccess = () => { - const [isShown, setIsShown] = useState(false); - - useEffect(() => { - setTimeout(() => { - setIsShown(true); - }, 1000); - }, [1000]); - - return isShown ? ( + return (
@@ -41,7 +33,7 @@ const CheckoutSuccess = () => {
- ) : null + ) } export default CheckoutSuccess \ No newline at end of file From 617a7a9fcc9b0e88b32f146177f6a14d20d88d30 Mon Sep 17 00:00:00 2001 From: Quangnhankie Date: Mon, 13 Sep 2021 16:01:46 +0700 Subject: [PATCH 029/100] feat: add ProductCarousel --- pages/account.tsx | 2 +- pages/products.tsx | 2 ++ src/components/modules/home/HomeVideo/HomeVideo.tsx | 5 ++++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pages/account.tsx b/pages/account.tsx index 7da102c52..7cef3b305 100644 --- a/pages/account.tsx +++ b/pages/account.tsx @@ -4,7 +4,7 @@ import { AccountPage } from 'src/components/modules/account'; const Account = () => { return ( - + // ); }; diff --git a/pages/products.tsx b/pages/products.tsx index ebc42d063..4f9c4eb66 100644 --- a/pages/products.tsx +++ b/pages/products.tsx @@ -1,4 +1,5 @@ import { Layout } from 'src/components/common'; +import { ViewedProducts } from 'src/components/modules/product-detail'; import ProductListFilter from 'src/components/modules/product-list/ProductListFilter/ProductListFilter'; import RecipeListBanner from 'src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner'; import RecipesList from 'src/components/modules/recipes-list/RecipesList/RecipesList'; @@ -10,6 +11,7 @@ export default function Products() { <> + ) } diff --git a/src/components/modules/home/HomeVideo/HomeVideo.tsx b/src/components/modules/home/HomeVideo/HomeVideo.tsx index eac203769..3046d43f1 100644 --- a/src/components/modules/home/HomeVideo/HomeVideo.tsx +++ b/src/components/modules/home/HomeVideo/HomeVideo.tsx @@ -2,14 +2,16 @@ import Image from 'next/image' import React from 'react' import s from './HomeVideo.module.scss' import LogoBrand from './assets/logo_maggi.png' -import { VideoPlayer } from 'src/components/common' +import { ProductCarousel, VideoPlayer } from 'src/components/common' import HeadingCommon from '../../../common/HeadingCommon/HeadingCommon' +import {PRODUCT_DATA_TEST} from "../../../../utils/demo-data"; interface Props { className?: string children?: any } + const HomeVideo = ({ }: Props) => { return (
@@ -25,6 +27,7 @@ const HomeVideo = ({ }: Props) => { {/* todo: change url video */}
+
) } From 6cad0d89cac27109ededf5d8cbaf23280a95fea9 Mon Sep 17 00:00:00 2001 From: Quangnhankie Date: Mon, 13 Sep 2021 16:08:59 +0700 Subject: [PATCH 030/100] feat: add account signin --- pages/account.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/account.tsx b/pages/account.tsx index 7cef3b305..7da102c52 100644 --- a/pages/account.tsx +++ b/pages/account.tsx @@ -4,7 +4,7 @@ import { AccountPage } from 'src/components/modules/account'; const Account = () => { return ( - // + ); }; From 9336462af17bee9f9e8b480d3952fbad17dae465 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Mon, 13 Sep 2021 16:13:07 +0700 Subject: [PATCH 031/100] :art: styles: cart drawer responsive :%s --- .../CartCheckoutButton/CartCheckoutButton.module.scss | 2 ++ .../CartCheckoutButton/CartCheckoutButton.tsx | 10 +++++++--- .../CartRecommendation/CartRecommendation.module.scss | 4 +++- src/utils/constanst.utils.ts | 3 ++- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.module.scss b/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.module.scss index 3f90bffbd..e4fceb2d1 100644 --- a/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.module.scss +++ b/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.module.scss @@ -1,5 +1,7 @@ .cartCheckoutButton { + display: block; padding: 1.6rem; + width: 100%; button { width: 100%; } diff --git a/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.tsx b/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.tsx index 0cd7d00a2..5cc8f5f6f 100644 --- a/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.tsx +++ b/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.tsx @@ -1,12 +1,16 @@ import React, { memo } from 'react'; import { ButtonCommon } from 'src/components/common'; import s from './CartCheckoutButton.module.scss'; +import Link from 'next/link' +import { ROUTE } from 'src/utils/constanst.utils'; const CartCheckoutButton = memo(() => { return ( -
- Check out - Rp 120.500 -
+ + + Check out - Rp 120.500 + + ) }) diff --git a/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss b/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss index 88664460c..1d0f95582 100644 --- a/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss +++ b/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss @@ -2,6 +2,7 @@ .cartRecommendation { @apply w-full bg-background-gray; + padding-bottom: 1.6rem; .top { @apply flex justify-between items-center; padding: 1.6rem; @@ -12,7 +13,8 @@ .productCardWarpper { padding-left: 1.6rem; :global(.customArrow) { - @apply bg-line; + @apply bg-line shadow-md; + opacity: .8; @screen lg { &:global(.leftArrow) { left: calc(-6.4rem - 2rem); diff --git a/src/utils/constanst.utils.ts b/src/utils/constanst.utils.ts index 3757feb1e..bdb2665db 100644 --- a/src/utils/constanst.utils.ts +++ b/src/utils/constanst.utils.ts @@ -12,11 +12,12 @@ export const ROUTE = { PRODUCTS: '/products', PRODUCT_DETAIL: '/product', ABOUT: '/about', - BLOG_DETAIL: '/blog', ACCOUNT: '/account', + BLOG_DETAIL: '/blog', RECIPES: '/recipes', BUSSINESS: '/bussiness', CONTACT: '/contact', + CHECKOUT: '/checkout', FAQ: '/faq', CUSTOMER_SERVICE: '/customer-service', TERM_CONDITION: '/term-condition', From f7608e5ef1c3c74630e7d703a1beccdc279577f9 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 09:32:52 +0700 Subject: [PATCH 032/100] :art: styles: cart drawer recommendation with single btn :%s --- .../common/CarouselCommon/CarouselCommon.tsx | 15 +++++++---- .../common/CartDrawer/CartDrawer.module.scss | 2 +- .../CartRecommendation/CartRecommendation.tsx | 11 ++++++-- .../ProductCard/ProductCard.module.scss | 5 +++- .../common/ProductCard/ProductCard.tsx | 25 ++++++++++++++----- 5 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/components/common/CarouselCommon/CarouselCommon.tsx b/src/components/common/CarouselCommon/CarouselCommon.tsx index 3b5854ed4..29f351ccb 100644 --- a/src/components/common/CarouselCommon/CarouselCommon.tsx +++ b/src/components/common/CarouselCommon/CarouselCommon.tsx @@ -15,6 +15,7 @@ export interface CarouselCommonProps { option: TOptionsEvents keenClassname?: string isPadding?: boolean + defaultComponentProps?: object } const CarouselCommon = ({ @@ -25,6 +26,7 @@ const CarouselCommon = ({ isPadding = false, isArrow = true, isDot = false, + defaultComponentProps, option: { slideChanged,slidesPerView, ...sliderOption }, }: CarouselCommonProps) => { const [currentSlide, setCurrentSlide] = React.useState(0) @@ -68,11 +70,14 @@ const CarouselCommon = ({ [s.isPadding]: isPadding, })} > - {data?.map((props, index) => ( -
- -
- ))} + {data?.map((props, index) => { + const allProps = defaultComponentProps ? { ...props, ...defaultComponentProps } : props + return ( +
+ +
+ ) + })}
{slider && isArrow && ( <> diff --git a/src/components/common/CartDrawer/CartDrawer.module.scss b/src/components/common/CartDrawer/CartDrawer.module.scss index 126028d3c..3ff81bc0a 100644 --- a/src/components/common/CartDrawer/CartDrawer.module.scss +++ b/src/components/common/CartDrawer/CartDrawer.module.scss @@ -4,7 +4,7 @@ .cartDrawer { @apply flex flex-col h-full; .body { - @apply overflow-y-auto overflow-x-hidden h-full custom-scroll; + @apply flex flex-col justify-center overflow-y-auto overflow-x-hidden h-full custom-scroll; } .bottom { padding-top: 1.6rem; diff --git a/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.tsx b/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.tsx index bbc40647e..b275ceda5 100644 --- a/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.tsx +++ b/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.tsx @@ -7,14 +7,20 @@ import { PRODUCT_DATA_TEST } from 'src/utils/demo-data'; import s from './CartRecommendation.module.scss'; const option: TOptionsEvents = { - slidesPerView: 2, + slidesPerView: 1.5, mode: 'free', breakpoints: { '(min-width: 640px)': { - slidesPerView: 1, + slidesPerView: 1.5, }, '(min-width: 768px)': { slidesPerView: 2.5, + }, + '(min-width: 1008px)': { + slidesPerView: 2.2, + }, + '(min-width: 1440px)': { + slidesPerView: 2.5, } }, } @@ -34,6 +40,7 @@ const CartRecommendation = () => { Component={ProductCard} itemKey="cart-recommendation" option={option} + defaultComponentProps={{ isSingleButton: true }} />
diff --git a/src/components/common/ProductCard/ProductCard.module.scss b/src/components/common/ProductCard/ProductCard.module.scss index 2e62cc4d5..4a11c7ff0 100644 --- a/src/components/common/ProductCard/ProductCard.module.scss +++ b/src/components/common/ProductCard/ProductCard.module.scss @@ -57,13 +57,16 @@ } } .cardBot { - min-height: 4rem; @apply flex justify-between items-center; + min-height: 4rem; + margin-top: 1.6rem; .cardIcon { margin-right: 0.8rem; } .cardButton { + width: 100%; button { + width: 100%; > div { span { display: -webkit-box; diff --git a/src/components/common/ProductCard/ProductCard.tsx b/src/components/common/ProductCard/ProductCard.tsx index a6022efa4..f867d3724 100644 --- a/src/components/common/ProductCard/ProductCard.tsx +++ b/src/components/common/ProductCard/ProductCard.tsx @@ -1,5 +1,6 @@ import Link from 'next/link' import React from 'react' +import { IconBuy } from 'src/components/icons' import { ROUTE } from 'src/utils/constanst.utils' import { ProductProps } from 'src/utils/types.utils' import ButtonCommon from '../ButtonCommon/ButtonCommon' @@ -11,6 +12,7 @@ import ProductNotSell from './ProductNotSell/ProductNotSell' export interface ProductCardProps extends ProductProps { buttonText?: string + isSingleButton?: boolean, } const ProductCard = ({ @@ -21,6 +23,7 @@ const ProductCard = ({ buttonText = 'Buy Now', imageSrc, isNotSell, + isSingleButton, }: ProductCardProps) => { if (isNotSell) { return
@@ -56,12 +59,22 @@ const ProductCard = ({
-
- -
-
- {buttonText} -
+ { + isSingleButton ? +
+ }>Add to cart +
+ : + <> +
+ +
+
+ {buttonText} +
+ + } +
) From 4ae9ace396bb51ea2f34c6ff9295550a4b199fc8 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 09:35:58 +0700 Subject: [PATCH 033/100] :bug: bug: toggle btn cart in from btn in header - mobile view :%s --- src/components/common/Header/Header.tsx | 2 +- .../HeaderMenu/HeaderMenu.module.scss | 26 ++++++++-------- .../components/HeaderMenu/HeaderMenu.tsx | 30 +++++++++---------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index 42dffbe0f..7aad47d71 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -78,7 +78,7 @@ const Header = memo(({ toggleFilter }: props) => { openModalInfo={openModalInfo} /> - + void, openModalInfo: () => void, - toggleFilter:() => void, - toggleCart:() => void, + toggleFilter: () => void, + toggleCart: () => void, } -const FILTER_PAGE = [ROUTE.HOME,ROUTE.PRODUCTS] +const FILTER_PAGE = [ROUTE.HOME, ROUTE.PRODUCTS] const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => { const router = useRouter() @@ -44,16 +44,16 @@ const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo, toggleFilter,
- +
{ FILTER_PAGE.includes(router.pathname) && ( ) } -
@@ -86,16 +86,16 @@ const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo, toggleFilter, - + { - FILTER_PAGE.includes(router.pathname) && ( -
  • - -
  • - ) - } + FILTER_PAGE.includes(router.pathname) && ( +
  • + +
  • + ) + }
    ) From b312069710bd89fd2a14324089b3e3740c986095 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 09:42:06 +0700 Subject: [PATCH 034/100] :art: styles: cart drawer spacing :%s --- src/components/common/CartDrawer/CartDrawer.module.scss | 3 --- src/components/common/CartDrawer/CartDrawer.tsx | 2 +- .../CartRecommendation/CartRecommendation.module.scss | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/components/common/CartDrawer/CartDrawer.module.scss b/src/components/common/CartDrawer/CartDrawer.module.scss index 3ff81bc0a..d5bba6c57 100644 --- a/src/components/common/CartDrawer/CartDrawer.module.scss +++ b/src/components/common/CartDrawer/CartDrawer.module.scss @@ -6,7 +6,4 @@ .body { @apply flex flex-col justify-center overflow-y-auto overflow-x-hidden h-full custom-scroll; } - .bottom { - padding-top: 1.6rem; - } } \ No newline at end of file diff --git a/src/components/common/CartDrawer/CartDrawer.tsx b/src/components/common/CartDrawer/CartDrawer.tsx index 0a432bb65..31da985ef 100644 --- a/src/components/common/CartDrawer/CartDrawer.tsx +++ b/src/components/common/CartDrawer/CartDrawer.tsx @@ -23,7 +23,7 @@ const CartDrawer = ({ visible, onClose }: Props) => { -
    +
    diff --git a/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss b/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss index 1d0f95582..11b781537 100644 --- a/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss +++ b/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss @@ -2,7 +2,7 @@ .cartRecommendation { @apply w-full bg-background-gray; - padding-bottom: 1.6rem; + padding-bottom: 5.4rem; .top { @apply flex justify-between items-center; padding: 1.6rem; From 362ae97526299262c325bccb5e1677b450ef258f Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 09:44:03 +0700 Subject: [PATCH 035/100] :art: styles: arrow in cart recommendation :%s --- .../CartRecommendation.module.scss | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss b/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss index 11b781537..9095aadc1 100644 --- a/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss +++ b/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss @@ -1,4 +1,4 @@ -@import '../../../../../styles/utilities'; +@import "../../../../../styles/utilities"; .cartRecommendation { @apply w-full bg-background-gray; @@ -14,14 +14,9 @@ padding-left: 1.6rem; :global(.customArrow) { @apply bg-line shadow-md; - opacity: .8; - @screen lg { - &:global(.leftArrow) { - left: calc(-6.4rem - 2rem); - } - &:global(.rightArrow) { - right: calc(-6.4rem - 2rem); - } + opacity: 0.8; + &:global(.rightArrow) { + right: 1rem; } } } From ee496c95b4d7f5cbe3d752d5320dbfb9e0330f63 Mon Sep 17 00:00:00 2001 From: Quangnhankie Date: Tue, 14 Sep 2021 10:41:00 +0700 Subject: [PATCH 036/100] bug: add dot MenuFilter, add page AccountSignIn , fix spacing MenuFilter --- pages/account.tsx | 7 ++- public/assets/images/accountsignin.png | Bin 0 -> 3289 bytes src/components/common/Header/Header.tsx | 6 ++- .../HeaderMenu/HeaderMenu.module.scss | 15 +++++++ .../components/HeaderMenu/HeaderMenu.tsx | 8 +++- src/components/common/Layout/Layout.tsx | 2 +- .../MenuNavigation/MenuNavigation.module.scss | 1 + .../MenuNavigationProductList.module.scss | 14 +++--- .../MenuSort/MenuSort.module.scss | 4 +- .../AccountSignIn/AccountSignIn.module.scss | 37 ++++++++++++++++ .../account/AccountSignIn/AccountSignIn.tsx | 40 ++++++++++++++++++ src/components/modules/account/index.ts | 3 +- src/utils/language.utils.ts | 1 + 13 files changed, 121 insertions(+), 17 deletions(-) create mode 100644 public/assets/images/accountsignin.png create mode 100644 src/components/modules/account/AccountSignIn/AccountSignIn.module.scss create mode 100644 src/components/modules/account/AccountSignIn/AccountSignIn.tsx diff --git a/pages/account.tsx b/pages/account.tsx index 7da102c52..84f0d8d74 100644 --- a/pages/account.tsx +++ b/pages/account.tsx @@ -1,10 +1,13 @@ import React from 'react'; import { Layout } from 'src/components/common'; -import { AccountPage } from 'src/components/modules/account'; +import { AccountPage, AccountSignIn } from 'src/components/modules/account'; const Account = () => { return ( - + // + <> + + ); }; diff --git a/public/assets/images/accountsignin.png b/public/assets/images/accountsignin.png new file mode 100644 index 0000000000000000000000000000000000000000..89fcdd8511389df722df4564387cb29085369747 GIT binary patch literal 3289 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 XgRi~}$KiHt00000NkvXXu0mjfH=-

    void + toggleFilter: () => void, + visibleFilter:boolean } -const Header = memo(({ toggleFilter }: props) => { +const Header = memo(({ toggleFilter,visibleFilter }: props) => { const headeFullRef = useRef(null) const [isFullHeader, setIsFullHeader] = useState(true) const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: false }) @@ -55,6 +56,7 @@ const Header = memo(({ toggleFilter }: props) => {

    void, openModalInfo: () => void, toggleFilter:() => void, @@ -19,8 +20,10 @@ interface Props { const FILTER_PAGE = [ROUTE.HOME,ROUTE.PRODUCTS] -const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => { +const HeaderMenu = memo(({ visibleFilter,isFull, openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => { const router = useRouter() + + const optionMenu = useMemo(() => [ { onClick: openModalAuthen, @@ -50,6 +53,7 @@ const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo, toggleFilter, FILTER_PAGE.includes(router.pathname) && ( ) } diff --git a/src/components/common/Layout/Layout.tsx b/src/components/common/Layout/Layout.tsx index 8b93825b4..4b8803291 100644 --- a/src/components/common/Layout/Layout.tsx +++ b/src/components/common/Layout/Layout.tsx @@ -29,7 +29,7 @@ const Layout: FC = ({ children }) => { return (
    -
    +
    {children}
    diff --git a/src/components/common/MenuNavigation/MenuNavigation.module.scss b/src/components/common/MenuNavigation/MenuNavigation.module.scss index 7535df707..7f0c1d8b6 100644 --- a/src/components/common/MenuNavigation/MenuNavigation.module.scss +++ b/src/components/common/MenuNavigation/MenuNavigation.module.scss @@ -1,5 +1,6 @@ @import "../../../styles/utilities"; .menuNavigationWrapper{ + @apply hidden; .menuNavigationHeading{ @screen md { @apply sub-headline font-bold ; diff --git a/src/components/common/MenuNavigationProductList/MenuNavigationProductList.module.scss b/src/components/common/MenuNavigationProductList/MenuNavigationProductList.module.scss index 042785c05..353b9073e 100644 --- a/src/components/common/MenuNavigationProductList/MenuNavigationProductList.module.scss +++ b/src/components/common/MenuNavigationProductList/MenuNavigationProductList.module.scss @@ -10,8 +10,6 @@ } .menuNavigationProductListMobile{ @apply relative transition-all duration-100; - - &.isShow{ &::after{ content: ""; @@ -39,13 +37,14 @@ transform: translateY(0%) } .content{ - @apply relative w-full h-full; + @apply absolute w-full h-full; margin-top: 3rem; - padding-top: 8rem ; + padding-top: 10rem ; padding-bottom: 10rem; background-color: white; overflow-y: auto; - height: 100vh; + height: 96%; + bottom: 0; border-radius: 2.4rem 2.4rem 0 0; .head{ @apply flex justify-between fixed; @@ -53,7 +52,7 @@ left:0; margin-top: 3rem; border-radius: 2.4rem 2.4rem 0 0; - padding: 3rem 2rem 1rem 2rem; + padding: 4rem 2rem 2rem 2rem; width: 100%; background-color: white; z-index: 10000; @@ -68,7 +67,8 @@ left:0; width: 100%; background-color: white; - padding: 0 1rem 2rem 1rem; + padding: 0 1rem 3rem 1rem; + } button{ margin-top: 2rem; diff --git a/src/components/common/MenuNavigationProductList/MenuSort/MenuSort.module.scss b/src/components/common/MenuNavigationProductList/MenuSort/MenuSort.module.scss index 19bd605f8..d259611c7 100644 --- a/src/components/common/MenuNavigationProductList/MenuSort/MenuSort.module.scss +++ b/src/components/common/MenuNavigationProductList/MenuSort/MenuSort.module.scss @@ -9,7 +9,7 @@ margin: 0.8rem 0; } .menuSortList{ - margin-bottom: 2rem; + padding-bottom: 1rem; box-sizing: border-box; li{ @@ -22,7 +22,7 @@ &.active { @apply font-bold relative; color:var(--text-active); - background-color: var(--primary-lightest); + background-color: var(--gray); &::after{ @apply absolute; content:""; diff --git a/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss b/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss new file mode 100644 index 000000000..f70ecbdec --- /dev/null +++ b/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss @@ -0,0 +1,37 @@ +@import "../../../../styles/utilities"; +.accountSignInWrapper{ + + @screen sm-only{ + @apply w-full; + .imgError{ + width: 30%; + margin: 0 auto; + } + .text{ + @apply sub-headline; + color:var(--text-placeholder); + text-align: center; + margin-top: 3.6rem; + } + .btn{ + @apply flex justify-center; + margin: 2.6rem auto; + button{ + padding: 1.6rem 7rem; + } + } + .dontHaveAccount{ + @apply flex justify-center font-bold; + div{ + color:var(--text-active); + } + span{ + color:var(--positive); + } + } + } + @screen md{ + @apply hidden; + } + +} \ No newline at end of file diff --git a/src/components/modules/account/AccountSignIn/AccountSignIn.tsx b/src/components/modules/account/AccountSignIn/AccountSignIn.tsx new file mode 100644 index 000000000..036a4ef55 --- /dev/null +++ b/src/components/modules/account/AccountSignIn/AccountSignIn.tsx @@ -0,0 +1,40 @@ +import React from "react" +import { ButtonCommon, StaticImage } from "src/components/common"; +import s from './AccountSignIn.module.scss'; +import {LANGUAGE} from 'src/utils/language.utils'; +import AccountSignInImg from '../../../../../public/assets/images/accountsignin.png' +import Link from 'next/link'; +import { useRouter } from 'next/router'; +interface AccountSignIn { + +} + +const AccountSignIn = ({ } : AccountSignIn) => { + const router = useRouter(); + function openLogin(){ + router.push({ + pathname: '/account/query', + search: '?openLogin=true' + }); + } + return ( + <> +
    +
    + +
    +
    + Sign in to get more interesting
    features +
    +
    + {LANGUAGE.BUTTON_LABEL.SIGNIN} +
    +
    +
    Don't have an account?  
    Create Account +
    +
    + + ) +} + +export default AccountSignIn \ No newline at end of file diff --git a/src/components/modules/account/index.ts b/src/components/modules/account/index.ts index 42753b0b5..8cb391e9c 100644 --- a/src/components/modules/account/index.ts +++ b/src/components/modules/account/index.ts @@ -1,3 +1,4 @@ export { default as AccountNavigation } from './AccountNavigation/AccountNavigation' export { default as DeliveryItem } from './DeliveryItem/DeliveryItem' -export { default as AccountPage } from './AccountPage/AccountPage' \ No newline at end of file +export { default as AccountPage } from './AccountPage/AccountPage' +export { default as AccountSignIn } from './AccountSignIn/AccountSignIn' diff --git a/src/utils/language.utils.ts b/src/utils/language.utils.ts index 8b3d8f8d5..dfd2b9604 100644 --- a/src/utils/language.utils.ts +++ b/src/utils/language.utils.ts @@ -5,6 +5,7 @@ export const LANGUAGE = { CONFIRM:'Confirm', ADD_TO_CARD: 'Add to Cart', PREORDER: 'Pre-Order Now', + SIGNIN :'Sign In' }, PLACE_HOLDER: { SEARCH: 'Search', From 20d6ebf24cb31c7e67c97c90c22224cadb3c9699 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 10:43:38 +0700 Subject: [PATCH 037/100] :art: styles: fix header active item in mobile and color when tap to link header :%s --- .../HeaderSubMenuMobile.module.scss | 12 +++++++----- .../HeaderSubMenuMobile/HeaderSubMenuMobile.tsx | 9 +++++++-- src/components/icons/IconNoti.tsx | 11 +++++++++++ src/components/icons/index.ts | 1 + src/utils/constanst.utils.ts | 1 + 5 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 src/components/icons/IconNoti.tsx diff --git a/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.module.scss b/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.module.scss index 230d9e59e..5acab44b4 100644 --- a/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.module.scss +++ b/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.module.scss @@ -4,30 +4,32 @@ @apply fixed w-full bg-white; bottom: 0; left: 0; - padding: 2rem 1rem; + padding: 0 1rem 1rem; border-top: 1px solid var(--border-line); box-shadow: -5px 6px 10px rgba(0, 0, 0, 0.2); z-index: 9999; .menu { - @apply grid grid-cols-4; + @apply grid grid-cols-5; li { a { @apply transition-all duration-200 no-underline; - &:hover { - color: var(--primary); - } + -webkit-tap-highlight-color: unset; } .menuItem { @apply flex flex-col justify-center items-center sm-label; + padding-top: 1rem; + border-top: 2px solid transparent; .icon { position: relative; margin-bottom: 0.5rem; + height: 3rem; svg path { fill: currentColor; } } &.active { @apply text-primary; + border-top: 2px solid var(--primary); } &.dot { .icon { diff --git a/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx b/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx index d2cf1bf3e..ee15ac2cf 100644 --- a/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx +++ b/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx @@ -2,7 +2,7 @@ import classNames from 'classnames' import Link from 'next/link' import { useRouter } from 'next/router' import { memo } from 'react' -import { IconHeart, IconHome, IconShopping, IconUser } from 'src/components/icons' +import { IconHeart, IconHome, IconNoti, IconShopping, IconUser } from 'src/components/icons' import { ACCOUNT_TAB, QUERY_KEY, ROUTE } from 'src/utils/constanst.utils' import s from './HeaderSubMenuMobile.module.scss' @@ -11,7 +11,6 @@ const OPTION_MENU = [ link: ROUTE.HOME, name: 'Home', icon: , - isMarked: true, }, { link: ROUTE.PRODUCTS, @@ -25,6 +24,12 @@ const OPTION_MENU = [ icon: , isMarked: false, }, + { + link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.NOTIFICATION}`, + name: 'Notifications', + icon: , + isMarked: true, + }, { link: ROUTE.ACCOUNT, name: 'Account', diff --git a/src/components/icons/IconNoti.tsx b/src/components/icons/IconNoti.tsx new file mode 100644 index 000000000..ab166fecc --- /dev/null +++ b/src/components/icons/IconNoti.tsx @@ -0,0 +1,11 @@ +import React from 'react' + +const IconNoti = () => { + return ( + + + + ) +} + +export default IconNoti diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index 7dd36b14f..0a6aab07a 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -33,3 +33,4 @@ export { default as IconMinus } from './IconMinus' export { default as IconCirclePlus } from './IconCirclePlus' export { default as IconDoneCheckout } from './IconDoneCheckout' export { default as IconFilter } from './IconFilter' +export { default as IconNoti } from './IconNoti' \ No newline at end of file diff --git a/src/utils/constanst.utils.ts b/src/utils/constanst.utils.ts index bdb2665db..ad3a5bf81 100644 --- a/src/utils/constanst.utils.ts +++ b/src/utils/constanst.utils.ts @@ -30,6 +30,7 @@ export const ACCOUNT_TAB = { CUSTOMER_INFO: '', ORDER: 'orders', FAVOURITE: 'wishlist', + NOTIFICATION: 'notification', } export const QUERY_KEY = { From faf0bc1e35fa25294ff66d9ae0deca6d4fe84b4d Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 10:52:58 +0700 Subject: [PATCH 038/100] :art: styles: img common in product cart :%s --- src/components/common/ProductCard/ProductCard.module.scss | 6 ++++++ src/components/common/ProductCard/ProductCard.tsx | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/common/ProductCard/ProductCard.module.scss b/src/components/common/ProductCard/ProductCard.module.scss index 4a11c7ff0..170ac7743 100644 --- a/src/components/common/ProductCard/ProductCard.module.scss +++ b/src/components/common/ProductCard/ProductCard.module.scss @@ -16,6 +16,12 @@ height: 100%; width: 100%; @apply flex justify-center items-center; + > div { + min-height: 13rem; + img { + object-fit: contain; + } + } img { @apply inline; } diff --git a/src/components/common/ProductCard/ProductCard.tsx b/src/components/common/ProductCard/ProductCard.tsx index f867d3724..af982cbd1 100644 --- a/src/components/common/ProductCard/ProductCard.tsx +++ b/src/components/common/ProductCard/ProductCard.tsx @@ -3,6 +3,7 @@ import React from 'react' import { IconBuy } from 'src/components/icons' import { ROUTE } from 'src/utils/constanst.utils' import { ProductProps } from 'src/utils/types.utils' +import { ImgWithLink } from '..' import ButtonCommon from '../ButtonCommon/ButtonCommon' import ButtonIconBuy from '../ButtonIconBuy/ButtonIconBuy' import ItemWishList from '../ItemWishList/ItemWishList' @@ -37,7 +38,7 @@ const ProductCard = ({
    - image +
    From ccb52169f8709a46a0ac95351253d2e4e69da115 Mon Sep 17 00:00:00 2001 From: Quangnhankie Date: Tue, 14 Sep 2021 11:46:27 +0700 Subject: [PATCH 039/100] feat: create page account not login --- pages/account-not-login.tsx | 15 +++++++++++++++ .../Header/components/HeaderMenu/HeaderMenu.tsx | 3 ++- .../AccountSignIn/AccountSignIn.module.scss | 9 +-------- .../account/AccountSignIn/AccountSignIn.tsx | 11 +++++++---- 4 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 pages/account-not-login.tsx diff --git a/pages/account-not-login.tsx b/pages/account-not-login.tsx new file mode 100644 index 000000000..cbda16486 --- /dev/null +++ b/pages/account-not-login.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { Layout } from 'src/components/common'; +import { AccountSignIn } from 'src/components/modules/account'; + +const AccountNotLogin = () => { + return ( + <> + + + ); +}; + +AccountNotLogin.Layout = Layout + +export default AccountNotLogin; \ No newline at end of file diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index ce7150328..ffbfc9616 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -30,7 +30,8 @@ const HeaderMenu = memo(({ visibleFilter,isFull, openModalAuthen, openModalInfo, name: 'Login (Demo)', }, { - onClick: openModalInfo, + // onClick: openModalInfo, + link: '/account-not-login', name: 'Create User Info (Demo)', }, { diff --git a/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss b/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss index f70ecbdec..e1313e36c 100644 --- a/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss +++ b/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss @@ -1,11 +1,8 @@ @import "../../../../styles/utilities"; .accountSignInWrapper{ - - @screen sm-only{ @apply w-full; .imgError{ - width: 30%; - margin: 0 auto; + @apply w-full flex justify-center; } .text{ @apply sub-headline; @@ -29,9 +26,5 @@ color:var(--positive); } } - } - @screen md{ - @apply hidden; - } } \ No newline at end of file diff --git a/src/components/modules/account/AccountSignIn/AccountSignIn.tsx b/src/components/modules/account/AccountSignIn/AccountSignIn.tsx index 036a4ef55..adea180e1 100644 --- a/src/components/modules/account/AccountSignIn/AccountSignIn.tsx +++ b/src/components/modules/account/AccountSignIn/AccountSignIn.tsx @@ -1,22 +1,25 @@ -import React from "react" +import React,{memo} from "react" import { ButtonCommon, StaticImage } from "src/components/common"; import s from './AccountSignIn.module.scss'; import {LANGUAGE} from 'src/utils/language.utils'; import AccountSignInImg from '../../../../../public/assets/images/accountsignin.png' import Link from 'next/link'; import { useRouter } from 'next/router'; + interface AccountSignIn { } -const AccountSignIn = ({ } : AccountSignIn) => { +const AccountSignIn = memo(({ } : AccountSignIn) => { const router = useRouter(); + function openLogin(){ router.push({ - pathname: '/account/query', + pathname: `${router.pathname}/query`, search: '?openLogin=true' }); } + return ( <>
    @@ -35,6 +38,6 @@ const AccountSignIn = ({ } : AccountSignIn) => {
    ) -} +}); export default AccountSignIn \ No newline at end of file From 3e001bbf1804dbf928709629be7ae0218c3e1681 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2021 11:48:24 +0700 Subject: [PATCH 040/100] refactor: change image --- .../common/CardBlog/CardBlog.module.scss | 5 ++- src/components/common/CardBlog/CardBlog.tsx | 4 +- .../RelevantBlogPosts/RelevantBlogPosts.tsx | 15 +++---- .../modules/blogs/BlogsList/BlogsList.tsx | 42 ++++++++----------- .../FeaturedCardBlog.module.scss | 10 +++-- .../FeaturedCardBlog/FeaturedCardBlog.tsx | 15 +++---- 6 files changed, 42 insertions(+), 49 deletions(-) diff --git a/src/components/common/CardBlog/CardBlog.module.scss b/src/components/common/CardBlog/CardBlog.module.scss index 6e62ed5ff..f9d1b58e5 100644 --- a/src/components/common/CardBlog/CardBlog.module.scss +++ b/src/components/common/CardBlog/CardBlog.module.scss @@ -4,8 +4,6 @@ @apply inline-flex flex-col justify-start; max-width: 39.2rem; .image { - width: 100%; - max-height: 22rem; border-radius: 2.4rem; &:hover { cursor: pointer; @@ -13,6 +11,9 @@ img{ border-radius: 2.4rem; } + > div{ + min-height: 22rem; + } } .title { padding: 1.6rem 0.8rem 0.4rem 0.8rem; diff --git a/src/components/common/CardBlog/CardBlog.tsx b/src/components/common/CardBlog/CardBlog.tsx index 314a6a1fd..a44f45494 100644 --- a/src/components/common/CardBlog/CardBlog.tsx +++ b/src/components/common/CardBlog/CardBlog.tsx @@ -2,7 +2,9 @@ import Link from 'next/link' import React from 'react' import { ROUTE } from 'src/utils/constanst.utils' import { BlogProps } from 'src/utils/types.utils' +import { ImgWithLink } from '..' import s from './CardBlog.module.scss' + export interface BlogCardProps extends BlogProps { // todo: edit when intergrate API @@ -14,7 +16,7 @@ const CardBlog = ({ imageSrc, title, description, slug }: BlogCardProps) => {
    - image cardblog +
    diff --git a/src/components/common/RelevantBlogPosts/RelevantBlogPosts.tsx b/src/components/common/RelevantBlogPosts/RelevantBlogPosts.tsx index 1d71a6ca1..ab21590c3 100644 --- a/src/components/common/RelevantBlogPosts/RelevantBlogPosts.tsx +++ b/src/components/common/RelevantBlogPosts/RelevantBlogPosts.tsx @@ -1,6 +1,3 @@ -import image15 from '../../../../public/assets/images/image15.png' -import image16 from '../../../../public/assets/images/image16.png' -import image17 from '../../../../public/assets/images/image17.png' import classNames from 'classnames' import React from 'react' import { HeadingCommon, ViewAllItem } from 'src/components/common' @@ -22,32 +19,32 @@ const recipe:BlogCardProps[] = [ title: "Want to Lose Weight? Here are 10 DEBM Diet Guidelines for Beginners", slug: 'have-a-nice-lunch', description:"The DEBM diet stands for "+'"Delicious Happy Fun Diet"'+". This diet was popularized by Robert...", - imageSrc: image15.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185783-8100ef4e-7a72-4dc1-bb12-2ca46b56b393.png", },{ title: "9 Ways to Make an Aloe Vera Mask at Home", slug: 'have-a-nice-lunch', description:"Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", - imageSrc: image16.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185911-df505d10-fdcd-4312-add3-7c62ad8af71e.png", },{ title: "Don't Buy Wrong, Here Are 7 Ways to Choose a Ripe Dragon Fruit", slug: 'have-a-nice-lunch', description:"Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", - imageSrc: image17.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185959-7ad75580-ca6d-4684-83d9-3f64500bbc97.png", },{ title: "Want to Lose Weight? Here are 10 DEBM Diet Guidelines for Beginners", slug: 'have-a-nice-lunch', description:"The DEBM diet stands for "+'"Delicious Happy Fun Diet"'+". This diet was popularized by Robert...", - imageSrc: image15.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185783-8100ef4e-7a72-4dc1-bb12-2ca46b56b393.png", },{ title: "9 Ways to Make an Aloe Vera Mask at Home", slug: 'have-a-nice-lunch', description:"Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", - imageSrc: image16.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185911-df505d10-fdcd-4312-add3-7c62ad8af71e.png", },{ title: "Don't Buy Wrong, Here Are 7 Ways to Choose a Ripe Dragon Fruit", slug: 'have-a-nice-lunch', description:"Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", - imageSrc: image17.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185959-7ad75580-ca6d-4684-83d9-3f64500bbc97.png", }] const RelevantBlogPosts = ({ data = recipe, itemKey="detail-relevant", title="Relevant Blog Posts", bgcolor = "default" }: RelevantProps) => { diff --git a/src/components/modules/blogs/BlogsList/BlogsList.tsx b/src/components/modules/blogs/BlogsList/BlogsList.tsx index 536aa4afd..9b7ddc1e0 100644 --- a/src/components/modules/blogs/BlogsList/BlogsList.tsx +++ b/src/components/modules/blogs/BlogsList/BlogsList.tsx @@ -3,12 +3,6 @@ import CardBlog, { BlogCardProps } from 'src/components/common/CardBlog/CardBlog import PaginationCommon from 'src/components/common/PaginationCommon/PaginationCommon' import s from "./BlogsList.module.scss" import { DEFAULT_BLOG_PAGE_SIZE } from 'src/utils/constanst.utils' -import image15 from '../../../../../public/assets/images/image15.png' -import image16 from '../../../../../public/assets/images/image16.png' -import image17 from '../../../../../public/assets/images/image17.png' -import image21 from '../../../../../public/assets/images/image21.png' -import image22 from '../../../../../public/assets/images/image22.png' -import image23 from '../../../../../public/assets/images/image23.png' interface BlogsListProps { data?: BlogCardProps[], @@ -16,109 +10,109 @@ interface BlogsListProps { const BLOGSLIST_DATA = [ { - imageSrc: image15.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185783-8100ef4e-7a72-4dc1-bb12-2ca46b56b393.png", title: "1", description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", slug: "happy-diet" }, { - imageSrc: image16.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185911-df505d10-fdcd-4312-add3-7c62ad8af71e.png", title: "2", description: "Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", slug: "happy-diet" }, { - imageSrc: image17.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185959-7ad75580-ca6d-4684-83d9-3f64500bbc97.png", title: "3", description: "Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", slug: "happy-diet" }, { - imageSrc: image21.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186410-d8718d90-82fb-46cb-a0f2-0ec96356ae89.png", title: "4", description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", slug: "happy-diet" }, { - imageSrc: image22.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186474-b2d89bbc-32ed-4174-a05e-3d388c0a39ff.png", title: "5", description: "Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", slug: "happy-diet" }, { - imageSrc: image23.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186545-d860f4ee-222c-4d72-a876-808af0f397a0.png", title: "6", description: "Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", slug: "happy-diet" }, { - imageSrc: image15.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185783-8100ef4e-7a72-4dc1-bb12-2ca46b56b393.png", title: "7", description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", slug: "happy-diet" }, { - imageSrc: image16.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185911-df505d10-fdcd-4312-add3-7c62ad8af71e.png", title: "8", description: "Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", slug: "happy-diet" }, { - imageSrc: image17.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185959-7ad75580-ca6d-4684-83d9-3f64500bbc97.png", title: "9", description: "Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", slug: "happy-diet" }, { - imageSrc: image23.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186545-d860f4ee-222c-4d72-a876-808af0f397a0.png", title: "10", description: "Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", slug: "happy-diet" }, { - imageSrc: image21.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186410-d8718d90-82fb-46cb-a0f2-0ec96356ae89.png", title: "11", description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", slug: "happy-diet" }, { - imageSrc: image22.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186474-b2d89bbc-32ed-4174-a05e-3d388c0a39ff.png", title: "12", description: "Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", slug: "happy-diet" }, { - imageSrc: image15.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185783-8100ef4e-7a72-4dc1-bb12-2ca46b56b393.png", title: "13", description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", slug: "happy-diet" }, { - imageSrc: image16.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185911-df505d10-fdcd-4312-add3-7c62ad8af71e.png", title: "14", description: "Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", slug: "happy-diet" }, { - imageSrc: image17.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185959-7ad75580-ca6d-4684-83d9-3f64500bbc97.png", title: "15", description: "Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", slug: "happy-diet" }, { - imageSrc: image21.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186410-d8718d90-82fb-46cb-a0f2-0ec96356ae89.png", title: "16", description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", slug: "happy-diet" }, { - imageSrc: image23.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186545-d860f4ee-222c-4d72-a876-808af0f397a0.png", title: "17", description: "Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", slug: "happy-diet" }, { - imageSrc: image22.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186474-b2d89bbc-32ed-4174-a05e-3d388c0a39ff.png", title: "18", description: "Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", slug: "happy-diet" diff --git a/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.module.scss b/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.module.scss index 6fb16450c..f8e2ff3e8 100644 --- a/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.module.scss +++ b/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.module.scss @@ -11,13 +11,15 @@ } } .left { - max-width: 59.8rem; - img { - border-radius: 2.4rem; + > div{ + min-width: 59.8rem; + min-height: 33.6rem; + img { + border-radius: 2.4rem; + } } } .right { - flex-shrink: 3; @screen lg { margin-left: 6.4rem; } diff --git a/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.tsx b/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.tsx index 2bd158d79..ec90633d8 100644 --- a/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.tsx +++ b/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.tsx @@ -1,14 +1,11 @@ import s from './FeaturedCardBlog.module.scss' -import { Author, DateTime } from 'src/components/common' -import Image from "next/image"; -import image20 from '../../../../../public/assets/images/image20.png' -import author from '../../../../../public/assets/images/author.png' +import { Author, DateTime, ImgWithLink } from 'src/components/common' interface FeaturedCardBlogProps{ title?: string, content?: string, - imgSrc?: any, - imgAuthor?: any, + imgSrc?: string, + imgAuthor?: string, date?: string, authorName?: string, } @@ -16,8 +13,8 @@ interface FeaturedCardBlogProps{ const FEATURED_DATA = { title: "Flammekueche with green asparagus", content: "Traditionally, the Flammekueche is made with rapeseed oil, which, contrary to popular belief, is indeed an oil that can be cooked hot and is not limited to seasoning. It is important to vary the oils in the kitchen to take advantage of the benefits of each. Rapeseed oil is an oil rich in omega 3 which participate in the proper functioning of the cardiovascular system as well as in vitamins E which contributes to the protection of cells against oxidative stress. In short, oils are your friends 😉", - imgSrc: image20, - imgAuthor: author.src, + imgSrc: "https://user-images.githubusercontent.com/46085455/133186666-1ea8081f-4319-4617-8644-d20ed14b1825.png", + imgAuthor: "https://user-images.githubusercontent.com/46085455/133186783-d0c71d43-b7bc-44b6-b560-818c71bd162f.png", date: "APRIL 30, 2021", author: "Alessandro Del Piero" } @@ -34,7 +31,7 @@ const FeaturedCardBlog = ({
    - image feature card +
    From 0eb8ade7308f5e9d1de16e93e6677307139de1dd Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 14:01:19 +0700 Subject: [PATCH 041/100] :art: styles: border radius input common default :%s --- .../common/InputCommon/InputCommon.module.scss | 3 ++- .../common/MenuDropdown/MenuDropdown.module.scss | 3 ++- .../ModalCreateUserInfo/ModalCreateUserInfo.tsx | 9 +++------ src/utils/constanst.utils.ts | 11 +++++++++++ tailwind.config.js | 3 --- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/components/common/InputCommon/InputCommon.module.scss b/src/components/common/InputCommon/InputCommon.module.scss index 1c64c764e..5471b2169 100644 --- a/src/components/common/InputCommon/InputCommon.module.scss +++ b/src/components/common/InputCommon/InputCommon.module.scss @@ -17,7 +17,8 @@ } .inputCommon { - @apply block w-full transition-all duration-200 rounded bg-white; + @apply block w-full transition-all duration-200 bg-white; + border-radius: .8rem; padding: 1.6rem; border: 1px solid var(--border-line); &:hover, diff --git a/src/components/common/MenuDropdown/MenuDropdown.module.scss b/src/components/common/MenuDropdown/MenuDropdown.module.scss index 5332794ff..20b54dcaa 100644 --- a/src/components/common/MenuDropdown/MenuDropdown.module.scss +++ b/src/components/common/MenuDropdown/MenuDropdown.module.scss @@ -71,7 +71,8 @@ @apply block shadow-md; } .menuIner { - @apply rounded list-none bg-white; + @apply list-none bg-white; + border-radius: 0.8rem; border: 1px solid var(--text-active); margin-top: 0.4rem; > li { diff --git a/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx b/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx index 85817c930..c3794bf81 100644 --- a/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx +++ b/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx @@ -1,9 +1,7 @@ -import classNames from 'classnames'; -import Link from 'next/link'; import React, { useRef } from 'react'; -import { useModalCommon } from 'src/components/hooks/useModalCommon'; +import { STATE_OPTIONS } from 'src/utils/constanst.utils'; import { CustomInputCommon } from 'src/utils/type.utils'; -import { Inputcommon } from '..'; +import { Inputcommon, SelectCommon } from '..'; import ButtonCommon from '../ButtonCommon/ButtonCommon'; import ModalCommon from '../ModalCommon/ModalCommon'; import s from './ModalCreateUserInfo.module.scss'; @@ -27,8 +25,7 @@ const ModalCreateUserInfo = ({ demoVisible: visible, demoCloseModal: closeModal
    - {/* todo: select, not input */} - +
    diff --git a/src/utils/constanst.utils.ts b/src/utils/constanst.utils.ts index ad3a5bf81..b1afabb7a 100644 --- a/src/utils/constanst.utils.ts +++ b/src/utils/constanst.utils.ts @@ -119,3 +119,14 @@ export const FEATURED = [ ] export const DEFAULT_BLOG_PAGE_SIZE=6; + +export const STATE_OPTIONS = [ + { + name: 'Hồ Chí Minh', + value: 'Hồ Chí Minh', + }, + { + name: 'Hà Nội', + value: 'Hà Nội', + }, +] \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js index 69ab1ade5..ec9f0e5d1 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -106,9 +106,6 @@ module.exports = { fontSize: { base: ['16px', '24px'], }, - borderRadius: { - rounded: '.8rem', - }, screens: { 'sm-only': {'min': '0', 'max': '767px'}, 'sm': '640px', From 083d0f11420c05436ac602169835d70667707435 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 14:01:36 +0700 Subject: [PATCH 042/100] :art: styles: set border width select commong =1px :%s --- src/components/common/SelectCommon/SelectCommon.module.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/common/SelectCommon/SelectCommon.module.scss b/src/components/common/SelectCommon/SelectCommon.module.scss index 4809a46bb..82ce46f5b 100644 --- a/src/components/common/SelectCommon/SelectCommon.module.scss +++ b/src/components/common/SelectCommon/SelectCommon.module.scss @@ -28,7 +28,7 @@ } &.custom { .selectTrigger { - @apply border-2; + border-width: 1px; border-color: var(--border-line); color: var(--text-label); } @@ -68,7 +68,7 @@ @apply border-solid border border-current; } &.custom { - @apply border-2; + border-width: 1px; border-color: var(--border-line); color: var(--text-label); } From b3b5a310d8a044c5874ec329ff533e868193023c Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 14:13:51 +0700 Subject: [PATCH 043/100] :art: styles: fix header animation :%s --- src/components/common/Header/Header.tsx | 3 +-- .../components/HeaderHighLight/HeaderHighLight.module.scss | 1 + .../Header/components/HeaderMenu/HeaderMenu.module.scss | 4 ---- .../common/Header/components/HeaderMenu/HeaderMenu.tsx | 5 ++--- .../components/HeaderSubMenu/HeaderSubMenu.module.scss | 1 + 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index 7aad47d71..1638b6571 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -59,7 +59,6 @@ const Header = memo(({ toggleFilter }: props) => { @@ -71,7 +70,7 @@ const Header = memo(({ toggleFilter }: props) => { [s.headerSticky]: true, [s.show]: !isFullHeader })}> - void, openModalInfo: () => void, toggleFilter: () => void, @@ -19,7 +18,7 @@ interface Props { const FILTER_PAGE = [ROUTE.HOME, ROUTE.PRODUCTS] -const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => { +const HeaderMenu = memo(({ openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => { const router = useRouter() const optionMenu = useMemo(() => [ { @@ -41,7 +40,7 @@ const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo, toggleFilter, ], [openModalAuthen]) return ( -
    +
    diff --git a/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.module.scss b/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.module.scss index 3d8016c6b..231ac8300 100644 --- a/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.module.scss +++ b/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.module.scss @@ -5,6 +5,7 @@ @screen md { @apply block; padding-bottom: 2.4rem; + margin-top: 1.6rem; transform: none; height: unset; @screen lg { From 9802a6537a5aa8f0f8d996c7b5ef4c3b975d41ce Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 14:14:00 +0700 Subject: [PATCH 044/100] :art: styles: recipe detail :%s --- pages/product/[slug].tsx | 4 ++-- pages/recipe/[slug].tsx | 12 ++++++++++++ .../RecommendedRecipes.module.scss | 2 +- .../RecommendedRecipes/RecommendedRecipes.tsx | 0 src/components/common/index.ts | 1 + src/components/modules/product-detail/index.ts | 1 - src/styles/_pages.scss | 6 ++++++ src/styles/main.scss | 2 ++ 8 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 pages/recipe/[slug].tsx rename src/components/{modules/product-detail => common}/RecommendedRecipes/RecommendedRecipes.module.scss (94%) rename src/components/{modules/product-detail => common}/RecommendedRecipes/RecommendedRecipes.tsx (100%) create mode 100644 src/styles/_pages.scss diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx index 5413c686a..ab9a1c17c 100644 --- a/pages/product/[slug].tsx +++ b/pages/product/[slug].tsx @@ -1,6 +1,6 @@ -import { Layout, RecipeDetail, RelevantBlogPosts } from 'src/components/common' -import { ProductInfoDetail, RecommendedRecipes, ReleventProducts, ViewedProducts } from 'src/components/modules/product-detail' +import { Layout, RecipeDetail, RecommendedRecipes, RelevantBlogPosts } from 'src/components/common' +import { ProductInfoDetail, ReleventProducts, ViewedProducts } from 'src/components/modules/product-detail' import { BLOGS_DATA_TEST, INGREDIENT_DATA_TEST, RECIPE_DATA_TEST } from 'src/utils/demo-data' export default function Slug() { diff --git a/pages/recipe/[slug].tsx b/pages/recipe/[slug].tsx new file mode 100644 index 000000000..1f71ba5be --- /dev/null +++ b/pages/recipe/[slug].tsx @@ -0,0 +1,12 @@ + +import { Layout, RecipeDetail, RecommendedRecipes } from 'src/components/common' +import { INGREDIENT_DATA_TEST, RECIPE_DATA_TEST } from 'src/utils/demo-data' + +export default function Slug() { + return
    + + +
    +} + +Slug.Layout = Layout diff --git a/src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.module.scss b/src/components/common/RecommendedRecipes/RecommendedRecipes.module.scss similarity index 94% rename from src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.module.scss rename to src/components/common/RecommendedRecipes/RecommendedRecipes.module.scss index d43e2d58c..b96b7d4e7 100644 --- a/src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.module.scss +++ b/src/components/common/RecommendedRecipes/RecommendedRecipes.module.scss @@ -1,4 +1,4 @@ -@import "../../../../styles/utilities"; +@import "../../../styles/utilities"; .recommendedRecipes { margin: 6rem auto; diff --git a/src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.tsx b/src/components/common/RecommendedRecipes/RecommendedRecipes.tsx similarity index 100% rename from src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.tsx rename to src/components/common/RecommendedRecipes/RecommendedRecipes.tsx diff --git a/src/components/common/index.ts b/src/components/common/index.ts index 7de333d3a..868d49e29 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -46,3 +46,4 @@ export { default as TabCommon} from './TabCommon/TabCommon' export { default as StaticImage} from './StaticImage/StaticImage' export { default as EmptyCommon} from './EmptyCommon/EmptyCommon' export { default as CustomShapeSvg} from './CustomShapeSvg/CustomShapeSvg' +export { default as RecommendedRecipes} from './RecommendedRecipes/RecommendedRecipes' diff --git a/src/components/modules/product-detail/index.ts b/src/components/modules/product-detail/index.ts index ef4461432..07fd04753 100644 --- a/src/components/modules/product-detail/index.ts +++ b/src/components/modules/product-detail/index.ts @@ -1,4 +1,3 @@ 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/styles/_pages.scss b/src/styles/_pages.scss new file mode 100644 index 000000000..0855aaada --- /dev/null +++ b/src/styles/_pages.scss @@ -0,0 +1,6 @@ +.page-recipe-detail { + margin-bottom: 5.4rem; + @screen lg { + margin-bottom: 12.8rem; + } +} \ No newline at end of file diff --git a/src/styles/main.scss b/src/styles/main.scss index 2e4abf3da..51391b33f 100644 --- a/src/styles/main.scss +++ b/src/styles/main.scss @@ -5,3 +5,5 @@ @import "~tailwindcss/utilities"; @import './utilities'; + +@import './pages' From 8452638097c533a5c1ea38930d32fa4f3f962d37 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 14:20:46 +0700 Subject: [PATCH 045/100] :recycle: enhan: link to recipe detail :%s --- .../common/RecipeCard/RecipeCard.tsx | 21 ++++++++++++------- src/utils/constanst.utils.ts | 11 +++++++--- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/components/common/RecipeCard/RecipeCard.tsx b/src/components/common/RecipeCard/RecipeCard.tsx index 92ab879e9..014708935 100644 --- a/src/components/common/RecipeCard/RecipeCard.tsx +++ b/src/components/common/RecipeCard/RecipeCard.tsx @@ -1,19 +1,24 @@ import Link from 'next/link' import React from 'react' +import { ROUTE } from 'src/utils/constanst.utils' import { RecipeProps } from 'src/utils/types.utils' import s from './RecipeCard.module.scss' -export interface RecipeCardProps extends RecipeProps {} +export interface RecipeCardProps extends RecipeProps { } -const RecipeCard = ({ imageSrc, title, description }: RecipeCardProps) => { +const RecipeCard = ({ imageSrc, title, description, slug }: RecipeCardProps) => { return (
    - -
    - image recipe -
    + + +
    + image recipe +
    +
    - -
    {title}
    + + +
    {title}
    +
    {description}
    diff --git a/src/utils/constanst.utils.ts b/src/utils/constanst.utils.ts index b1afabb7a..e85f5fdee 100644 --- a/src/utils/constanst.utils.ts +++ b/src/utils/constanst.utils.ts @@ -9,12 +9,18 @@ export const SOCIAL_LINKS = { export const ROUTE = { HOME: '/', - PRODUCTS: '/products', - PRODUCT_DETAIL: '/product', ABOUT: '/about', ACCOUNT: '/account', + + PRODUCTS: '/products', + PRODUCT_DETAIL: '/product', + + BLOGS: '/blogs', BLOG_DETAIL: '/blog', + RECIPES: '/recipes', + RECIPE_DETAIL: '/recipe', + BUSSINESS: '/bussiness', CONTACT: '/contact', CHECKOUT: '/checkout', @@ -22,7 +28,6 @@ export const ROUTE = { CUSTOMER_SERVICE: '/customer-service', TERM_CONDITION: '/term-condition', PRIVACY_POLICY: '/privacy-policy', - BLOGS: '/blogs', FORGOT_PASSWORD: '/forgot-password' } From 208ddd146f3cab88bbd56a0324a9b2cc1540d718 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 14:33:08 +0700 Subject: [PATCH 046/100] :wrench: config: (image) set minimumCacheTTL=60 :%s --- next.config.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/next.config.js b/next.config.js index 27bddfae6..3a0fee27b 100644 --- a/next.config.js +++ b/next.config.js @@ -26,6 +26,7 @@ module.exports = withCommerceConfig({ images: { // todo: replace domains for images domains: ['user-images.githubusercontent.com'], + minimumCacheTTL: 60, }, i18n: { locales: ['en-US', 'es'], @@ -46,10 +47,10 @@ module.exports = withCommerceConfig({ // For Vendure, rewrite the local api url to the remote (external) api url. This is required // to make the session cookies work. isVendure && - process.env.NEXT_PUBLIC_VENDURE_LOCAL_URL && { - source: `${process.env.NEXT_PUBLIC_VENDURE_LOCAL_URL}/:path*`, - destination: `${process.env.NEXT_PUBLIC_VENDURE_SHOP_API_URL}/:path*`, - }, + process.env.NEXT_PUBLIC_VENDURE_LOCAL_URL && { + source: `${process.env.NEXT_PUBLIC_VENDURE_LOCAL_URL}/:path*`, + destination: `${process.env.NEXT_PUBLIC_VENDURE_SHOP_API_URL}/:path*`, + }, ].filter(Boolean) }, }) From df47b3a6f4024361d29e05018eee31203fef2c86 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 14:36:54 +0700 Subject: [PATCH 047/100] :recycle: enhan: add prop blurDataURL to component ImgWithLink :%s --- src/components/common/ImgWithLink/ImgWithLink.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/common/ImgWithLink/ImgWithLink.tsx b/src/components/common/ImgWithLink/ImgWithLink.tsx index 62a30fa45..212e45583 100644 --- a/src/components/common/ImgWithLink/ImgWithLink.tsx +++ b/src/components/common/ImgWithLink/ImgWithLink.tsx @@ -6,16 +6,17 @@ import { BLUR_DATA_IMG } from 'src/utils/constanst.utils' export interface ImgWithLinkProps { src: string, alt?: string, + blurDataURL?: string, } -const ImgWithLink = ({ src, alt }: ImgWithLinkProps) => { +const ImgWithLink = ({ src, alt, blurDataURL = BLUR_DATA_IMG }: ImgWithLinkProps) => { return (
    {alt}
    ) From 2656c56a6f1794ac148dae3f2df48060fd37819e Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Tue, 14 Sep 2021 14:39:01 +0700 Subject: [PATCH 048/100] :sparkles: feat: Loading Common --- .../LoadingCommon/LoadingCommon.module.scss | 39 +++++++------------ .../common/LoadingCommon/LoadingCommon.tsx | 13 +++---- 2 files changed, 19 insertions(+), 33 deletions(-) diff --git a/src/components/common/LoadingCommon/LoadingCommon.module.scss b/src/components/common/LoadingCommon/LoadingCommon.module.scss index e1882523c..97ba57dd0 100644 --- a/src/components/common/LoadingCommon/LoadingCommon.module.scss +++ b/src/components/common/LoadingCommon/LoadingCommon.module.scss @@ -1,31 +1,20 @@ @import '../../../styles/utilities'; -.loadingCommon:empty { - @apply bg-white; - height: 7rem; - width: 7rem; - border-radius: 50%; - animation: spin 2s linear infinite; - margin: auto; +.wrapper { + @apply text-center; - background: url('./assets/carrot.png') top 50% left 50% no-repeat; - - @keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } + .loadingCommon { + @apply bg-white; + height: 7rem; + width: 7rem; + border-radius: 50%; + animation: spin 2s linear infinite; + margin: auto; + background: url('./assets/carrot.png') top 50% left 50% no-repeat; } +} - &.small { - height: 5rem; - width: 5rem; - } - - &.default { - - } - - &.large { - height: 10rem; - width: 10rem; - } +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } } \ No newline at end of file diff --git a/src/components/common/LoadingCommon/LoadingCommon.tsx b/src/components/common/LoadingCommon/LoadingCommon.tsx index 79993507e..d41ea8492 100644 --- a/src/components/common/LoadingCommon/LoadingCommon.tsx +++ b/src/components/common/LoadingCommon/LoadingCommon.tsx @@ -1,18 +1,15 @@ import React from "react"; import s from './LoadingCommon.module.scss' -interface LoadingCommonProps { - children? : React.ReactNode; -} - -const LoadingCommon = ({ children }: LoadingCommonProps) => { +const LoadingCommon = () => { return ( - <> +
    - {children} +
    - +

    Loading...

    +
    ) } From 8d463e537d2491150a0f17df18e04df8ae6b7603 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Tue, 14 Sep 2021 14:39:31 +0700 Subject: [PATCH 049/100] :sparkles: feat: Skeleton Common --- .../SkeletonImage/SkeletonImage.module.scss | 2 +- .../SkeletonCommon/SkeletonImage/SkeletonImage.tsx | 4 +--- .../SkeletonParagraph.module.scss | 4 +++- .../SkeletonParagraph/SkeletonParagraph.tsx | 14 +++----------- 4 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.module.scss b/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.module.scss index 57fdf3ebc..d9607adec 100644 --- a/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.module.scss +++ b/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.module.scss @@ -1,6 +1,6 @@ @import '../../../../styles/utilities'; -.skeletonImage:empty { +.skeletonImage { @apply relative; background: #DDDBDD; diff --git a/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.tsx b/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.tsx index 7ab20b037..e2c7c5e0f 100644 --- a/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.tsx +++ b/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.tsx @@ -5,16 +5,14 @@ import s from './SkeletonImage.module.scss' interface SkeletonImageProps { align?: "left" | "center" size?: "small" | "default" | "large" - children?: React.ReactNode } -const SkeletonImage = ({ align="center", size="default", children }: SkeletonImageProps) => { +const SkeletonImage = ({ align="center", size="default" }: SkeletonImageProps) => { return (
    - {children}
    ) } diff --git a/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.module.scss b/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.module.scss index 2c98d00e5..1ebd6e413 100644 --- a/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.module.scss +++ b/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.module.scss @@ -1,6 +1,8 @@ @import '../../../../styles/utilities'; -.skeletonParagraph { +.skeletonParagraph { + margin: 0 1.6rem; + .row { display: inline-block; height: 2rem; diff --git a/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.tsx b/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.tsx index 4baa35a52..eadcff724 100644 --- a/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.tsx +++ b/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.tsx @@ -1,23 +1,15 @@ -import React, { useEffect, useState } from "react"; +import React from "react"; import s from './SkeletonParagraph.module.scss' interface SkeletonParagraphProps { rows?: number // number of rows in paragraph - children?: React.ReactNode } -const SkeletonParagraph = ({ rows=2, children }: SkeletonParagraphProps) => { - - const [isChildLoaded, setIsChildLoaded] = useState(false) - - useEffect(() => { - setIsChildLoaded(true); - }, []) - +const SkeletonParagraph = ({ rows=2 }: SkeletonParagraphProps) => { return (
    { - isChildLoaded ? children : [...Array(rows)].map((e, i) => { + [...Array(rows)].map((e, i) => { if (i === rows-1) { return
    } From 2b2c1acca225a9d2c4d0e6db6325a95e911bb8ef Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Tue, 14 Sep 2021 14:40:22 +0700 Subject: [PATCH 050/100] :sparkles: feat: Checkout Success --- .../CheckoutSuccess/CheckoutSuccess.module.scss | 11 +---------- .../checkout/CheckoutSuccess/CheckoutSuccess.tsx | 14 ++++++-------- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss index 6307f49b7..c7d4b2859 100644 --- a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss +++ b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss @@ -31,16 +31,7 @@ } .backToHomeBtn { - @apply flex cursor-pointer font-bold items-center justify-center custom-border-radius; - color: white; - background-color: var(--primary); - margin: auto; - width: fit-content; - padding: 1.6rem 3.2rem 1.6rem 3.2rem; - - .arrowRight { - margin-left: 1.4rem; - } + @apply flex justify-center; } } } diff --git a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx index c9ca54ed4..d82cc9c55 100644 --- a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx +++ b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx @@ -6,6 +6,9 @@ import Link from "next/link"; import checkIcon from './assets/checkIcon.png'; +import { ButtonCommon } from "src/components/common"; +import { IconArrowRight } from "src/components/icons"; + const CheckoutSuccess = () => { return (
    @@ -18,17 +21,12 @@ const CheckoutSuccess = () => {
    Your purchase has been successed!
    Last call! Shop deep deals on 100+ bulk picks while you can.
    -
    From b786f1313a0a127c9f3bd1270a10f40eabd22702 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Tue, 14 Sep 2021 14:44:39 +0700 Subject: [PATCH 051/100] :sparkles: feat: Checkout Success --- .../modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx index d82cc9c55..277cd5e30 100644 --- a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx +++ b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx @@ -1,12 +1,11 @@ import React from "react"; import s from './CheckoutSuccess.module.scss'; -import Image from "next/image"; import Link from "next/link"; import checkIcon from './assets/checkIcon.png'; -import { ButtonCommon } from "src/components/common"; +import { ButtonCommon, StaticImage } from "src/components/common"; import { IconArrowRight } from "src/components/icons"; const CheckoutSuccess = () => { @@ -14,9 +13,7 @@ const CheckoutSuccess = () => {
    -
    - check icon -
    +
    Your purchase has been successed!
    Last call! Shop deep deals on 100+ bulk picks while you can.
    From a99b4d5e2172a6ce973fdc06cc4311ec37f7566c Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 14:45:00 +0700 Subject: [PATCH 052/100] bugs: header animation --- src/components/common/Header/Header.tsx | 25 +++++++++---------- .../modules/home/HomeBanner/HomeBanner.tsx | 3 +-- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index 1638b6571..eea61abb9 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -53,6 +53,17 @@ const Header = memo(({ toggleFilter }: props) => { return ( <> +
    + +
    +
    @@ -65,19 +76,7 @@ const Header = memo(({ toggleFilter }: props) => {
    - -
    - -
    - - + Date: Tue, 14 Sep 2021 14:45:23 +0700 Subject: [PATCH 053/100] update --- pages/test.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pages/test.tsx b/pages/test.tsx index dd5b91a2b..95ea43aff 100644 --- a/pages/test.tsx +++ b/pages/test.tsx @@ -2,12 +2,18 @@ import { useState } from 'react' import { ButtonCommon, Layout } from 'src/components/common' import CheckoutSuccess from 'src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess' +import LoadingCommon from 'src/components/common/LoadingCommon/LoadingCommon' +import SkeletonParagraph from 'src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph' +import SkeletonImage from 'src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage' export default function Test() { - return ( <> + + + + ) } From 454e22344cd6ea61e11be759e35cfca268ad59b2 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 14:57:31 +0700 Subject: [PATCH 054/100] :recycle: enhan: add noti link in header :%s --- .../common/Header/components/HeaderMenu/HeaderMenu.tsx | 4 ++++ .../components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx | 2 +- src/utils/constanst.utils.ts | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index 4aefb954c..2e81a4acd 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -29,6 +29,10 @@ const HeaderMenu = memo(({ openModalAuthen, openModalInfo, toggleFilter, toggleC onClick: openModalInfo, name: 'Create User Info (Demo)', }, + { + link: ROUTE.NOTIFICATION, + name: 'Notifications', + }, { link: ROUTE.ACCOUNT, name: 'Account', diff --git a/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx b/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx index ee15ac2cf..7537f7b8e 100644 --- a/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx +++ b/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx @@ -25,7 +25,7 @@ const OPTION_MENU = [ isMarked: false, }, { - link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.NOTIFICATION}`, + link: ROUTE.NOTIFICATION, name: 'Notifications', icon: , isMarked: true, diff --git a/src/utils/constanst.utils.ts b/src/utils/constanst.utils.ts index e85f5fdee..90ac2a175 100644 --- a/src/utils/constanst.utils.ts +++ b/src/utils/constanst.utils.ts @@ -21,6 +21,7 @@ export const ROUTE = { RECIPES: '/recipes', RECIPE_DETAIL: '/recipe', + NOTIFICATION: '/notification', BUSSINESS: '/bussiness', CONTACT: '/contact', CHECKOUT: '/checkout', @@ -35,7 +36,6 @@ export const ACCOUNT_TAB = { CUSTOMER_INFO: '', ORDER: 'orders', FAVOURITE: 'wishlist', - NOTIFICATION: 'notification', } export const QUERY_KEY = { From 5ecc7d8e74e03b863752e8172ab2d093a2855796 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 15:07:42 +0700 Subject: [PATCH 055/100] :art: styles: home banner :%s --- src/components/common/Banner/Banner.tsx | 2 +- .../modules/home/HomeBanner/HomeBanner.module.scss | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/common/Banner/Banner.tsx b/src/components/common/Banner/Banner.tsx index 9b6b1099a..410fded77 100644 --- a/src/components/common/Banner/Banner.tsx +++ b/src/components/common/Banner/Banner.tsx @@ -8,7 +8,7 @@ interface Props { const option = { slidesPerView: 1, - breakpoints: {} + mode: 'free', } const Banner = memo(({ data }: Props) => { if (data.length === 1) { diff --git a/src/components/modules/home/HomeBanner/HomeBanner.module.scss b/src/components/modules/home/HomeBanner/HomeBanner.module.scss index a8b1b1d27..bb65a2549 100644 --- a/src/components/modules/home/HomeBanner/HomeBanner.module.scss +++ b/src/components/modules/home/HomeBanner/HomeBanner.module.scss @@ -31,11 +31,15 @@ width: min-content; color: var(--white); - font-size: 8.8rem; + font-size: 7rem; line-height: 8rem; letter-spacing: -0.03em; font-weight: bold; text-transform: uppercase; + + @screen 2xl { + line-height: 8rem; + } &::after { @apply absolute; content: ""; From 87c9a5ffc1687702ed611bca41fff986ebcf2605 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 15:18:00 +0700 Subject: [PATCH 056/100] :bug: bug: useEffect in Scroll to Top :%s --- src/components/common/ScrollToTop/ScrollToTop.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/common/ScrollToTop/ScrollToTop.tsx b/src/components/common/ScrollToTop/ScrollToTop.tsx index d148c8937..eef74cb24 100644 --- a/src/components/common/ScrollToTop/ScrollToTop.tsx +++ b/src/components/common/ScrollToTop/ScrollToTop.tsx @@ -34,7 +34,7 @@ const ScrollToTop = ({ visibilityHeight=450 }: ScrollToTopProps) => { useEffect(() => { addEventScroll(); - }); + }, []); return (
    Date: Tue, 14 Sep 2021 15:18:42 +0700 Subject: [PATCH 057/100] bug: fix datatest recipes --- pages/index.tsx | 4 +- .../components/HeaderMenu/HeaderMenu.tsx | 7 +- .../MenuNavigation/MenuNavigation.module.scss | 3 + .../AccountSignIn/AccountSignIn.module.scss | 1 + .../account/AccountSignIn/AccountSignIn.tsx | 24 ++++--- .../home/HomeSpice/HomeSpice.module.scss | 3 + .../modules/home/HomeSpice/HomeSpice.tsx | 19 ++++++ .../modules/home/HomeVideo/HomeVideo.tsx | 5 +- .../recipes-list/RecipesList/RecipesList.tsx | 16 ++--- src/utils/demo-data.ts | 67 ++++++++++++++++++- 10 files changed, 121 insertions(+), 28 deletions(-) create mode 100644 src/components/modules/home/HomeSpice/HomeSpice.module.scss create mode 100644 src/components/modules/home/HomeSpice/HomeSpice.tsx diff --git a/pages/index.tsx b/pages/index.tsx index e7b5cab7d..59dade55f 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,5 +1,6 @@ import { Layout } from 'src/components/common'; import { HomeBanner, HomeCategories, HomeCollection, HomeCTA, HomeFeature, HomeRecipe, HomeSubscribe, HomeVideo } from 'src/components/modules/home'; +import HomeSpice from 'src/components/modules/home/HomeSpice/HomeSpice'; export default function Home() { return ( @@ -9,8 +10,9 @@ export default function Home() { + - + {/* // todo: uncomment diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index ffbfc9616..96cb8ca1a 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -30,10 +30,13 @@ const HeaderMenu = memo(({ visibleFilter,isFull, openModalAuthen, openModalInfo, name: 'Login (Demo)', }, { - // onClick: openModalInfo, - link: '/account-not-login', + onClick: openModalInfo, name: 'Create User Info (Demo)', }, + { + link: '/account-not-login', + name: 'Account Not Login', + }, { link: ROUTE.ACCOUNT, name: 'Account', diff --git a/src/components/common/MenuNavigation/MenuNavigation.module.scss b/src/components/common/MenuNavigation/MenuNavigation.module.scss index 7f0c1d8b6..6d0a06c3f 100644 --- a/src/components/common/MenuNavigation/MenuNavigation.module.scss +++ b/src/components/common/MenuNavigation/MenuNavigation.module.scss @@ -1,6 +1,9 @@ @import "../../../styles/utilities"; .menuNavigationWrapper{ @apply hidden; + @screen md { + @apply block; + } .menuNavigationHeading{ @screen md { @apply sub-headline font-bold ; diff --git a/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss b/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss index e1313e36c..1e4362f5e 100644 --- a/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss +++ b/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss @@ -1,5 +1,6 @@ @import "../../../../styles/utilities"; .accountSignInWrapper{ + padding: 5rem; @apply w-full; .imgError{ @apply w-full flex justify-center; diff --git a/src/components/modules/account/AccountSignIn/AccountSignIn.tsx b/src/components/modules/account/AccountSignIn/AccountSignIn.tsx index adea180e1..4f85545f3 100644 --- a/src/components/modules/account/AccountSignIn/AccountSignIn.tsx +++ b/src/components/modules/account/AccountSignIn/AccountSignIn.tsx @@ -23,17 +23,19 @@ const AccountSignIn = memo(({ } : AccountSignIn) => { return ( <>
    -
    - -
    -
    - Sign in to get more interesting
    features -
    -
    - {LANGUAGE.BUTTON_LABEL.SIGNIN} -
    -
    -
    Don't have an account?  
    Create Account +
    +
    + +
    +
    + Sign in to get more interesting
    features +
    +
    + {LANGUAGE.BUTTON_LABEL.SIGNIN} +
    +
    +
    Don't have an account?  
    Create Account +
    diff --git a/src/components/modules/home/HomeSpice/HomeSpice.module.scss b/src/components/modules/home/HomeSpice/HomeSpice.module.scss new file mode 100644 index 000000000..79a786765 --- /dev/null +++ b/src/components/modules/home/HomeSpice/HomeSpice.module.scss @@ -0,0 +1,3 @@ +.homeSpiceWarpper{ + margin: 5.6rem 0; +} \ No newline at end of file diff --git a/src/components/modules/home/HomeSpice/HomeSpice.tsx b/src/components/modules/home/HomeSpice/HomeSpice.tsx new file mode 100644 index 000000000..5c24f1809 --- /dev/null +++ b/src/components/modules/home/HomeSpice/HomeSpice.tsx @@ -0,0 +1,19 @@ +import React from 'react' +import { ProductCarousel } from 'src/components/common' +import { SPICE_DATA_TEST } from "../../../../utils/demo-data" +import s from './HomeSpice.module.scss' + +interface HomeSpice { + +} + + +const HomeSpice = ({}: HomeSpice) => { + return ( +
    + +
    + ) +} + +export default HomeSpice diff --git a/src/components/modules/home/HomeVideo/HomeVideo.tsx b/src/components/modules/home/HomeVideo/HomeVideo.tsx index 3046d43f1..8d9e33be0 100644 --- a/src/components/modules/home/HomeVideo/HomeVideo.tsx +++ b/src/components/modules/home/HomeVideo/HomeVideo.tsx @@ -2,9 +2,9 @@ import Image from 'next/image' import React from 'react' import s from './HomeVideo.module.scss' import LogoBrand from './assets/logo_maggi.png' -import { ProductCarousel, VideoPlayer } from 'src/components/common' +import { VideoPlayer } from 'src/components/common' import HeadingCommon from '../../../common/HeadingCommon/HeadingCommon' -import {PRODUCT_DATA_TEST} from "../../../../utils/demo-data"; + interface Props { className?: string @@ -27,7 +27,6 @@ const HomeVideo = ({ }: Props) => { {/* todo: change url video */}
    -
    ) } diff --git a/src/components/modules/recipes-list/RecipesList/RecipesList.tsx b/src/components/modules/recipes-list/RecipesList/RecipesList.tsx index c061b9edb..f636157fa 100644 --- a/src/components/modules/recipes-list/RecipesList/RecipesList.tsx +++ b/src/components/modules/recipes-list/RecipesList/RecipesList.tsx @@ -6,7 +6,8 @@ import PaginationCommon from 'src/components/common/PaginationCommon/PaginationC import { RecipeCardProps } from 'src/components/common/RecipeCard/RecipeCard'; import { OPTION_ALL, QUERY_KEY, ROUTE } from 'src/utils/constanst.utils'; import HeadingCommon from "../../../common/HeadingCommon/HeadingCommon"; -import RecipesItem from './RecipesItem/RecipesItem'; +import { RecipeCard } from 'src/components/common' + import s from './RecipesList.module.scss'; const recipe:RecipeCardProps[] = [ @@ -46,6 +47,7 @@ const recipe:RecipeCardProps[] = [ imageSrc: 'https://user-images.githubusercontent.com/76729908/132159262-f28a9fb9-4852-47e6-80b5-d600521b548a.png', slug:"the-best-recipe-of-beef-noodle-soup" },]; + const DEFAULT_PAGESIZE_RECIPELIST = 6; const BREADCRUMB = [ @@ -159,11 +161,10 @@ const OPTIONSLECT=[ interface Props{ data?: RecipeCardProps[], recipes?:{ - id:string, title:string, - image:string, + imageSrc:string, description:string, - link:string + slug:string }[], } @@ -203,12 +204,7 @@ const RecipesList = ({ data =recipe}:Props) => {
    {data?.map((item,index) => (
    - +
    ))}
    diff --git a/src/utils/demo-data.ts b/src/utils/demo-data.ts index aad6653b5..1658a8b30 100644 --- a/src/utils/demo-data.ts +++ b/src/utils/demo-data.ts @@ -68,7 +68,72 @@ export const PRODUCT_DATA_TEST = [ imageSrc: "https://user-images.githubusercontent.com/76729908/131646231-2d1c3ad1-4f5b-4a8e-9874-ca731f4ce128.png", }, ] - +export const SPICE_DATA_TEST = [ + { + name: 'Tomato', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218370-4145e774-4d99-45f9-9200-9dc1f55b967d.png", + }, + { + name: 'Cucumber', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218428-20bd1a2b-b3e2-477a-8cef-2b9f0a5c8899.png", + }, + { + name: 'Carrot', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218473-99e96817-40b6-45a4-9fed-daa269ae912f.png", + }, + { + name: 'Salad', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218528-9da429bf-11ab-43a2-9700-ed7c7114cd12.png", + }, + { + name: 'Tomato', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218535-60015545-fe6d-4af0-9650-3c18f14b4b20.png", + }, + { + name: 'Cucumber', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218538-10d41f11-a484-4f42-ae1f-dc95ac9e5773.png", + }, + { + name: 'Tomato', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218370-4145e774-4d99-45f9-9200-9dc1f55b967d.png", + }, + { + name: 'Cucumber', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218428-20bd1a2b-b3e2-477a-8cef-2b9f0a5c8899.png", + }, +] export const PRODUCT_CART_DATA_TEST = [ { name: 'Tomato', From 571bfe44ac1837b6c07951d9d711508d380a5ef2 Mon Sep 17 00:00:00 2001 From: Quangnhankie Date: Tue, 14 Sep 2021 15:23:56 +0700 Subject: [PATCH 058/100] bug: fix bug conflict --- .../Header/components/HeaderMenu/HeaderMenu.tsx | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index c21a70b7c..47d4beb74 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -1,20 +1,17 @@ import classNames from 'classnames' import Link from 'next/link' -import { memo, useEffect, useMemo, useState } from 'react' +import { useRouter } from 'next/router' +import { memo, useMemo } from 'react' import InputSearch from 'src/components/common/InputSearch/InputSearch' import MenuDropdown from 'src/components/common/MenuDropdown/MenuDropdown' import { IconBuy, IconFilter, IconHeart, IconHistory, IconUser } from 'src/components/icons' import { ACCOUNT_TAB, QUERY_KEY, ROUTE } from 'src/utils/constanst.utils' import Logo from '../../../Logo/Logo' import s from './HeaderMenu.module.scss' -import { useRouter } from 'next/router' interface Props { children?: any, -<<<<<<< HEAD isFull: boolean, visibleFilter?:boolean, -======= ->>>>>>> 2cd36b2d66249e898f8234d210f77f5e2a4c5a2e openModalAuthen: () => void, openModalInfo: () => void, toggleFilter: () => void, @@ -23,11 +20,7 @@ interface Props { const FILTER_PAGE = [ROUTE.HOME, ROUTE.PRODUCTS] -<<<<<<< HEAD -const HeaderMenu = memo(({ visibleFilter,isFull, openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => { -======= -const HeaderMenu = memo(({ openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => { ->>>>>>> 2cd36b2d66249e898f8234d210f77f5e2a4c5a2e +const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleFilter, toggleCart}: Props) => { const router = useRouter() From 9cb93394d143035a2828fa3ce0ce237c532e66d3 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 15:29:19 +0700 Subject: [PATCH 059/100] :art: styles: box shadow header :%s --- src/components/common/Header/Header.module.scss | 16 ++++++++++++---- .../Header/components/HeaderMenu/HeaderMenu.tsx | 3 +-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/components/common/Header/Header.module.scss b/src/components/common/Header/Header.module.scss index 99cd29fe0..1a73bbae5 100644 --- a/src/components/common/Header/Header.module.scss +++ b/src/components/common/Header/Header.module.scss @@ -6,20 +6,28 @@ left: 0; z-index: 9999; margin-bottom: 3.2rem; - @screen md { - @apply relative; - } + &.full { @apply shadow-none; - border: 1px solid var(--border-line); } .menu { + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); padding-left: 3.2rem; padding-right: 3.2rem; } .logo { @apply font-logo; } + + @screen md { + @apply relative; + &.full { + border: 1px solid var(--border-line); + } + .menu { + @apply shadow-none; + } + } } .headerSticky { diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index 2e81a4acd..40b329ca8 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -1,5 +1,5 @@ -import classNames from 'classnames' import Link from 'next/link' +import { useRouter } from 'next/router' import { memo, useMemo } from 'react' import InputSearch from 'src/components/common/InputSearch/InputSearch' import MenuDropdown from 'src/components/common/MenuDropdown/MenuDropdown' @@ -7,7 +7,6 @@ import { IconBuy, IconFilter, IconHeart, IconHistory, IconUser } from 'src/compo import { ACCOUNT_TAB, QUERY_KEY, ROUTE } from 'src/utils/constanst.utils' import Logo from '../../../Logo/Logo' import s from './HeaderMenu.module.scss' -import { useRouter } from 'next/router' interface Props { children?: any, openModalAuthen: () => void, From 3c8f01fa7e470ce9e68ab87d172def72d4ccc284 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2021 16:04:19 +0700 Subject: [PATCH 060/100] feat: notificationpage mobile --- pages/notification.tsx | 13 ++++ src/components/icons/IconBell.tsx | 19 ++++++ src/components/icons/IconBill.tsx | 25 ++++++++ src/components/icons/index.ts | 2 + .../NotificationEmptyPage.module.scss | 15 +++++ .../NotificationEmptyPage.tsx | 18 ++++++ .../NotificationItem.module.scss | 39 ++++++++++++ .../NotificationItem/NotificationItem.tsx | 49 +++++++++++++++ .../NotificationPage/NotificationPage.tsx | 60 +++++++++++++++++++ src/components/modules/Notification/index.tsx | 2 + 10 files changed, 242 insertions(+) create mode 100644 pages/notification.tsx create mode 100644 src/components/icons/IconBell.tsx create mode 100644 src/components/icons/IconBill.tsx create mode 100644 src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss create mode 100644 src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.tsx create mode 100644 src/components/modules/Notification/NotificationItem/NotificationItem.module.scss create mode 100644 src/components/modules/Notification/NotificationItem/NotificationItem.tsx create mode 100644 src/components/modules/Notification/NotificationPage/NotificationPage.tsx create mode 100644 src/components/modules/Notification/index.tsx diff --git a/pages/notification.tsx b/pages/notification.tsx new file mode 100644 index 000000000..df76e6c58 --- /dev/null +++ b/pages/notification.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import { Layout } from 'src/components/common'; +import { NotificationPage } from 'src/components/modules/Notification'; + +const Notification = () => { + return ( + + ) +} + +Notification.Layout = Layout + +export default Notification; \ No newline at end of file diff --git a/src/components/icons/IconBell.tsx b/src/components/icons/IconBell.tsx new file mode 100644 index 000000000..278edc640 --- /dev/null +++ b/src/components/icons/IconBell.tsx @@ -0,0 +1,19 @@ +const IconBell = ({ ...props }) => { + return ( + + + + ) + } + + export default IconBell + \ No newline at end of file diff --git a/src/components/icons/IconBill.tsx b/src/components/icons/IconBill.tsx new file mode 100644 index 000000000..4892a0b07 --- /dev/null +++ b/src/components/icons/IconBill.tsx @@ -0,0 +1,25 @@ +const IconBill = ({ ...props }) => { + return ( + + + + + ) + } + + export default IconBill + \ No newline at end of file diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index 7dd36b14f..184e107e1 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -33,3 +33,5 @@ export { default as IconMinus } from './IconMinus' export { default as IconCirclePlus } from './IconCirclePlus' export { default as IconDoneCheckout } from './IconDoneCheckout' export { default as IconFilter } from './IconFilter' +export { default as IconBell } from './IconBell' +export { default as IconBill } from './IconBill' \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss new file mode 100644 index 000000000..457b22e77 --- /dev/null +++ b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss @@ -0,0 +1,15 @@ +@import "../../../../styles/utilities"; + +.emptyPage { + @apply flex justify-center items-center flex-col; + .emptyIcon { + padding-bottom: 2.6rem; + } + .emptyContent { + font-size: 2.4rem; + line-height: 3.2rem; + letter-spacing: -0.01em; + align-content: center; + color: var(--disabled); + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.tsx b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.tsx new file mode 100644 index 000000000..b698b0f50 --- /dev/null +++ b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.tsx @@ -0,0 +1,18 @@ +import React from 'react' +import { IconBell } from 'src/components/icons' +import s from '../NotificationEmptyPage/NotificationEmptyPage.module.scss' + + +const NotificationEmptyPage = () => { + return ( +
    +
    + +
    +
    +

    Your Notification is empty

    +
    +
    + ) +} +export default NotificationEmptyPage \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss new file mode 100644 index 000000000..38ce184d1 --- /dev/null +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss @@ -0,0 +1,39 @@ +@import '../../../../styles/utilities'; + +.notificationItem { + @apply flex flex-row; + padding-left: 1.6rem; + padding-bottom: 1.4rem; + &:hover{ + cursor: pointer; + } + .contentWrapper { + padding-left: 1.6rem; + max-width: 26.3rem; + .title { + font-weight: bold; + color: var(--text-active); + } + .date { + font-size: 1.2rem; + line-height: 2rem; + letter-spacing: 0.01em; + } + } + &.isChecked { + .icon { + rect { + fill: var(--gray) + } + path { + fill: var(--disabled) + } + } + .title { + color: var(--label); + } + .content, .date { + color: #828282; + } + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.tsx b/src/components/modules/Notification/NotificationItem/NotificationItem.tsx new file mode 100644 index 000000000..83de0ff8f --- /dev/null +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.tsx @@ -0,0 +1,49 @@ +import React, {useState} from 'react' +import s from '../NotificationItem/NotificationItem.module.scss' +import ClassNames from 'classnames' +import { IconBill } from 'src/components/icons' +import Link from 'next/link' + +export interface NotificationItemProps { + ID?: string, + title?: string, + content?: string, + date?: string, + link: string, + checked?: boolean, +} + +const NotificationItem = ({ ID, title, content, date, link, checked}: NotificationItemProps) => { + const [isChecked, setChecked] = useState(checked) + const Check = () => { + setChecked(true) + } + return ( +
    +
    + +
    + +
    +
    + {title} +
    +
    + {content} +
    +
    + {date} +
    +
    + + +
    + ) +} + +export default NotificationItem \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationPage/NotificationPage.tsx b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx new file mode 100644 index 000000000..8abd39d9f --- /dev/null +++ b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx @@ -0,0 +1,60 @@ +import React from 'react' +import NotificationEmptyPage from '../NotificationEmptyPage/NotificationEmptyPage' +import NotificationItem, { NotificationItemProps } from '../NotificationItem/NotificationItem' +import {ROUTE , QUERY_KEY, ACCOUNT_TAB } from 'src/utils/constanst.utils' + + +interface NotificationPageProps { + isEmpty?: boolean, + data?: NotificationItemProps[], +} +const NOTIFICATION_DATA = [ + { + ID: "ID33455", + title: "Your order ID33455", + content: "The order has been deliveried successfully!", + date: "2 days ago", + link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.ORDER}`, + checked: false, + }, + { + ID: "ID33456", + title: "Your order ID33456", + content: "The order has been deliveried successfully!", + date: "2 days ago", + link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.ORDER}`, + checked: false, + }, + { + ID: "ID33457", + title: "Your order ID33457", + content: "The order has been deliveried successfully!", + date: "2 days ago", + link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.ORDER}`, + checked: true, + } +] + + +const NotificationPage = ({ isEmpty=false, data = NOTIFICATION_DATA }: NotificationPageProps) => { + return ( + <> + { + isEmpty ? + + : + <> + { + data.map(item => { + return ( + + ) + }) + } + + } + + ) +} + +export default NotificationPage \ No newline at end of file diff --git a/src/components/modules/Notification/index.tsx b/src/components/modules/Notification/index.tsx new file mode 100644 index 000000000..64413501a --- /dev/null +++ b/src/components/modules/Notification/index.tsx @@ -0,0 +1,2 @@ +export { default as NotificationPage } from './NotificationPage/NotificationPage' +export { default as NotificationEmptyPage } from './NotificationEmptyPage/NotificationEmptyPage' \ No newline at end of file From 9987eda297595c1a49c7ea7641edb1a661099cef Mon Sep 17 00:00:00 2001 From: Quangnhankie Date: Tue, 14 Sep 2021 16:10:40 +0700 Subject: [PATCH 061/100] bug: spacing and button common at accountSignIn --- report.20210914.152506.13752.0.001.json | 634 ++++++++++++++++++ report.20210914.155439.6404.0.001.json | 634 ++++++++++++++++++ .../AccountSignIn/AccountSignIn.module.scss | 6 +- .../account/AccountSignIn/AccountSignIn.tsx | 2 +- .../home/HomeSpice/HomeSpice.module.scss | 2 +- 5 files changed, 1274 insertions(+), 4 deletions(-) create mode 100644 report.20210914.152506.13752.0.001.json create mode 100644 report.20210914.155439.6404.0.001.json diff --git a/report.20210914.152506.13752.0.001.json b/report.20210914.152506.13752.0.001.json new file mode 100644 index 000000000..33f018f17 --- /dev/null +++ b/report.20210914.152506.13752.0.001.json @@ -0,0 +1,634 @@ + +{ + "header": { + "reportVersion": 1, + "event": "Allocation failed - JavaScript heap out of memory", + "trigger": "FatalError", + "filename": "report.20210914.152506.13752.0.001.json", + "dumpEventTime": "2021-09-14T15:25:06Z", + "dumpEventTimeStamp": "1631607906529", + "processId": 13752, + "cwd": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce", + "commandLine": [ + "node", + "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce\\node_modules\\.bin\\\\..\\next\\dist\\bin\\next", + "dev" + ], + "nodejsVersion": "v12.15.0", + "wordSize": 64, + "arch": "x64", + "platform": "win32", + "componentVersions": { + "node": "12.15.0", + "v8": "7.7.299.13-node.16", + "uv": "1.33.1", + "zlib": "1.2.11", + "brotli": "1.0.7", + "ares": "1.15.0", + "modules": "72", + "nghttp2": "1.40.0", + "napi": "5", + "llhttp": "2.0.4", + "http_parser": "2.9.3", + "openssl": "1.1.1d", + "cldr": "35.1", + "icu": "64.2", + "tz": "2019c", + "unicode": "12.1" + }, + "release": { + "name": "node", + "lts": "Erbium", + "headersUrl": "https://nodejs.org/download/release/v12.15.0/node-v12.15.0-headers.tar.gz", + "sourceUrl": "https://nodejs.org/download/release/v12.15.0/node-v12.15.0.tar.gz", + "libUrl": "https://nodejs.org/download/release/v12.15.0/win-x64/node.lib" + }, + "osName": "Windows_NT", + "osRelease": "10.0.19043", + "osVersion": "Windows 10 Pro", + "osMachine": "x86_64", + "cpus": [ + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 121689328, + "nice": 0, + "sys": 59562031, + "idle": 448265421, + "irq": 6192437 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 124353031, + "nice": 0, + "sys": 45453531, + "idle": 459710031, + "irq": 1005640 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 137889625, + "nice": 0, + "sys": 46363593, + "idle": 445263359, + "irq": 561437 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 139168734, + "nice": 0, + "sys": 43450859, + "idle": 446897000, + "irq": 467531 + } + ], + "networkInterfaces": [ + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "2402:800:6318:9d24:f937:34a5:8214:a074", + "netmask": "ffff:ffff:ffff:ffff::", + "family": "IPv6", + "scopeid": 0 + }, + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "2402:800:6318:9d24:d442:f151:35d4:8126", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "family": "IPv6", + "scopeid": 0 + }, + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "fe80::f937:34a5:8214:a074", + "netmask": "ffff:ffff:ffff:ffff::", + "family": "IPv6", + "scopeid": 21 + }, + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "192.168.1.13", + "netmask": "255.255.255.0", + "family": "IPv4" + }, + { + "name": "Loopback Pseudo-Interface 1", + "internal": true, + "mac": "00:00:00:00:00:00", + "address": "::1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "family": "IPv6", + "scopeid": 0 + }, + { + "name": "Loopback Pseudo-Interface 1", + "internal": true, + "mac": "00:00:00:00:00:00", + "address": "127.0.0.1", + "netmask": "255.0.0.0", + "family": "IPv4" + } + ], + "host": "DESKTOP-TILU55O" + }, + "javascriptStack": { + "message": "No stack.", + "stack": [ + "Unavailable." + ] + }, + "nativeStack": [ + { + "pc": "0x00007ff794f61759", + "symbol": "std::basic_ostream >::operator<<+10873" + }, + { + "pc": "0x00007ff794f65b7c", + "symbol": "std::basic_ostream >::operator<<+28316" + }, + { + "pc": "0x00007ff794f64b38", + "symbol": "std::basic_ostream >::operator<<+24152" + }, + { + "pc": "0x00007ff79505446b", + "symbol": "v8::base::CPU::has_sse+37723" + }, + { + "pc": "0x00007ff795858d9e", + "symbol": "v8::Isolate::ReportExternalAllocationLimitReached+94" + }, + { + "pc": "0x00007ff795840de1", + "symbol": "v8::SharedArrayBuffer::Externalize+833" + }, + { + "pc": "0x00007ff79570e6ac", + "symbol": "v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436" + }, + { + "pc": "0x00007ff795719a50", + "symbol": "v8::internal::Heap::ProtectUnprotectedMemoryChunks+1312" + }, + { + "pc": "0x00007ff795716584", + "symbol": "v8::internal::Heap::PageFlagsAreConsistent+3204" + }, + { + "pc": "0x00007ff79570be13", + "symbol": "v8::internal::Heap::CollectGarbage+1283" + }, + { + "pc": "0x00007ff79570a5e4", + "symbol": "v8::internal::Heap::AddRetainedMap+2356" + }, + { + "pc": "0x00007ff79572b8b5", + "symbol": "v8::internal::Factory::NewFillerObject+53" + }, + { + "pc": "0x00007ff795497a17", + "symbol": "v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator=+3687" + }, + { + "pc": "0x00007ff795c84d3d", + "symbol": "v8::internal::SetupIsolateDelegate::SetupHeap+567949" + }, + { + "pc": "0x000003ffcfc4917f", + "symbol": "" + } + ], + "javascriptHeap": { + "totalMemory": 2191572992, + "totalCommittedMemory": 2191572992, + "usedMemory": 2084024144, + "availableMemory": 44664008, + "memoryLimit": 2197815296, + "heapSpaces": { + "read_only_space": { + "memorySize": 262144, + "committedMemory": 262144, + "capacity": 261872, + "used": 32296, + "available": 229576 + }, + "new_space": { + "memorySize": 33554432, + "committedMemory": 33554432, + "capacity": 16759808, + "used": 5279488, + "available": 11480320 + }, + "old_space": { + "memorySize": 1724231680, + "committedMemory": 1724231680, + "capacity": 1661472712, + "used": 1651520712, + "available": 9952000 + }, + "code_space": { + "memorySize": 4620288, + "committedMemory": 4620288, + "capacity": 3800032, + "used": 3800032, + "available": 0 + }, + "map_space": { + "memorySize": 9179136, + "committedMemory": 9179136, + "capacity": 4157280, + "used": 4157280, + "available": 0 + }, + "large_object_space": { + "memorySize": 418529280, + "committedMemory": 418529280, + "capacity": 418137088, + "used": 418137088, + "available": 0 + }, + "code_large_object_space": { + "memorySize": 1196032, + "committedMemory": 1196032, + "capacity": 1097248, + "used": 1097248, + "available": 0 + }, + "new_large_object_space": { + "memorySize": 0, + "committedMemory": 0, + "capacity": 16759808, + "used": 0, + "available": 16759808 + } + } + }, + "resourceUsage": { + "userCpuSeconds": 2176.56, + "kernelCpuSeconds": 163.562, + "cpuConsumptionPercent": 12.5503, + "maxRss": 3128586240, + "pageFaults": { + "IORequired": 15608643, + "IONotRequired": 0 + }, + "fsActivity": { + "reads": 46277, + "writes": 785844 + } + }, + "libuv": [ + ], + "environmentVariables": { + "=G:": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce", + "ALLUSERSPROFILE": "C:\\ProgramData", + "ANDROID_HOME": "G:\\ASDK", + "ANDROID_SDK_ROOT": "G:\\ASDK", + "APPDATA": "C:\\Users\\nhan\\AppData\\Roaming", + "ChocolateyInstall": "C:\\ProgramData\\chocolatey", + "ChocolateyLastPathUpdate": "132608575831335062", + "CHROME_CRASHPAD_PIPE_NAME": "\\\\.\\pipe\\crashpad_11504_LVARTKDVZJSQMMYN", + "CLASSPATH": "C:\\Program Files\\Java\\jdk1.8.0_231\\bin", + "COLORTERM": "truecolor", + "COMMERCE_CUSTOMERAUTH_ENABLED": "true", + "COMMERCE_PROVIDER": "vendure", + "CommonProgramFiles": "C:\\Program Files\\Common Files", + "CommonProgramFiles(x86)": "C:\\Program Files (x86)\\Common Files", + "CommonProgramW6432": "C:\\Program Files\\Common Files", + "COMPUTERNAME": "DESKTOP-TILU55O", + "ComSpec": "C:\\WINDOWS\\system32\\cmd.exe", + "dp0": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce\\node_modules\\.bin\\", + "DriverData": "C:\\Windows\\System32\\Drivers\\DriverData", + "FPS_BROWSER_APP_PROFILE_STRING": "Internet Explorer", + "FPS_BROWSER_USER_PROFILE_STRING": "Default", + "GIT_ASKPASS": "c:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass.sh", + "GIT_LFS_PATH": "C:\\Program Files\\Git LFS", + "HOME": "C:\\Users\\nhan", + "HOMEDRIVE": "C:", + "HOMEPATH": "\\Users\\nhan", + "INIT_CWD": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce", + "JAVA_HOME": "C:\\Program Files\\Java\\jdk1.8.0_281", + "LANG": "en_US.UTF-8", + "LOCALAPPDATA": "C:\\Users\\nhan\\AppData\\Local", + "LOGONSERVER": "\\\\DESKTOP-TILU55O", + "NEXT_PUBLIC_VENDURE_LOCAL_URL": "/vendure-shop-api", + "NEXT_PUBLIC_VENDURE_SHOP_API_URL": "https://demo.vendure.io/shop-api", + "NODE": "C:\\Program Files\\nodejs\\node.exe", + "NODE_ENV": "development", + "NODE_EXE": "C:\\Program Files\\nodejs\\\\node.exe", + "NODE_OPTIONS": "'--inspect' ", + "NPM_CLI_JS": "C:\\Program Files\\nodejs\\\\node_modules\\npm\\bin\\npm-cli.js", + "npm_config_access": "", + "npm_config_allow_same_version": "", + "npm_config_also": "", + "npm_config_always_auth": "", + "npm_config_argv": "{\"remain\":[],\"cooked\":[\"run\",\"dev-windows\"],\"original\":[\"run\",\"dev-windows\"]}", + "npm_config_audit": "true", + "npm_config_audit_level": "low", + "npm_config_auth_type": "legacy", + "npm_config_before": "", + "npm_config_bin_links": "true", + "npm_config_browser": "", + "npm_config_ca": "", + "npm_config_cache": "C:\\Users\\nhan\\AppData\\Roaming\\npm-cache", + "npm_config_cache_lock_retries": "10", + "npm_config_cache_lock_stale": "60000", + "npm_config_cache_lock_wait": "10000", + "npm_config_cache_max": "Infinity", + "npm_config_cache_min": "10", + "npm_config_cafile": "", + "npm_config_cert": "", + "npm_config_cidr": "", + "npm_config_color": "true", + "npm_config_commit_hooks": "true", + "npm_config_depth": "Infinity", + "npm_config_description": "true", + "npm_config_dev": "", + "npm_config_dry_run": "", + "npm_config_editor": "notepad.exe", + "npm_config_engine_strict": "", + "npm_config_fetch_retries": "2", + "npm_config_fetch_retry_factor": "10", + "npm_config_fetch_retry_maxtimeout": "60000", + "npm_config_fetch_retry_mintimeout": "10000", + "npm_config_force": "", + "npm_config_format_package_lock": "true", + "npm_config_fund": "true", + "npm_config_git": "git", + "npm_config_git_tag_version": "true", + "npm_config_global": "", + "npm_config_globalconfig": "C:\\Users\\nhan\\AppData\\Roaming\\npm\\etc\\npmrc", + "npm_config_globalignorefile": "C:\\Users\\nhan\\AppData\\Roaming\\npm\\etc\\npmignore", + "npm_config_global_style": "", + "npm_config_group": "", + "npm_config_ham_it_up": "", + "npm_config_heading": "npm", + "npm_config_https_proxy": "", + "npm_config_if_present": "", + "npm_config_ignore_prepublish": "", + "npm_config_ignore_scripts": "", + "npm_config_init_author_email": "", + "npm_config_init_author_name": "", + "npm_config_init_author_url": "", + "npm_config_init_license": "ISC", + "npm_config_init_module": "C:\\Users\\nhan\\.npm-init.js", + "npm_config_init_version": "1.0.0", + "npm_config_json": "", + "npm_config_key": "", + "npm_config_legacy_bundling": "", + "npm_config_link": "", + "npm_config_local_address": "", + "npm_config_loglevel": "notice", + "npm_config_logs_max": "10", + "npm_config_long": "", + "npm_config_maxsockets": "50", + "npm_config_message": "%s", + "npm_config_metrics_registry": "https://registry.npmjs.org/", + "npm_config_node_gyp": "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js", + "npm_config_node_options": "", + "npm_config_node_version": "12.15.0", + "npm_config_noproxy": "", + "npm_config_offline": "", + "npm_config_onload_script": "", + "npm_config_only": "", + "npm_config_optional": "true", + "npm_config_otp": "", + "npm_config_package_lock": "true", + "npm_config_package_lock_only": "", + "npm_config_parseable": "", + "npm_config_prefer_offline": "", + "npm_config_prefer_online": "", + "npm_config_prefix": "C:\\Users\\nhan\\AppData\\Roaming\\npm", + "npm_config_preid": "", + "npm_config_production": "", + "npm_config_progress": "true", + "npm_config_proxy": "", + "npm_config_read_only": "", + "npm_config_rebuild_bundle": "true", + "npm_config_registry": "https://registry.npmjs.org/", + "npm_config_rollback": "true", + "npm_config_save": "true", + "npm_config_save_bundle": "", + "npm_config_save_dev": "", + "npm_config_save_exact": "", + "npm_config_save_optional": "", + "npm_config_save_prefix": "^", + "npm_config_save_prod": "", + "npm_config_scope": "", + "npm_config_scripts_prepend_node_path": "warn-only", + "npm_config_script_shell": "", + "npm_config_searchexclude": "", + "npm_config_searchlimit": "20", + "npm_config_searchopts": "", + "npm_config_searchstaleness": "900", + "npm_config_send_metrics": "", + "npm_config_shell": "C:\\WINDOWS\\system32\\cmd.exe", + "npm_config_shrinkwrap": "true", + "npm_config_sign_git_commit": "", + "npm_config_sign_git_tag": "", + "npm_config_sso_poll_frequency": "500", + "npm_config_sso_type": "oauth", + "npm_config_strict_ssl": "true", + "npm_config_tag": "latest", + "npm_config_tag_version_prefix": "v", + "npm_config_timing": "", + "npm_config_tmp": "C:\\Users\\nhan\\AppData\\Local\\Temp", + "npm_config_umask": "0000", + "npm_config_unicode": "", + "npm_config_unsafe_perm": "true", + "npm_config_update_notifier": "true", + "npm_config_usage": "", + "npm_config_user": "", + "npm_config_userconfig": "C:\\Users\\nhan\\.npmrc", + "npm_config_user_agent": "npm/6.13.4 node/v12.15.0 win32 x64", + "npm_config_version": "", + "npm_config_versions": "", + "npm_config_viewer": "browser", + "npm_execpath": "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js", + "npm_lifecycle_event": "dev-windows", + "npm_lifecycle_script": "set NODE_OPTIONS='--inspect' && set PORT=3005 && next dev", + "npm_node_execpath": "C:\\Program Files\\nodejs\\node.exe", + "npm_package_dependencies_autoprefixer": "^10.2.6", + "npm_package_dependencies_body_scroll_lock": "^3.1.5", + "npm_package_dependencies_classnames": "^2.3.1", + "npm_package_dependencies_cookie": "^0.4.1", + "npm_package_dependencies_email_validator": "^2.0.4", + "npm_package_dependencies_eslint": "^7.32.0", + "npm_package_dependencies_eslint_config_next": "^11.1.2", + "npm_package_dependencies_immutability_helper": "^3.1.1", + "npm_package_dependencies_js_cookie": "^2.2.1", + "npm_package_dependencies_keen_slider": "^5.5.1", + "npm_package_dependencies_lodash_debounce": "^4.0.8", + "npm_package_dependencies_lodash_random": "^3.2.0", + "npm_package_dependencies_lodash_throttle": "^4.1.1", + "npm_package_dependencies_next": "^11.0.0", + "npm_package_dependencies_next_seo": "^4.26.0", + "npm_package_dependencies_next_themes": "^0.0.14", + "npm_package_dependencies_postcss": "^8.3.5", + "npm_package_dependencies_postcss_nesting": "^8.0.1", + "npm_package_dependencies_react": "^17.0.2", + "npm_package_dependencies_react_dom": "^17.0.2", + "npm_package_dependencies_react_fast_marquee": "^1.1.4", + "npm_package_dependencies_react_merge_refs": "^1.1.0", + "npm_package_dependencies_react_player": "^2.9.0", + "npm_package_dependencies_react_use_measure": "^2.0.4", + "npm_package_dependencies_sass": "^1.38.0", + "npm_package_dependencies_swell_js": "^4.0.0-next.0", + "npm_package_dependencies_swr": "^0.5.6", + "npm_package_dependencies_tabbable": "^5.2.0", + "npm_package_dependencies_tailwindcss": "^2.2.2", + "npm_package_dependencies_uuidv4": "^6.2.10", + "npm_package_dependencies__react_spring_web": "^9.2.1", + "npm_package_dependencies__vercel_fetch": "^6.1.0", + "npm_package_description": "[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fcommerce&project-name=commerce&repo-name=commerce&demo-title=Next.js%20Commerce&demo-description=An%20all-in-one%20starter%20kit%20for%20high-performance%20e-commerce%20sites.&demo-url=https%3A%2F%2Fdemo.vercel.store&demo-image=https%3A%2F%2Fbigcommerce-demo-asset-ksvtgfvnd.vercel.app%2Fbigcommerce.png&integration-ids=oac_MuWZiE4jtmQ2ejZQaQ7ncuDT)", + "npm_package_devDependencies_deepmerge": "^4.2.2", + "npm_package_devDependencies_eslint_config_prettier": "^8.3.0", + "npm_package_devDependencies_graphql": "^15.5.1", + "npm_package_devDependencies_husky": "^6.0.0", + "npm_package_devDependencies_lint_staged": "^11.0.0", + "npm_package_devDependencies_postcss_flexbugs_fixes": "^5.0.2", + "npm_package_devDependencies_postcss_import": "^14.0.2", + "npm_package_devDependencies_postcss_preset_env": "^6.7.0", + "npm_package_devDependencies_prettier": "^2.3.0", + "npm_package_devDependencies_typescript": "4.3.4", + "npm_package_devDependencies__graphql_codegen_cli": "^1.21.5", + "npm_package_devDependencies__graphql_codegen_schema_ast": "^1.18.3", + "npm_package_devDependencies__graphql_codegen_typescript": "^1.22.2", + "npm_package_devDependencies__graphql_codegen_typescript_operations": "^1.18.1", + "npm_package_devDependencies__next_bundle_analyzer": "^10.2.3", + "npm_package_devDependencies__types_body_scroll_lock": "^2.6.1", + "npm_package_devDependencies__types_cookie": "^0.4.0", + "npm_package_devDependencies__types_js_cookie": "^2.2.6", + "npm_package_devDependencies__types_lodash_debounce": "^4.0.6", + "npm_package_devDependencies__types_lodash_random": "^3.2.6", + "npm_package_devDependencies__types_lodash_throttle": "^4.1.6", + "npm_package_devDependencies__types_node": "^15.12.4", + "npm_package_devDependencies__types_react": "^17.0.8", + "npm_package_engines_node": ">=14.x", + "npm_package_gitHead": "6cad0d89cac27109ededf5d8cbaf23280a95fea9", + "npm_package_license": "MIT", + "npm_package_lint_staged_______js_jsx_ts_tsx__0": "prettier --write", + "npm_package_lint_staged_______js_jsx_ts_tsx__1": "git add", + "npm_package_lint_staged_______md_mdx_json__0": "prettier --write", + "npm_package_lint_staged_______md_mdx_json__1": "git add", + "npm_package_name": "nextjs-commerce", + "npm_package_next_unused_alias__assets___0": "assets/*", + "npm_package_next_unused_alias__components___0": "components/*", + "npm_package_next_unused_alias__config___0": "config/*", + "npm_package_next_unused_alias__lib___0": "lib/*", + "npm_package_next_unused_alias__utils___0": "utils/*", + "npm_package_next_unused_debug": "true", + "npm_package_next_unused_entrypoints_0": "pages", + "npm_package_next_unused_include_0": "components", + "npm_package_next_unused_include_1": "lib", + "npm_package_next_unused_include_2": "pages", + "npm_package_readmeFilename": "README.md", + "npm_package_scripts_analyze": "BUNDLE_ANALYZE=both yarn build", + "npm_package_scripts_build": "next build", + "npm_package_scripts_dev": "NODE_OPTIONS='--inspect' PORT=3005 next dev", + "npm_package_scripts_dev_windows": "set NODE_OPTIONS='--inspect' && set PORT=3005 && next dev", + "npm_package_scripts_find_unused": "npx next-unused", + "npm_package_scripts_generate": "graphql-codegen", + "npm_package_scripts_generate_definitions": "node framework/bigcommerce/scripts/generate-definitions.js", + "npm_package_scripts_generate_shopify": "DOTENV_CONFIG_PATH=./.env.local graphql-codegen -r dotenv/config --config framework/shopify/codegen.json", + "npm_package_scripts_generate_vendure": "graphql-codegen --config framework/vendure/codegen.json", + "npm_package_scripts_prettier_fix": "prettier --write .", + "npm_package_scripts_start": "PORT=3005 next start", + "npm_package_sideEffects": "false", + "npm_package_version": "1.0.0", + "NPM_PREFIX_NPM_CLI_JS": "C:\\Users\\nhan\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js", + "NUMBER_OF_PROCESSORS": "4", + "OneDrive": "C:\\Users\\nhan\\OneDrive", + "OneDriveConsumer": "C:\\Users\\nhan\\OneDrive", + "OPENSSL_CONF": "C:\\Program Files\\PostgreSQL\\psqlODBC\\etc\\openssl.cnf", + "ORIGINAL_XDG_CURRENT_DESKTOP": "undefined", + "OS": "Windows_NT", + "Path": "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\npm-lifecycle\\node-gyp-bin;G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce\\node_modules\\.bin;C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Program Files\\Java\\jdk1.8.0_231\\bin;C:\\Program Files\\nodejs\\;C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin;C:\\Program Files\\Git\\cmd;C:\\Program Files\\MongoDB\\Server\\4.2\\bin;;C:\\Program Files\\Git LFS;D:\\hoc-fpt\\code-tren-lop\\php\\xampp3\\php;C:\\ProgramData\\ComposerSetup\\bin;C:\\ProgramData\\chocolatey\\bin;C:\\Program Files\\AdoptOpenJDK\\jdk8u192-b12\\bin;C:\\Program Files\\Java\\jdk1.8.0_211\\bin;C:\\Android\\android-sdk\\tools;C:\\Android\\android-sdk\\platform-tools;C:\\Android\\android-sdk\\tools\\bin;C:\\Program Files\\MySQL\\MySQL Shell 8.0\\bin\\;C:\\Program Files\\Java\\jdk1.8.0_231\\bin;C:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\Users\\nhan\\AppData\\Roaming\\npm;C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin;C:\\Program Files\\heroku\\bin;C:\\Users\\nhan\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\nhan\\AppData\\Roaming\\Composer\\vendor\\bin", + "PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JSE;.WSF;.WSH;.MSC;.CPL", + "PORT": "3005 ", + "PROCESSOR_ARCHITECTURE": "AMD64", + "PROCESSOR_IDENTIFIER": "Intel64 Family 6 Model 58 Stepping 9, GenuineIntel", + "PROCESSOR_LEVEL": "6", + "PROCESSOR_REVISION": "3a09", + "ProgramData": "C:\\ProgramData", + "ProgramFiles": "C:\\Program Files", + "ProgramFiles(x86)": "C:\\Program Files (x86)", + "ProgramW6432": "C:\\Program Files", + "PROMPT": "$P$G", + "PSModulePath": "C:\\Users\\nhan\\Documents\\WindowsPowerShell\\Modules;C:\\Program Files\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules", + "PUBLIC": "C:\\Users\\Public", + "SESSIONNAME": "Console", + "SystemDrive": "C:", + "SystemRoot": "C:\\WINDOWS", + "TEMP": "C:\\Users\\nhan\\AppData\\Local\\Temp", + "TERM_PROGRAM": "vscode", + "TERM_PROGRAM_VERSION": "1.60.0", + "TMP": "C:\\Users\\nhan\\AppData\\Local\\Temp", + "TRACE_ID": "c2ff45063f82658e", + "USERDOMAIN": "DESKTOP-TILU55O", + "USERDOMAIN_ROAMINGPROFILE": "DESKTOP-TILU55O", + "USERNAME": "nhan", + "USERPROFILE": "C:\\Users\\nhan", + "VSCODE_GIT_ASKPASS_MAIN": "c:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass-main.js", + "VSCODE_GIT_ASKPASS_NODE": "C:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe", + "VSCODE_GIT_IPC_HANDLE": "\\\\.\\pipe\\vscode-git-d5d8071aa9-sock", + "windir": "C:\\WINDOWS", + "_prog": "node", + "__NEXT_PROCESSED_ENV": "true" + }, + "sharedObjects": [ + "C:\\Program Files\\nodejs\\node.exe", + "C:\\WINDOWS\\SYSTEM32\\ntdll.dll", + "C:\\WINDOWS\\System32\\KERNEL32.DLL", + "C:\\WINDOWS\\System32\\KERNELBASE.dll", + "C:\\WINDOWS\\System32\\WS2_32.dll", + "C:\\WINDOWS\\System32\\RPCRT4.dll", + "C:\\WINDOWS\\System32\\ADVAPI32.dll", + "C:\\WINDOWS\\System32\\msvcrt.dll", + "C:\\WINDOWS\\System32\\sechost.dll", + "C:\\WINDOWS\\System32\\USER32.dll", + "C:\\WINDOWS\\System32\\win32u.dll", + "C:\\WINDOWS\\System32\\GDI32.dll", + "C:\\WINDOWS\\System32\\gdi32full.dll", + "C:\\WINDOWS\\System32\\msvcp_win.dll", + "C:\\WINDOWS\\System32\\ucrtbase.dll", + "C:\\WINDOWS\\System32\\PSAPI.DLL", + "C:\\WINDOWS\\System32\\CRYPT32.dll", + "C:\\WINDOWS\\System32\\bcrypt.dll", + "C:\\WINDOWS\\SYSTEM32\\dbghelp.dll", + "C:\\WINDOWS\\SYSTEM32\\IPHLPAPI.DLL", + "C:\\WINDOWS\\SYSTEM32\\USERENV.dll", + "C:\\WINDOWS\\SYSTEM32\\WINMM.dll", + "C:\\WINDOWS\\System32\\IMM32.DLL", + "C:\\WINDOWS\\SYSTEM32\\powrprof.dll", + "C:\\WINDOWS\\SYSTEM32\\UMPDC.dll", + "C:\\WINDOWS\\SYSTEM32\\CRYPTBASE.DLL", + "C:\\WINDOWS\\system32\\uxtheme.dll", + "C:\\WINDOWS\\System32\\combase.dll", + "C:\\WINDOWS\\system32\\mswsock.dll", + "C:\\WINDOWS\\SYSTEM32\\kernel.appcore.dll", + "C:\\WINDOWS\\System32\\bcryptprimitives.dll", + "C:\\WINDOWS\\System32\\NSI.dll", + "C:\\WINDOWS\\SYSTEM32\\dhcpcsvc6.DLL", + "C:\\WINDOWS\\SYSTEM32\\dhcpcsvc.DLL", + "C:\\WINDOWS\\SYSTEM32\\DNSAPI.dll", + "C:\\WINDOWS\\system32\\napinsp.dll", + "C:\\WINDOWS\\system32\\pnrpnsp.dll", + "C:\\WINDOWS\\system32\\wshbth.dll", + "C:\\WINDOWS\\system32\\NLAapi.dll", + "C:\\WINDOWS\\System32\\winrnr.dll", + "C:\\Windows\\System32\\rasadhlp.dll", + "C:\\WINDOWS\\System32\\fwpuclnt.dll" + ] +} \ No newline at end of file diff --git a/report.20210914.155439.6404.0.001.json b/report.20210914.155439.6404.0.001.json new file mode 100644 index 000000000..e729af963 --- /dev/null +++ b/report.20210914.155439.6404.0.001.json @@ -0,0 +1,634 @@ + +{ + "header": { + "reportVersion": 1, + "event": "Allocation failed - JavaScript heap out of memory", + "trigger": "FatalError", + "filename": "report.20210914.155439.6404.0.001.json", + "dumpEventTime": "2021-09-14T15:54:39Z", + "dumpEventTimeStamp": "1631609679847", + "processId": 6404, + "cwd": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce", + "commandLine": [ + "node", + "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce\\node_modules\\.bin\\\\..\\next\\dist\\bin\\next", + "dev" + ], + "nodejsVersion": "v12.15.0", + "wordSize": 64, + "arch": "x64", + "platform": "win32", + "componentVersions": { + "node": "12.15.0", + "v8": "7.7.299.13-node.16", + "uv": "1.33.1", + "zlib": "1.2.11", + "brotli": "1.0.7", + "ares": "1.15.0", + "modules": "72", + "nghttp2": "1.40.0", + "napi": "5", + "llhttp": "2.0.4", + "http_parser": "2.9.3", + "openssl": "1.1.1d", + "cldr": "35.1", + "icu": "64.2", + "tz": "2019c", + "unicode": "12.1" + }, + "release": { + "name": "node", + "lts": "Erbium", + "headersUrl": "https://nodejs.org/download/release/v12.15.0/node-v12.15.0-headers.tar.gz", + "sourceUrl": "https://nodejs.org/download/release/v12.15.0/node-v12.15.0.tar.gz", + "libUrl": "https://nodejs.org/download/release/v12.15.0/win-x64/node.lib" + }, + "osName": "Windows_NT", + "osRelease": "10.0.19043", + "osVersion": "Windows 10 Pro", + "osMachine": "x86_64", + "cpus": [ + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 122321031, + "nice": 0, + "sys": 59816781, + "idle": 449152296, + "irq": 6214000 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 125016468, + "nice": 0, + "sys": 45652765, + "idle": 460620687, + "irq": 1009312 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 138604812, + "nice": 0, + "sys": 46560562, + "idle": 446124531, + "irq": 563593 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 139890312, + "nice": 0, + "sys": 43625859, + "idle": 447773750, + "irq": 469156 + } + ], + "networkInterfaces": [ + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "2402:800:6318:9d24:f937:34a5:8214:a074", + "netmask": "ffff:ffff:ffff:ffff::", + "family": "IPv6", + "scopeid": 0 + }, + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "2402:800:6318:9d24:d442:f151:35d4:8126", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "family": "IPv6", + "scopeid": 0 + }, + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "fe80::f937:34a5:8214:a074", + "netmask": "ffff:ffff:ffff:ffff::", + "family": "IPv6", + "scopeid": 21 + }, + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "192.168.1.13", + "netmask": "255.255.255.0", + "family": "IPv4" + }, + { + "name": "Loopback Pseudo-Interface 1", + "internal": true, + "mac": "00:00:00:00:00:00", + "address": "::1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "family": "IPv6", + "scopeid": 0 + }, + { + "name": "Loopback Pseudo-Interface 1", + "internal": true, + "mac": "00:00:00:00:00:00", + "address": "127.0.0.1", + "netmask": "255.0.0.0", + "family": "IPv4" + } + ], + "host": "DESKTOP-TILU55O" + }, + "javascriptStack": { + "message": "No stack.", + "stack": [ + "Unavailable." + ] + }, + "nativeStack": [ + { + "pc": "0x00007ff794f61759", + "symbol": "std::basic_ostream >::operator<<+10873" + }, + { + "pc": "0x00007ff794f65b7c", + "symbol": "std::basic_ostream >::operator<<+28316" + }, + { + "pc": "0x00007ff794f64b38", + "symbol": "std::basic_ostream >::operator<<+24152" + }, + { + "pc": "0x00007ff79505446b", + "symbol": "v8::base::CPU::has_sse+37723" + }, + { + "pc": "0x00007ff795858d9e", + "symbol": "v8::Isolate::ReportExternalAllocationLimitReached+94" + }, + { + "pc": "0x00007ff795840de1", + "symbol": "v8::SharedArrayBuffer::Externalize+833" + }, + { + "pc": "0x00007ff79570e6ac", + "symbol": "v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436" + }, + { + "pc": "0x00007ff795719a50", + "symbol": "v8::internal::Heap::ProtectUnprotectedMemoryChunks+1312" + }, + { + "pc": "0x00007ff795716584", + "symbol": "v8::internal::Heap::PageFlagsAreConsistent+3204" + }, + { + "pc": "0x00007ff79570be13", + "symbol": "v8::internal::Heap::CollectGarbage+1283" + }, + { + "pc": "0x00007ff79570a5e4", + "symbol": "v8::internal::Heap::AddRetainedMap+2356" + }, + { + "pc": "0x00007ff79572b8b5", + "symbol": "v8::internal::Factory::NewFillerObject+53" + }, + { + "pc": "0x00007ff795497b89", + "symbol": "v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator=+4057" + }, + { + "pc": "0x00007ff795c84d3d", + "symbol": "v8::internal::SetupIsolateDelegate::SetupHeap+567949" + }, + { + "pc": "0x0000004893120f89", + "symbol": "" + } + ], + "javascriptHeap": { + "totalMemory": 2180952064, + "totalCommittedMemory": 2180952064, + "usedMemory": 2077263400, + "availableMemory": 46925016, + "memoryLimit": 2197815296, + "heapSpaces": { + "read_only_space": { + "memorySize": 262144, + "committedMemory": 262144, + "capacity": 261872, + "used": 32296, + "available": 229576 + }, + "new_space": { + "memorySize": 33554432, + "committedMemory": 33554432, + "capacity": 16759808, + "used": 3774664, + "available": 12985144 + }, + "old_space": { + "memorySize": 1710075904, + "committedMemory": 1710075904, + "capacity": 1639289184, + "used": 1639201928, + "available": 87256 + }, + "code_space": { + "memorySize": 3571712, + "committedMemory": 3571712, + "capacity": 2926848, + "used": 2926848, + "available": 0 + }, + "map_space": { + "memorySize": 5771264, + "committedMemory": 5771264, + "capacity": 3972960, + "used": 3972960, + "available": 0 + }, + "large_object_space": { + "memorySize": 426520576, + "committedMemory": 426520576, + "capacity": 426257456, + "used": 426257456, + "available": 0 + }, + "code_large_object_space": { + "memorySize": 1196032, + "committedMemory": 1196032, + "capacity": 1097248, + "used": 1097248, + "available": 0 + }, + "new_large_object_space": { + "memorySize": 0, + "committedMemory": 0, + "capacity": 16759808, + "used": 0, + "available": 16759808 + } + } + }, + "resourceUsage": { + "userCpuSeconds": 939.421, + "kernelCpuSeconds": 35.375, + "cpuConsumptionPercent": 103.702, + "maxRss": 3224653824, + "pageFaults": { + "IORequired": 3779383, + "IONotRequired": 0 + }, + "fsActivity": { + "reads": 14745, + "writes": 85913 + } + }, + "libuv": [ + ], + "environmentVariables": { + "=G:": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce", + "ALLUSERSPROFILE": "C:\\ProgramData", + "ANDROID_HOME": "G:\\ASDK", + "ANDROID_SDK_ROOT": "G:\\ASDK", + "APPDATA": "C:\\Users\\nhan\\AppData\\Roaming", + "ChocolateyInstall": "C:\\ProgramData\\chocolatey", + "ChocolateyLastPathUpdate": "132608575831335062", + "CHROME_CRASHPAD_PIPE_NAME": "\\\\.\\pipe\\crashpad_11504_LVARTKDVZJSQMMYN", + "CLASSPATH": "C:\\Program Files\\Java\\jdk1.8.0_231\\bin", + "COLORTERM": "truecolor", + "COMMERCE_CUSTOMERAUTH_ENABLED": "true", + "COMMERCE_PROVIDER": "vendure", + "CommonProgramFiles": "C:\\Program Files\\Common Files", + "CommonProgramFiles(x86)": "C:\\Program Files (x86)\\Common Files", + "CommonProgramW6432": "C:\\Program Files\\Common Files", + "COMPUTERNAME": "DESKTOP-TILU55O", + "ComSpec": "C:\\WINDOWS\\system32\\cmd.exe", + "dp0": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce\\node_modules\\.bin\\", + "DriverData": "C:\\Windows\\System32\\Drivers\\DriverData", + "FPS_BROWSER_APP_PROFILE_STRING": "Internet Explorer", + "FPS_BROWSER_USER_PROFILE_STRING": "Default", + "GIT_ASKPASS": "c:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass.sh", + "GIT_LFS_PATH": "C:\\Program Files\\Git LFS", + "HOME": "C:\\Users\\nhan", + "HOMEDRIVE": "C:", + "HOMEPATH": "\\Users\\nhan", + "INIT_CWD": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce", + "JAVA_HOME": "C:\\Program Files\\Java\\jdk1.8.0_281", + "LANG": "en_US.UTF-8", + "LOCALAPPDATA": "C:\\Users\\nhan\\AppData\\Local", + "LOGONSERVER": "\\\\DESKTOP-TILU55O", + "NEXT_PUBLIC_VENDURE_LOCAL_URL": "/vendure-shop-api", + "NEXT_PUBLIC_VENDURE_SHOP_API_URL": "https://demo.vendure.io/shop-api", + "NODE": "C:\\Program Files\\nodejs\\node.exe", + "NODE_ENV": "development", + "NODE_EXE": "C:\\Program Files\\nodejs\\\\node.exe", + "NODE_OPTIONS": "'--inspect' ", + "NPM_CLI_JS": "C:\\Program Files\\nodejs\\\\node_modules\\npm\\bin\\npm-cli.js", + "npm_config_access": "", + "npm_config_allow_same_version": "", + "npm_config_also": "", + "npm_config_always_auth": "", + "npm_config_argv": "{\"remain\":[],\"cooked\":[\"run\",\"dev-windows\"],\"original\":[\"run\",\"dev-windows\"]}", + "npm_config_audit": "true", + "npm_config_audit_level": "low", + "npm_config_auth_type": "legacy", + "npm_config_before": "", + "npm_config_bin_links": "true", + "npm_config_browser": "", + "npm_config_ca": "", + "npm_config_cache": "C:\\Users\\nhan\\AppData\\Roaming\\npm-cache", + "npm_config_cache_lock_retries": "10", + "npm_config_cache_lock_stale": "60000", + "npm_config_cache_lock_wait": "10000", + "npm_config_cache_max": "Infinity", + "npm_config_cache_min": "10", + "npm_config_cafile": "", + "npm_config_cert": "", + "npm_config_cidr": "", + "npm_config_color": "true", + "npm_config_commit_hooks": "true", + "npm_config_depth": "Infinity", + "npm_config_description": "true", + "npm_config_dev": "", + "npm_config_dry_run": "", + "npm_config_editor": "notepad.exe", + "npm_config_engine_strict": "", + "npm_config_fetch_retries": "2", + "npm_config_fetch_retry_factor": "10", + "npm_config_fetch_retry_maxtimeout": "60000", + "npm_config_fetch_retry_mintimeout": "10000", + "npm_config_force": "", + "npm_config_format_package_lock": "true", + "npm_config_fund": "true", + "npm_config_git": "git", + "npm_config_git_tag_version": "true", + "npm_config_global": "", + "npm_config_globalconfig": "C:\\Users\\nhan\\AppData\\Roaming\\npm\\etc\\npmrc", + "npm_config_globalignorefile": "C:\\Users\\nhan\\AppData\\Roaming\\npm\\etc\\npmignore", + "npm_config_global_style": "", + "npm_config_group": "", + "npm_config_ham_it_up": "", + "npm_config_heading": "npm", + "npm_config_https_proxy": "", + "npm_config_if_present": "", + "npm_config_ignore_prepublish": "", + "npm_config_ignore_scripts": "", + "npm_config_init_author_email": "", + "npm_config_init_author_name": "", + "npm_config_init_author_url": "", + "npm_config_init_license": "ISC", + "npm_config_init_module": "C:\\Users\\nhan\\.npm-init.js", + "npm_config_init_version": "1.0.0", + "npm_config_json": "", + "npm_config_key": "", + "npm_config_legacy_bundling": "", + "npm_config_link": "", + "npm_config_local_address": "", + "npm_config_loglevel": "notice", + "npm_config_logs_max": "10", + "npm_config_long": "", + "npm_config_maxsockets": "50", + "npm_config_message": "%s", + "npm_config_metrics_registry": "https://registry.npmjs.org/", + "npm_config_node_gyp": "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js", + "npm_config_node_options": "", + "npm_config_node_version": "12.15.0", + "npm_config_noproxy": "", + "npm_config_offline": "", + "npm_config_onload_script": "", + "npm_config_only": "", + "npm_config_optional": "true", + "npm_config_otp": "", + "npm_config_package_lock": "true", + "npm_config_package_lock_only": "", + "npm_config_parseable": "", + "npm_config_prefer_offline": "", + "npm_config_prefer_online": "", + "npm_config_prefix": "C:\\Users\\nhan\\AppData\\Roaming\\npm", + "npm_config_preid": "", + "npm_config_production": "", + "npm_config_progress": "true", + "npm_config_proxy": "", + "npm_config_read_only": "", + "npm_config_rebuild_bundle": "true", + "npm_config_registry": "https://registry.npmjs.org/", + "npm_config_rollback": "true", + "npm_config_save": "true", + "npm_config_save_bundle": "", + "npm_config_save_dev": "", + "npm_config_save_exact": "", + "npm_config_save_optional": "", + "npm_config_save_prefix": "^", + "npm_config_save_prod": "", + "npm_config_scope": "", + "npm_config_scripts_prepend_node_path": "warn-only", + "npm_config_script_shell": "", + "npm_config_searchexclude": "", + "npm_config_searchlimit": "20", + "npm_config_searchopts": "", + "npm_config_searchstaleness": "900", + "npm_config_send_metrics": "", + "npm_config_shell": "C:\\WINDOWS\\system32\\cmd.exe", + "npm_config_shrinkwrap": "true", + "npm_config_sign_git_commit": "", + "npm_config_sign_git_tag": "", + "npm_config_sso_poll_frequency": "500", + "npm_config_sso_type": "oauth", + "npm_config_strict_ssl": "true", + "npm_config_tag": "latest", + "npm_config_tag_version_prefix": "v", + "npm_config_timing": "", + "npm_config_tmp": "C:\\Users\\nhan\\AppData\\Local\\Temp", + "npm_config_umask": "0000", + "npm_config_unicode": "", + "npm_config_unsafe_perm": "true", + "npm_config_update_notifier": "true", + "npm_config_usage": "", + "npm_config_user": "", + "npm_config_userconfig": "C:\\Users\\nhan\\.npmrc", + "npm_config_user_agent": "npm/6.13.4 node/v12.15.0 win32 x64", + "npm_config_version": "", + "npm_config_versions": "", + "npm_config_viewer": "browser", + "npm_execpath": "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js", + "npm_lifecycle_event": "dev-windows", + "npm_lifecycle_script": "set NODE_OPTIONS='--inspect' && set PORT=3005 && next dev", + "npm_node_execpath": "C:\\Program Files\\nodejs\\node.exe", + "npm_package_dependencies_autoprefixer": "^10.2.6", + "npm_package_dependencies_body_scroll_lock": "^3.1.5", + "npm_package_dependencies_classnames": "^2.3.1", + "npm_package_dependencies_cookie": "^0.4.1", + "npm_package_dependencies_email_validator": "^2.0.4", + "npm_package_dependencies_eslint": "^7.32.0", + "npm_package_dependencies_eslint_config_next": "^11.1.2", + "npm_package_dependencies_immutability_helper": "^3.1.1", + "npm_package_dependencies_js_cookie": "^2.2.1", + "npm_package_dependencies_keen_slider": "^5.5.1", + "npm_package_dependencies_lodash_debounce": "^4.0.8", + "npm_package_dependencies_lodash_random": "^3.2.0", + "npm_package_dependencies_lodash_throttle": "^4.1.1", + "npm_package_dependencies_next": "^11.0.0", + "npm_package_dependencies_next_seo": "^4.26.0", + "npm_package_dependencies_next_themes": "^0.0.14", + "npm_package_dependencies_postcss": "^8.3.5", + "npm_package_dependencies_postcss_nesting": "^8.0.1", + "npm_package_dependencies_react": "^17.0.2", + "npm_package_dependencies_react_dom": "^17.0.2", + "npm_package_dependencies_react_fast_marquee": "^1.1.4", + "npm_package_dependencies_react_merge_refs": "^1.1.0", + "npm_package_dependencies_react_player": "^2.9.0", + "npm_package_dependencies_react_use_measure": "^2.0.4", + "npm_package_dependencies_sass": "^1.38.0", + "npm_package_dependencies_swell_js": "^4.0.0-next.0", + "npm_package_dependencies_swr": "^0.5.6", + "npm_package_dependencies_tabbable": "^5.2.0", + "npm_package_dependencies_tailwindcss": "^2.2.2", + "npm_package_dependencies_uuidv4": "^6.2.10", + "npm_package_dependencies__react_spring_web": "^9.2.1", + "npm_package_dependencies__vercel_fetch": "^6.1.0", + "npm_package_description": "[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fcommerce&project-name=commerce&repo-name=commerce&demo-title=Next.js%20Commerce&demo-description=An%20all-in-one%20starter%20kit%20for%20high-performance%20e-commerce%20sites.&demo-url=https%3A%2F%2Fdemo.vercel.store&demo-image=https%3A%2F%2Fbigcommerce-demo-asset-ksvtgfvnd.vercel.app%2Fbigcommerce.png&integration-ids=oac_MuWZiE4jtmQ2ejZQaQ7ncuDT)", + "npm_package_devDependencies_deepmerge": "^4.2.2", + "npm_package_devDependencies_eslint_config_prettier": "^8.3.0", + "npm_package_devDependencies_graphql": "^15.5.1", + "npm_package_devDependencies_husky": "^6.0.0", + "npm_package_devDependencies_lint_staged": "^11.0.0", + "npm_package_devDependencies_postcss_flexbugs_fixes": "^5.0.2", + "npm_package_devDependencies_postcss_import": "^14.0.2", + "npm_package_devDependencies_postcss_preset_env": "^6.7.0", + "npm_package_devDependencies_prettier": "^2.3.0", + "npm_package_devDependencies_typescript": "4.3.4", + "npm_package_devDependencies__graphql_codegen_cli": "^1.21.5", + "npm_package_devDependencies__graphql_codegen_schema_ast": "^1.18.3", + "npm_package_devDependencies__graphql_codegen_typescript": "^1.22.2", + "npm_package_devDependencies__graphql_codegen_typescript_operations": "^1.18.1", + "npm_package_devDependencies__next_bundle_analyzer": "^10.2.3", + "npm_package_devDependencies__types_body_scroll_lock": "^2.6.1", + "npm_package_devDependencies__types_cookie": "^0.4.0", + "npm_package_devDependencies__types_js_cookie": "^2.2.6", + "npm_package_devDependencies__types_lodash_debounce": "^4.0.6", + "npm_package_devDependencies__types_lodash_random": "^3.2.6", + "npm_package_devDependencies__types_lodash_throttle": "^4.1.6", + "npm_package_devDependencies__types_node": "^15.12.4", + "npm_package_devDependencies__types_react": "^17.0.8", + "npm_package_engines_node": ">=14.x", + "npm_package_gitHead": "571bfe44ac1837b6c07951d9d711508d380a5ef2", + "npm_package_license": "MIT", + "npm_package_lint_staged_______js_jsx_ts_tsx__0": "prettier --write", + "npm_package_lint_staged_______js_jsx_ts_tsx__1": "git add", + "npm_package_lint_staged_______md_mdx_json__0": "prettier --write", + "npm_package_lint_staged_______md_mdx_json__1": "git add", + "npm_package_name": "nextjs-commerce", + "npm_package_next_unused_alias__assets___0": "assets/*", + "npm_package_next_unused_alias__components___0": "components/*", + "npm_package_next_unused_alias__config___0": "config/*", + "npm_package_next_unused_alias__lib___0": "lib/*", + "npm_package_next_unused_alias__utils___0": "utils/*", + "npm_package_next_unused_debug": "true", + "npm_package_next_unused_entrypoints_0": "pages", + "npm_package_next_unused_include_0": "components", + "npm_package_next_unused_include_1": "lib", + "npm_package_next_unused_include_2": "pages", + "npm_package_readmeFilename": "README.md", + "npm_package_scripts_analyze": "BUNDLE_ANALYZE=both yarn build", + "npm_package_scripts_build": "next build", + "npm_package_scripts_dev": "NODE_OPTIONS='--inspect' PORT=3005 next dev", + "npm_package_scripts_dev_windows": "set NODE_OPTIONS='--inspect' && set PORT=3005 && next dev", + "npm_package_scripts_find_unused": "npx next-unused", + "npm_package_scripts_generate": "graphql-codegen", + "npm_package_scripts_generate_definitions": "node framework/bigcommerce/scripts/generate-definitions.js", + "npm_package_scripts_generate_shopify": "DOTENV_CONFIG_PATH=./.env.local graphql-codegen -r dotenv/config --config framework/shopify/codegen.json", + "npm_package_scripts_generate_vendure": "graphql-codegen --config framework/vendure/codegen.json", + "npm_package_scripts_prettier_fix": "prettier --write .", + "npm_package_scripts_start": "PORT=3005 next start", + "npm_package_sideEffects": "false", + "npm_package_version": "1.0.0", + "NPM_PREFIX_NPM_CLI_JS": "C:\\Users\\nhan\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js", + "NUMBER_OF_PROCESSORS": "4", + "OneDrive": "C:\\Users\\nhan\\OneDrive", + "OneDriveConsumer": "C:\\Users\\nhan\\OneDrive", + "OPENSSL_CONF": "C:\\Program Files\\PostgreSQL\\psqlODBC\\etc\\openssl.cnf", + "ORIGINAL_XDG_CURRENT_DESKTOP": "undefined", + "OS": "Windows_NT", + "Path": "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\npm-lifecycle\\node-gyp-bin;G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce\\node_modules\\.bin;C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Program Files\\Java\\jdk1.8.0_231\\bin;C:\\Program Files\\nodejs\\;C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin;C:\\Program Files\\Git\\cmd;C:\\Program Files\\MongoDB\\Server\\4.2\\bin;;C:\\Program Files\\Git LFS;D:\\hoc-fpt\\code-tren-lop\\php\\xampp3\\php;C:\\ProgramData\\ComposerSetup\\bin;C:\\ProgramData\\chocolatey\\bin;C:\\Program Files\\AdoptOpenJDK\\jdk8u192-b12\\bin;C:\\Program Files\\Java\\jdk1.8.0_211\\bin;C:\\Android\\android-sdk\\tools;C:\\Android\\android-sdk\\platform-tools;C:\\Android\\android-sdk\\tools\\bin;C:\\Program Files\\MySQL\\MySQL Shell 8.0\\bin\\;C:\\Program Files\\Java\\jdk1.8.0_231\\bin;C:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\Users\\nhan\\AppData\\Roaming\\npm;C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin;C:\\Program Files\\heroku\\bin;C:\\Users\\nhan\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\nhan\\AppData\\Roaming\\Composer\\vendor\\bin", + "PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JSE;.WSF;.WSH;.MSC;.CPL", + "PORT": "3005 ", + "PROCESSOR_ARCHITECTURE": "AMD64", + "PROCESSOR_IDENTIFIER": "Intel64 Family 6 Model 58 Stepping 9, GenuineIntel", + "PROCESSOR_LEVEL": "6", + "PROCESSOR_REVISION": "3a09", + "ProgramData": "C:\\ProgramData", + "ProgramFiles": "C:\\Program Files", + "ProgramFiles(x86)": "C:\\Program Files (x86)", + "ProgramW6432": "C:\\Program Files", + "PROMPT": "$P$G", + "PSModulePath": "C:\\Users\\nhan\\Documents\\WindowsPowerShell\\Modules;C:\\Program Files\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules", + "PUBLIC": "C:\\Users\\Public", + "SESSIONNAME": "Console", + "SystemDrive": "C:", + "SystemRoot": "C:\\WINDOWS", + "TEMP": "C:\\Users\\nhan\\AppData\\Local\\Temp", + "TERM_PROGRAM": "vscode", + "TERM_PROGRAM_VERSION": "1.60.0", + "TMP": "C:\\Users\\nhan\\AppData\\Local\\Temp", + "TRACE_ID": "cbd3025f1135a5fa", + "USERDOMAIN": "DESKTOP-TILU55O", + "USERDOMAIN_ROAMINGPROFILE": "DESKTOP-TILU55O", + "USERNAME": "nhan", + "USERPROFILE": "C:\\Users\\nhan", + "VSCODE_GIT_ASKPASS_MAIN": "c:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass-main.js", + "VSCODE_GIT_ASKPASS_NODE": "C:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe", + "VSCODE_GIT_IPC_HANDLE": "\\\\.\\pipe\\vscode-git-d5d8071aa9-sock", + "windir": "C:\\WINDOWS", + "_prog": "node", + "__NEXT_PROCESSED_ENV": "true" + }, + "sharedObjects": [ + "C:\\Program Files\\nodejs\\node.exe", + "C:\\WINDOWS\\SYSTEM32\\ntdll.dll", + "C:\\WINDOWS\\System32\\KERNEL32.DLL", + "C:\\WINDOWS\\System32\\KERNELBASE.dll", + "C:\\WINDOWS\\System32\\WS2_32.dll", + "C:\\WINDOWS\\System32\\RPCRT4.dll", + "C:\\WINDOWS\\System32\\ADVAPI32.dll", + "C:\\WINDOWS\\SYSTEM32\\dbghelp.dll", + "C:\\WINDOWS\\System32\\msvcrt.dll", + "C:\\WINDOWS\\System32\\ucrtbase.dll", + "C:\\WINDOWS\\System32\\sechost.dll", + "C:\\WINDOWS\\System32\\USER32.dll", + "C:\\WINDOWS\\System32\\win32u.dll", + "C:\\WINDOWS\\System32\\GDI32.dll", + "C:\\WINDOWS\\System32\\gdi32full.dll", + "C:\\WINDOWS\\System32\\msvcp_win.dll", + "C:\\WINDOWS\\System32\\PSAPI.DLL", + "C:\\WINDOWS\\System32\\CRYPT32.dll", + "C:\\WINDOWS\\System32\\bcrypt.dll", + "C:\\WINDOWS\\SYSTEM32\\IPHLPAPI.DLL", + "C:\\WINDOWS\\SYSTEM32\\USERENV.dll", + "C:\\WINDOWS\\SYSTEM32\\WINMM.dll", + "C:\\WINDOWS\\System32\\IMM32.DLL", + "C:\\WINDOWS\\SYSTEM32\\powrprof.dll", + "C:\\WINDOWS\\SYSTEM32\\UMPDC.dll", + "C:\\WINDOWS\\SYSTEM32\\CRYPTBASE.DLL", + "C:\\WINDOWS\\system32\\uxtheme.dll", + "C:\\WINDOWS\\System32\\combase.dll", + "C:\\WINDOWS\\system32\\mswsock.dll", + "C:\\WINDOWS\\SYSTEM32\\kernel.appcore.dll", + "C:\\WINDOWS\\System32\\bcryptprimitives.dll", + "C:\\WINDOWS\\System32\\NSI.dll", + "C:\\WINDOWS\\SYSTEM32\\dhcpcsvc6.DLL", + "C:\\WINDOWS\\SYSTEM32\\dhcpcsvc.DLL", + "C:\\WINDOWS\\SYSTEM32\\DNSAPI.dll", + "C:\\WINDOWS\\system32\\napinsp.dll", + "C:\\WINDOWS\\system32\\pnrpnsp.dll", + "C:\\WINDOWS\\system32\\wshbth.dll", + "C:\\WINDOWS\\system32\\NLAapi.dll", + "C:\\WINDOWS\\System32\\winrnr.dll", + "C:\\Windows\\System32\\rasadhlp.dll", + "C:\\WINDOWS\\System32\\fwpuclnt.dll" + ] +} \ No newline at end of file diff --git a/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss b/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss index 1e4362f5e..751dcf87f 100644 --- a/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss +++ b/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss @@ -15,7 +15,9 @@ @apply flex justify-center; margin: 2.6rem auto; button{ - padding: 1.6rem 7rem; + div{ + padding: 1.6rem 7rem; + } } } .dontHaveAccount{ @@ -24,7 +26,7 @@ color:var(--text-active); } span{ - color:var(--positive); + color:var(--primary); } } diff --git a/src/components/modules/account/AccountSignIn/AccountSignIn.tsx b/src/components/modules/account/AccountSignIn/AccountSignIn.tsx index 4f85545f3..d1de1dffe 100644 --- a/src/components/modules/account/AccountSignIn/AccountSignIn.tsx +++ b/src/components/modules/account/AccountSignIn/AccountSignIn.tsx @@ -31,7 +31,7 @@ const AccountSignIn = memo(({ } : AccountSignIn) => { Sign in to get more interesting
    features
    - {LANGUAGE.BUTTON_LABEL.SIGNIN} + {LANGUAGE.BUTTON_LABEL.SIGNIN}
    Don't have an account?  
    Create Account diff --git a/src/components/modules/home/HomeSpice/HomeSpice.module.scss b/src/components/modules/home/HomeSpice/HomeSpice.module.scss index 79a786765..62d6f1f78 100644 --- a/src/components/modules/home/HomeSpice/HomeSpice.module.scss +++ b/src/components/modules/home/HomeSpice/HomeSpice.module.scss @@ -1,3 +1,3 @@ .homeSpiceWarpper{ - margin: 5.6rem 0; + margin-bottom: 8rem; } \ No newline at end of file From e30f1c520f212008c375a6181457da90b350351b Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 16:12:03 +0700 Subject: [PATCH 062/100] :recycle: enhan: refactor component ScrollToTop :%s --- src/components/common/Layout/Layout.tsx | 21 ++++----- .../ScrollToTop/ScrollToTop.module.scss | 16 +++---- .../common/ScrollToTop/ScrollToTop.tsx | 45 +++++++++---------- 3 files changed, 40 insertions(+), 42 deletions(-) diff --git a/src/components/common/Layout/Layout.tsx b/src/components/common/Layout/Layout.tsx index 8b93825b4..8a023e81a 100644 --- a/src/components/common/Layout/Layout.tsx +++ b/src/components/common/Layout/Layout.tsx @@ -3,7 +3,7 @@ import { useRouter } from 'next/router' import { FC } from 'react' import { useModalCommon } from 'src/components/hooks' import { BRAND, CATEGORY, FEATURED } from 'src/utils/constanst.utils' -import { CustomShapeSvg } from '..' +import { CustomShapeSvg, ScrollToTop } from '..' import Footer from '../Footer/Footer' import Header from '../Header/Header' import MenuNavigationProductList from '../MenuNavigationProductList/MenuNavigationProductList' @@ -18,7 +18,7 @@ interface Props { const Layout: FC = ({ children }) => { const { locale = 'en-US' } = useRouter() const { visible: visibleFilter, openModal: openFilter, closeModal: closeFilter } = useModalCommon({ initialValue: false }) - + const toggleFilter = () => { if (visibleFilter) { closeFilter() @@ -28,14 +28,15 @@ const Layout: FC = ({ children }) => { } return ( -
    -
    -
    {children}
    - - -
    -
    -
    +
    +
    +
    {children}
    + + +
    + +
    +
    ) diff --git a/src/components/common/ScrollToTop/ScrollToTop.module.scss b/src/components/common/ScrollToTop/ScrollToTop.module.scss index c010f08ad..940bc0ac2 100644 --- a/src/components/common/ScrollToTop/ScrollToTop.module.scss +++ b/src/components/common/ScrollToTop/ScrollToTop.module.scss @@ -1,24 +1,24 @@ -@import '../../../styles/utilities'; +@import "../../../styles/utilities"; .scrollToTop { @apply hidden; + z-index: 9999; @screen md { &.show { @apply block rounded-lg fixed cursor-pointer; - right: 11.2rem; - bottom: 21.6rem; + right: 6.4rem; + bottom: 21.6rem; width: 6.4rem; height: 6.4rem; background-color: var(--border-line); - } - - &.hide { - @apply hidden; + @screen lg { + right: 11.2rem; + } } } .scrollToTopBtn { @apply outline-none w-full h-full; } -} \ No newline at end of file +} diff --git a/src/components/common/ScrollToTop/ScrollToTop.tsx b/src/components/common/ScrollToTop/ScrollToTop.tsx index eef74cb24..388fae3cc 100644 --- a/src/components/common/ScrollToTop/ScrollToTop.tsx +++ b/src/components/common/ScrollToTop/ScrollToTop.tsx @@ -1,47 +1,44 @@ -import React, { useState, useEffect, MutableRefObject } from 'react' import classNames from 'classnames' +import React, { useEffect, useState } from 'react' +import ArrowUp from '../../icons/IconArrowUp' import s from './ScrollToTop.module.scss' -import ArrowUp from '../../icons/IconArrowUp' interface ScrollToTopProps { visibilityHeight?: number; } -const ScrollToTop = ({ visibilityHeight=450 }: ScrollToTopProps) => { - - const [scrollPosition, setSrollPosition] = useState(0); - const [showScrollToTop, setShowScrollToTop] = useState("hide"); +const ScrollToTop = ({ visibilityHeight = 450 }: ScrollToTopProps) => { + const [showScrollToTop, setShowScrollToTop] = useState(); function handleVisibleButton() { - const position = window.pageYOffset; - setSrollPosition(position); - + const scrollPosition = window.scrollY; + if (scrollPosition > visibilityHeight) { - return setShowScrollToTop("show") - } else if (scrollPosition < visibilityHeight) { - return setShowScrollToTop("hide"); + setShowScrollToTop(true) + } else { + setShowScrollToTop(false) } }; + useEffect(() => { + window.addEventListener("scroll", handleVisibleButton); + return () => { + window.removeEventListener("scroll", handleVisibleButton); + } + }, []); + + function handleScrollUp() { window.scrollTo(0, 0); } - function addEventScroll() { - window.addEventListener("scroll", handleVisibleButton); - } - - useEffect(() => { - addEventScroll(); - }, []); - return (
    + [s.show]: showScrollToTop + })} + onClick={handleScrollUp} + > From 66cb8728fe369fdc36d79243575fb4ab13554451 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2021 16:19:56 +0700 Subject: [PATCH 063/100] styles: add padding top --- src/components/icons/index.ts | 3 --- .../Notification/NotificationItem/NotificationItem.module.scss | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index 586ff3cb7..70575e11d 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -33,9 +33,6 @@ export { default as IconMinus } from './IconMinus' export { default as IconCirclePlus } from './IconCirclePlus' export { default as IconDoneCheckout } from './IconDoneCheckout' export { default as IconFilter } from './IconFilter' -<<<<<<< HEAD export { default as IconBell } from './IconBell' export { default as IconBill } from './IconBill' -======= export { default as IconNoti } from './IconNoti' ->>>>>>> 83b5f9048687e555a978ae71e26a1d19aac2247c diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss index 38ce184d1..ca7531981 100644 --- a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss @@ -2,13 +2,14 @@ .notificationItem { @apply flex flex-row; + padding-top: 1.2rem; padding-left: 1.6rem; - padding-bottom: 1.4rem; &:hover{ cursor: pointer; } .contentWrapper { padding-left: 1.6rem; + padding-bottom: 1.4rem; max-width: 26.3rem; .title { font-weight: bold; From ff5deb23125732c83b0f80d4567145271bf7d9ee Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2021 16:25:53 +0700 Subject: [PATCH 064/100] styles: fix name color --- .../NotificationItem/NotificationItem.module.scss | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss index ca7531981..3ffaf1499 100644 --- a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss @@ -16,6 +16,7 @@ color: var(--text-active); } .date { + color: #828282; font-size: 1.2rem; line-height: 2rem; letter-spacing: 0.01em; @@ -30,11 +31,8 @@ fill: var(--disabled) } } - .title { - color: var(--label); - } - .content, .date { - color: #828282; + .title, .content { + color: var(--text-label); } } } \ No newline at end of file From 2849e291fb9d67023e28d1887934715a04ae8cca Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 16:36:59 +0700 Subject: [PATCH 065/100] :art: styles: descrease spacing bottom 404, error page :%s --- src/components/modules/404/404Page/404Page.module.scss | 2 +- src/components/modules/error/ErrorPage/Errorpage.module.scss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/modules/404/404Page/404Page.module.scss b/src/components/modules/404/404Page/404Page.module.scss index b089a9ad3..f490b4f3a 100644 --- a/src/components/modules/404/404Page/404Page.module.scss +++ b/src/components/modules/404/404Page/404Page.module.scss @@ -6,7 +6,7 @@ background-color: white; .inner{ - height: 100vh; + height: 70vh; .logo{ margin-top: 2rem; } diff --git a/src/components/modules/error/ErrorPage/Errorpage.module.scss b/src/components/modules/error/ErrorPage/Errorpage.module.scss index 562a20f8b..379c01c46 100644 --- a/src/components/modules/error/ErrorPage/Errorpage.module.scss +++ b/src/components/modules/error/ErrorPage/Errorpage.module.scss @@ -6,7 +6,7 @@ background-color: white; .inner{ - height: 100vh; + height: 70vh; .logo{ margin-top: 2rem; } From 0463fb7808a12a619973fff53f2ee000bb8e6932 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 16:37:16 +0700 Subject: [PATCH 066/100] :sparkles: feat: add error page :%s --- pages/_error.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 pages/_error.tsx diff --git a/pages/_error.tsx b/pages/_error.tsx new file mode 100644 index 000000000..3b7455377 --- /dev/null +++ b/pages/_error.tsx @@ -0,0 +1,9 @@ +import { Layout } from 'src/components/common' +import { ErrorPage } from 'src/components/modules/error' + +export default function NotFound() { + return ( + + ) +} +NotFound.Layout = Layout From 29be038547b8d85206408b38373c05643ddd036b Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 16:42:27 +0700 Subject: [PATCH 067/100] :hammer: refactor: change folder name error to error-page :%s --- pages/_error.tsx | 2 +- .../modules/{error => error-page}/ErrorPage/ErrorPage.tsx | 0 .../{error => error-page}/ErrorPage/Errorpage.module.scss | 0 src/components/modules/{error => error-page}/index.tsx | 0 4 files changed, 1 insertion(+), 1 deletion(-) rename src/components/modules/{error => error-page}/ErrorPage/ErrorPage.tsx (100%) rename src/components/modules/{error => error-page}/ErrorPage/Errorpage.module.scss (100%) rename src/components/modules/{error => error-page}/index.tsx (100%) diff --git a/pages/_error.tsx b/pages/_error.tsx index 3b7455377..040ee5c36 100644 --- a/pages/_error.tsx +++ b/pages/_error.tsx @@ -1,5 +1,5 @@ import { Layout } from 'src/components/common' -import { ErrorPage } from 'src/components/modules/error' +import { ErrorPage } from 'src/components/modules/error-page' export default function NotFound() { return ( diff --git a/src/components/modules/error/ErrorPage/ErrorPage.tsx b/src/components/modules/error-page/ErrorPage/ErrorPage.tsx similarity index 100% rename from src/components/modules/error/ErrorPage/ErrorPage.tsx rename to src/components/modules/error-page/ErrorPage/ErrorPage.tsx diff --git a/src/components/modules/error/ErrorPage/Errorpage.module.scss b/src/components/modules/error-page/ErrorPage/Errorpage.module.scss similarity index 100% rename from src/components/modules/error/ErrorPage/Errorpage.module.scss rename to src/components/modules/error-page/ErrorPage/Errorpage.module.scss diff --git a/src/components/modules/error/index.tsx b/src/components/modules/error-page/index.tsx similarity index 100% rename from src/components/modules/error/index.tsx rename to src/components/modules/error-page/index.tsx From 72cb99f1cae8aefb527be9c18848120c9b80611e Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Tue, 14 Sep 2021 16:48:27 +0700 Subject: [PATCH 068/100] :art: restyle: Home Feature --- .../home/HomeFeature/HomeFeature.module.scss | 13 +---- .../modules/home/HomeFeature/HomeFeature.tsx | 41 ++++++++------ .../HomeFeature/assets/10h30-11h-mobile.png | Bin 2341 -> 0 bytes .../{10h30-11h-desktop.png => 10h30-11h.png} | Bin .../home/HomeFeature/assets/8h-mobile.png | Bin 2456 -> 0 bytes .../assets/{8h-desktop.png => 8h.png} | Bin .../assets/{green-desktop.png => green.png} | Bin .../HomeFeatureCarousel.tsx | 48 +++++++++++++++++ .../HomeFeatureItem.module.scss | 50 +++--------------- .../HomeFeatureItem/HomeFeatureItem.tsx | 16 +++--- 10 files changed, 88 insertions(+), 80 deletions(-) delete mode 100644 src/components/modules/home/HomeFeature/assets/10h30-11h-mobile.png rename src/components/modules/home/HomeFeature/assets/{10h30-11h-desktop.png => 10h30-11h.png} (100%) delete mode 100644 src/components/modules/home/HomeFeature/assets/8h-mobile.png rename src/components/modules/home/HomeFeature/assets/{8h-desktop.png => 8h.png} (100%) rename src/components/modules/home/HomeFeature/assets/{green-desktop.png => green.png} (100%) create mode 100644 src/components/modules/home/HomeFeature/components/HomeFeatureCarousel/HomeFeatureCarousel.tsx diff --git a/src/components/modules/home/HomeFeature/HomeFeature.module.scss b/src/components/modules/home/HomeFeature/HomeFeature.module.scss index 1753edf99..3275bfb3b 100644 --- a/src/components/modules/home/HomeFeature/HomeFeature.module.scss +++ b/src/components/modules/home/HomeFeature/HomeFeature.module.scss @@ -1,16 +1,5 @@ @import "../../../../styles/utilities"; .homeFeature { - @apply spacing-horizontal; - background-color: #ffffff; - height: fit-content; - margin: 3.2rem auto; - @screen md { - @apply grid grid-cols-3; - grid-gap: 2.4rem; - margin: 6.4rem auto; - } - @screen md { - grid-gap: 4rem; - } + @apply spacing-horizontal-left bg-white; } diff --git a/src/components/modules/home/HomeFeature/HomeFeature.tsx b/src/components/modules/home/HomeFeature/HomeFeature.tsx index af6ec7287..d8851aa30 100644 --- a/src/components/modules/home/HomeFeature/HomeFeature.tsx +++ b/src/components/modules/home/HomeFeature/HomeFeature.tsx @@ -1,25 +1,34 @@ import React from 'react' import s from './HomeFeature.module.scss' -import HomeFeatureItem from './components/HomeFeatureItem/HomeFeatureItem' +import FirstPic from './assets/10h30-11h.png' +import SecondPic from './assets/8h.png' +import ThirdPic from './assets/green.png' -const HomeFeature = () => { +import HomeFeatureCarousel from './components/HomeFeatureCarousel/HomeFeatureCarousel' + +const CAROUSEL_DATA = [ + { + image: FirstPic, + children: Webshop owner will upload products at 10:30pm shoppers can buy fresh products at 11pm., + }, + { + image: SecondPic, + children: Most fresh fish and seafood will be listed at 8am from inventory., + }, + { + image: ThirdPic, + children: Show that food will be shipped in a greengrocery plastic bag., + }, +] + +const HomeFeature = () => { return ( -
    - - Webshop owner will upload products at 10:30pm shoppers can buy fresh products at 11pm. - - - - Most fresh fish and seafood will be listed at 8am from inventory. - - - - Show that food will be shipped in a greengrocery plastic bag. - -
    +
    + +
    ) } -export default HomeFeature +export default HomeFeature \ No newline at end of file diff --git a/src/components/modules/home/HomeFeature/assets/10h30-11h-mobile.png b/src/components/modules/home/HomeFeature/assets/10h30-11h-mobile.png deleted file mode 100644 index 871e0e15b17c918a00970be758bf94e1c682243a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2341 zcmV+=3EK9FP)-w@p)@BvoOcCSq!|s5q!#Qj>z6@GvnoGN?_|R0q{MlcuARb|iKtohghokQAGU z)!GzsQ01E1L~tVDs~RBzn((lxymUg>x9?epa}VbrkA0zka&s@-dmd}Awf^<5wa=n) zfthDCKW;It&)dz&>rs=Joofo;&oj&3S!&XOMd>tfn#ybEtYM4fPSn`S zvT`@x98UxKUJi~QtoeHUi}T-(_x(GV^4;**sD1Ao=pH|Jvp)H`Klz#CYVZ7PkFEZ_ ze%uA#GHF2T^EUgA2Q=>#%N8%O@0Gutv)&|xpAYod&$WMCHKp4M?e`sjKQ%7!ws8nZ zrBd>)Q*JowJ4mFlEn$rr76t_vtP9dVG-x_{lZIujSY=$mse!e3u2|!;R;)B7+Y8Lr zH5={!AslkDB)7m^7gi#_ID9o z`oyVmz?lcBXUH$0;dMv~cG(9d)@!gS;aYp=YUJ_!=0Wc>G4MU(63z^SEEMDxp1@mu zl2@ubI|sY1H^W#iA^?KH^A&r)G%n%Hz>!zU+@kj3%~QXgwSPxRwJ>tTYY)YH97hRp z#h}1h4rY1z2XjIg7&aZ_K<8kO*`HTrKNG@Hb#%6HW}vP*9)K-#0=b02yrMuTQ&M=9 ziIIeIMMKr3j$^iPDz+Q$HKo)wfMMmuN33Vb&C8N!DyZoNkBjhD`4&D0HFK_{6tpYk(ltdLRMnGs+-m>c@8x@nl6ur?O1FPxKl=u@cugnnR^3R! zWhKZDpa~7)lDgS;=@WvQyb9)owofRZWs8?e_mJyGrR!_X6lSDJ>XC znV$;^Bo4k3cSNyH7NPOAxRbVY#2@q)Hw@a zsus+_*`l$%*}jwKL8%7{z3Bkn)bi5RAI-dJnTxuB5>aD&B6h*><{r;$adT8B9;~`? z-iA|o(a{udg1LAU+9yvrN1U?J`D)x8)rkk~7TBhIdqXaP;83GS$refSgm^GDAgWx8)K}rn0V8YvF0(dq41l31*2LV8R1u$rw zwDb*B&meUG22p&Mdn?Cw7UA&FlS_;xqNdMzQux&)ORW@}804~0KYaF$`At@SRFo6n zv+}{4Q^k^%@veyjHTaBIBTKw-M;v?ubuW&U-6Nd@`Y=3%ReGKZQ(X+$4bBLU0rg0@ zi_wi6V^TL(De7_OQuqc=NTFx;1ca4N%F+#VF!`t*L5|JOi7;<$YqsgZ_=6nBI2Hg| z$nTO15>0TShIiBoY?ouZ`9f4T4EA zb|u6xii^y5!>r>*u6tStQFGXtRBQ3J$=Dm5Z{q-*f#=B2jzIo8k!pmeCcbw6`b0%R zh_ixk#%$;TODs*D;C^? z2zXs=H)x;WR`8~;&*}5W?-f_%E%1m z)>Jn`FUeyk`V=CtJ)g`)5fRL15|3K!Zve_g2f}f1Cbo}X_|AqGgQB>iJ6+hPqrAO^ z@Jtk_@nOxY6TFkfN8Cy^P~z?8)W`;E|IqXvABh7-ar05e0lo_xhs3kfbqU$6>1dbi z;~$r*{KVgqrotVC;1g6T^At{>vLJLW$x6C<#$_hJbH}8!2ruk^*D%_;X8}Lr00000 LNkvXXu0mjfxE5{5 diff --git a/src/components/modules/home/HomeFeature/assets/10h30-11h-desktop.png b/src/components/modules/home/HomeFeature/assets/10h30-11h.png similarity index 100% rename from src/components/modules/home/HomeFeature/assets/10h30-11h-desktop.png rename to src/components/modules/home/HomeFeature/assets/10h30-11h.png diff --git a/src/components/modules/home/HomeFeature/assets/8h-mobile.png b/src/components/modules/home/HomeFeature/assets/8h-mobile.png deleted file mode 100644 index e734cf1e54e143da4adf7d5ae34291b9e5e1a7e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2456 zcmV;J31{|+P)z7j=OFyNh;#Ej8WL z#=`=+HVcm>?6!&mzVcwFNZY?B&Y< zkt7nbiadZI4^TJQ=C7PH>x3a|q!a-mq@T}IB;_^BqA_Sl>hvLZ7bCI)=r)x~Zu$NG zaGaKbClbDX;84>@%h8B)|4v_fNH^#RD>FpJJDFmA`_s2$e1tF%(@gA$G>4~XiCC2I z(Cmt&0U_IzAVS2|11W=cBNAmXvS?IVVoD_KwsvJ8Soi0 zL>g78nWXglg8P;frxcCaw~v|)HFC+OA&yP^lHq6(4K|!;znUHZn@#RO zL|js;i-cAsFe4>q(T$=G+jye=h?KH3E$Ns@Qdg3aam^yXX6S)wUuw(|y8d`uQ230! zrjhK*H3iF(*EAu5lB{Ez)B;klsbwHpv)Um1*j0x2qpX-~tf07+OvNpYrqHi2&C_^C zl86=*9>VYxb=qyw!Qqzfa88w&`$jX2IyR#wzU<0vO9=XkbA7V4yR*LUP+aJO2Ot72 zf#V`2nk_C9It^M`amrBXXi?(ZJ+RV1S5Q(CE5KCv7{ zfXxbOUSM=Qm5HRt8vV*SBPdPzAv$atY|9chpWSmEe>Vcd-p_s$E9|h+8f69u={lXRKhYi@+1H)1Ww!qM*B# znio3EPx3TdL;1RaG8+32zr{|>5m+?oy3tfW&=D0g)@kFMXh+9*#6x951 z>(MaRLWh1uVQD}!OntqUE^2Vk4isq^XqPGuSOdbF9 z3SADebDq`_ogE5g@^IQJ%JcODOn+ot<;xhf?G9G-G{Gi_nJg&0TCdDdK$uGSDVa#_ za5$Ep5iAfMW}zF#V4+A?wR!_JZhMn9uYZxsiCh1jr2Y$kpb0)ZSYY$IZYujyp`WmZ z5pnyPXx++H^vgH)mtAmRT`WY~xw&OIzuK>mMx?-m)}5dpJA27IOr5V}-9m zb^5C_eKhlEE>n(9Zr%G2wQPTzesSt3-FIJ<|_+n9-)~dUN398uD-wHw9l7lR)IwzP}%PB{*`k|@U4NDX;*cvDhr<* zqKlu6(>K_hAP~$8eu0i42<-IY&2gR`yZ(6mx~k`HV_?j-XSCx8esJer)y9>H>pYtu z(OI5R%#edDn|~bfc#$MzU4m&58x9W1yPZ0BAKX*tUDdBE+sCnS&3aY#mq~k?Q3g}8 z&o8SonAp2#eyfg|N4B}a`JFa4Z+Njt8`Y}JF|oYD1BiH7-KiVqa}^*KNsnv4Y-?qF z;s#IiKj=#Q25aqx{p|VGszJ(L`z{N4mj{`UtqIi!g)o);*%wn4}yYzQdBHYJ6>!zKm6fhwl9N_KF}089o`?zUGi z;A!f^2_UdhI2&;C@~EP=PbdGT4i6F2O4UHb<+XjrVJn}rsp?^x;{nH!W*^Nic;8KJ z7yml04hIkC=UmtJyUy&)xZ8hlpB6&+jZ%WEi0g7#m;)RU8U=Ns6E{6VI8Yl{1(;y| z2R5#Kfx;Yw02O@xe4frSC4$@0hBIrgaUeX)Gll!yHfq^t9JYf@dNJXHyK4uz(s!JD z(AFLnU?wq3AOGt!6>R=D`#=S+pMQU!Vie5G$N#>mp5aKOlCd zqSV(`|N~Kd7;vZQe;vwMv2;4D@){Nn1Lc1 zX`DyY0#r^|BL1)<8Fg>+pEyXR)6$WA&(t1w-e_WPs-Y!-wK`#0$;e_;-=0NSBxGem zhHd^@TH2qNAiR?^jxbq-hxc_KELGnV;X$jsg-NFbWkja53$z3X%?j}d_F^^51E5j^ z@I-hgv7{2Rtvz8{IwG9l4Xca=4}e*(t5{ZU*}^Mka+VLADB=WEFL{JV@E_i&6?$HB zVO9!ANz>;9k>`Vk8=g5VYdHz{ysWs^^*TNIj!d@&GLO_Qllma5ExW~fr_oCey*_%bv, 'Component' | "option"> { + option?: TOptionsEvents +} + +const OPTION_DEFAULT: TOptionsEvents = { + slidesPerView: 1.2, + mode: 'free', + breakpoints: { + '(min-width: 640px)': { + slidesPerView: 1.8, + }, + '(min-width: 768px)': { + slidesPerView: 2.1, + }, + '(min-width: 1008px)': { + slidesPerView: 2.3, + }, + '(min-width: 1280px)': { + slidesPerView: 2.8, + }, + '(min-width: 1440px)': { + slidesPerView: 3, + }, + }, + } + +const HomeFeatureCarousel = ({option, data, ...props} : HomeFeatureCarouselProps) => { + return ( +
    + + data={data} + Component={HomeFeatureItem} + {...props} + option={{ ...OPTION_DEFAULT, ...option }} + /> +
    + ) + +} + +export default HomeFeatureCarousel \ No newline at end of file diff --git a/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.module.scss b/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.module.scss index d3dcb518b..c0b8d49ba 100644 --- a/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.module.scss +++ b/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.module.scss @@ -1,56 +1,18 @@ @import "../../../../../../styles/utilities"; .homeFeatureItem { - @apply flex items-center; - width: fit-content; - margin: auto; - - @screen md { - @apply flex flex-col items-center justify-between; - } - - @screen lg { - @apply flex flex-row; - } + @apply flex items-center justify-center; + margin-right: 0.8rem; + height: 100%; .itemImg { - @apply flex float-left clear-both; margin-right: 2.4rem; - align-items: center; - &.firstImg { - margin-top: 1rem; - content: url("../../assets/10h30-11h-desktop.png"); - } - &.secondImg { - margin-top: 1rem; - content: url("../../assets/8h-desktop.png"); - } - &.thirdImg { - margin-top: 1rem; - content: url("../../assets/green-desktop.png"); - } - - @screen md { - @apply flex flex-col justify-center items-center; - margin: auto; - margin-top: 0.8rem; - } - - @screen lg { - @apply flex float-left clear-both; - margin-right: 2.4rem; - margin-top: 0; - } + max-width: 12rem; + min-width: 8rem; } .itemText { max-width: 28rem; - min-width: 12rem; - @screen md { - @apply text-center; - } - @screen lg { - @apply text-left; - } + min-width: none; } } diff --git a/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.tsx b/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.tsx index eb566bdc9..3cc2db47f 100644 --- a/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.tsx +++ b/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.tsx @@ -1,21 +1,21 @@ import React from 'react' -import classNames from 'classnames' import s from './HomeFeatureItem.module.scss' +import { StaticImage } from 'src/components/common' -interface HomeFeatureItemProps { - image: string; - children: any; +export interface HomeFeatureItemProps { + image: StaticImageData; + children: React.ReactNode; } const HomeFeatureItem = ({ image, children }: HomeFeatureItemProps) => { return (
    - home feature item img +
    + +
    +
    {children}
    ) From 2887e1ddf9f59c0ac8a2a41626979bd267da74ad Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 16:52:36 +0700 Subject: [PATCH 069/100] :recycle: enhan: change path page notifications :%s --- src/utils/constanst.utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/constanst.utils.ts b/src/utils/constanst.utils.ts index 90ac2a175..3d55aac06 100644 --- a/src/utils/constanst.utils.ts +++ b/src/utils/constanst.utils.ts @@ -21,7 +21,7 @@ export const ROUTE = { RECIPES: '/recipes', RECIPE_DETAIL: '/recipe', - NOTIFICATION: '/notification', + NOTIFICATION: '/notifications', BUSSINESS: '/bussiness', CONTACT: '/contact', CHECKOUT: '/checkout', From 9c69c1cc95070c5656a2bbd2a1d64368b36368ab Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 16:55:54 +0700 Subject: [PATCH 070/100] :hammer: refactor: change component ErrorPage name - by @Quangnhankie :%s --- pages/_error.tsx | 4 ++-- .../ErrorContent.module.scss} | 0 .../ErrorPage.tsx => ErrorContent/ErrorContent.tsx} | 6 +++--- src/components/modules/error-page/index.tsx | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) rename src/components/modules/error-page/{ErrorPage/Errorpage.module.scss => ErrorContent/ErrorContent.module.scss} (100%) rename src/components/modules/error-page/{ErrorPage/ErrorPage.tsx => ErrorContent/ErrorContent.tsx} (86%) diff --git a/pages/_error.tsx b/pages/_error.tsx index 040ee5c36..545d7e7ed 100644 --- a/pages/_error.tsx +++ b/pages/_error.tsx @@ -1,9 +1,9 @@ import { Layout } from 'src/components/common' -import { ErrorPage } from 'src/components/modules/error-page' +import { ErrorContent } from 'src/components/modules/error-page' export default function NotFound() { return ( - + ) } NotFound.Layout = Layout diff --git a/src/components/modules/error-page/ErrorPage/Errorpage.module.scss b/src/components/modules/error-page/ErrorContent/ErrorContent.module.scss similarity index 100% rename from src/components/modules/error-page/ErrorPage/Errorpage.module.scss rename to src/components/modules/error-page/ErrorContent/ErrorContent.module.scss diff --git a/src/components/modules/error-page/ErrorPage/ErrorPage.tsx b/src/components/modules/error-page/ErrorContent/ErrorContent.tsx similarity index 86% rename from src/components/modules/error-page/ErrorPage/ErrorPage.tsx rename to src/components/modules/error-page/ErrorContent/ErrorContent.tsx index 0e550b766..112f9339c 100644 --- a/src/components/modules/error-page/ErrorPage/ErrorPage.tsx +++ b/src/components/modules/error-page/ErrorContent/ErrorContent.tsx @@ -1,12 +1,12 @@ import Link from 'next/link'; import React from 'react'; import { ButtonCommon } from 'src/components/common'; -import s from './ErrorPage.module.scss'; +import s from './ErrorContent.module.scss'; interface Props { } -const ErrorPage = ({ }: Props) => { +const ErrorContent = ({ }: Props) => { return (
    @@ -26,4 +26,4 @@ const ErrorPage = ({ }: Props) => { ) } -export default ErrorPage +export default ErrorContent diff --git a/src/components/modules/error-page/index.tsx b/src/components/modules/error-page/index.tsx index 4fadf1398..3732145a5 100644 --- a/src/components/modules/error-page/index.tsx +++ b/src/components/modules/error-page/index.tsx @@ -1 +1 @@ -export {default as ErrorPage} from './ErrorPage/ErrorPage'; \ No newline at end of file +export {default as ErrorContent} from './ErrorContent/ErrorContent'; \ No newline at end of file From 1518629590211d71cb7a5be8cd454b451b2b4201 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Tue, 14 Sep 2021 16:59:16 +0700 Subject: [PATCH 071/100] :sparkles: feat: Loading Common --- .../LoadingCommon/LoadingCommon.module.scss | 6 +++++- .../common/LoadingCommon/LoadingCommon.tsx | 3 +-- .../common/LoadingCommon/assets/broccoli.png | Bin 2458 -> 0 bytes 3 files changed, 6 insertions(+), 3 deletions(-) delete mode 100644 src/components/common/LoadingCommon/assets/broccoli.png diff --git a/src/components/common/LoadingCommon/LoadingCommon.module.scss b/src/components/common/LoadingCommon/LoadingCommon.module.scss index 97ba57dd0..f17d4aa9c 100644 --- a/src/components/common/LoadingCommon/LoadingCommon.module.scss +++ b/src/components/common/LoadingCommon/LoadingCommon.module.scss @@ -7,11 +7,15 @@ @apply bg-white; height: 7rem; width: 7rem; - border-radius: 50%; animation: spin 2s linear infinite; margin: auto; background: url('./assets/carrot.png') top 50% left 50% no-repeat; } + + .text { + @apply font-bold; + color: var(--primary); + } } @keyframes spin { diff --git a/src/components/common/LoadingCommon/LoadingCommon.tsx b/src/components/common/LoadingCommon/LoadingCommon.tsx index d41ea8492..1e8ffe340 100644 --- a/src/components/common/LoadingCommon/LoadingCommon.tsx +++ b/src/components/common/LoadingCommon/LoadingCommon.tsx @@ -6,9 +6,8 @@ const LoadingCommon = () => { return (
    -
    -

    Loading...

    +

    Loading...

    ) } diff --git a/src/components/common/LoadingCommon/assets/broccoli.png b/src/components/common/LoadingCommon/assets/broccoli.png deleted file mode 100644 index 9080e23362d4408ad522ea8660adc31684f2dff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2458 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 Date: Tue, 14 Sep 2021 17:15:40 +0700 Subject: [PATCH 072/100] styles: add spacing --- pages/notification.tsx | 13 --------- pages/notifications.tsx | 16 +++++++++++ .../NotificationBreadcrumb.module.scss | 7 +++++ .../NotificationBreadcrumb.tsx | 16 +++++++++++ .../NotificationEmptyPage.module.scss | 4 +-- .../NotificationItem.module.scss | 7 ++--- .../NotificationItem/NotificationItem.tsx | 28 ++++++++++--------- .../NotificationPage/NotificationPage.tsx | 6 +--- src/components/modules/Notification/index.tsx | 4 ++- 9 files changed, 61 insertions(+), 40 deletions(-) delete mode 100644 pages/notification.tsx create mode 100644 pages/notifications.tsx create mode 100644 src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.module.scss create mode 100644 src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.tsx diff --git a/pages/notification.tsx b/pages/notification.tsx deleted file mode 100644 index df76e6c58..000000000 --- a/pages/notification.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import { Layout } from 'src/components/common'; -import { NotificationPage } from 'src/components/modules/Notification'; - -const Notification = () => { - return ( - - ) -} - -Notification.Layout = Layout - -export default Notification; \ No newline at end of file diff --git a/pages/notifications.tsx b/pages/notifications.tsx new file mode 100644 index 000000000..235a60005 --- /dev/null +++ b/pages/notifications.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import { Layout } from 'src/components/common'; +import { NotificationBreadcrumb, NotificationPage } from 'src/components/modules/Notification'; + +const Notification = () => { + return ( + <> + + + + ) +} + +Notification.Layout = Layout + +export default Notification; \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.module.scss b/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.module.scss new file mode 100644 index 000000000..d347ad872 --- /dev/null +++ b/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.module.scss @@ -0,0 +1,7 @@ +@import "../../../../styles/utilities"; +.breadCrumbWrapper { + @apply py-12 spacing-horizontal; + @screen lg { + padding-left: 3.2rem; + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.tsx b/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.tsx new file mode 100644 index 000000000..5f713e2db --- /dev/null +++ b/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.tsx @@ -0,0 +1,16 @@ +import { BreadcrumbCommon } from "src/components/common" +import s from './NotificationBreadcrumb.module.scss' + +const NOTIFICATION_DATA = [ + {link: "/notifications", name: "Notifications"}, +]; + +const NotificationBreadcrumb = () => { + return ( +
    + +
    + ) +} + +export default NotificationBreadcrumb \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss index 457b22e77..21c4e9cc3 100644 --- a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss +++ b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss @@ -6,9 +6,7 @@ padding-bottom: 2.6rem; } .emptyContent { - font-size: 2.4rem; - line-height: 3.2rem; - letter-spacing: -0.01em; + @apply sub-headline; align-content: center; color: var(--disabled); } diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss index 3ffaf1499..ac064e19f 100644 --- a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss @@ -1,9 +1,8 @@ @import '../../../../styles/utilities'; .notificationItem { - @apply flex flex-row; + @apply flex flex-row spacing-horizontal; padding-top: 1.2rem; - padding-left: 1.6rem; &:hover{ cursor: pointer; } @@ -16,10 +15,8 @@ color: var(--text-active); } .date { + @apply caption; color: #828282; - font-size: 1.2rem; - line-height: 2rem; - letter-spacing: 0.01em; } } &.isChecked { diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.tsx b/src/components/modules/Notification/NotificationItem/NotificationItem.tsx index 83de0ff8f..402575daf 100644 --- a/src/components/modules/Notification/NotificationItem/NotificationItem.tsx +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.tsx @@ -3,17 +3,17 @@ import s from '../NotificationItem/NotificationItem.module.scss' import ClassNames from 'classnames' import { IconBill } from 'src/components/icons' import Link from 'next/link' +import {ROUTE , QUERY_KEY, ACCOUNT_TAB } from 'src/utils/constanst.utils' export interface NotificationItemProps { ID?: string, title?: string, content?: string, date?: string, - link: string, checked?: boolean, } -const NotificationItem = ({ ID, title, content, date, link, checked}: NotificationItemProps) => { +const NotificationItem = ({ ID, title, content, date, checked}: NotificationItemProps) => { const [isChecked, setChecked] = useState(checked) const Check = () => { setChecked(true) @@ -28,18 +28,20 @@ const NotificationItem = ({ ID, title, content, date, link, checked}: Notificati
    - -
    diff --git a/src/components/modules/Notification/NotificationPage/NotificationPage.tsx b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx index 8abd39d9f..c5c274ee0 100644 --- a/src/components/modules/Notification/NotificationPage/NotificationPage.tsx +++ b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx @@ -1,7 +1,6 @@ import React from 'react' import NotificationEmptyPage from '../NotificationEmptyPage/NotificationEmptyPage' import NotificationItem, { NotificationItemProps } from '../NotificationItem/NotificationItem' -import {ROUTE , QUERY_KEY, ACCOUNT_TAB } from 'src/utils/constanst.utils' interface NotificationPageProps { @@ -14,7 +13,6 @@ const NOTIFICATION_DATA = [ title: "Your order ID33455", content: "The order has been deliveried successfully!", date: "2 days ago", - link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.ORDER}`, checked: false, }, { @@ -22,7 +20,6 @@ const NOTIFICATION_DATA = [ title: "Your order ID33456", content: "The order has been deliveried successfully!", date: "2 days ago", - link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.ORDER}`, checked: false, }, { @@ -30,7 +27,6 @@ const NOTIFICATION_DATA = [ title: "Your order ID33457", content: "The order has been deliveried successfully!", date: "2 days ago", - link: `${ROUTE.ACCOUNT}?${QUERY_KEY.TAB}=${ACCOUNT_TAB.ORDER}`, checked: true, } ] @@ -47,7 +43,7 @@ const NotificationPage = ({ isEmpty=false, data = NOTIFICATION_DATA }: Notificat { data.map(item => { return ( - + ) }) } diff --git a/src/components/modules/Notification/index.tsx b/src/components/modules/Notification/index.tsx index 64413501a..dbc87c8cc 100644 --- a/src/components/modules/Notification/index.tsx +++ b/src/components/modules/Notification/index.tsx @@ -1,2 +1,4 @@ export { default as NotificationPage } from './NotificationPage/NotificationPage' -export { default as NotificationEmptyPage } from './NotificationEmptyPage/NotificationEmptyPage' \ No newline at end of file +export { default as NotificationEmptyPage } from './NotificationEmptyPage/NotificationEmptyPage' +export { default as NotificationItem } from './NotificationItem/NotificationItem' +export { default as NotificationBreadcrumb } from './NotificationBreadcrum/NotificationBreadcrumb' \ No newline at end of file From af93b0ab06c440b116a73d161a5909bbcbcc5b25 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 17:21:49 +0700 Subject: [PATCH 073/100] :sparkles: feat: open modal login/ registe in page account (without login) :%s --- .../ModalAuthenticate/ModalAuthenticate.tsx | 13 ++++++++++-- .../AccountSignIn/AccountSignIn.module.scss | 10 ++++++---- .../account/AccountSignIn/AccountSignIn.tsx | 20 ++++++++++--------- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/components/common/ModalAuthenticate/ModalAuthenticate.tsx b/src/components/common/ModalAuthenticate/ModalAuthenticate.tsx index 31ca3fb81..b35258da5 100644 --- a/src/components/common/ModalAuthenticate/ModalAuthenticate.tsx +++ b/src/components/common/ModalAuthenticate/ModalAuthenticate.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames' -import React, { useState } from 'react' +import React, { useEffect, useState } from 'react' import ModalCommon from '../ModalCommon/ModalCommon' import FormLogin from './components/FormLogin/FormLogin' import FormRegister from './components/FormRegister/FormRegister' @@ -8,11 +8,20 @@ import s from './ModalAuthenticate.module.scss' interface Props { visible: boolean, closeModal: () => void, + mode?: '' | 'register' } -const ModalAuthenticate = ({ visible, closeModal }: Props) => { +const ModalAuthenticate = ({ visible, mode, closeModal }: Props) => { const [isLogin, setIsLogin] = useState(true) + useEffect(() => { + if (mode === 'register') { + setIsLogin(false) + } else { + setIsLogin(true) + } + }, [mode]) + const onSwitch = () => { setIsLogin(!isLogin) } diff --git a/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss b/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss index 751dcf87f..e613992bc 100644 --- a/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss +++ b/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss @@ -22,11 +22,13 @@ } .dontHaveAccount{ @apply flex justify-center font-bold; - div{ - color:var(--text-active); - } - span{ + button { + all: unset; color:var(--primary); + cursor: pointer; + &:focus-visible { + outline: 2px solid var(--text-active); + } } } diff --git a/src/components/modules/account/AccountSignIn/AccountSignIn.tsx b/src/components/modules/account/AccountSignIn/AccountSignIn.tsx index d1de1dffe..32e7fa646 100644 --- a/src/components/modules/account/AccountSignIn/AccountSignIn.tsx +++ b/src/components/modules/account/AccountSignIn/AccountSignIn.tsx @@ -1,10 +1,11 @@ -import React,{memo} from "react" +import React,{memo, useState} from "react" import { ButtonCommon, StaticImage } from "src/components/common"; import s from './AccountSignIn.module.scss'; import {LANGUAGE} from 'src/utils/language.utils'; import AccountSignInImg from '../../../../../public/assets/images/accountsignin.png' -import Link from 'next/link'; import { useRouter } from 'next/router'; +import ModalAuthenticate from "src/components/common/ModalAuthenticate/ModalAuthenticate"; +import { useModalCommon } from "src/components/hooks"; interface AccountSignIn { @@ -12,12 +13,12 @@ interface AccountSignIn { const AccountSignIn = memo(({ } : AccountSignIn) => { const router = useRouter(); + const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: false }) + const [isModeAuthenSignup, setIsModeAuthenSignup] = useState(false) - function openLogin(){ - router.push({ - pathname: `${router.pathname}/query`, - search: '?openLogin=true' - }); + const openModalSignup = () => { + setIsModeAuthenSignup(true) + openModalAuthen() } return ( @@ -31,13 +32,14 @@ const AccountSignIn = memo(({ } : AccountSignIn) => { Sign in to get more interesting
    features
    - {LANGUAGE.BUTTON_LABEL.SIGNIN} + {LANGUAGE.BUTTON_LABEL.SIGNIN}
    -
    Don't have an account?  
    Create Account +
    Don't have an account?  
    + ) }); From 56cba86a1d6403d0a13aa2b0b0d26cebec8c088f Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2021 17:26:47 +0700 Subject: [PATCH 074/100] feat: Notifications title --- pages/notifications.tsx | 3 ++- .../NotificationHeading.module.scss | 9 +++++++++ .../NotificationHeading.tsx | 18 ++++++++++++++++++ .../NotificationPage.module.scss | 6 ++++++ .../NotificationPage/NotificationPage.tsx | 6 +++--- src/components/modules/Notification/index.tsx | 3 ++- 6 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 src/components/modules/Notification/NotificationHeading/NotificationHeading.module.scss create mode 100644 src/components/modules/Notification/NotificationHeading/NotificationHeading.tsx create mode 100644 src/components/modules/Notification/NotificationPage/NotificationPage.module.scss diff --git a/pages/notifications.tsx b/pages/notifications.tsx index 235a60005..f124519f9 100644 --- a/pages/notifications.tsx +++ b/pages/notifications.tsx @@ -1,11 +1,12 @@ import React from 'react'; import { Layout } from 'src/components/common'; -import { NotificationBreadcrumb, NotificationPage } from 'src/components/modules/Notification'; +import { NotificationBreadcrumb, NotificationHeading, NotificationPage } from 'src/components/modules/Notification'; const Notification = () => { return ( <> + ) diff --git a/src/components/modules/Notification/NotificationHeading/NotificationHeading.module.scss b/src/components/modules/Notification/NotificationHeading/NotificationHeading.module.scss new file mode 100644 index 000000000..2833c5f10 --- /dev/null +++ b/src/components/modules/Notification/NotificationHeading/NotificationHeading.module.scss @@ -0,0 +1,9 @@ +@import "../../../../styles/utilities"; + +.headingWrapper { + @apply flex spacing-horizontal-left pb-16; + .heading{ + max-width: 121.6rem; + flex-grow: 1; + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationHeading/NotificationHeading.tsx b/src/components/modules/Notification/NotificationHeading/NotificationHeading.tsx new file mode 100644 index 000000000..573bac2a9 --- /dev/null +++ b/src/components/modules/Notification/NotificationHeading/NotificationHeading.tsx @@ -0,0 +1,18 @@ +import { HeadingCommon } from "src/components/common" +import s from './NotificationHeading.module.scss' + +interface NotificationHeadingProps { + children?: React.ReactNode, + heading?: string, +} + +const NotificationHeading = ({heading = "NOTIFICATIONS"}: NotificationHeadingProps) => { + return ( +
    +
    + {heading} +
    +
    + ) +} +export default NotificationHeading \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationPage/NotificationPage.module.scss b/src/components/modules/Notification/NotificationPage/NotificationPage.module.scss new file mode 100644 index 000000000..1a214dccc --- /dev/null +++ b/src/components/modules/Notification/NotificationPage/NotificationPage.module.scss @@ -0,0 +1,6 @@ +.notificationPage { + padding-bottom: 5.4rem; + @screen md { + padding-bottom: 12.8rem; + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationPage/NotificationPage.tsx b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx index c5c274ee0..954b7727c 100644 --- a/src/components/modules/Notification/NotificationPage/NotificationPage.tsx +++ b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx @@ -1,7 +1,7 @@ import React from 'react' import NotificationEmptyPage from '../NotificationEmptyPage/NotificationEmptyPage' import NotificationItem, { NotificationItemProps } from '../NotificationItem/NotificationItem' - +import s from './NotificationPage.module.scss' interface NotificationPageProps { isEmpty?: boolean, @@ -34,7 +34,7 @@ const NOTIFICATION_DATA = [ const NotificationPage = ({ isEmpty=false, data = NOTIFICATION_DATA }: NotificationPageProps) => { return ( - <> +
    { isEmpty ? @@ -49,7 +49,7 @@ const NotificationPage = ({ isEmpty=false, data = NOTIFICATION_DATA }: Notificat } } - +
    ) } diff --git a/src/components/modules/Notification/index.tsx b/src/components/modules/Notification/index.tsx index dbc87c8cc..413535595 100644 --- a/src/components/modules/Notification/index.tsx +++ b/src/components/modules/Notification/index.tsx @@ -1,4 +1,5 @@ export { default as NotificationPage } from './NotificationPage/NotificationPage' export { default as NotificationEmptyPage } from './NotificationEmptyPage/NotificationEmptyPage' export { default as NotificationItem } from './NotificationItem/NotificationItem' -export { default as NotificationBreadcrumb } from './NotificationBreadcrum/NotificationBreadcrumb' \ No newline at end of file +export { default as NotificationBreadcrumb } from './NotificationBreadcrum/NotificationBreadcrumb' +export { default as NotificationHeading } from './NotificationHeading/NotificationHeading' \ No newline at end of file From 3e8b2eeb11b0454b09f4f1a847d5e8226ba7efc0 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 17:36:29 +0700 Subject: [PATCH 075/100] :bug: bug: missing import in HeaderMenu :%s --- next-env.d.ts | 3 --- .../common/Header/components/HeaderMenu/HeaderMenu.tsx | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/next-env.d.ts b/next-env.d.ts index 9bc3dd46b..c6643fda1 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,3 @@ /// /// /// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index 4487fa83c..c9403a49d 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -1,3 +1,4 @@ +import classNames from 'classnames' import Link from 'next/link' import { useRouter } from 'next/router' import { memo, useMemo } from 'react' From 99b43daa8ae9fefc88ca9772409d3c9938e1802d Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 17:38:27 +0700 Subject: [PATCH 076/100] :art: styles: move scroll to top to bottom :%s --- src/components/common/ScrollToTop/ScrollToTop.module.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/common/ScrollToTop/ScrollToTop.module.scss b/src/components/common/ScrollToTop/ScrollToTop.module.scss index 940bc0ac2..bfaa5cb99 100644 --- a/src/components/common/ScrollToTop/ScrollToTop.module.scss +++ b/src/components/common/ScrollToTop/ScrollToTop.module.scss @@ -8,7 +8,7 @@ &.show { @apply block rounded-lg fixed cursor-pointer; right: 6.4rem; - bottom: 21.6rem; + bottom: 10.6rem; width: 6.4rem; height: 6.4rem; background-color: var(--border-line); From 2e66e0108eee801a118bafff3b6451ef6db9d0ff Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2021 17:53:54 +0700 Subject: [PATCH 077/100] feat: add demo page --- pages/demo.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pages/demo.tsx b/pages/demo.tsx index 38f91037c..47fb1eea1 100644 --- a/pages/demo.tsx +++ b/pages/demo.tsx @@ -1,13 +1,13 @@ import { Layout } from 'src/components/common'; - - - +import { NotificationEmptyPage, NotificationHeading, NotificationBreadcrumb } from 'src/components/modules/Notification'; export default function Demo() { - return <> - Lorem ipsum dolor sit amet consectetur adipisicing elit. Molestias possimus tempore, nulla voluptate sed iste unde qui. Natus, amet minus, fugiat unde optio iste perferendis ea quae iusto asperiores voluptates enim sunt ducimus? Perferendis velit maxime sint pariatur beatae, veniam nulla sed, impedit, consectetur minus est libero enim? Quia reiciendis dolor, porro nisi harum fuga ullam pariatur facilis quas, praesentium quae, eveniet officiis officia animi aspernatur ut sunt commodi vero totam! Rerum, placeat perferendis laborum itaque blanditiis natus aperiam, eum delectus enim architecto eos, et voluptates! Illo at sed, pariatur ullam suscipit rerum recusandae doloremque natus nihil. Et temporibus quae necessitatibus quam alias, repellat laudantium a perspiciatis dolorum accusamus officiis pariatur ipsum facilis, nobis magni molestiae accusantium assumenda tempora consequuntur natus nostrum? Id, mollitia alias quidem hic aperiam error, blanditiis vero distinctio sit neque assumenda odio praesentium, perspiciatis aspernatur exercitationem. Eveniet nostrum tempore saepe cupiditate totam fuga doloremque placeat natus beatae quibusdam labore tempora delectus alias architecto vel, recusandae facilis nam rerum dolores magni? Eaque fugiat ut dicta. Aperiam, excepturi ad molestias non corrupti, officia dolore sequi, provident laborum officiis praesentium beatae quos? Totam et consequatur atque fugit voluptate. Aliquam neque, ab hic suscipit obcaecati ut aut quos. Expedita, ipsam. - Lorem ipsum dolor sit amet consectetur adipisicing elit. Molestias possimus tempore, nulla voluptate sed iste unde qui. Natus, amet minus, fugiat unde optio iste perferendis ea quae iusto asperiores voluptates enim sunt ducimus? Perferendis velit maxime sint pariatur beatae, veniam nulla sed, impedit, consectetur minus est libero enim? Quia reiciendis dolor, porro nisi harum fuga ullam pariatur facilis quas, praesentium quae, eveniet officiis officia animi aspernatur ut sunt commodi vero totam! Rerum, placeat perferendis laborum itaque blanditiis natus aperiam, eum delectus enim architecto eos, et voluptates! Illo at sed, pariatur ullam suscipit rerum recusandae doloremque natus nihil. Et temporibus quae necessitatibus quam alias, repellat laudantium a perspiciatis dolorum accusamus officiis pariatur ipsum facilis, nobis magni molestiae accusantium assumenda tempora consequuntur natus nostrum? Id, mollitia alias quidem hic aperiam error, blanditiis vero distinctio sit neque assumenda odio praesentium, perspiciatis aspernatur exercitationem. Eveniet nostrum tempore saepe cupiditate totam fuga doloremque placeat natus beatae quibusdam labore tempora delectus alias architecto vel, recusandae facilis nam rerum dolores magni? Eaque fugiat ut dicta. Aperiam, excepturi ad molestias non corrupti, officia dolore sequi, provident laborum officiis praesentium beatae quos? Totam et consequatur atque fugit voluptate. Aliquam neque, ab hic suscipit obcaecati ut aut quos. Expedita, ipsam. - Lorem ipsum dolor sit amet consectetur adipisicing elit. Molestias possimus tempore, nulla voluptate sed iste unde qui. Natus, amet minus, fugiat unde optio iste perferendis ea quae iusto asperiores voluptates enim sunt ducimus? Perferendis velit maxime sint pariatur beatae, veniam nulla sed, impedit, consectetur minus est libero enim? Quia reiciendis dolor, porro nisi harum fuga ullam pariatur facilis quas, praesentium quae, eveniet officiis officia animi aspernatur ut sunt commodi vero totam! Rerum, placeat perferendis laborum itaque blanditiis natus aperiam, eum delectus enim architecto eos, et voluptates! Illo at sed, pariatur ullam suscipit rerum recusandae doloremque natus nihil. Et temporibus quae necessitatibus quam alias, repellat laudantium a perspiciatis dolorum accusamus officiis pariatur ipsum facilis, nobis magni molestiae accusantium assumenda tempora consequuntur natus nostrum? Id, mollitia alias quidem hic aperiam error, blanditiis vero distinctio sit neque assumenda odio praesentium, perspiciatis aspernatur exercitationem. Eveniet nostrum tempore saepe cupiditate totam fuga doloremque placeat natus beatae quibusdam labore tempora delectus alias architecto vel, recusandae facilis nam rerum dolores magni? Eaque fugiat ut dicta. Aperiam, excepturi ad molestias non corrupti, officia dolore sequi, provident laborum officiis praesentium beatae quos? Totam et consequatur atque fugit voluptate. Aliquam neque, ab hic suscipit obcaecati ut aut quos. Expedita, ipsam. + return ( + <> + + + + ) } Demo.Layout = Layout From 24bacba766506c6d9eec5135eeddd8819e6b7251 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Tue, 14 Sep 2021 18:18:06 +0700 Subject: [PATCH 078/100] :sparkles: feat: change active tab from query in page account :%s --- .../AccountNavigation/AccountNavigation.tsx | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx index a8da59211..91f827636 100644 --- a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx +++ b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx @@ -3,17 +3,40 @@ import s from './AccountNavigation.module.scss' import AccountNavigationItem from './components/AccountNavigationItem/AccountNavigationItem' import {TabPaneProps} from '../../../common/TabCommon/components/TabPane/TabPane' +import { ACCOUNT_TAB, QUERY_KEY } from "src/utils/constanst.utils" +import { useRouter } from "next/router" interface AccountNavigationProps { defaultActiveIndex: number; children: React.ReactNode } +const getTabIndex = (tab?: string): number => { + switch (tab) { + case ACCOUNT_TAB.CUSTOMER_INFO: + return 0; + case ACCOUNT_TAB.ORDER: + return 1; + case ACCOUNT_TAB.FAVOURITE: + return 2; + default: + return 0 + } +} + const AccountNavigation = ({ defaultActiveIndex, children } : AccountNavigationProps) => { + const router = useRouter() + const [active, setActive] = useState(defaultActiveIndex) const sliderRef = useRef(null); const headerRef = useRef(null) + useEffect(() => { + const query = router.query[QUERY_KEY.TAB] as string + const index = getTabIndex(query) + setActive(index) + }, [router.query[QUERY_KEY.TAB]]) + const onTabClick = (index: number) => { setActive(index) } From eab45e229c0e4b37f59785c0a2c252cb06f498e8 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Tue, 14 Sep 2021 18:38:33 +0700 Subject: [PATCH 079/100] :ambulance: fix Account Page --- next-env.d.ts | 3 + .../common/TabCommon/TabCommon.module.scss | 2 +- .../AccountPage/AccountPage.module.scss | 2 + .../account/AccountPage/AccountPage.tsx | 5 +- .../AccountInfomation.module.scss | 1 + .../AccountInfomation/AccountInfomation.tsx | 40 +++++----- .../EditInfoModal/EditInfoModal.module.scss | 27 +------ .../EditInfoModal/EditInfoModal.tsx | 6 +- .../FavouriteProducts.module.scss | 5 ++ .../FavouriteProducts/FavouriteProducts.tsx | 20 +++++ .../OrderInformation/OrderInformation.tsx | 74 +++++++++---------- .../DeliveryItem/DeliveryItem.module.scss | 3 +- .../IdAndStatus/IdAndStatus.module.scss | 6 +- .../components/IdAndStatus/IdAndStatus.tsx | 6 +- .../components/ReOrder/ReOrder.module.scss | 7 +- .../TotalPrice/TotalPrice.module.scss | 6 +- 16 files changed, 101 insertions(+), 112 deletions(-) create mode 100644 src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.module.scss create mode 100644 src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.tsx diff --git a/next-env.d.ts b/next-env.d.ts index c6643fda1..9bc3dd46b 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,3 +1,6 @@ /// /// /// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/src/components/common/TabCommon/TabCommon.module.scss b/src/components/common/TabCommon/TabCommon.module.scss index d8b5d0f9a..ff90e8979 100644 --- a/src/components/common/TabCommon/TabCommon.module.scss +++ b/src/components/common/TabCommon/TabCommon.module.scss @@ -7,7 +7,7 @@ .tabList { @apply flex; position: relative; - border-bottom: 2px solid #FBFBFB; + border-bottom: 2px solid #EBEBEB; padding: 0.8rem 0; &.center{ margin: auto; diff --git a/src/components/modules/account/AccountPage/AccountPage.module.scss b/src/components/modules/account/AccountPage/AccountPage.module.scss index 3f8307750..5eece6c80 100644 --- a/src/components/modules/account/AccountPage/AccountPage.module.scss +++ b/src/components/modules/account/AccountPage/AccountPage.module.scss @@ -6,6 +6,8 @@ margin-top: -3.2rem; padding-top: 3.2rem; padding-bottom: 3.2rem; + min-height: 70rem; + @screen md { padding-left: 3.2rem; diff --git a/src/components/modules/account/AccountPage/AccountPage.tsx b/src/components/modules/account/AccountPage/AccountPage.tsx index 3b0948c40..c463b056a 100644 --- a/src/components/modules/account/AccountPage/AccountPage.tsx +++ b/src/components/modules/account/AccountPage/AccountPage.tsx @@ -5,9 +5,12 @@ import { HeadingCommon, TabPane } from "src/components/common" import AccountNavigation from '../AccountNavigation/AccountNavigation' import AccountInfomation from "./components/AccountInfomation/AccountInfomation" +import FavouriteProducts from "./components/FavouriteProducts/FavouriteProducts" import OrderInfomation from './components/OrderInformation/OrderInformation' import EditInfoModal from './components/EditInfoModal/EditInfoModal' +import { PRODUCT_CART_DATA_TEST } from 'src/utils/demo-data'; + const waiting = [ { id: "NO 123456", @@ -74,7 +77,7 @@ const AccountPage = ({ defaultActiveContent="orders" } : AccountPageProps) => { - {/* */} + diff --git a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss index 442dae2eb..466dc3127 100644 --- a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss +++ b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss @@ -38,6 +38,7 @@ .shippingInfo { @apply heading-3 font-heading; + margin-bottom: .8rem; } .accountAddress { diff --git a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.tsx b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.tsx index f24b36216..dac651fea 100644 --- a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.tsx +++ b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.tsx @@ -21,34 +21,30 @@ const AccountInfomation = ({ account, onClick } : AccountInfomationProps) => { return (
    - { -
    -
    - avatar -
    +
    + avatar +
    -
    - {account.name} -
    -
    - {account.email} -
    +
    + {account.name} +
    +
    + {account.email} +
    -
    +
    -
    Shipping Infomation
    +
    Shipping Infomation
    -
    - {account.address + `, ${account.state}, ${account.city}, ${account.postalCode}`} -
    +
    + {account.address + `, ${account.state}, ${account.city}, ${account.postalCode}`} +
    -
    - {account.phoneNumber} -
    +
    + {account.phoneNumber} +
    -
    Edit
    -
    - } +
    Edit
    ) } diff --git a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss index fb67ab24c..1215ac2a3 100644 --- a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss +++ b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss @@ -32,30 +32,7 @@ } .buttons { - @apply flex; - - .buttonCancel { - @apply bg-white text-center font-bold custom-border-radius-lg; - color: #141414; - border: 1px solid #141414; - padding: 1.6rem; - margin-right: 1.6rem; - width: 100%; - - &:hover { - @apply cursor-pointer; - } - } - - .buttonSave { - @apply text-center font-bold custom-border-radius-lg; - background-color: var(--primary); - color: white; - padding: 1.6rem; - width: 100%; - &:hover { - @apply cursor-pointer; - } - } + @apply grid grid-cols-2; + grid-gap: 1.6rem; } } \ No newline at end of file diff --git a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx index 5f88df01b..4f1b8296b 100644 --- a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx +++ b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx @@ -1,7 +1,7 @@ import React from "react" import s from './EditInfoModal.module.scss' -import { ModalCommon, Inputcommon, SelectCommon } from '../../../../../common' +import { ModalCommon, Inputcommon, SelectCommon, ButtonCommon } from '../../../../../common' interface EditInfoModalProps { accountInfo: {name: string, email: string, address: string, state: string, city: string, postalCode: string, phoneNumber: string}; @@ -58,8 +58,8 @@ const EditInfoModal = ({ accountInfo, visible = false, closeModal }: EditInfoMod
    -
    Cancel
    -
    Save
    + Cancel + Save
    diff --git a/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.module.scss b/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.module.scss new file mode 100644 index 000000000..e6eef3499 --- /dev/null +++ b/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.module.scss @@ -0,0 +1,5 @@ +@import '../../../../../../styles/utilities'; + +.favouriteProducts { + +} \ No newline at end of file diff --git a/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.tsx b/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.tsx new file mode 100644 index 000000000..f88605242 --- /dev/null +++ b/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.tsx @@ -0,0 +1,20 @@ +import React from "react" +import s from './FavouriteProducts.module.scss' +import {ProductList} from '../../../../../common' +import { ProductCardProps } from '../../../../../common/ProductCard/ProductCard' + + +interface FavouriteProductsProps { + products: ProductCardProps[]; +} + +const FavouriteProducts = ({ products } : FavouriteProductsProps) => { + + return ( +
    + +
    + ) +} + +export default FavouriteProducts \ No newline at end of file diff --git a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx index 98f305b9e..211cebe3b 100644 --- a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx +++ b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx @@ -16,48 +16,44 @@ const OrderInformation = ({ waiting, delivering, delivered} : OrderInformationPr return (
    - { -
    -
    Order Information
    +
    Order Information
    -
    - - -
    - { - waiting.map((order, i) => { - return ( - - ) - }) - } -
    +
    + + +
    + { + waiting.map((order, i) => { + return ( + + ) + }) + } +
    - -
    - { - delivering.map((order, i) => { - return ( - - ) - }) - } -
    + +
    + { + delivering.map((order, i) => { + return ( + + ) + }) + } +
    - -
    - { - delivered.map((order, i) => { - return ( - - ) - }) - } -
    -
    -
    -
    - } + +
    + { + delivered.map((order, i) => { + return ( + + ) + }) + } +
    + +
    ) } diff --git a/src/components/modules/account/DeliveryItem/DeliveryItem.module.scss b/src/components/modules/account/DeliveryItem/DeliveryItem.module.scss index b83b77fd3..44cc3a5c9 100644 --- a/src/components/modules/account/DeliveryItem/DeliveryItem.module.scss +++ b/src/components/modules/account/DeliveryItem/DeliveryItem.module.scss @@ -1,9 +1,8 @@ @import '../../../../styles/utilities'; .deliveryItem { - @apply flex bg-white items-center custom-border-radius; + @apply flex bg-white items-center shape-common; margin-bottom: 1.6rem; - border: 1px solid var(--primary) } .separator { diff --git a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss index bc0d692b3..5e8cbdd83 100644 --- a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss +++ b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss @@ -2,11 +2,7 @@ .idAndStatus { @apply items-center; - padding: 2.4rem 0 2.4rem 1rem; - - @screen md { - padding: 2.4rem 0 2.4rem 1.2rem; - } + padding: 2.4rem 0 2.4rem 1.2rem; @screen lg { padding: 2.4rem 0 2.4rem 2.4rem; diff --git a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.tsx b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.tsx index 841dd530f..578c94f97 100644 --- a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.tsx +++ b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.tsx @@ -5,10 +5,10 @@ import s from './IdAndStatus.module.scss' interface IdAndStatusProps { id?: string; - status: "waiting" | "delivering" | "delivered"; + status: "Waiting" | "Delivering" | "Delivered"; } -const IdAndStatus = ({ id, status="waiting" } : IdAndStatusProps) => { +const IdAndStatus = ({ id, status="Waiting" } : IdAndStatusProps) => { return (
    @@ -16,7 +16,7 @@ const IdAndStatus = ({ id, status="waiting" } : IdAndStatusProps) => {
    {status} + })}> {status.charAt(0).toUpperCase() + status.slice(1)}
    ) diff --git a/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss b/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss index b46b528e1..ce36380da 100644 --- a/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss +++ b/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss @@ -3,14 +3,9 @@ .reOrder { @apply text-white custom-border-radius hidden font-bold; padding: .4rem .6rem; - margin-right: 1rem; + margin-right: 1.2rem; background-color: var(--primary); - @screen md { - padding: .4rem .6rem; - margin-right: 1.2rem; - } - @screen lg { padding: .8rem 1.2rem; margin-right: 2.4rem; diff --git a/src/components/modules/account/DeliveryItem/components/TotalPrice/TotalPrice.module.scss b/src/components/modules/account/DeliveryItem/components/TotalPrice/TotalPrice.module.scss index 9a4f795b3..e987f30c1 100644 --- a/src/components/modules/account/DeliveryItem/components/TotalPrice/TotalPrice.module.scss +++ b/src/components/modules/account/DeliveryItem/components/TotalPrice/TotalPrice.module.scss @@ -2,11 +2,7 @@ .totalPrice { margin-left: auto; - margin-right: 1rem; - - @screen md { - margin-right: 1.2rem; - } + margin-right: 1.2rem; @screen lg { margin-right: 2.4rem; From c20150902e77cee4261bb707327714905e9a6a63 Mon Sep 17 00:00:00 2001 From: sonnguyenkieio Date: Tue, 14 Sep 2021 19:08:05 +0700 Subject: [PATCH 080/100] :ambulance: fix Account Page --- .../AccountNavigationItem.module.scss | 4 ++-- .../AccountInfomation.module.scss | 21 +++++++++++++------ .../EditInfoModal/EditInfoModal.module.scss | 1 + 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss index 07952e6d8..8725597cf 100644 --- a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss +++ b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss @@ -1,7 +1,7 @@ @import '../../../../../../styles/utilities'; .accountNavigationItem { - @apply custom-border-radius; + @apply shape-common; width: fit-content; padding: 1.2rem 1.6rem 1.2rem 0rem; @@ -12,7 +12,7 @@ } &.active { - @apply custom-border-radius font-bold; + @apply shape-common font-bold; background-color: var(--primary); color: white; padding: 1.2rem 1.6rem 1.2rem 1.6rem; diff --git a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss index 466dc3127..6e8150f1b 100644 --- a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss +++ b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss @@ -1,13 +1,11 @@ @import '../../../../../../styles/utilities'; .accountInfomation { - @apply flex justify-center items-center; - text-align: center; + @apply block text-center; margin-top: 1.6rem; @screen md { - @apply block; - text-align: left; + @apply text-left; margin-top: 0; } @@ -32,8 +30,13 @@ border: 1px solid var(--disabled); max-width: 39.2rem; min-width: 30rem; + margin: auto; margin-top: 2.4rem; margin-bottom: 2.4rem; + + @screen md { + margin-left: 0; + } } .shippingInfo { @@ -42,8 +45,14 @@ } .accountAddress { - max-width: 31rem; - min-width: none; + margin: auto; + max-width: 28rem; + + @screen md { + max-width: 31rem; + min-width: none; + margin-left: 0; + } } .editInfoBtn { diff --git a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss index 1215ac2a3..20acd257b 100644 --- a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss +++ b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss @@ -17,6 +17,7 @@ @apply bg-white cursor-pointer; border: white; margin-right: 0.8rem; + height: fit-content; } .inputPostalCode { From cda96f21e3b7ac2960828c1e01e35e1ce6f3beb7 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 09:35:04 +0700 Subject: [PATCH 081/100] :art: styles: change query tab logic in acc page :%s --- .../AccountNavigation/AccountNavigation.tsx | 26 ++---------- .../account/AccountPage/AccountPage.tsx | 41 +++++++++++++++++-- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx index 91f827636..4fd534148 100644 --- a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx +++ b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx @@ -1,41 +1,23 @@ import React, { useRef, useEffect, Children, ReactElement, PropsWithChildren, useState, cloneElement } from "react" import s from './AccountNavigation.module.scss' - import AccountNavigationItem from './components/AccountNavigationItem/AccountNavigationItem' import {TabPaneProps} from '../../../common/TabCommon/components/TabPane/TabPane' -import { ACCOUNT_TAB, QUERY_KEY } from "src/utils/constanst.utils" -import { useRouter } from "next/router" interface AccountNavigationProps { defaultActiveIndex: number; children: React.ReactNode } -const getTabIndex = (tab?: string): number => { - switch (tab) { - case ACCOUNT_TAB.CUSTOMER_INFO: - return 0; - case ACCOUNT_TAB.ORDER: - return 1; - case ACCOUNT_TAB.FAVOURITE: - return 2; - default: - return 0 - } -} - const AccountNavigation = ({ defaultActiveIndex, children } : AccountNavigationProps) => { - const router = useRouter() - const [active, setActive] = useState(defaultActiveIndex) const sliderRef = useRef(null); const headerRef = useRef(null) useEffect(() => { - const query = router.query[QUERY_KEY.TAB] as string - const index = getTabIndex(query) - setActive(index) - }, [router.query[QUERY_KEY.TAB]]) + if (defaultActiveIndex !== undefined) { + setActive(defaultActiveIndex) + } + }, [defaultActiveIndex]) const onTabClick = (index: number) => { setActive(index) diff --git a/src/components/modules/account/AccountPage/AccountPage.tsx b/src/components/modules/account/AccountPage/AccountPage.tsx index c463b056a..47f5cf955 100644 --- a/src/components/modules/account/AccountPage/AccountPage.tsx +++ b/src/components/modules/account/AccountPage/AccountPage.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react" +import React, { useEffect, useState } from "react" import s from './AccountPage.module.scss' import { HeadingCommon, TabPane } from "src/components/common" @@ -10,12 +10,19 @@ import OrderInfomation from './components/OrderInformation/OrderInformation' import EditInfoModal from './components/EditInfoModal/EditInfoModal' import { PRODUCT_CART_DATA_TEST } from 'src/utils/demo-data'; +import { ACCOUNT_TAB, QUERY_KEY } from "src/utils/constanst.utils" +import { useRouter } from "next/router" const waiting = [ { id: "NO 123456", products: ["Tomato", "Fish", "Pork", "Onion"], totalPrice : 1000 + }, + { + id: "NO 123457", + products: ["Tomato", "Fish", "Pork", "Onion"], + totalPrice : 1000 } ] @@ -24,6 +31,11 @@ const delivering = [ id: "NO 123456", products: ["Tomato", "Fish", "Pork", "Onion", "Tomato", "Fish", "Pork", "Onion"], totalPrice : 1000 + }, + { + id: "NO 123457", + products: ["Tomato", "Fish", "Pork", "Onion", "Tomato", "Fish", "Pork", "Onion"], + totalPrice : 1000 } ] @@ -32,6 +44,11 @@ const delivered = [ id: "NO 123456", products: ["Tomato", "Fish", "Pork", "Onion", "Tomato", "Fish", "Pork", "Onion"], totalPrice : 1000 + }, + { + id: "NO 123457", + products: ["Tomato", "Fish", "Pork", "Onion", "Tomato", "Fish", "Pork", "Onion"], + totalPrice : 1000 } ] @@ -48,12 +65,30 @@ let account = { interface AccountPageProps { defaultActiveContent?: "info" | "orders" | "favorites" } +const getTabIndex = (tab?: string): number => { + switch (tab) { + case ACCOUNT_TAB.CUSTOMER_INFO: + return 0; + case ACCOUNT_TAB.ORDER: + return 1; + case ACCOUNT_TAB.FAVOURITE: + return 2; + default: + return 0 + } +} const AccountPage = ({ defaultActiveContent="orders" } : AccountPageProps) => { - - const [activeTab] = useState(defaultActiveContent==="info" ? 0 : defaultActiveContent==="orders" ? 1 : 2) + const router = useRouter() + const [activeTab, setActiveTab] = useState(defaultActiveContent==="info" ? 0 : defaultActiveContent==="orders" ? 1 : 2) const [modalVisible, setModalVisible] = useState(false); + useEffect(() => { + const query = router.query[QUERY_KEY.TAB] as string + const index = getTabIndex(query) + setActiveTab(index) + }, [router.query[QUERY_KEY.TAB]]) + function showModal() { setModalVisible(true); } From 407acb7415ccd322eb9856f054a2e3e3151c5997 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 09:38:18 +0700 Subject: [PATCH 082/100] :art: styles: fix style active tab in acc page :%s --- .../AccountNavigationItem/AccountNavigationItem.module.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss index 8725597cf..6ae8f42e2 100644 --- a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss +++ b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss @@ -1,7 +1,6 @@ @import '../../../../../../styles/utilities'; .accountNavigationItem { - @apply shape-common; width: fit-content; padding: 1.2rem 1.6rem 1.2rem 0rem; @@ -17,12 +16,13 @@ color: white; padding: 1.2rem 1.6rem 1.2rem 1.6rem; margin-right: 1.6rem; - + @screen md { @apply font-normal; background-color: #FBFBFB; border-radius: 0 1.6rem 1.6rem 0; color: #3D3D3D; + clip-path: none; } } From 77b016ef379e927790abf6a9fe0e974edb9a8116 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 09:47:14 +0700 Subject: [PATCH 083/100] :fire: remove: account (without login) :%s --- pages/account.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/pages/account.tsx b/pages/account.tsx index 84f0d8d74..7da102c52 100644 --- a/pages/account.tsx +++ b/pages/account.tsx @@ -1,13 +1,10 @@ import React from 'react'; import { Layout } from 'src/components/common'; -import { AccountPage, AccountSignIn } from 'src/components/modules/account'; +import { AccountPage } from 'src/components/modules/account'; const Account = () => { return ( - // - <> - - + ); }; From 2c3d9e690b47ec277e9b336b91eb8f65419ae95c Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 09:50:06 +0700 Subject: [PATCH 084/100] :art: styles: add spacing bottom for noti page (empty) :%s --- .../NotificationEmptyPage/NotificationEmptyPage.module.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss index 21c4e9cc3..13efe5e14 100644 --- a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss +++ b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss @@ -2,6 +2,10 @@ .emptyPage { @apply flex justify-center items-center flex-col; + margin-bottom: 5.4rem; + @screen lg { + margin-bottom: 12.8rem; + } .emptyIcon { padding-bottom: 2.6rem; } From 0cfb2beab46ec31f78ad23d49f63af8199008938 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 10:08:34 +0700 Subject: [PATCH 085/100] :recycle: enhan: add page noti (empty) demo :%s --- .../common/Header/components/HeaderMenu/HeaderMenu.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index c9403a49d..ed7fe7ca0 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -37,6 +37,10 @@ const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleF link: '/account-not-login', name: 'Account Not Login', }, + { + link: '/demo', + name: 'Notifications (Demo case empty)', + }, { link: ROUTE.NOTIFICATION, name: 'Notifications', From 72e16697becf30dad9e531da7c61e65df22bf7ed Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 10:08:58 +0700 Subject: [PATCH 086/100] :art: styles: set max width for content = 1536px :%s --- src/components/common/Layout/Layout.module.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/common/Layout/Layout.module.scss b/src/components/common/Layout/Layout.module.scss index 30e4a077d..fec46538b 100644 --- a/src/components/common/Layout/Layout.module.scss +++ b/src/components/common/Layout/Layout.module.scss @@ -4,6 +4,8 @@ min-height: 100vh; > main { flex: 1; + max-width: min( 100%, 1536px); + margin: auto; } } .filter{ From bd02bff282cc5cc01fbf1a6186da99b4606e4855 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 10:20:39 +0700 Subject: [PATCH 087/100] :art: styles: set max width for content = 1536px :%s --- .../common/Header/components/HeaderMenu/HeaderMenu.tsx | 4 ++-- src/components/common/Layout/Layout.module.scss | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index ed7fe7ca0..ea4e7ab19 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -35,11 +35,11 @@ const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleF }, { link: '/account-not-login', - name: 'Account Not Login', + name: 'Account Not Login (Demo)', }, { link: '/demo', - name: 'Notifications (Demo case empty)', + name: 'Notifications Empty (Demo)', }, { link: ROUTE.NOTIFICATION, diff --git a/src/components/common/Layout/Layout.module.scss b/src/components/common/Layout/Layout.module.scss index fec46538b..679b0b48f 100644 --- a/src/components/common/Layout/Layout.module.scss +++ b/src/components/common/Layout/Layout.module.scss @@ -4,6 +4,7 @@ min-height: 100vh; > main { flex: 1; + width: 100%; max-width: min( 100%, 1536px); margin: auto; } From 3641ffa6e70b0a0a5c024a06208a89c954ed0b32 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 12:52:34 +0700 Subject: [PATCH 088/100] :art: styles: header mobile animation :%s --- next-env.d.ts | 3 -- src/components/common/Header/Header.tsx | 26 +++++---- .../HeaderMenu/HeaderMenu.module.scss | 54 ++++++++++++++----- .../components/HeaderMenu/HeaderMenu.tsx | 27 +++++++--- .../home/HomeBanner/HomeBanner.module.scss | 3 +- src/styles/_base.scss | 2 +- tailwind.config.js | 2 +- 7 files changed, 76 insertions(+), 41 deletions(-) diff --git a/next-env.d.ts b/next-env.d.ts index 9bc3dd46b..c6643fda1 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,3 @@ /// /// /// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index b86b36fb7..ad55d1feb 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -12,10 +12,10 @@ import HeaderSubMenuMobile from './components/HeaderSubMenuMobile/HeaderSubMenuM import s from './Header.module.scss' interface props { toggleFilter: () => void, - visibleFilter:boolean + visibleFilter: boolean } -const Header = memo(({ toggleFilter,visibleFilter }: props) => { +const Header = memo(({ toggleFilter, visibleFilter }: props) => { const headeFullRef = useRef(null) const [isFullHeader, setIsFullHeader] = useState(true) const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: false }) @@ -30,27 +30,23 @@ const Header = memo(({ toggleFilter,visibleFilter }: props) => { } } - const headerHeight = useMemo(() => { - return headeFullRef.current?.offsetHeight - }, [headeFullRef.current]) - useEffect(() => { const handleScroll = () => { - if (!isMobile()) { - if (!headerHeight || window.scrollY > headerHeight) { - setIsFullHeader(false) - } else { - setIsFullHeader(true) - } + if (!headeFullRef.current || window.scrollY > headeFullRef.current?.offsetHeight) { + setIsFullHeader(false) } else { setIsFullHeader(true) } + // if (!isMobile()) { + // } else { + // setIsFullHeader(true) + // } } window.addEventListener('scroll', handleScroll) return () => { window.removeEventListener('scroll', handleScroll) } - }, [headerHeight]) + }, [headeFullRef.current]) return ( <> @@ -59,16 +55,18 @@ const Header = memo(({ toggleFilter,visibleFilter }: props) => { [s.show]: !isFullHeader })}>
    - +
    void, openModalInfo: () => void, toggleFilter: () => void, @@ -20,7 +22,7 @@ interface Props { const FILTER_PAGE = [ROUTE.HOME, ROUTE.PRODUCTS] -const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleFilter, toggleCart}: Props) => { +const HeaderMenu = memo(({ isFull, isStickyHeader, visibleFilter, openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => { const router = useRouter() @@ -56,7 +58,11 @@ const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleF ], [openModalAuthen]) return ( -
    +
    @@ -64,8 +70,8 @@ const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleF { FILTER_PAGE.includes(router.pathname) && ( ) } @@ -75,8 +81,13 @@ const HeaderMenu = memo(({ visibleFilter,openModalAuthen, openModalInfo, toggleF
    -
    - +
    +
    + +
    +
    + Search +
      diff --git a/src/components/modules/home/HomeBanner/HomeBanner.module.scss b/src/components/modules/home/HomeBanner/HomeBanner.module.scss index bb65a2549..3191b5515 100644 --- a/src/components/modules/home/HomeBanner/HomeBanner.module.scss +++ b/src/components/modules/home/HomeBanner/HomeBanner.module.scss @@ -31,13 +31,14 @@ width: min-content; color: var(--white); - font-size: 7rem; + font-size: 7.6rem; line-height: 8rem; letter-spacing: -0.03em; font-weight: bold; text-transform: uppercase; @screen 2xl { + font-size: 7.8rem; line-height: 8rem; } &::after { diff --git a/src/styles/_base.scss b/src/styles/_base.scss index e8719581f..99537fd65 100644 --- a/src/styles/_base.scss +++ b/src/styles/_base.scss @@ -41,7 +41,7 @@ --line-height: 2.4rem; --font-sans: "Nunito", -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "Helvetica", sans-serif; - --font-heading: "Righteous", -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "Helvetica", sans-serif; + --font-heading: "Norquay-bold", "Righteous", -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "Helvetica", sans-serif; --font-logo: "Poppins", -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "Helvetica", sans-serif; } diff --git a/tailwind.config.js b/tailwind.config.js index ec9f0e5d1..9d51fd1ba 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -122,7 +122,7 @@ module.exports = { 'xl': '1280px', // => @media (min-width: 1280px) { ... } - '2xl': '1536px', + '2xl': '1440px', // => @media (min-width: 1536px) { ... } }, caroucel: { From 9467250fbb778e1a0105cd35ce30889c4a7e1322 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 13:10:02 +0700 Subject: [PATCH 089/100] :wrench: config: font heading :%s --- public/fonts/Norquay-bold.otf | Bin 0 -> 100880 bytes public/fonts/Norquay-bold.woff | Bin 0 -> 45365 bytes public/fonts/style.css | 4 ++++ src/styles/_base.scss | 1 + 4 files changed, 5 insertions(+) create mode 100644 public/fonts/Norquay-bold.otf create mode 100644 public/fonts/Norquay-bold.woff create mode 100644 public/fonts/style.css diff --git a/public/fonts/Norquay-bold.otf b/public/fonts/Norquay-bold.otf new file mode 100644 index 0000000000000000000000000000000000000000..37212fd9fe1ad4e3f614f1a36f4d22d16cfaa983 GIT binary patch literal 100880 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 M=P&y-5QB677YoIKQUCw| literal 0 HcmV?d00001 diff --git a/public/fonts/Norquay-bold.woff b/public/fonts/Norquay-bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..28564d5d41c2ddac47cf1d62d65e1c9f0674a7ce GIT binary patch literal 45365 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 n#AH+e&;aoN?6JPS{$l|E2^j?u5P+C4%y+Cn%5 Date: Wed, 15 Sep 2021 13:10:18 +0700 Subject: [PATCH 090/100] :art: styles: color btn carousel :%s --- src/components/common/Banner/Banner.tsx | 1 - .../common/CarouselCommon/CarouselCommon.module.scss | 1 + .../modules/home/HomeBanner/HomeBanner.module.scss | 6 +----- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/components/common/Banner/Banner.tsx b/src/components/common/Banner/Banner.tsx index 410fded77..e8c86f53e 100644 --- a/src/components/common/Banner/Banner.tsx +++ b/src/components/common/Banner/Banner.tsx @@ -8,7 +8,6 @@ interface Props { const option = { slidesPerView: 1, - mode: 'free', } const Banner = memo(({ data }: Props) => { if (data.length === 1) { diff --git a/src/components/common/CarouselCommon/CarouselCommon.module.scss b/src/components/common/CarouselCommon/CarouselCommon.module.scss index ef2671947..4b3c7d537 100644 --- a/src/components/common/CarouselCommon/CarouselCommon.module.scss +++ b/src/components/common/CarouselCommon/CarouselCommon.module.scss @@ -9,6 +9,7 @@ width: 64px; height: 64px; border-radius: .8rem; + backdrop-filter: saturate(180%) blur(10px); &:focus { outline: none; } diff --git a/src/components/modules/home/HomeBanner/HomeBanner.module.scss b/src/components/modules/home/HomeBanner/HomeBanner.module.scss index 3191b5515..ed8c5c7a7 100644 --- a/src/components/modules/home/HomeBanner/HomeBanner.module.scss +++ b/src/components/modules/home/HomeBanner/HomeBanner.module.scss @@ -31,16 +31,12 @@ width: min-content; color: var(--white); - font-size: 7.6rem; + font-size: 8.8rem; line-height: 8rem; letter-spacing: -0.03em; font-weight: bold; text-transform: uppercase; - @screen 2xl { - font-size: 7.8rem; - line-height: 8rem; - } &::after { @apply absolute; content: ""; From b9e47ef299e4472a448c83a4e765d3c8a746c129 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Wed, 15 Sep 2021 13:53:24 +0700 Subject: [PATCH 091/100] :art: styles: add cart drawer layer :%s --- .../common/CartDrawer/CartDrawer.module.scss | 2 +- .../DrawerCommon/DrawerCommon.module.scss | 38 +++++++++++++++---- .../common/DrawerCommon/DrawerCommon.tsx | 32 ++++++++++------ 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/src/components/common/CartDrawer/CartDrawer.module.scss b/src/components/common/CartDrawer/CartDrawer.module.scss index d5bba6c57..8d97f971e 100644 --- a/src/components/common/CartDrawer/CartDrawer.module.scss +++ b/src/components/common/CartDrawer/CartDrawer.module.scss @@ -4,6 +4,6 @@ .cartDrawer { @apply flex flex-col h-full; .body { - @apply flex flex-col justify-center overflow-y-auto overflow-x-hidden h-full custom-scroll; + @apply flex flex-col overflow-y-auto overflow-x-hidden h-full custom-scroll; } } \ No newline at end of file diff --git a/src/components/common/DrawerCommon/DrawerCommon.module.scss b/src/components/common/DrawerCommon/DrawerCommon.module.scss index d118d45e8..fe42289f9 100644 --- a/src/components/common/DrawerCommon/DrawerCommon.module.scss +++ b/src/components/common/DrawerCommon/DrawerCommon.module.scss @@ -1,21 +1,36 @@ @import "../../../styles/utilities"; .drawerCommon { - @apply fixed flex justify-end transition-all duration-200; + @apply fixed flex justify-end transition-all duration-500; overflow: hidden; top: 0; right: 0; height: 100vh; - width: 90%; - box-shadow: -3px 0 10px rgba(0, 0, 0, 0.15); + width: 100%; z-index: 20000; + transform: translateX(110%); + &.show { + .innerWrap { + background: rgba(0, 0, 0, 0.2); + animation: animateBackground 0.8s; + } + transform: none; + } + + .innerWrap { + @apply w-full; + background: none; + } .inner { @apply flex flex-col bg-white; width: fit-content; height: 100vh; width: 100%; - margin-right: 0; + margin-left: auto; + box-shadow: -3px 0 10px rgba(0, 0, 0, 0.15); + // transform: none; + @screen md { max-width: 52rem; } @@ -39,14 +54,21 @@ overflow-y: auto; height: 100%; } - &.hide { - transform: translateX(110%); - } @screen md { - width: unset; .inner { min-width: 48rem; } } } + +@keyframes animateBackground { + 0%, + 50% { + background: none; + } + + 100% { + background: rgba(0, 0, 0, 0.2); + } +} diff --git a/src/components/common/DrawerCommon/DrawerCommon.tsx b/src/components/common/DrawerCommon/DrawerCommon.tsx index deb1af3eb..301e516c2 100644 --- a/src/components/common/DrawerCommon/DrawerCommon.tsx +++ b/src/components/common/DrawerCommon/DrawerCommon.tsx @@ -11,22 +11,32 @@ interface Props { } const DrawerCommon = ({ title, visible, children, onClose }: Props) => { +const refInner = useRef(null) + +const handleClickOut = (e: any) => { + if (e.target.contains(refInner.current)) { + onClose() + } +} + return (
      -
      -
      -

      - {title} -

      -
      - +
      +
      +
      +

      + {title} +

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