summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHATEC\SPVDEV001 <tri.susilo@altama.co.id>2024-01-30 09:05:07 +0700
committerHATEC\SPVDEV001 <tri.susilo@altama.co.id>2024-01-30 09:05:07 +0700
commit76e3eec8db414307cea6b11e3ebb461aed8e1e26 (patch)
tree4676144e36d87c51ad2da428ad97a9aebd3b98c1 /src
parentf7701abcbe05510c3672c4768df03fee535956e3 (diff)
parente35595250f9e0408e23d1da3ac30ac1179e2a376 (diff)
Merge branch 'release' of https://bitbucket.org/altafixco/next-indoteknik into release
Diffstat (limited to 'src')
-rw-r--r--src/core/components/ScrollToTop.jsx24
-rw-r--r--src/core/components/elements/Navbar/NavbarDesktop.jsx33
-rw-r--r--src/core/components/elements/Navbar/NavbarMobile.jsx12
-rw-r--r--src/core/components/layouts/BasicLayout.jsx5
-rw-r--r--src/pages/_app.jsx6
-rw-r--r--src/pages/_document.jsx12
-rw-r--r--src/pages/api/shop/brands.js2
-rw-r--r--src/pages/api/shop/search.js2
-rw-r--r--src/styles/normalize.css351
9 files changed, 419 insertions, 28 deletions
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/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: () => <TopBannerSkeleton />,
+});
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: () => <div className='h-[156px]' />,
});
const AnimationLayout = dynamic(() => import('./AnimationLayout'), {
ssr: false,
diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx
index 9067fd03..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';
@@ -35,6 +36,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 +84,8 @@ function MyApp({ Component, pageProps: { session, ...pageProps } }) {
return (
<SessionProvider session={session}>
+ <ScrollToTop />
+
<AnimatePresence>
{animateLoader && (
<motion.div
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() {
<Html>
<Head>
<link rel='preconnect' href='https://connect.facebook.net' />
+ <link rel='dns-prefetch' href='https://connect.facebook.net' />
+
<link rel='preconnect' href='https://googleads.g.doubleclick.net' />
+ <link rel='dns-prefetch' href='https://googleads.g.doubleclick.net' />
+
+ <link rel='preconnect' href='https://www.googletagmanager.com' />
+ <link rel='dns-prefetch' href='https://www.googletagmanager.com' />
+
<link rel='preconnect' href={process.env.NEXT_PUBLIC_ODOO_API_HOST} />
- <link rel='prefetch' href='/images/logo-indoteknik-gear.png' />
+ <link rel='dns-prefetch' href={process.env.NEXT_PUBLIC_ODOO_API_HOST} />
+
+ <link rel='preconnect' href='/images/logo-indoteknik-gear.png' />
+ <link rel='dns-prefetch' href='/images/logo-indoteknik-gear.png' />
<link rel='icon' href='/favicon.ico' />
<link rel='manifest' href='/manifest.json' />
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;
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'
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;
+}