diff --git a/codegen.bigcommerce.json b/codegen.bigcommerce.json deleted file mode 100644 index 1f14e88ac..000000000 --- a/codegen.bigcommerce.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "schema": { - "https://buybutton.store/graphql": { - "headers": { - "Authorization": "Bearer xzy" - } - } - }, - "documents": [ - { - "./framework/bigcommerce/api/**/*.ts": { - "noRequire": true - } - } - ], - "generates": { - "./framework/bigcommerce/schema.d.ts": { - "plugins": ["typescript", "typescript-operations"] - }, - "./framework/bigcommerce/schema.graphql": { - "plugins": ["schema-ast"] - } - }, - "hooks": { - "afterAllFileWrite": ["prettier --write"] - } -} diff --git a/next.config.js b/next.config.js index d3ad64f4a..42a84b273 100644 --- a/next.config.js +++ b/next.config.js @@ -17,6 +17,7 @@ module.exports = withCommerceConfig({ // todo: replace domains for images domains: ['user-images.githubusercontent.com'], }, + disablelintbuild: false, i18n: { locales: ['en-US', 'es'], defaultLocale: 'en-US', @@ -42,6 +43,9 @@ module.exports = withCommerceConfig({ }, ].filter(Boolean) }, + eslint: { + ignoreDuringBuilds: true, + } }) // Don't delete this console log, useful to see the commerce config in Vercel deployments diff --git a/pages/blog/[slug].tsx b/pages/blog/[slug].tsx new file mode 100644 index 000000000..773634c26 --- /dev/null +++ b/pages/blog/[slug].tsx @@ -0,0 +1,17 @@ +import { Layout, RelevantBlogPosts } from 'src/components/common'; +import BlogContent from 'src/components/modules/blog-detail/BlogContent/BlogContent'; +import BlogDetailImg from 'src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg'; +import { RECIPE_DATA_TEST } from 'src/utils/demo-data' + + +export default function BlogDetailPage() { + return ( + <> + + + + + ) +} + +BlogDetailPage.Layout = Layout diff --git a/pages/blogs.tsx b/pages/blogs.tsx new file mode 100644 index 000000000..84e56b55d --- /dev/null +++ b/pages/blogs.tsx @@ -0,0 +1,14 @@ +import { Layout } from 'src/components/common'; +import { BlogsList, FeaturedCardBlog, BlogHeading, BlogBreadCrumb } from 'src/components/modules/blogs'; + +export default function BlogsPage() { + return( + <> + + + + + + ) +} +BlogsPage.Layout = Layout \ No newline at end of file diff --git a/pages/privacy-policy.tsx b/pages/privacy-policy.tsx new file mode 100644 index 000000000..daf1b5fd0 --- /dev/null +++ b/pages/privacy-policy.tsx @@ -0,0 +1,12 @@ +import { Layout } from "src/components/common" +import { DeliveryAndPolicyContent, DeliveryAndPolicyBreadCrumb } from "src/components/modules/delivery-policy" + +export default function DeliveryAndPolicyPage () { + return ( + <> + + + + ) +} +DeliveryAndPolicyPage.Layout = Layout \ No newline at end of file diff --git a/pages/recipes.tsx b/pages/recipes.tsx new file mode 100644 index 000000000..a4acece13 --- /dev/null +++ b/pages/recipes.tsx @@ -0,0 +1,15 @@ +import { Layout } from 'src/components/common'; +import RecipeListBanner from 'src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner'; +import RecipesList from 'src/components/modules/recipes-list/RecipesList/RecipesList'; + + +export default function RecipeListPage() { + return ( + <> + + + + ) +} + +RecipeListPage.Layout = Layout diff --git a/pages/test.tsx b/pages/test.tsx index f9296f786..a11c56f14 100644 --- a/pages/test.tsx +++ b/pages/test.tsx @@ -1,46 +1,33 @@ -import { - CollapseCommon, Layout, RelevantBlogPosts -} from 'src/components/common' +import { ImgWithLink, Layout, StaticImage } from 'src/components/common' +import TestImg from '../public/assets/images/image5.png' -const COLLAPSE_DATA = [ - { - title: "This is a subtitle", - content: [ - "When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces.", - "Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to.", - "This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing.", - ], - }, - { - title: "This is a subtitle", - content: [ - "When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces.", - "Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to.", - "This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing.", - ], - }, - { - title: "This is a subtitle", - content: [ - "When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces.", - "Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to.", - "This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing.", - ], - }, - { - title: "This is a subtitle", - content: [ - "When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces.", - "Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to.", - "This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing.", - ], - }, -] export default function Test() { return ( <> - - + + + + + + +
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Nam vel optio fuga nobis nostrum! Magnam tenetur, et doloremque unde enim dolorem aspernatur nobis vitae impedit iste iure distinctio labore, quidem illo itaque necessitatibus eligendi magni architecto illum cumque corrupti esse a. Eius tenetur voluptas autem corrupti, amet porro beatae ratione maiores! Dolorum earum placeat totam corporis sint quae quam at vero eos magni amet, nisi eum qui natus exercitationem ea eveniet esse aut in. Ipsa hic saepe veritatis quas dignissimos corrupti sapiente quis, mollitia ducimus, ipsum ratione quos doloribus quidem, dolor neque! Eligendi quibusdam aspernatur, maxime vitae incidunt ipsam itaque ab distinctio? Architecto ratione deserunt saepe sequi alias accusantium harum quae itaque aut odit voluptates, hic beatae similique expedita! Modi, sunt exercitationem! Mollitia, eius! Molestiae nostrum, quas, ratione deleniti, adipisci pariatur omnis veniam blanditiis iste quia laboriosam est labore doloribus officiis repellendus consequatur. Ducimus impedit voluptate doloribus repellendus exercitationem mollitia labore ab totam reiciendis distinctio. Nesciunt dolor officiis reiciendis esse nostrum modi inventore, cum, veritatis placeat doloribus iure perspiciatis tempora a mollitia soluta fugit! Aspernatur necessitatibus provident, reiciendis sapiente temporibus labore. Optio tempora ipsam blanditiis fugiat sint reiciendis, deleniti itaque fuga omnis aut architecto animi, aliquam quis aliquid ipsum necessitatibus dolorem sequi aperiam magni non! Atque deserunt autem nihil, in voluptatem, natus quibusdam fugiat velit aspernatur ullam quam quo consequuntur eius. Pariatur dolor obcaecati quam reprehenderit, est corporis ea beatae quia numquam nemo in eum voluptatem ullam sequi atque? Quos neque voluptatem maxime, repellat cupiditate accusantium, maiores in aperiam, eveniet asperiores eligendi velit iusto voluptates dolores. Nostrum officia commodi dolore asperiores sequi, molestiae quasi. Deserunt, molestiae voluptate. Perferendis earum consectetur adipisci ratione nisi nihil minus. Ipsum voluptas dolorum voluptates dolores reprehenderit nemo, exercitationem labore, quas voluptatibus officiis fuga ullam ab, eius quae. Quibusdam perferendis iusto nobis, cupiditate officiis sapiente molestiae distinctio magnam dolore voluptatum quos ratione fugiat autem corporis rerum esse possimus perspiciatis ex officia eos numquam blanditiis assumenda natus. At nihil excepturi et consectetur nobis dicta tempora dolorum neque, saepe minima mollitia, officiis ex atque reprehenderit blanditiis animi dolore ratione quam. Id animi facere repudiandae eos facilis? Dolorum quae illo nam tempora, quasi ut placeat beatae minus consequatur libero maiores repudiandae, voluptates sed natus animi a. Cum numquam atque explicabo temporibus consequatur odit voluptates tenetur pariatur optio nihil eligendi ab veniam nisi velit quaerat natus, ea facere eveniet corrupti! Iste temporibus placeat tenetur incidunt obcaecati quam nulla nemo cum accusantium quo velit, maiores, esse illum ipsam dolore enim sunt, aspernatur illo provident delectus officia sit officiis qui! Ullam quam numquam mollitia reprehenderit? Facere, quos amet praesentium officia nostrum veritatis, autem laborum quidem architecto eveniet voluptatum, nisi voluptate totam saepe. Obcaecati non vitae accusantium voluptates iure voluptatem nulla, quaerat culpa officia quasi mollitia doloremque. Deserunt officia aliquid totam quibusdam, doloribus quos porro sit alias, perspiciatis facilis exercitationem inventore adipisci aliquam saepe ipsam dignissimos. Minima iste dolorem esse optio necessitatibus voluptas deserunt sint quam, veniam nulla vitae eaque omnis alias! Natus ut, doloribus quia laboriosam id voluptates? Quibusdam aliquid ea nemo. +
+
+
+
+ Lorem ipsum dolor sit amet consectetur, adipisicing elit. Voluptate, maiores cum quam odit quia est magni aut reiciendis deleniti, ea quae, dolorem vero fuga veritatis culpa? Eum sunt quia et consequatur tenetur, atque eius illo quibusdam laudantium iusto quo cumque, ad dolor dicta eos inventore ipsa fugit voluptates similique incidunt doloribus? Dicta, ipsa? Suscipit porro dicta dolorum rem. Placeat provident quisquam excepturi obcaecati tempora, eaque incidunt accusantium suscipit velit ex quo, voluptatem eum inventore illum exercitationem beatae sint temporibus aliquid, unde expedita recusandae. Repudiandae, nesciunt natus adipisci, error consectetur, fugit magni ducimus est delectus voluptates cupiditate explicabo dolorem maxime hic. Natus, quidem beatae rem aliquam nobis illo reprehenderit, distinctio qui adipisci quaerat sapiente hic nisi ad. Voluptatem dolore eius eos doloribus quam repudiandae cum, culpa expedita error fugiat. Labore eius voluptatum reiciendis repellendus. Enim sapiente dolore tenetur totam esse laboriosam labore aperiam aspernatur! Magnam voluptas iure recusandae delectus, in impedit nobis aliquam debitis laudantium, explicabo quas molestiae quos rem quibusdam nemo placeat nam, dolore doloribus quaerat eum! Quam nesciunt architecto debitis consequuntur sint culpa exercitationem dicta numquam dolorum eius illum similique fuga magni veritatis sequi, et excepturi distinctio laborum quidem. Tempore debitis natus iure, enim molestiae provident? Sed dignissimos velit dolores quia recusandae quam? Beatae, officia dolor. Repellendus dicta provident veniam itaque beatae, eius labore sapiente aspernatur exercitationem ducimus quam est quas quaerat officia consequatur temporibus tempore! Iusto, voluptatum maxime provident, voluptatem ullam recusandae facere error, animi sequi quidem modi illo accusamus non consequuntur deserunt fuga sit labore cum dolorem delectus unde architecto! Mollitia consequuntur veniam sit nihil itaque praesentium temporibus inventore nemo odio necessitatibus eum corporis at et consequatur alias deserunt eligendi aliquid voluptatem quasi exercitationem, voluptatum quos aut voluptate ipsum? Error provident repellat fuga temporibus delectus rem, exercitationem doloremque voluptatem dignissimos, quod amet neque sed quidem nostrum deserunt est debitis obcaecati. Aspernatur veniam vel soluta labore expedita cum quo debitis ab exercitationem, saepe aliquam officia praesentium optio voluptatem atque. Voluptatem ullam et voluptas eligendi omnis fugiat? Ipsam laudantium beatae perspiciatis quis! Nemo optio, quia esse perspiciatis iste et veniam illum qui praesentium, expedita assumenda? Quae distinctio repellendus excepturi ut eos enim optio earum, laborum aperiam, sed sit alias incidunt voluptatibus? Officia, quos. Labore porro repellendus, suscipit praesentium possimus adipisci, quidem illum consequuntur ut id quae quas cum corrupti laboriosam nesciunt nisi dolorum ullam dolor nobis debitis, ipsam inventore? Doloribus dignissimos ipsa aliquid? Dolores nemo ab hic ipsum expedita maxime corporis recusandae inventore, aliquam voluptate voluptatibus dolor dignissimos suscipit explicabo, officia consequuntur officiis ipsam cumque debitis odio qui? Earum minus quaerat possimus ea laudantium laboriosam enim omnis molestias quod nesciunt vel vero officia, ad inventore voluptatem dicta dolorem rem voluptates ab quasi nisi, esse quis. Fuga ad animi reiciendis nulla officiis possimus adipisci ducimus eum, molestias neque enim doloremque nam recusandae labore commodi, quia sed illo fugit molestiae qui hic voluptate facere dignissimos. Dolor porro ab modi nam vitae architecto delectus quo et velit pariatur omnis quae in ullam ex quis rerum, corporis alias, nobis veritatis aperiam commodi hic! +
+
+ + ) } diff --git a/public/assets/images/author.png b/public/assets/images/author.png new file mode 100644 index 000000000..70c922bc6 Binary files /dev/null and b/public/assets/images/author.png differ diff --git a/public/assets/images/image20.png b/public/assets/images/image20.png new file mode 100644 index 000000000..548870b87 Binary files /dev/null and b/public/assets/images/image20.png differ diff --git a/public/assets/images/image21.png b/public/assets/images/image21.png new file mode 100644 index 000000000..6cb7b2b43 Binary files /dev/null and b/public/assets/images/image21.png differ diff --git a/public/assets/images/image22.png b/public/assets/images/image22.png new file mode 100644 index 000000000..c45a22c1c Binary files /dev/null and b/public/assets/images/image22.png differ diff --git a/public/assets/images/image23.png b/public/assets/images/image23.png new file mode 100644 index 000000000..928642628 Binary files /dev/null and b/public/assets/images/image23.png differ diff --git a/report.20210908.160959.14332.0.001.json b/report.20210908.160959.14332.0.001.json new file mode 100644 index 000000000..dc9027da1 --- /dev/null +++ b/report.20210908.160959.14332.0.001.json @@ -0,0 +1,646 @@ + +{ + "header": { + "reportVersion": 1, + "event": "Allocation failed - JavaScript heap out of memory", + "trigger": "FatalError", + "filename": "report.20210908.160959.14332.0.001.json", + "dumpEventTime": "2021-09-08T16:09:59Z", + "dumpEventTimeStamp": "1631092199677", + "processId": 14332, + "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": 67605265, + "nice": 0, + "sys": 33647953, + "idle": 255172281, + "irq": 3598359 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 68803843, + "nice": 0, + "sys": 25225015, + "idle": 262396453, + "irq": 602640 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 76698718, + "nice": 0, + "sys": 25995390, + "idle": 253731187, + "irq": 321484 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 77662531, + "nice": 0, + "sys": 24450312, + "idle": 254312468, + "irq": 266531 + } + ], + "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:69cf:fc3d:74:1b08", + "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.10", + "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": "0x00007ff77aa01759", + "symbol": "std::basic_ostream >::operator<<+10873" + }, + { + "pc": "0x00007ff77aa05b7c", + "symbol": "std::basic_ostream >::operator<<+28316" + }, + { + "pc": "0x00007ff77aa04b38", + "symbol": "std::basic_ostream >::operator<<+24152" + }, + { + "pc": "0x00007ff77aaf446b", + "symbol": "v8::base::CPU::has_sse+37723" + }, + { + "pc": "0x00007ff77b2f8d9e", + "symbol": "v8::Isolate::ReportExternalAllocationLimitReached+94" + }, + { + "pc": "0x00007ff77b2e0de1", + "symbol": "v8::SharedArrayBuffer::Externalize+833" + }, + { + "pc": "0x00007ff77b1ae6ac", + "symbol": "v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436" + }, + { + "pc": "0x00007ff77b1b9a50", + "symbol": "v8::internal::Heap::ProtectUnprotectedMemoryChunks+1312" + }, + { + "pc": "0x00007ff77b1b6584", + "symbol": "v8::internal::Heap::PageFlagsAreConsistent+3204" + }, + { + "pc": "0x00007ff77b1abe13", + "symbol": "v8::internal::Heap::CollectGarbage+1283" + }, + { + "pc": "0x00007ff77b1aa5e4", + "symbol": "v8::internal::Heap::AddRetainedMap+2356" + }, + { + "pc": "0x00007ff77b1c46ee", + "symbol": "v8::internal::Factory::AllocateRawFixedArray+94" + }, + { + "pc": "0x00007ff77b1cba84", + "symbol": "v8::internal::Factory::NewFixedArrayWithFiller+52" + }, + { + "pc": "0x00007ff77b1cba41", + "symbol": "v8::internal::Factory::NewUninitializedFixedArray+65" + }, + { + "pc": "0x00007ff77b0ac86f", + "symbol": "v8::Object::GetIsolate+6767" + }, + { + "pc": "0x00007ff77af5feaa", + "symbol": "v8::internal::OrderedHashMap::ValueAt+61274" + }, + { + "pc": "0x00007ff77b724d3d", + "symbol": "v8::internal::SetupIsolateDelegate::SetupHeap+567949" + }, + { + "pc": "0x0000004163e2d61e", + "symbol": "" + } + ], + "javascriptHeap": { + "totalMemory": 2197684224, + "totalCommittedMemory": 2197684224, + "usedMemory": 2099361840, + "availableMemory": 89682992, + "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": 9024016, + "available": 7735792 + }, + "old_space": { + "memorySize": 1753329664, + "committedMemory": 1753329664, + "capacity": 1750360832, + "used": 1685534088, + "available": 64826744 + }, + "code_space": { + "memorySize": 5144576, + "committedMemory": 5144576, + "capacity": 4347712, + "used": 4347712, + "available": 0 + }, + "map_space": { + "memorySize": 8916992, + "committedMemory": 8916992, + "capacity": 4381920, + "used": 4381920, + "available": 0 + }, + "large_object_space": { + "memorySize": 395280384, + "committedMemory": 395280384, + "capacity": 394944560, + "used": 394944560, + "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": 2420.01, + "kernelCpuSeconds": 114.859, + "cpuConsumptionPercent": 11.0361, + "maxRss": 2818129920, + "pageFaults": { + "IORequired": 14395451, + "IONotRequired": 0 + }, + "fsActivity": { + "reads": 46029, + "writes": 640054 + } + }, + "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_17244_MSJZWZVAYBLFIPJS", + "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": "16ca52162bc58204b405a3732a141f014a9573e2", + "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": "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": "69c5adcb5945384d", + "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.20210909.162411.14356.0.001.json b/report.20210909.162411.14356.0.001.json new file mode 100644 index 000000000..26661c6d8 --- /dev/null +++ b/report.20210909.162411.14356.0.001.json @@ -0,0 +1,634 @@ + +{ + "header": { + "reportVersion": 1, + "event": "Allocation failed - JavaScript heap out of memory", + "trigger": "FatalError", + "filename": "report.20210909.162411.14356.0.001.json", + "dumpEventTime": "2021-09-09T16:24:11Z", + "dumpEventTimeStamp": "1631179451642", + "processId": 14356, + "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": 77383734, + "nice": 0, + "sys": 38262234, + "idle": 289301562, + "irq": 4023859 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 78754296, + "nice": 0, + "sys": 28849546, + "idle": 297343500, + "irq": 670015 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 87811078, + "nice": 0, + "sys": 29829109, + "idle": 287307140, + "irq": 361687 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 88812562, + "nice": 0, + "sys": 27906453, + "idle": 288228328, + "irq": 299734 + } + ], + "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:e935:47df:3dd7:735f", + "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.11", + "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": "0x00007ff7cdbe1759", + "symbol": "std::basic_ostream >::operator<<+10873" + }, + { + "pc": "0x00007ff7cdbe5b7c", + "symbol": "std::basic_ostream >::operator<<+28316" + }, + { + "pc": "0x00007ff7cdbe4b38", + "symbol": "std::basic_ostream >::operator<<+24152" + }, + { + "pc": "0x00007ff7cdcd446b", + "symbol": "v8::base::CPU::has_sse+37723" + }, + { + "pc": "0x00007ff7ce4d8d9e", + "symbol": "v8::Isolate::ReportExternalAllocationLimitReached+94" + }, + { + "pc": "0x00007ff7ce4c0de1", + "symbol": "v8::SharedArrayBuffer::Externalize+833" + }, + { + "pc": "0x00007ff7ce38e6ac", + "symbol": "v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436" + }, + { + "pc": "0x00007ff7ce399a50", + "symbol": "v8::internal::Heap::ProtectUnprotectedMemoryChunks+1312" + }, + { + "pc": "0x00007ff7ce396584", + "symbol": "v8::internal::Heap::PageFlagsAreConsistent+3204" + }, + { + "pc": "0x00007ff7ce38be13", + "symbol": "v8::internal::Heap::CollectGarbage+1283" + }, + { + "pc": "0x00007ff7ce38a5e4", + "symbol": "v8::internal::Heap::AddRetainedMap+2356" + }, + { + "pc": "0x00007ff7ce3ab8b5", + "symbol": "v8::internal::Factory::NewFillerObject+53" + }, + { + "pc": "0x00007ff7ce117b89", + "symbol": "v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator=+4057" + }, + { + "pc": "0x00007ff7ce904d3d", + "symbol": "v8::internal::SetupIsolateDelegate::SetupHeap+567949" + }, + { + "pc": "0x000003ec3249fceb", + "symbol": "" + } + ], + "javascriptHeap": { + "totalMemory": 2151399424, + "totalCommittedMemory": 2151399424, + "usedMemory": 2073679128, + "availableMemory": 51804896, + "memoryLimit": 2197815296, + "heapSpaces": { + "read_only_space": { + "memorySize": 262144, + "committedMemory": 262144, + "capacity": 261872, + "used": 32296, + "available": 229576 + }, + "new_space": { + "memorySize": 2097152, + "committedMemory": 2097152, + "capacity": 1047488, + "used": 97208, + "available": 950280 + }, + "old_space": { + "memorySize": 1644802048, + "committedMemory": 1644802048, + "capacity": 1577839984, + "used": 1574678304, + "available": 3161680 + }, + "code_space": { + "memorySize": 5144576, + "committedMemory": 5144576, + "capacity": 4272640, + "used": 4272640, + "available": 0 + }, + "map_space": { + "memorySize": 8130560, + "committedMemory": 8130560, + "capacity": 4150160, + "used": 4150160, + "available": 0 + }, + "large_object_space": { + "memorySize": 489766912, + "committedMemory": 489766912, + "capacity": 489351272, + "used": 489351272, + "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": 1047488, + "used": 0, + "available": 1047488 + } + } + }, + "resourceUsage": { + "userCpuSeconds": 3948.5, + "kernelCpuSeconds": 161.609, + "cpuConsumptionPercent": 15.0548, + "maxRss": 3016343552, + "pageFaults": { + "IORequired": 18788222, + "IONotRequired": 0 + }, + "fsActivity": { + "reads": 42626, + "writes": 632648 + } + }, + "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_16216_SBAEYTWYVPQDZSNO", + "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": "d6a0c41e9987f3d0af8a69c4404152e0ddc1345f", + "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": "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": "9bcaa92ba218c9e0", + "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/src/components/common/Author/Author.module.scss b/src/components/common/Author/Author.module.scss index 0459a9fbb..8d903546f 100644 --- a/src/components/common/Author/Author.module.scss +++ b/src/components/common/Author/Author.module.scss @@ -1,3 +1,4 @@ +@import '../../../styles/utilities'; .authorWarper{ @apply flex flex-row items-center; diff --git a/src/components/common/Author/Author.tsx b/src/components/common/Author/Author.tsx index bbb389fbd..1cf8e52af 100644 --- a/src/components/common/Author/Author.tsx +++ b/src/components/common/Author/Author.tsx @@ -2,9 +2,8 @@ import React from 'react'; import s from './Author.module.scss'; import classNames from 'classnames'; -import Image from "next/image"; interface Props { - image:any, + image:string, name: string } @@ -12,7 +11,7 @@ const Author = ({image,name}:Props) =>{ return (
- +
{name}
) diff --git a/src/components/common/BreadcrumbCommon/BreadcrumbCommon.module.scss b/src/components/common/BreadcrumbCommon/BreadcrumbCommon.module.scss index 95c8526e1..8f6c05bf7 100644 --- a/src/components/common/BreadcrumbCommon/BreadcrumbCommon.module.scss +++ b/src/components/common/BreadcrumbCommon/BreadcrumbCommon.module.scss @@ -2,10 +2,7 @@ .breadcrumbCommon { color: var(--text-base); -<<<<<<< HEAD -======= .currentItem { cursor: default; } ->>>>>>> a9f9f06eb9dee2a1ddefe907ff804237a78c5210 } diff --git a/src/components/common/BreadcrumbCommon/BreadcrumbCommon.tsx b/src/components/common/BreadcrumbCommon/BreadcrumbCommon.tsx index be84dcb67..cc5733342 100644 --- a/src/components/common/BreadcrumbCommon/BreadcrumbCommon.tsx +++ b/src/components/common/BreadcrumbCommon/BreadcrumbCommon.tsx @@ -1,7 +1,6 @@ import React from 'react' import { ROUTE } from 'src/utils/constanst.utils' import s from './BreadcrumbCommon.module.scss' - import BreadcrumbItem from './components/BreadcrumbItem/BreadcrumbItem' import BreadcrumbSeparator from './components/BreadcrumbSeparator/BreadcrumbSeparator' @@ -35,4 +34,4 @@ const BreadcrumbCommon = ({ crumbs, showHomePage = true }: BreadcrumbCommonProps ) } -export default BreadcrumbCommon +export default BreadcrumbCommon \ No newline at end of file diff --git a/src/components/common/BreadcrumbCommon/components/BreadcrumbItem/BreadcrumbItem.tsx b/src/components/common/BreadcrumbCommon/components/BreadcrumbItem/BreadcrumbItem.tsx index 13f980ea9..24f58a066 100644 --- a/src/components/common/BreadcrumbCommon/components/BreadcrumbItem/BreadcrumbItem.tsx +++ b/src/components/common/BreadcrumbCommon/components/BreadcrumbItem/BreadcrumbItem.tsx @@ -15,4 +15,4 @@ const BreadcrumbItem = ({ text, href }: BreadcrumbItemProps) => { ) } -export default BreadcrumbItem +export default BreadcrumbItem \ No newline at end of file diff --git a/src/components/common/BreadcrumbCommon/components/BreadcrumbSeparator/BreadcrumbSeparator.tsx b/src/components/common/BreadcrumbCommon/components/BreadcrumbSeparator/BreadcrumbSeparator.tsx index 370c342d8..f84bc3a51 100644 --- a/src/components/common/BreadcrumbCommon/components/BreadcrumbSeparator/BreadcrumbSeparator.tsx +++ b/src/components/common/BreadcrumbCommon/components/BreadcrumbSeparator/BreadcrumbSeparator.tsx @@ -1,7 +1,7 @@ import React from 'react' interface BreadcrumbSeparatorProps { - children?: React.ReactNode + children?: React.ReactNode; } const BreadcrumbSeparator = ({ children }: BreadcrumbSeparatorProps) => { diff --git a/src/components/common/CardBlog/CardBlog.module.scss b/src/components/common/CardBlog/CardBlog.module.scss index f0dc00b3a..6e62ed5ff 100644 --- a/src/components/common/CardBlog/CardBlog.module.scss +++ b/src/components/common/CardBlog/CardBlog.module.scss @@ -3,7 +3,6 @@ .cardBlogWarpper { @apply inline-flex flex-col justify-start; max-width: 39.2rem; - min-height: 34.4rem; .image { width: 100%; max-height: 22rem; @@ -11,6 +10,9 @@ &:hover { cursor: pointer; } + img{ + border-radius: 2.4rem; + } } .title { padding: 1.6rem 0.8rem 0.4rem 0.8rem; diff --git a/src/components/common/CollapseCommon/CollapseChild/CollapseChild.module.scss b/src/components/common/CollapseCommon/CollapseChild/CollapseChild.module.scss index e6a71e44e..839f4de65 100644 --- a/src/components/common/CollapseCommon/CollapseChild/CollapseChild.module.scss +++ b/src/components/common/CollapseCommon/CollapseChild/CollapseChild.module.scss @@ -52,7 +52,8 @@ } } .contentContainer { - @apply hidden pb-16; + @apply hidden pb-16 whitespace-pre-line; + padding-top: 1.6rem; } @keyframes ContentAnimationIn { 0% { diff --git a/src/components/common/CollapseCommon/CollapseChild/CollapseChild.tsx b/src/components/common/CollapseCommon/CollapseChild/CollapseChild.tsx index 53cd70cf3..408b0c397 100644 --- a/src/components/common/CollapseCommon/CollapseChild/CollapseChild.tsx +++ b/src/components/common/CollapseCommon/CollapseChild/CollapseChild.tsx @@ -1,11 +1,10 @@ import s from './CollapseChild.module.scss' import { useState } from 'react' import classNames from 'classnames' -import CollapseContent from './CollapseContent/CollapseContent' interface CollapseProps{ title?: string, - content: Array, + content: string, isToggle?: boolean, } const CollapseChild = ({title, content, isToggle=false}: CollapseProps) => { @@ -26,9 +25,7 @@ const CollapseChild = ({title, content, isToggle=false}: CollapseProps) => {
- { - content.map(item => ) - } + {content}
) diff --git a/src/components/common/CollapseCommon/CollapseChild/CollapseContent/CollapseContent.module.scss b/src/components/common/CollapseCommon/CollapseChild/CollapseContent/CollapseContent.module.scss deleted file mode 100644 index 9e5cfba30..000000000 --- a/src/components/common/CollapseCommon/CollapseChild/CollapseContent/CollapseContent.module.scss +++ /dev/null @@ -1,3 +0,0 @@ -.content { - margin-top: 1.6rem; -} \ No newline at end of file diff --git a/src/components/common/CollapseCommon/CollapseChild/CollapseContent/CollapseContent.tsx b/src/components/common/CollapseCommon/CollapseChild/CollapseContent/CollapseContent.tsx deleted file mode 100644 index e18e19c0a..000000000 --- a/src/components/common/CollapseCommon/CollapseChild/CollapseContent/CollapseContent.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import s from './CollapseContent.module.scss' - -interface CollapseContentProps{ - content: string -} - -const CollapseContent = ({content}: CollapseContentProps) => { - return ( -
- {content} -
- ) -} - -export default CollapseContent \ No newline at end of file diff --git a/src/components/common/CollapseCommon/CollapseCommon.tsx b/src/components/common/CollapseCommon/CollapseCommon.tsx index e695a6576..2e378abf9 100644 --- a/src/components/common/CollapseCommon/CollapseCommon.tsx +++ b/src/components/common/CollapseCommon/CollapseCommon.tsx @@ -1,15 +1,15 @@ import CollapseChild from './CollapseChild/CollapseChild' interface CollapseCommonProps{ - data: {title: string, content: Array}[], + data: {title: string, content: string}[], } const CollapseCommon = ({data}: CollapseCommonProps) => { return (
{ - data.map(item => - + data.map((item,index) => + ) }
diff --git a/src/components/common/CustomShapeSvg/CustomShapeSvg.tsx b/src/components/common/CustomShapeSvg/CustomShapeSvg.tsx new file mode 100644 index 000000000..573160b70 --- /dev/null +++ b/src/components/common/CustomShapeSvg/CustomShapeSvg.tsx @@ -0,0 +1,21 @@ + +const CustomShapeSvg = () => { + return ( + <> + + + + + + + + + + + + ) +} + +export default CustomShapeSvg \ No newline at end of file diff --git a/src/components/common/CustomShapeSvg/ViewAllItem.module.scss b/src/components/common/CustomShapeSvg/ViewAllItem.module.scss new file mode 100644 index 000000000..b4ec26872 --- /dev/null +++ b/src/components/common/CustomShapeSvg/ViewAllItem.module.scss @@ -0,0 +1,16 @@ +@import "../../../styles/utilities"; + +.viewAll { + display: flex; + .content { + color: var(--primary); + margin: 0.8rem 0.8rem 0.8rem 0; + font-weight: bold; + } + .vector { + margin: 0.8rem 0rem 0.8rem 0rem; + svg path { + fill: var(--primary); + } + } +} diff --git a/src/components/common/EmptyCommon/EmptyCommon.module.scss b/src/components/common/EmptyCommon/EmptyCommon.module.scss new file mode 100644 index 000000000..a31ba4374 --- /dev/null +++ b/src/components/common/EmptyCommon/EmptyCommon.module.scss @@ -0,0 +1,16 @@ +@import "../../../styles/utilities"; + +.empty { + padding: 1.6rem; + margin: auto; + .imgWrap { + min-width: 10rem; + text-align: center; + } + + .description { + color: var(--disabled); + text-align: center; + margin-top: .8rem; + } +} diff --git a/src/components/common/EmptyCommon/EmptyCommon.tsx b/src/components/common/EmptyCommon/EmptyCommon.tsx new file mode 100644 index 000000000..8b5b3a132 --- /dev/null +++ b/src/components/common/EmptyCommon/EmptyCommon.tsx @@ -0,0 +1,25 @@ +import { StaticImage } from '..'; +import EmptyImg from './empty.png'; +import s from './EmptyCommon.module.scss'; + + +interface Props { + description?: string +} + +const EmptyCommon = ({ description = "No data to display" }: Props) => { + return ( +
+
+ +
+ { + description &&
+ {description} +
+ } +
+ ) +} + +export default EmptyCommon \ No newline at end of file diff --git a/src/components/common/EmptyCommon/empty.png b/src/components/common/EmptyCommon/empty.png new file mode 100644 index 000000000..68d392d86 Binary files /dev/null and b/src/components/common/EmptyCommon/empty.png differ diff --git a/src/components/common/EmptyCommon/empty.svg b/src/components/common/EmptyCommon/empty.svg new file mode 100644 index 000000000..c62a71ab3 --- /dev/null +++ b/src/components/common/EmptyCommon/empty.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/common/Footer/Footer.tsx b/src/components/common/Footer/Footer.tsx index a830c60ea..bf16bd3d7 100644 --- a/src/components/common/Footer/Footer.tsx +++ b/src/components/common/Footer/Footer.tsx @@ -48,11 +48,11 @@ const FOOTER_COLUMNS = [ }, { name: 'Privacy Policy', - link: ROUTE.TERM_CONDITION, + link: ROUTE.PRIVACY_POLICY, }, { name: 'Blog', - link: ROUTE.TERM_CONDITION, + link: ROUTE.BLOGS, }, ] } diff --git a/src/components/common/Header/Header.module.scss b/src/components/common/Header/Header.module.scss index 3e40e067d..99cd29fe0 100644 --- a/src/components/common/Header/Header.module.scss +++ b/src/components/common/Header/Header.module.scss @@ -1,10 +1,14 @@ @import "../../../styles/utilities"; .header { - @apply sticky bg-white shadow-md; + @apply sticky bg-white; top: 0; + left: 0; z-index: 9999; - margin-bottom: 3.2rem; + margin-bottom: 3.2rem; + @screen md { + @apply relative; + } &.full { @apply shadow-none; border: 1px solid var(--border-line); @@ -17,3 +21,27 @@ @apply font-logo; } } + +.headerSticky { + @apply sticky bg-white shadow-md; + display: none; + padding-left: 3.2rem; + padding-right: 3.2rem; + top: 0; + left: 0; + z-index: 10000; + transition: all 0.2s; + &.show { + display: block; + animation: showHeaderSticky 0.2s; + } +} + +@keyframes showHeaderSticky { + 0% { + transform: translateY(-7rem); + } + 100% { + transform: none; + } +} diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index a9926f765..8bb16a10f 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames' -import React, { memo, useEffect, useState } from 'react' +import React, { memo, useEffect, useMemo, useRef, useState } from 'react' import { useModalCommon } from 'src/components/hooks' import { isMobile } from 'src/utils/funtion.utils' import ModalAuthenticate from '../ModalAuthenticate/ModalAuthenticate' @@ -12,40 +12,57 @@ import s from './Header.module.scss' const Header = memo(() => { + const headeFullRef = useRef(null) const [isFullHeader, setIsFullHeader] = useState(true) const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: false }) const { visible: visibleModalInfo, closeModal: closeModalInfo, openModal: openModalInfo } = useModalCommon({ initialValue: false }) + const headerHeight = useMemo(() => { + return headeFullRef.current?.offsetHeight + }, [headeFullRef.current]) + useEffect(() => { + const handleScroll = () => { + if (!isMobile()) { + if (!headerHeight || window.scrollY > headerHeight) { + setIsFullHeader(false) + } else { + setIsFullHeader(true) + } + } + } window.addEventListener('scroll', handleScroll) return () => { window.removeEventListener('scroll', handleScroll) } - }, []) + }, [headerHeight]) - const handleScroll = () => { - if (!isMobile()) { - if (window.scrollY === 0) { - setIsFullHeader(true) - } else { - setIsFullHeader(false) - } - } - } return ( <> -
- +
+
- - +
+ + +
+ +
+ - + ) }) diff --git a/src/components/common/Header/components/HeaderHighLight/HeaderHighLight.module.scss b/src/components/common/Header/components/HeaderHighLight/HeaderHighLight.module.scss index 9717fd29d..77e6aee82 100644 --- a/src/components/common/Header/components/HeaderHighLight/HeaderHighLight.module.scss +++ b/src/components/common/Header/components/HeaderHighLight/HeaderHighLight.module.scss @@ -3,37 +3,21 @@ .headerHighLight { @apply hidden; @screen md { - transform: translateY(-10rem); - height: 0; - &.show { - @apply flex justify-between items-center spacing-horizontal bg-primary caption; - animation: showHeaderHightlight 0.2s; - height: unset; - transform: none; - padding-top: 0.8rem; - padding-bottom: 0.8rem; - color: var(--white); - .menu { - @apply flex items-center list-none; - padding: 0.8rem 0; - li { - &:not(:last-child) { - margin-right: 3.2rem; - } - a { - @appy no-underline; - } + @apply flex justify-between items-center spacing-horizontal bg-primary caption; + padding-top: 0.8rem; + padding-bottom: 0.8rem; + color: var(--white); + .menu { + @apply flex items-center list-none; + padding: 0.8rem 0; + li { + &:not(:last-child) { + margin-right: 3.2rem; + } + a { + @appy no-underline; } } } } } - -@keyframes showHeaderHightlight { - 0% { - transform: translateY(-4rem); - } - 100% { - transform: none; - } -} diff --git a/src/components/common/Header/components/HeaderHighLight/HeaderHighLight.tsx b/src/components/common/Header/components/HeaderHighLight/HeaderHighLight.tsx index a1759eede..d0d4eede7 100644 --- a/src/components/common/Header/components/HeaderHighLight/HeaderHighLight.tsx +++ b/src/components/common/Header/components/HeaderHighLight/HeaderHighLight.tsx @@ -1,6 +1,5 @@ -import classNames from 'classnames' import Link from 'next/link' -import { memo, useEffect, useRef } from 'react' +import { memo } from 'react' import { ROUTE } from 'src/utils/constanst.utils' import s from './HeaderHighLight.module.scss' @@ -19,14 +18,9 @@ const MENU = [ }, ] -interface Props { - children?: any, - isShow: boolean, -} - -const HeaderHighLight = memo(({ isShow }: Props) => { +const HeaderHighLight = memo(() => { return ( -
+
Free Shipping on order $49+ / Express $99+
diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.module.scss b/src/components/common/Header/components/HeaderMenu/HeaderMenu.module.scss index eaaabca70..35387094b 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.module.scss +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.module.scss @@ -62,6 +62,11 @@ } } .btnCart { + all: unset; + cursor: pointer; + &:focus-visible { + outline: 2px solid #000; + } &:hover { svg path { fill: var(--primary); diff --git a/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.module.scss b/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.module.scss index 8a1d76c4d..3d8016c6b 100644 --- a/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.module.scss +++ b/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.module.scss @@ -3,38 +3,34 @@ .headerSubMenu { @apply hidden; @screen md { - transform: translateY(-10rem); - height: 0; - &.show { - @apply block; - padding-bottom: 2.4rem; - transform: none; - height: unset; + @apply block; + padding-bottom: 2.4rem; + transform: none; + height: unset; + @screen lg { + @apply flex justify-between items-center; + } + .menu { + @apply flex items-center list-none; + margin-bottom: 2.4rem; @screen lg { - @apply flex justify-between items-center; + margin-bottom: 0; } - .menu { - @apply flex items-center list-none; - margin-bottom: 2.4rem; - @screen lg { - margin-bottom: 0; + li { + &:not(:last-child) { + margin-right: 2.4rem; + @screen lg { + margin-right: 4rem; + } } - li { - &:not(:last-child) { - margin-right: 2.4rem; - @screen lg { - margin-right: 4rem; - } - } - a { - @appy no-underline; - } - &:hover { - @apply text-primary; - } - &.active { - @apply text-primary; - } + a { + @appy no-underline; + } + &:hover { + @apply text-primary; + } + &.active { + @apply text-primary; } } } diff --git a/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.tsx b/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.tsx index 6a02259b5..eb7d0a18a 100644 --- a/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.tsx +++ b/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.tsx @@ -53,16 +53,12 @@ const CATEGORY = [ link: `${ROUTE.PRODUCTS}/?${QUERY_KEY.BRAND}=sauce`, }, ] -interface Props { - children?: any, - isShow: boolean, -} -const HeaderSubMenu = memo(({ isShow }: Props) => { +const HeaderSubMenu = memo(() => { const router = useRouter() return ( -
+
    {/* todo: handle active item */}
  • diff --git a/src/components/common/ImgWithLink/ImgWithLink.module.scss b/src/components/common/ImgWithLink/ImgWithLink.module.scss index 413f96cdb..c454aaa4a 100644 --- a/src/components/common/ImgWithLink/ImgWithLink.module.scss +++ b/src/components/common/ImgWithLink/ImgWithLink.module.scss @@ -5,5 +5,8 @@ height: 100%; img { object-fit: cover; + background-size: contain !important; + background-position: center !important; + background-repeat: no-repeat; } } diff --git a/src/components/common/ImgWithLink/ImgWithLink.tsx b/src/components/common/ImgWithLink/ImgWithLink.tsx index 092322085..62a30fa45 100644 --- a/src/components/common/ImgWithLink/ImgWithLink.tsx +++ b/src/components/common/ImgWithLink/ImgWithLink.tsx @@ -1,6 +1,7 @@ import React from 'react' import s from './ImgWithLink.module.scss' import Image from 'next/image' +import { BLUR_DATA_IMG } from 'src/utils/constanst.utils' export interface ImgWithLinkProps { src: string, @@ -10,7 +11,12 @@ export interface ImgWithLinkProps { const ImgWithLink = ({ src, alt }: ImgWithLinkProps) => { return (
    - {alt} + {alt}
    ) } diff --git a/src/components/common/Layout/Layout.tsx b/src/components/common/Layout/Layout.tsx index 17f520185..a808c33ff 100644 --- a/src/components/common/Layout/Layout.tsx +++ b/src/components/common/Layout/Layout.tsx @@ -2,7 +2,7 @@ import { CommerceProvider } from '@framework' import { useRouter } from 'next/router' import { FC } from 'react' import { useModalCommon } from 'src/components/hooks' -import { CartDrawer } from '..' +import { CartDrawer, CustomShapeSvg } from '..' import Footer from '../Footer/Footer' import Header from '../Header/Header' import s from './Layout.module.scss' @@ -30,6 +30,7 @@ const Layout: FC = ({ children }) => {
    {children}
    + diff --git a/src/components/common/MenuFilter/MenuFilter.module.scss b/src/components/common/MenuFilter/MenuFilter.module.scss index ecea2e119..c0810c4bd 100644 --- a/src/components/common/MenuFilter/MenuFilter.module.scss +++ b/src/components/common/MenuFilter/MenuFilter.module.scss @@ -1,6 +1,6 @@ @import "../../../styles/utilities"; .menuFilterWrapper{ - + @apply spacing-horizontal; @screen md { @apply hidden; } @@ -16,12 +16,12 @@ box-sizing: border-box; &::after{ @apply absolute; - top: 110%; + bottom: -1rem; content: ""; width: 100%; border-bottom: 1px solid var(--border-line); } - + li{ margin: 1rem 0; padding:0; diff --git a/src/components/common/MenuNavigationProductList/MenuNavigationProductList.module.scss b/src/components/common/MenuNavigationProductList/MenuNavigationProductList.module.scss index aa3f5e6c3..3eeda052c 100644 --- a/src/components/common/MenuNavigationProductList/MenuNavigationProductList.module.scss +++ b/src/components/common/MenuNavigationProductList/MenuNavigationProductList.module.scss @@ -5,37 +5,72 @@ } } .menuNavigationProductListMobile{ - @apply hidden; + @apply relative transition-all duration-100; + + @screen md{ + @apply hidden; + } + @screen xl{ + @apply hidden; + } &.isShow{ - @apply block; - @screen md { - @apply hidden; + &::after{ + content: ""; + background: rgba(0, 0, 0, 0.5); + left: 0; + top: 0; + bottom: 0; + width: 100%; + height: 100vh; + position: fixed; + z-index: 9999; } } .menuNavigationProductModal{ - background: rgba(0, 0, 0, 0.5); + @apply transition-all duration-200; position: fixed; left: 0; top: 0; width: 100%; - height: 100%; + height: 100vh; z-index: 10000; + transform: translateY(100%); + + &.animation{ + transform: translateY(0%) + } .content{ - @apply spacing-horizontal; + @apply relative w-full h-full; margin-top: 3rem; - padding-top: 2rem ; - padding-bottom: 5rem; + padding-top: 8rem ; + padding-bottom: 10rem; background-color: white; - overflow: auto; - height: 100%; + overflow-y: auto; + height: 100vh; border-radius: 2.4rem 2.4rem 0 0; .head{ - @apply flex justify-between; + @apply flex justify-between fixed; + top:0; + left:0; + margin-top: 3rem; + border-radius: 2.4rem 2.4rem 0 0; + padding: 3rem 2rem 1rem 2rem; + width: 100%; + background-color: white; + z-index: 10000; h3{ @apply heading-3 font-bold; color:var(--text-base); } } + .foot{ + @apply fixed; + bottom: 0; + left:0; + width: 100%; + background-color: white; + padding: 0 1rem 2rem 1rem; + } button{ margin-top: 2rem; width: 100%; diff --git a/src/components/common/MenuNavigationProductList/MenuNavigationProductList.tsx b/src/components/common/MenuNavigationProductList/MenuNavigationProductList.tsx index d9ac2aa26..590368da4 100644 --- a/src/components/common/MenuNavigationProductList/MenuNavigationProductList.tsx +++ b/src/components/common/MenuNavigationProductList/MenuNavigationProductList.tsx @@ -12,12 +12,13 @@ interface Props{ categories:{name:string,link:string}[], brands:{name:string,link:string}[], featured:{name:string,link:string}[], + visible: boolean, + onClose: () => void } -const MenuNavigationProductList = ({categories,brands,featured}:Props)=>{ +const MenuNavigationProductList = ({categories,brands,featured,visible,onClose}:Props)=>{ const [dataSort,setDataSort] = useState({}); - const [isShow,setIsShow] = useState(true); function handleValue(value:Object){ setDataSort({...dataSort,...value}); @@ -25,12 +26,6 @@ const MenuNavigationProductList = ({categories,brands,featured}:Props)=>{ function filter(){ console.log(dataSort) } - - function hideMenu(){ - if(isShow === true){ - setIsShow(false); - } - } return( <>
    @@ -38,18 +33,20 @@ const MenuNavigationProductList = ({categories,brands,featured}:Props)=>{
    -
    -
    +
    +

    FILTER

    -
    +
    - {LANGUAGE.BUTTON_LABEL.CONFIRM} +
    + {LANGUAGE.BUTTON_LABEL.CONFIRM} +
    diff --git a/src/components/common/MenuNavigationProductList/MenuSort/MenuSort.module.scss b/src/components/common/MenuNavigationProductList/MenuSort/MenuSort.module.scss index a25752901..be232308a 100644 --- a/src/components/common/MenuNavigationProductList/MenuSort/MenuSort.module.scss +++ b/src/components/common/MenuNavigationProductList/MenuSort/MenuSort.module.scss @@ -1,6 +1,6 @@ @import "../../../../styles/utilities"; .menuSortWrapper{ - + @apply spacing-horizontal; @screen md { @apply hidden; } @@ -11,14 +11,9 @@ margin: 0.8rem 0; } .menuSortList{ + margin-bottom: 2rem; box-sizing: border-box; - &::after{ - @apply absolute; - top: 110%; - content: ""; - width: 100%; - border-bottom: 1px solid var(--border-line); - } + li{ div{ height: 4.8rem; diff --git a/src/components/common/StaticImage/StaticImage.module.scss b/src/components/common/StaticImage/StaticImage.module.scss new file mode 100644 index 000000000..4700c71cc --- /dev/null +++ b/src/components/common/StaticImage/StaticImage.module.scss @@ -0,0 +1,5 @@ +.staticImage { + img { + @apply w-full h-full; + } +} diff --git a/src/components/common/StaticImage/StaticImage.tsx b/src/components/common/StaticImage/StaticImage.tsx new file mode 100644 index 000000000..f744e492d --- /dev/null +++ b/src/components/common/StaticImage/StaticImage.tsx @@ -0,0 +1,16 @@ +import React from 'react' +import s from './StaticImage.module.scss' +import Image from 'next/image' + +export interface Props { + src: StaticImageData, + alt?: string, +} + +const StaticImage = ({ src, alt }: Props) => { + return ( + {alt} + ) +} + +export default StaticImage \ No newline at end of file diff --git a/src/components/common/index.ts b/src/components/common/index.ts index 56896f790..5b821317f 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -35,7 +35,11 @@ export { default as ModalCreateUserInfo} from './ModalCreateUserInfo/ModalCreate export { default as CardBlog} from './CardBlog/CardBlog' export { default as RelevantBlogPosts} from './RelevantBlogPosts/RelevantBlogPosts' export { default as CollapseCommon} from './CollapseCommon/CollapseCommon' +export { default as BreadcrumbCommon } from './BreadcrumbCommon/BreadcrumbCommon' export { default as ImgWithLink} from './ImgWithLink/ImgWithLink' export { default as RecipeDetail} from './RecipeDetail/RecipeDetail' export { default as DrawerCommon} from './DrawerCommon/DrawerCommon' export { default as CartDrawer} from './CartDrawer/CartDrawer' +export { default as StaticImage} from './StaticImage/StaticImage' +export { default as EmptyCommon} from './EmptyCommon/EmptyCommon' +export { default as CustomShapeSvg} from './CustomShapeSvg/CustomShapeSvg' diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index 36c2f5c64..477d8863c 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -28,4 +28,4 @@ export { default as IconLocation } from './IconLocation' export { default as IconClose } from './IconClose' export { default as IconDelete } from './IconDelete' export { default as IconPlus } from './IconPlus' -export { default as IconMinus } from './IconMinus' +export { default as IconMinus } from './IconMinus' \ No newline at end of file diff --git a/src/components/modules/blog-detail/BlogContent/BlogContent.module.scss b/src/components/modules/blog-detail/BlogContent/BlogContent.module.scss new file mode 100644 index 000000000..e081b5f15 --- /dev/null +++ b/src/components/modules/blog-detail/BlogContent/BlogContent.module.scss @@ -0,0 +1,55 @@ +@import "../../../../styles/_utilities"; + +.blogContentWrapper{ + width: 100%; + padding: 0 2rem; + @screen md { + width: 90%; + margin:0 auto; + } + @screen xl{ + width: 63%; + margin:0 auto; + } + + h1{ + @apply heading-2; + } + h2{ + @apply heading-3; + } + h3{ + @apply heading-3; + } + + h1,h2,h3,h4{ + color:var(--text-base); + font-family: var(--font-heading); + } + + .author{ + padding: 2rem 0; + } + .content{ + + + + img{ + width: 100%; + border-radius: 2.4rem; + } + } + .boxShare{ + @apply flex font-bold; + margin: 4rem 0; + color: var(--text-active); + .listIcon{ + ul{ + @apply flex; + li{ + margin: 0px 1.6rem; + } + } + } + } +} \ No newline at end of file diff --git a/src/components/modules/blog-detail/BlogContent/BlogContent.tsx b/src/components/modules/blog-detail/BlogContent/BlogContent.tsx new file mode 100644 index 000000000..17d8555ae --- /dev/null +++ b/src/components/modules/blog-detail/BlogContent/BlogContent.tsx @@ -0,0 +1,80 @@ +import React from 'react'; +import { Author, DateTime } 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'; +import s from './BlogContent.module.scss'; +import imageAuthor from '../../../common/Author/img/author.png'; +import Link from 'next/link'; +interface BlogContentProps { + className?: string + children?: any, +} +const BlogContent = ({}:BlogContentProps) => { + return ( + <> +
    + +

    The Best Sesame Soy Broccoli Salad

    +
    + +
    +
    + +

    When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces. +
    +
    + + Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to. +
    +
    + This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing. +

    + +
    +
    + +

    What is broccoli salad

    +
    +

    When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces. +
    +
    + + Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to. +
    +
    + This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing. +

    + +
    +
    + +

    What about broccoli stems?

    +
    +

    + You can eat broccoli stems. In fact, they are delicious. Just use a peeler to peel off the outsides and then trim the stalks into small 1/4”-1/2” cubes. +

    +
    + blog-detail + +
    + +
    +
    + Share to: +
    +
    + +
    +
    +
    + + + ) +} + +export default BlogContent diff --git a/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss new file mode 100644 index 000000000..98206b439 --- /dev/null +++ b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss @@ -0,0 +1,21 @@ +.beadcrumb{ + padding-left: 3.2rem; + padding-bottom: 3.2rem; +} +.image{ + width: 100%; + padding: 0 2rem; + margin-bottom: 2rem; + border-radius: 2.4rem; + @screen md { + width: 90%; + margin:0 auto; + margin-bottom: 4rem; + } + @screen xl{ + width: 63%; + margin:0 auto; + margin-bottom: 4rem; + } + +} \ No newline at end of file diff --git a/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx new file mode 100644 index 000000000..b7eb6aaef --- /dev/null +++ b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx @@ -0,0 +1,27 @@ + +import React from 'react'; +import BreadcrumbCommon from 'src/components/common/BreadcrumbCommon/BreadcrumbCommon'; +import s from './BlogDetailImg.module.scss'; +interface Props { + className?: string + children?: any +} + +const CRUMBS =[ + { + name:"Blog", + link:"/blog" + } +] +const BlogDetailImg = ({}:Props ) => { + return ( + <> +
    + +
    + Ảnh đại diện + + ) +} + +export default BlogDetailImg diff --git a/src/components/modules/blog-detail/BlogDetailImg/img/blogdetail.png b/src/components/modules/blog-detail/BlogDetailImg/img/blogdetail.png new file mode 100644 index 000000000..ad200ac46 Binary files /dev/null and b/src/components/modules/blog-detail/BlogDetailImg/img/blogdetail.png differ diff --git a/src/components/modules/blog-detail/index.ts b/src/components/modules/blog-detail/index.ts new file mode 100644 index 000000000..45d532145 --- /dev/null +++ b/src/components/modules/blog-detail/index.ts @@ -0,0 +1,2 @@ +export { default as BlogContent } from './BlogContent/BlogContent'; +export { default as BlogDetailImg } from './BlogDetailImg/BlogDetailImg'; \ No newline at end of file diff --git a/src/components/modules/blogs/BlogBreadcrumb/BlogBreadCrumb.module.scss b/src/components/modules/blogs/BlogBreadcrumb/BlogBreadCrumb.module.scss new file mode 100644 index 000000000..d347ad872 --- /dev/null +++ b/src/components/modules/blogs/BlogBreadcrumb/BlogBreadCrumb.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/blogs/BlogBreadcrumb/BlogBreadcrumb.tsx b/src/components/modules/blogs/BlogBreadcrumb/BlogBreadcrumb.tsx new file mode 100644 index 000000000..bb2ea19ef --- /dev/null +++ b/src/components/modules/blogs/BlogBreadcrumb/BlogBreadcrumb.tsx @@ -0,0 +1,16 @@ +import { BreadcrumbCommon } from "src/components/common" +import s from './BlogBreadCrumb.module.scss' + +const BLOG_DATA = [ + {link: "/blogs", name: "Blog"}, +]; + +const BlogBreadCrumb = () => { + return ( +
    + +
    + ) +} + +export default BlogBreadCrumb \ No newline at end of file diff --git a/src/components/modules/blogs/BlogHeading/BlogHeading.module.scss b/src/components/modules/blogs/BlogHeading/BlogHeading.module.scss new file mode 100644 index 000000000..d562ce2ae --- /dev/null +++ b/src/components/modules/blogs/BlogHeading/BlogHeading.module.scss @@ -0,0 +1,9 @@ +@import "../../../../styles/utilities"; + +.headingWrapper { + @apply flex spacing-horizontal-left pb-16 justify-center; + .heading{ + max-width: 121.6rem; + flex-grow: 1; + } +} \ No newline at end of file diff --git a/src/components/modules/blogs/BlogHeading/BlogHeading.tsx b/src/components/modules/blogs/BlogHeading/BlogHeading.tsx new file mode 100644 index 000000000..e3f60c980 --- /dev/null +++ b/src/components/modules/blogs/BlogHeading/BlogHeading.tsx @@ -0,0 +1,18 @@ +import { HeadingCommon } from "src/components/common" +import s from './BlogHeading.module.scss' + +interface BlogHeadingProps { + children?: React.ReactNode, + heading?: string, +} + +const BlogHeading = ({heading = "BLOG"}: BlogHeadingProps) => { + return ( +
    +
    + {heading} +
    +
    + ) +} +export default BlogHeading \ No newline at end of file diff --git a/src/components/modules/blogs/BlogsList/BlogsList.module.scss b/src/components/modules/blogs/BlogsList/BlogsList.module.scss new file mode 100644 index 000000000..295cabc5a --- /dev/null +++ b/src/components/modules/blogs/BlogsList/BlogsList.module.scss @@ -0,0 +1,23 @@ +@import "../../../../styles/utilities"; + +.wrapper { + @apply flex flex-col spacing-horizontal items-center; + padding-bottom: 16.8rem; + .list { + @apply grid grid-cols-1 gap-8; + max-width: 121.6rem; + @screen md { + @apply grid-cols-2; + } + @screen lg { + @apply grid-cols-3; + } + } + .card { + @apply pb-16; + } + .pagination { + @apply flex justify-center items-center ; + padding-top: 0.8rem; + } +} \ No newline at end of file diff --git a/src/components/modules/blogs/BlogsList/BlogsList.tsx b/src/components/modules/blogs/BlogsList/BlogsList.tsx new file mode 100644 index 000000000..536aa4afd --- /dev/null +++ b/src/components/modules/blogs/BlogsList/BlogsList.tsx @@ -0,0 +1,157 @@ +import React, { useState } from 'react' +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[], +} + +const BLOGSLIST_DATA = [ + { + imageSrc: image15.src, + title: "1", + description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", + slug: "happy-diet" + }, + { + imageSrc: image16.src, + 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, + 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, + title: "4", + description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", + slug: "happy-diet" + }, + { + imageSrc: image22.src, + 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, + 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, + title: "7", + description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", + slug: "happy-diet" + }, + { + imageSrc: image16.src, + 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, + 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, + 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, + title: "11", + description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", + slug: "happy-diet" + }, + { + imageSrc: image22.src, + 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, + title: "13", + description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", + slug: "happy-diet" + }, + { + imageSrc: image16.src, + 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, + 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, + title: "16", + description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", + slug: "happy-diet" + }, + { + imageSrc: image23.src, + 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, + 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" + }, + + ] + +const BlogsList = ({ data = BLOGSLIST_DATA }:BlogsListProps) => { + const [currentPage, setCurrentPage] = useState(0) + const onPageChange = (page:number) => { + setCurrentPage(page) + } + + return ( +
    +
    +
    + { + data.slice(currentPage*DEFAULT_BLOG_PAGE_SIZE,(currentPage+1)*DEFAULT_BLOG_PAGE_SIZE).map((product,index)=> { + return( +
    + +
    + ) + }) + } +
    +
    + +
    +
    +
    + ) +} + +export default BlogsList \ No newline at end of file diff --git a/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.module.scss b/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.module.scss new file mode 100644 index 000000000..6fb16450c --- /dev/null +++ b/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.module.scss @@ -0,0 +1,34 @@ +@import "../../../../styles/utilities"; + +.featuredCard { + @apply flex flex-row justify-center spacing-horizontal pb-16; + .featuredCardWrapper { + @apply flex flex-col; + @screen lg { + @apply flex-row justify-between; + } + max-width: 121.6rem; + } +} +.left { + max-width: 59.8rem; + img { + border-radius: 2.4rem; + } +} +.right { + flex-shrink: 3; + @screen lg { + margin-left: 6.4rem; + } +} +.titleWrapper { + @apply flex flex-col items-start font-heading heading-3; + margin-bottom: 1.6rem; + .title { + margin-top: 0.4rem; + } +} +.content { + margin-top: 1.6rem +} \ No newline at end of file diff --git a/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.tsx b/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.tsx new file mode 100644 index 000000000..2bd158d79 --- /dev/null +++ b/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.tsx @@ -0,0 +1,52 @@ +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' + +interface FeaturedCardBlogProps{ + title?: string, + content?: string, + imgSrc?: any, + imgAuthor?: any, + date?: string, + authorName?: string, +} + +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, + date: "APRIL 30, 2021", + author: "Alessandro Del Piero" +} + +const FeaturedCardBlog = ({ + title = FEATURED_DATA.title, + content = FEATURED_DATA.content, + imgSrc = FEATURED_DATA.imgSrc, + imgAuthor = FEATURED_DATA.imgAuthor, + date = FEATURED_DATA.date, + authorName = FEATURED_DATA.author +}: FeaturedCardBlogProps) => { + return ( +
    +
    +
    + image feature card +
    +
    +
    + + {title} +
    + +
    {content}
    +
    +
    +
    + ) +} + +export default FeaturedCardBlog \ No newline at end of file diff --git a/src/components/modules/blogs/index.tsx b/src/components/modules/blogs/index.tsx new file mode 100644 index 000000000..0f8e1b281 --- /dev/null +++ b/src/components/modules/blogs/index.tsx @@ -0,0 +1,4 @@ +export { default as FeaturedCardBlog } from './FeaturedCardBlog/FeaturedCardBlog' +export { default as BlogsList } from './BlogsList/BlogsList' +export { default as BlogHeading } from './BlogHeading/BlogHeading' +export { default as BlogBreadCrumb } from './BlogBreadcrumb/BlogBreadcrumb' \ No newline at end of file diff --git a/src/components/modules/delivery-policy/DeliveryAndPolicyBreadCrumb/DeliveryAndPolicyBreadCrumb.module.scss b/src/components/modules/delivery-policy/DeliveryAndPolicyBreadCrumb/DeliveryAndPolicyBreadCrumb.module.scss new file mode 100644 index 000000000..abf7ef84f --- /dev/null +++ b/src/components/modules/delivery-policy/DeliveryAndPolicyBreadCrumb/DeliveryAndPolicyBreadCrumb.module.scss @@ -0,0 +1,8 @@ +@import "../../../../styles/utilities"; + +.breadCrumb { + @apply absolute z-10 pt-12 spacing-horizontal; + @screen lg{ + padding-left: 3.2rem; + } +} \ No newline at end of file diff --git a/src/components/modules/delivery-policy/DeliveryAndPolicyBreadCrumb/DeliveryAndPolicyBreadCrumb.tsx b/src/components/modules/delivery-policy/DeliveryAndPolicyBreadCrumb/DeliveryAndPolicyBreadCrumb.tsx new file mode 100644 index 000000000..992370ce5 --- /dev/null +++ b/src/components/modules/delivery-policy/DeliveryAndPolicyBreadCrumb/DeliveryAndPolicyBreadCrumb.tsx @@ -0,0 +1,17 @@ +import { BreadcrumbCommon } from 'src/components/common' +import s from './DeliveryAndPolicyBreadCrumb.module.scss' + +const CRUMB_DATA = [ + { + link: "/delivery-policy", + name: "Delivery And Policy" + } +] +const DeliveryAndPolicyBreadCrumb = () => { + return ( +
    + +
    + ) +} +export default DeliveryAndPolicyBreadCrumb \ No newline at end of file diff --git a/src/components/modules/delivery-policy/DeliveryAndPolicyContent/DeliveryAndPolicyContent.module.scss b/src/components/modules/delivery-policy/DeliveryAndPolicyContent/DeliveryAndPolicyContent.module.scss new file mode 100644 index 000000000..be88621b5 --- /dev/null +++ b/src/components/modules/delivery-policy/DeliveryAndPolicyContent/DeliveryAndPolicyContent.module.scss @@ -0,0 +1,26 @@ +@import "../../../../styles/utilities"; + +.wrapper { + @apply flex justify-center pt-20 pb-28 spacing-horizontal; + .deliveryAndPolicyContentWrapper { + max-width: 80.4rem; + min-height: 4rem; + .titleWrapper { + @apply flex flex-col items-start; + .date { + @apply inline flex flex-row; + margin-bottom: 0.4rem; + .update { + @apply uppercase leading-8; + color:var(--text-label); + font-size: 1.2rem; + letter-spacing: 0.01em; + } + } + } + .content { + @apply pb-16 whitespace-pre-line; + padding-top: 1.6rem; + } + } +} diff --git a/src/components/modules/delivery-policy/DeliveryAndPolicyContent/DeliveryAndPolicyContent.tsx b/src/components/modules/delivery-policy/DeliveryAndPolicyContent/DeliveryAndPolicyContent.tsx new file mode 100644 index 000000000..6045288f6 --- /dev/null +++ b/src/components/modules/delivery-policy/DeliveryAndPolicyContent/DeliveryAndPolicyContent.tsx @@ -0,0 +1,81 @@ +import { CollapseCommon, DateTime, HeadingCommon } from 'src/components/common' +import s from './DeliveryAndPolicyContent.module.scss' + +interface DeliveryAndPolicyContentProps{ + title?: string, + date?: string, + content?: string, +} +const HEADER_CONTENT = +`When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces. + +Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to. + +This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing.`; + +const DELIVERYANDPOLICY_DATA = [ + { + title: "This is a subtitle", + content: `When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces. + + Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to. + + This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing.`, + }, + { + title: "This is a subtitle", + content: `When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces. + + Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to. + + This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing.`, + }, + { + title: "This is a subtitle", + content: `When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces. + + Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to. + + This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing.`, + }, + { + title: "This is a subtitle", + content: `When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces. + + Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to. + + This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing.`, + }, + { + title: "This is a subtitle", + content: `When you’re trying to eat healthier but want something more substantial than a leafy green salad, broccoli salad is there for you. I love the crunch and heft of broccoli, especially when it’s cut up into bite size spoonable pieces. + + Some people aren’t into raw broccoli, but I love it! I always go for the raw broccoli on those vegetable platters that seem to be at every potluck/party you go to. + + This is a simple broccoli salad: you have the bulk of it, raw broccoli; crunchy red onions for a bit of acidity and raw crunch, craisins for sweetness, almonds for a nutty counter point; and a sweet and tangy soy-rice vinegar-sesame dressing.`, + }, +] + +const DeliveryAndPolicyContent = ( { title="Delivery & Policy", date="APRIL 30, 2021", content = HEADER_CONTENT } : DeliveryAndPolicyContentProps) => { + return ( +
    + +
    +
    +
    +
    LASTEST UPDATED: 
    + +
    + {title} +
    +
    + {content} +
    + +
    + +
    + ) +} + +export default DeliveryAndPolicyContent \ No newline at end of file diff --git a/src/components/modules/delivery-policy/index.tsx b/src/components/modules/delivery-policy/index.tsx new file mode 100644 index 000000000..bb23bd6c8 --- /dev/null +++ b/src/components/modules/delivery-policy/index.tsx @@ -0,0 +1,2 @@ +export { default as DeliveryAndPolicyContent } from './DeliveryAndPolicyContent/DeliveryAndPolicyContent' +export { default as DeliveryAndPolicyBreadCrumb } from './DeliveryAndPolicyBreadCrumb/DeliveryAndPolicyBreadCrumb' \ No newline at end of file diff --git a/src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner.module.scss b/src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner.module.scss new file mode 100644 index 000000000..2e5f65a1c --- /dev/null +++ b/src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner.module.scss @@ -0,0 +1,8 @@ +@import "../../../../styles/_utilities"; + +.recipeListBanner{ + @apply spacing-horizontal; + @screen md { + padding:0 3.2rem; + } +} \ No newline at end of file diff --git a/src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner.tsx b/src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner.tsx new file mode 100644 index 000000000..0db63d2e3 --- /dev/null +++ b/src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner.tsx @@ -0,0 +1,27 @@ +import React from 'react' +import { Banner } from 'src/components/common' +import BannerRight from './assets/bannerrecipes.png' +import s from './RecipeListBanner.module.scss' + +interface Props { +} + +const RecipeListBanner = ({ }: Props) => { + return ( +
    + +
    + ) +} + +export default RecipeListBanner diff --git a/public/assets/bannerrecipes.png b/src/components/modules/recipes-list/RecipeListBanner/assets/bannerrecipes.png similarity index 100% rename from public/assets/bannerrecipes.png rename to src/components/modules/recipes-list/RecipeListBanner/assets/bannerrecipes.png diff --git a/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.module.scss b/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.module.scss new file mode 100644 index 000000000..2f70eb3ca --- /dev/null +++ b/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.module.scss @@ -0,0 +1,60 @@ +@import "../../../../../styles/_utilities"; + +.recipesItem { + @apply flex justify-between; + margin: 1.5rem 0; + + @screen md{ + @apply block; + } + + .recipesItemImage { + @apply transition-all duration-200; + width: 31%; + img { + @apply block object-cover; + width: 100%; + min-height: 12.5rem; + border-radius: 1.5rem; + } + + @screen md { + @apply object-cover cursor-pointer; + width: 100%; + margin: 0 auto; + img{ + height:100%; + border-radius: 2.4rem; + } + } + } + .recipesItemText { + width: 65%; + .recipesItemName{ + @apply topline font-bold cursor-pointer; + + display: -webkit-box; + -webkit-line-clamp: 1; + overflow: hidden; + -webkit-box-orient: vertical; + font-feature-settings: "salt" on; + color:var(--text-active); + margin-top: 1.6rem; + &:hover { + color: var(--primary); + } + } + @screen md { + width: 100%; + } + } + + .recipesItemDescription{ + color:var(--text-label); + display: -webkit-box; + -webkit-line-clamp: 2; + overflow: hidden; + -webkit-box-orient: vertical; + } + +} diff --git a/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.tsx b/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.tsx new file mode 100644 index 000000000..f43227d5a --- /dev/null +++ b/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.tsx @@ -0,0 +1,31 @@ +import Link from 'next/link'; +import React from 'react'; +import s from './RecipesItem.module.scss'; +interface RecipesItem { + image:string, + name: string, + description:string, + link: string +} + +const RecipesItem = ({ image, name,description, link }: RecipesItem) => { + return ( + + ) +} + +export default RecipesItem diff --git a/src/components/modules/recipes-list/RecipesList/RecipesList.module.scss b/src/components/modules/recipes-list/RecipesList/RecipesList.module.scss new file mode 100644 index 000000000..5f9ded191 --- /dev/null +++ b/src/components/modules/recipes-list/RecipesList/RecipesList.module.scss @@ -0,0 +1,94 @@ +@import "../../../../styles/_utilities"; + +.recipesListWrapper { + @apply spacing-horizontal; + @screen md{ + padding:0 3.2rem; + padding-bottom:5.6rem; + } + .breadcrumb{ + padding:1rem 0; + } + .recipesListPageMain{ + @screen md { + @apply flex; + } + .categories{ + @apply hidden; + @screen md { + @apply hidden; + } + @screen xl{ + @apply block; + width:25%; + } + } + .recipesList{ + @screen md { + @apply flex justify-between flex-wrap w-full; + margin: 1rem 0; + } + @screen xl { + width:75%; + } + .inner{ + @screen md { + @apply flex flex-col items-center justify-center; + } + .boxItem { + @screen md { + @apply flex justify-between flex-wrap; + margin: 1rem 0; + } + .item { + @screen md { + width: calc(97% / 2); + margin-top:1rem; + } + @screen lg{ + width: calc(97% / 3); + margin-top:1rem; + } + } + } + } + .recipesPagination{ + @apply flex justify-center w-full; + margin: 3rem 0; + @screen md { + @apply flex justify-center ; + margin:2rem 0; + } + } + .boxSelect{ + @apply flex justify-between w-full; + padding: 2.5rem 0; + + @screen xl { + @apply block; + width: auto; + padding:0; + } + .categorySelectCate{ + @screen xl { + @apply hidden; + } + } + label{ + @apply font-bold topline ; + color:var(--text-active); + @screen xl { + @apply hidden; + } + } + .select{ + margin-top: 1rem; + } + } + + } + + } + + +} diff --git a/src/components/modules/recipes-list/RecipesList/RecipesList.tsx b/src/components/modules/recipes-list/RecipesList/RecipesList.tsx new file mode 100644 index 000000000..c061b9edb --- /dev/null +++ b/src/components/modules/recipes-list/RecipesList/RecipesList.tsx @@ -0,0 +1,228 @@ +import React from 'react'; +import { SelectCommon } from 'src/components/common'; +import BreadcrumbCommon from 'src/components/common/BreadcrumbCommon/BreadcrumbCommon'; +import MenuNavigation from 'src/components/common/MenuNavigation/MenuNavigation'; +import PaginationCommon from 'src/components/common/PaginationCommon/PaginationCommon'; +import { RecipeCardProps } from 'src/components/common/RecipeCard/RecipeCard'; +import { OPTION_ALL, QUERY_KEY, ROUTE } from 'src/utils/constanst.utils'; +import HeadingCommon from "../../../common/HeadingCommon/HeadingCommon"; +import RecipesItem from './RecipesItem/RecipesItem'; +import s from './RecipesList.module.scss'; + +const recipe:RecipeCardProps[] = [ +{ + title: "Special Recipe of Vietnamese Phở", + description: "Alright, before we get to the actual recipe, let’s chat for a sec about the ingredients. To make this pho soup recipe, you will need:", + imageSrc: 'https://user-images.githubusercontent.com/76729908/132159257-f92574c7-d00d-4142-8ea7-0ca9515fb737.png', + slug: "special-recipe-of-vietnamese-pho" +}, +{ + title: "Original Recipe of Curry", + description: "Chicken curry is common to several countries including India, countries in Asia and the Caribbean. My favorite of them though is this aromatic Indian...", + imageSrc: 'https://user-images.githubusercontent.com/76729908/132159259-ae4c986d-ab53-4758-9137-d06bafdd15d0.png', + slug:"original-recipe-of-curry" +}, +{ + title: "The Best Recipe of Beef Noodle Soup", + description: "The broth for Bun Bo Hue is prepared by slowly simmering various types of beef and pork bones (ox tail, beef shank, pork neck bones, pork feet,...", + imageSrc: 'https://user-images.githubusercontent.com/76729908/132159262-f28a9fb9-4852-47e6-80b5-d600521b548a.png', + slug:"the-best-recipe-of-beef-noodle-soup" +}, +{ + title: "Special Recipe of Vietnamese Phở", + description: "Alright, before we get to the actual recipe, let’s chat for a sec about the ingredients. To make this pho soup recipe, you will need:", + imageSrc: 'https://user-images.githubusercontent.com/76729908/132159257-f92574c7-d00d-4142-8ea7-0ca9515fb737.png', + slug: "special-recipe-of-vietnamese-pho" +}, +{ + title: "Original Recipe of Curry", + description: "Chicken curry is common to several countries including India, countries in Asia and the Caribbean. My favorite of them though is this aromatic Indian...", + imageSrc: 'https://user-images.githubusercontent.com/76729908/132159259-ae4c986d-ab53-4758-9137-d06bafdd15d0.png', + slug:"original-recipe-of-curry" +}, +{ + title: "The Best Recipe of Beef Noodle Soup", + description: "The broth for Bun Bo Hue is prepared by slowly simmering various types of beef and pork bones (ox tail, beef shank, pork neck bones, pork feet,...", + imageSrc: 'https://user-images.githubusercontent.com/76729908/132159262-f28a9fb9-4852-47e6-80b5-d600521b548a.png', + slug:"the-best-recipe-of-beef-noodle-soup" +},]; +const DEFAULT_PAGESIZE_RECIPELIST = 6; + +const BREADCRUMB = [ + { + name: 'Special Recipes', + link: `#`, + }, +]; + +const CATEGORY = [ + { + name: 'All', + link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=${OPTION_ALL}`, + }, + { + name: 'Malaysian', + link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=malaysia`, + }, + { + name: 'Vietnamese', + link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=vietnamese`, + }, + { + name: 'Thailand', + link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=thailand`, + }, + { + name: 'Indian', + link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=indian`, + }, + { + name: 'Lao', + link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=lao`, + }, + { + name: 'Chinese', + link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=chinese`, + }, + { + name: 'Korean', + link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=korean`, + }, + { + name: 'Japanese', + link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=japanese`, + }, + { + name: 'Western', + link: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=western`, + }, + ]; + +const CATEGORYSELECT = [ +{ + name: 'All', + value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=${OPTION_ALL}`, +}, +{ + name: 'Malaysian', + value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=malaysia`, +}, +{ + name: 'Vietnamese', + value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=vietnamese`, +}, +{ + name: 'Thailand', + value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=thailand`, +}, +{ + name: 'Indian', + value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=indian`, +}, +{ + name: 'Lao', + value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=lao`, +}, +{ + name: 'Chinese', + value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=chinese`, +}, +{ + name: 'Korean', + value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=korean`, +}, +{ + name: 'Japanese', + value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=japanese`, +}, +{ + name: 'Western', + value: `${ROUTE.RECIPES}/?${QUERY_KEY.RECIPES}=western`, +}, +]; + +const OPTIONSLECT=[ + { + name:"Most Viewed", + value:"most-viewed" + }, + { + name:"Lastest Blogs", + value:"lastest-blogs" + }, + { + name:"Recent Blogs", + value:"recent-blogs" + }, +]; + +interface Props{ + data?: RecipeCardProps[], + recipes?:{ + id:string, + title:string, + image:string, + description:string, + link:string + }[], +} + + +const RecipesList = ({ data =recipe}:Props) => { + return ( + <> +
    +
    + +
    +
    + +
    + +
    + +
    + SPECIAL RECIPES + +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    +
    + {data?.map((item,index) => ( +
    + +
    + ))} +
    +
    +
    + +
    +
    + +
    + +
    + + ) +} + +export default RecipesList diff --git a/src/components/modules/recipes-list/index.ts b/src/components/modules/recipes-list/index.ts new file mode 100644 index 000000000..dc665674c --- /dev/null +++ b/src/components/modules/recipes-list/index.ts @@ -0,0 +1,2 @@ +export { default as RecipeListBanner } from './RecipeListBanner/RecipeListBanner' +export { default as RecipesList} from './RecipesList/RecipesList' diff --git a/src/styles/_utilities.scss b/src/styles/_utilities.scss index 6b919de76..c73526a27 100644 --- a/src/styles/_utilities.scss +++ b/src/styles/_utilities.scss @@ -112,6 +112,60 @@ border-radius: 60% 2% 2% 2%/ 6% 50% 50% 50%; } + .shape-common { + position: relative; + $border: 2px; + margin: $border; + clip-path: url(#svg-custom-shape); + } + + .shape-common-border { + position: relative; + $border: 2px; + margin: $border; + + .inner { + background: var(--white); + clip-path: url(#svg-custom-shape); + } + &::before { + position: absolute; + content: ""; + width: calc(100% + #{$border} * 2); + height: calc(100% + #{$border} * 2); + background-color: var(--primary); + top: calc(#{$border} * -1); + left: calc(#{$border} * -1); + clip-path: url(#svg-custom-shape); + } + } + + .shape-common-lg { + clip-path: url(#svg-custom-shape-lg); + padding: 2rem; + } + + .shape-common-lg-border { + position: relative; + $border: 2px; + margin: $border; + + .inner { + padding: 2rem; + clip-path: url(#svg-custom-shape-lg); + } + &::before { + position: absolute; + content: ""; + width: calc(100% + #{$border} * 2); + height: calc(100% + #{$border} * 2); + background-color: var(--primary); + top: calc(#{$border} * -1); + left: calc(#{$border} * -1); + clip-path: url(#svg-custom-shape-lg); + } + } + .font-heading { font-family: var(--font-heading); } @@ -135,7 +189,7 @@ &::-webkit-scrollbar-thumb { border-radius: 10px; - background-color: var(--primary) + background-color: var(--primary); } } diff --git a/src/utils/constanst.utils.ts b/src/utils/constanst.utils.ts index 1522e477f..e91fb17f6 100644 --- a/src/utils/constanst.utils.ts +++ b/src/utils/constanst.utils.ts @@ -1,3 +1,5 @@ +export const BLUR_DATA_IMG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMMAAADDCAMAAAAIoVWYAAAAgVBMVEUAAABYl3BZl3RZn3Bbm3RbmnRamXNbmnVbmnNamnRamXRbmnNYlnJbm3RamnRamXNamnRcmXRZmXNamnNcmXP///9bmnTr8+6YwKjB2cv1+fdvp4VloHyEs5e308KixrHW5txwpoWtzLnh7eaEs5bM4NSOup/W5t16rY6tzbrC2cuKR9FTAAAAFXRSTlMAIEAQv+9g35+AcN8wz5Cgr4BQn1CCHGjpAAAJqklEQVR42uya25aaMBSGEcRT1U6nzZEEEAS17/+AnUraiAmEbkGcLr47kYX87PNGb2JiYmJiYmJiYmJiYmLifyaYfRB4n5XtZrULccXube17nw1/H+J73hbeJ2Ixx1aWq5n3cvx2d1PBEjfzUipmm9Wy8pdwvn8PdBjMcSvLjfcaBOv7O50rZ9/gOtEH4u7UVzBFsA5tD/hDRXArTSYFQVd4Gpfi5szxc9QmbHITX0fC+cJRnYLqM9feqMzm2I1MkQVCX0PEtpZ0RBRF2EDEqAFyeAER21BHa5JW7pIX9FAzAkHNXLBinIKnJZjewrSKBLWSqzPDkbLTbGkoMFRkSOHyp+U4reAfCVlzxP5EqKuIvTcCe1zRdJ/sIFokaHJVK0YoEzMtoQGSo078VAXbezo7fCVGj5OMZAgfX6GoB7gYxxBVfT4Q1AfxUw0RbBfr1Wo+X+ErDPVDlZu+e8OzXc/rDd4BAbHX63DoGhFszPaOop7gwuFMww0JBPUFrUbT98Vi4W+HMccixBYk6g2Gb9mt9Dg78JDAUG9wc13Qq2P5S6wRZcJYmrI4SyhB/XHGBvP+VGzwzUiZo4FIhlzdfDNGykEo7DP5olcJ56EU6IAQ55JSelRu1duU+q7nsYFJCUcKXlCBFY/PFbNQRXKKngtnh75ELLFu7Z4Mv/TjTt/GkGCubt4fH9XEvYSco6dAelh6rOyjWi4kssPKJGOn/qzGVYp6g7fa9uaUCIyTtkKV9W8JH2wGazCQqPk+ad9tFEqNfQEkGjLrfeICoAHC5SFDLKxmYHol49Qw/r5gbo2GqG0lk9i+4ziSksZjjKkBvpJbzZC17SeozaXPcEPAF+M/rFN/ZBw1m8/IJlsiKAl857Fufqa4aJ/GTuiWEtAzmr+59AC82Xw7cfjFsTIERxpi6IKNqQF4n3qyTYzMtbA7E32IgjZRpv9uwS0rQTXwFeIKQBwxog4kj2+iSnBQ4ys2s4pOI6XMGGOJwIbsUw7YPfWjQft25MoiJln9GkLScTRoOzh+0eRgPoenaAhtri865JiLKYGYaYbfJTQhy4zxlnh4B8d0buROd3NNjrhGyS1p5mR7OHnL+swH1wdmfcbEVZboobaVcta8XHuuCbw+7G3lleP7IsYzuwPkLKGUJow01BDBTZeXLXU6hLfe0hpfuoiRM5awukuNuaqhGY7hzffMGntEKEsUlREgrdDxPt/y0nBR4/Rw44ETU2w8FUVU0rPO/oD5EsuT+nxureVYsQYHhOxSxArgjlvIkkqBFcTxB6EV+A30yV3EKAesXDQOa5JSiwB2rtJVxEQMWbkYlKiRGO5Om6bRmR2wBvQ2iBiWoJ00/3NgB6G5qlQwdQ/RhUBH/YNpS7fmcAY0hLT6dMpYQRAcwo5/IzvmXUNoDoiIYd+f5GnBUoK6wA9Ab/L/pozxIQK4aNq8kIgYmpvmuCLhrZU3R31jueIR2PwFX3BFRJoVSJ27oJiXPJkHoevj2RdHIeDUIRGiwJ5IjnrjBxURWVTwTGg7OcklR25Y09QeK2cCilBIVhuNY4kVnUTEApfdt8SnPv/lFOzxDecyi9kHGY1wjcgR2PwqOO48YMRNX2w8CIsv2IXz/tLI3rm4XwFoYhUQIGZfsYPmsNc7y7ahOTYCgjZNTzvPG1RFplUYka9I7Ino1EED0UENVdHsUcmNLXK7As1PU0E9J1Ct1TqXeo/gf93hW5Z7v+rPWSFugjs5cd3extIVN8ndriRXA65DA5zA36xXv1kv/N/tV+Viyf1oJqSklMqowePMlKktEauPHKQBvoaK1IjalehXe1fYnCgMRAFR0aIHdx1CAIHTAvX+/w+8cViNS1ICTjPdzPA+2naGJ2+zydvdtFMa/mnTlCfpYGecw0p4EixNdDiuRbYctZnVvToZxPR3wxcSH2EBSgvfn+V25k3DOe9UXgm4tC+srS/bUK3IpDKKqu6z05sTqH6cyV7Jv5HkF307Bw/t0EpJ+W1ZP7gdN+r8jrwSWKJUaA0N04H7ccFV/fA3ajNgIKWteo6x12Fx1x0fq5DCns9IQKCv6s+gzYD3UoohI5Z4IQamWVN9fKRlrTNqDbS0xyggaji598JPUZhEojrH20LKF1qkyJ4xFxAgJugR50hKkOT5o8py+zuI6glg5sYyISAY+sp9ZGWXalcynfci0l6QICWTAVHiYJWb6pkqs10mj0gEjgkc0dfLZJ0z5V6pRqdDrZoY7L1cxwTecdU8Tx7o5C/87/CZ1hP90NbopPUK7zNT6XlzlWhSiPPVelJIXBND0QDYIh+iHEbvRRXQHJ7JneaHXl9pm369XesyLNOlaDeKleTBEWRcTllrfGZ/Jx4BjSdlkpT4QEk7vR8Kloix9KYuxxe4wlaPKGnowp2Z2hIxGAwAV70wcSnG2eBXXL0fWvdtXBA7CCYXphwns0JW0hWUpPZDyy67GwrnJ0PBN/cW5N6/HCVpLo81shyUJLDC9lXxeTrlgrzR+wZwDybmwAcnu4INAnqjvfNFYG1sUVX3OiEpMdlVgo+CGU7iceWYxq9nDrVaSqfhdtXV+KGacUWjHEokpRytSdJr0Puh29j4OwAOcgAwnBy49jUAwn10EDeW7TWvwBCH/DmdpdLBJ8snHANcz/NCzeOb59CBbrCSRIBQuMELwX/e4l0VEc2H/krgUAPOD1WRnBiK6EryV37+DrIhvjLbGShJPtg71BB+VVDORILGUqJ3zyPaeyNchwWdhmhEO9HXxzDeprXsEUUOOeDztAwLpORJIa1zfeldQxtMH4A7w7GYHMAent7qTeWuUElKbAqHAsbEqGGGlC5Q1ySHGVLiRMNhM0NKFZzuqSECP2x6SP92iMGdMwHxSTOkN3NGWolmOH/GSCujuSy5c6aja5rL0n6OlBqaHA76YprcFkkLLiqy6Xd8P36J9OtSAlQkOSApaZFSPADdpWQzB5Tg9GgpbjX8eSNPHwTtsRUkOJs53HvFbOYAvWJWc+hPcI3NHELwlWzmsAczwGYO0ANnNQewWa3mAIaG1Ry2cznk9GoPfTycreYQ40qVHgU9WyPUDlmqJ2FIwRckrHWM3TWQ4BbbGvtZl2xUNDsE4gSQn+2tJ8aJYKF+F+SbTYAEIO30ffMHhyDCt0QgxzRwrzBRKclj7knRlvLk7m00l2izCcCNpGmxqmw6dkPXlNXn7SOqPT8PeH4yAjL/dVA7IW49hVtcbDQv442wkATcERrrmNSGdRTezl/LBALPHgY9wvf90fe3NxyiYLchmJsXLFiwYMGCBQsWLFgwH/8BQqjRKhB614AAAAAASUVORK5CYII=' + export const SOCIAL_LINKS = { FB: 'FB', TWITTER: 'TWITTER', @@ -50,4 +52,5 @@ export const KEY = { } export const OPTION_ALL = 'all'; -export const DEFAULT_PAGE_SIZE=20 \ No newline at end of file +export const DEFAULT_PAGE_SIZE=20; +export const DEFAULT_BLOG_PAGE_SIZE=6; diff --git a/src/utils/demo-data.ts b/src/utils/demo-data.ts index 64c8128ae..8ecaf4231 100644 --- a/src/utils/demo-data.ts +++ b/src/utils/demo-data.ts @@ -185,31 +185,37 @@ export const RECIPE_DATA_TEST: RecipeCardProps[] = [ { title: "Special Recipe of Vietnamese Phở", description: "Alright, before we get to the actual recipe, let’s chat for a sec about the ingredients. To make this pho soup recipe, you will need:", - imageSrc: 'https://user-images.githubusercontent.com/76729908/132159257-f92574c7-d00d-4142-8ea7-0ca9515fb737.png' + imageSrc: 'https://user-images.githubusercontent.com/76729908/132159257-f92574c7-d00d-4142-8ea7-0ca9515fb737.png', + slug: "special-recipe-of-vietnamese-pho" }, { title: "Original Recipe of Curry", description: "Chicken curry is common to several countries including India, countries in Asia and the Caribbean. My favorite of them though is this aromatic Indian...", - imageSrc: 'https://user-images.githubusercontent.com/76729908/132159259-ae4c986d-ab53-4758-9137-d06bafdd15d0.png' + imageSrc: 'https://user-images.githubusercontent.com/76729908/132159259-ae4c986d-ab53-4758-9137-d06bafdd15d0.png', + slug:"original-recipe-of-curry" }, { title: "The Best Recipe of Beef Noodle Soup", description: "The broth for Bun Bo Hue is prepared by slowly simmering various types of beef and pork bones (ox tail, beef shank, pork neck bones, pork feet,...", - imageSrc: 'https://user-images.githubusercontent.com/76729908/132159262-f28a9fb9-4852-47e6-80b5-d600521b548a.png' + imageSrc: 'https://user-images.githubusercontent.com/76729908/132159262-f28a9fb9-4852-47e6-80b5-d600521b548a.png', + slug:"the-best-recipe-of-beef-noodle-soup" }, { title: "Special Recipe of Vietnamese Phở", description: "Alright, before we get to the actual recipe, let’s chat for a sec about the ingredients. To make this pho soup recipe, you will need:", - imageSrc: 'https://user-images.githubusercontent.com/76729908/132159257-f92574c7-d00d-4142-8ea7-0ca9515fb737.png' + imageSrc: 'https://user-images.githubusercontent.com/76729908/132159257-f92574c7-d00d-4142-8ea7-0ca9515fb737.png', + slug: "special-recipe-of-vietnamese-pho" }, { title: "Original Recipe of Curry", description: "Chicken curry is common to several countries including India, countries in Asia and the Caribbean. My favorite of them though is this aromatic Indian...", - imageSrc: 'https://user-images.githubusercontent.com/76729908/132159259-ae4c986d-ab53-4758-9137-d06bafdd15d0.png' + imageSrc: 'https://user-images.githubusercontent.com/76729908/132159259-ae4c986d-ab53-4758-9137-d06bafdd15d0.png', + slug:"original-recipe-of-curry" }, { title: "The Best Recipe of Beef Noodle Soup", description: "The broth for Bun Bo Hue is prepared by slowly simmering various types of beef and pork bones (ox tail, beef shank, pork neck bones, pork feet,...", - imageSrc: 'https://user-images.githubusercontent.com/76729908/132159262-f28a9fb9-4852-47e6-80b5-d600521b548a.png' + imageSrc: 'https://user-images.githubusercontent.com/76729908/132159262-f28a9fb9-4852-47e6-80b5-d600521b548a.png', + slug:"the-best-recipe-of-beef-noodle-soup" }, ] \ No newline at end of file diff --git a/src/utils/types.utils.ts b/src/utils/types.utils.ts index d6f1b47ad..90fa547c3 100644 --- a/src/utils/types.utils.ts +++ b/src/utils/types.utils.ts @@ -20,6 +20,7 @@ export interface FeaturedProductProps { export interface RecipeProps { title: string + slug: string description: string imageSrc: string } diff --git a/tsconfig.json b/tsconfig.json index 6a08e59f8..316d817b7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,6 @@ "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, - "isolatedModules": true, "jsx": "preserve", "incremental": true, "noUnusedLocals": true, @@ -26,7 +25,8 @@ "@commerce/*": ["framework/commerce/*"], "@framework": ["framework/vendure"], "@framework/*": ["framework/vendure/*"] - } + }, + "isolatedModules": true }, "include": ["next-env.d.ts", "**/*.d.ts", "**/*.ts", "**/*.tsx", "**/*.js"], "exclude": [