From fb3be45e5246e588628723b3d4c0f901c8b260a2 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 25 Jan 2024 15:30:58 +0700 Subject: Update ready stock sort by sold qty --- src/pages/api/shop/search.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 576d028a..adb23511 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -32,7 +32,7 @@ export default async function handler(req, res) { paramOrderBy += 'search_rank_weekly_i DESC' break case 'stock': - paramOrderBy += 'stock_total_f DESC' + paramOrderBy += 'product_rating_f DESC, stock_total_f DESC' break case 'flashsale-price-asc': paramOrderBy += 'flashsale_price_f ASC' -- cgit v1.2.3 From 838f2c7f5790c10779cfd32944c52f75713a4a05 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 25 Jan 2024 16:05:26 +0700 Subject: Add scroll to top component --- src/core/components/ScrollToTop.jsx | 24 ++++++++++++++++++++++++ src/pages/_app.jsx | 5 +++++ 2 files changed, 29 insertions(+) create mode 100644 src/core/components/ScrollToTop.jsx (limited to 'src') diff --git a/src/core/components/ScrollToTop.jsx b/src/core/components/ScrollToTop.jsx new file mode 100644 index 00000000..f8e85167 --- /dev/null +++ b/src/core/components/ScrollToTop.jsx @@ -0,0 +1,24 @@ +import { useEffect } from 'react'; +import { useRouter } from 'next/router'; + +const ScrollToTop = () => { + const router = useRouter(); + + useEffect(() => { + const handleRouteChange = (url, { shallow }) => { + if (!shallow) { + window.scrollTo(0, 0); + } + }; + + router.events.on('routeChangeComplete', handleRouteChange); + + return () => { + router.events.off('routeChangeComplete', handleRouteChange); + }; + }, [router.events]); + + return null; +}; + +export default ScrollToTop; diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx index 9067fd03..e2190fda 100644 --- a/src/pages/_app.jsx +++ b/src/pages/_app.jsx @@ -35,6 +35,9 @@ const LogoSpinner = dynamic( () => import('@/core/components/elements/Spinner/LogoSpinner'), { ssr: false } ); +const ScrollToTop = dynamic(() => import('@/core/components/ScrollToTop'), { + ssr: false, +}); const Toaster = dynamic( () => import('react-hot-toast').then((mod) => mod.Toaster), { ssr: false } @@ -80,6 +83,8 @@ function MyApp({ Component, pageProps: { session, ...pageProps } }) { return ( + + {animateLoader && ( Date: Thu, 25 Jan 2024 17:29:28 +0700 Subject: Update document header --- src/pages/_document.jsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/pages/_document.jsx b/src/pages/_document.jsx index fc9f2ee0..cd60bd89 100644 --- a/src/pages/_document.jsx +++ b/src/pages/_document.jsx @@ -8,9 +8,19 @@ export default function MyDocument() { + + + + + + + - + + + + -- cgit v1.2.3 From 6a4592828aef751d40877e828ffc89780cbfd04d Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Fri, 26 Jan 2024 16:41:29 +0700 Subject: Fix brand search api --- src/pages/api/shop/brands.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/pages/api/shop/brands.js b/src/pages/api/shop/brands.js index 8c608b5e..cc64a7e7 100644 --- a/src/pages/api/shop/brands.js +++ b/src/pages/api/shop/brands.js @@ -16,7 +16,7 @@ export default async function handler(req, res) { params = 'level_s:prioritas'; break; case 'search': - params = `name_s:${req?.query?.q.toLowerCase()}`; + params = `name_s:"${req?.query?.q.toLowerCase()}"`; sort = ''; rows = 1; break; -- cgit v1.2.3 From e35595250f9e0408e23d1da3ac30ac1179e2a376 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Sat, 27 Jan 2024 11:46:36 +0700 Subject: Refactor layout --- .../components/elements/Navbar/NavbarDesktop.jsx | 33 +- .../components/elements/Navbar/NavbarMobile.jsx | 12 +- src/core/components/layouts/BasicLayout.jsx | 5 +- src/pages/_app.jsx | 1 + src/styles/normalize.css | 351 +++++++++++++++++++++ 5 files changed, 377 insertions(+), 25 deletions(-) create mode 100644 src/styles/normalize.css (limited to 'src') diff --git a/src/core/components/elements/Navbar/NavbarDesktop.jsx b/src/core/components/elements/Navbar/NavbarDesktop.jsx index 9bcd4df2..d1ff2d58 100644 --- a/src/core/components/elements/Navbar/NavbarDesktop.jsx +++ b/src/core/components/elements/Navbar/NavbarDesktop.jsx @@ -1,29 +1,30 @@ +import { useProductContext } from '@/contexts/ProductContext'; +import useAuth from '@/core/hooks/useAuth'; +import { getCountCart } from '@/core/utils/cart'; +import { createSlug } from '@/core/utils/slug'; +import whatsappUrl from '@/core/utils/whatsappUrl'; +import IndoteknikLogo from '@/images/logo.png'; +import Cardheader from '@/lib/cart/components/Cartheader'; +import Category from '@/lib/category/components/Category'; import { ChevronDownIcon, - HeartIcon, - ShoppingCartIcon, DocumentCheckIcon, + HeartIcon, } from '@heroicons/react/24/outline'; -import Link from '../Link/Link'; +import dynamic from 'next/dynamic'; import Image from 'next/image'; +import { useRouter } from 'next/router'; +import { useEffect, useState } from 'react'; import DesktopView from '../../views/DesktopView'; -import dynamic from 'next/dynamic'; -import IndoteknikLogo from '@/images/logo.png'; -import Category from '@/lib/category/components/Category'; -import { useCallback, useContext, useEffect, useState } from 'react'; -import useAuth from '@/core/hooks/useAuth'; +import Link from '../Link/Link'; import NavbarUserDropdown from './NavbarUserDropdown'; -import { getCartApi, getCountCart } from '@/core/utils/cart'; -import whatsappUrl from '@/core/utils/whatsappUrl'; -import { useRouter } from 'next/router'; -import { getAuth, setAuth } from '@/core/utils/auth'; -import { createSlug, getIdFromSlug } from '@/core/utils/slug'; import { TopBannerSkeleton } from '../Skeleton/TopBannerSkeleton'; -import { useProductContext } from '@/contexts/ProductContext'; -import Cardheader from '@/lib/cart/components/Cartheader'; const Search = dynamic(() => import('./Search'), { ssr: false }); -const TopBanner = dynamic(() => import('./TopBanner'), { ssr: false }); +const TopBanner = dynamic(() => import('./TopBanner'), { + ssr: false, + loading: () => , +}); const NavbarDesktop = () => { const [isOpenCategory, setIsOpenCategory] = useState(false); diff --git a/src/core/components/elements/Navbar/NavbarMobile.jsx b/src/core/components/elements/Navbar/NavbarMobile.jsx index 92bd5627..bcf45e0a 100644 --- a/src/core/components/elements/Navbar/NavbarMobile.jsx +++ b/src/core/components/elements/Navbar/NavbarMobile.jsx @@ -1,16 +1,16 @@ -import Image from 'next/image'; -import MobileView from '../../views/MobileView'; -import Link from '../Link/Link'; +import useSidebar from '@/core/hooks/useSidebar'; +import { getCountCart } from '@/core/utils/cart'; +import IndoteknikLogo from '@/images/logo.png'; import { Bars3Icon, HeartIcon, ShoppingCartIcon, } from '@heroicons/react/24/outline'; -import useSidebar from '@/core/hooks/useSidebar'; import dynamic from 'next/dynamic'; -import IndoteknikLogo from '@/images/logo.png'; +import Image from 'next/image'; import { useEffect, useState } from 'react'; -import { getCart, getCountCart } from '@/core/utils/cart'; +import MobileView from '../../views/MobileView'; +import Link from '../Link/Link'; // import TopBanner from './TopBanner'; const Search = dynamic(() => import('./Search')); diff --git a/src/core/components/layouts/BasicLayout.jsx b/src/core/components/layouts/BasicLayout.jsx index 13cdfc86..b6e2c59f 100644 --- a/src/core/components/layouts/BasicLayout.jsx +++ b/src/core/components/layouts/BasicLayout.jsx @@ -1,15 +1,14 @@ import dynamic from 'next/dynamic'; import Image from 'next/image'; import { useEffect, useState } from 'react'; -import axios from 'axios'; +import { useProductContext } from '@/contexts/ProductContext'; import whatsappUrl from '@/core/utils/whatsappUrl'; -import odooApi from '@/core/api/odooApi'; import { useRouter } from 'next/router'; -import { useProductContext } from '@/contexts/ProductContext'; const Navbar = dynamic(() => import('../elements/Navbar/Navbar'), { ssr: false, + loading: () =>
, }); const AnimationLayout = dynamic(() => import('./AnimationLayout'), { ssr: false, diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx index e2190fda..01dec611 100644 --- a/src/pages/_app.jsx +++ b/src/pages/_app.jsx @@ -1,5 +1,6 @@ import '@/fonts/Inter/inter.css'; import '@/styles/globals.css'; +import '@/styles/normalize.css'; // import 'react-loading-skeleton/dist/skeleton.css'; import { useEffect, useState } from 'react'; diff --git a/src/styles/normalize.css b/src/styles/normalize.css new file mode 100644 index 00000000..92aed47e --- /dev/null +++ b/src/styles/normalize.css @@ -0,0 +1,351 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type='button']::-moz-focus-inner, +[type='reset']::-moz-focus-inner, +[type='submit']::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type='button']:-moz-focusring, +[type='reset']:-moz-focusring, +[type='submit']:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type='checkbox'], +[type='radio'] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type='number']::-webkit-inner-spin-button, +[type='number']::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type='search'] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type='search']::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} -- cgit v1.2.3