summaryrefslogtreecommitdiff
path: root/src/pages
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-11-11 15:26:55 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-11-11 15:26:55 +0700
commitc1ef10e3655904f4fe5b085460a89dc5c5a774cb (patch)
tree11b17b71714966c54e0ae7efb06136d77e6e05a7 /src/pages
parent2e1c0fb77932bdd0681f8d7c9cfd292a9ac52b3b (diff)
parentbf668785232e2d7abba1660dfdb6eb2746adc09a (diff)
Merge branch 'new-release' into CR/new_product_detail
# Conflicts: # src/lib/product/components/Product/ProductDesktopVariant.jsx
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/api/shop/search.js9
-rw-r--r--src/pages/api/shop/url-category_brand.js20
-rw-r--r--src/pages/garansi-resmi.jsx13
-rw-r--r--src/pages/pembayaran-tempo.jsx13
-rw-r--r--src/pages/shop/find/[slug].jsx69
-rw-r--r--src/pages/sitemap/categories-brand.xml.js35
-rw-r--r--src/pages/sitemap/categories-brand/[page].js43
7 files changed, 199 insertions, 3 deletions
diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js
index 49a5fe69..ace281f7 100644
--- a/src/pages/api/shop/search.js
+++ b/src/pages/api/shop/search.js
@@ -88,7 +88,10 @@ export default async function handler(req, res) {
'price_tier1_v2_f:[1 TO *]',
];
- const fq_ = filterQueries.join('AND ');
+ if (fq && source != 'similar') {
+ filterQueries.push(fq);
+ }
+ const fq_ = filterQueries.join(' AND ');
let offset = (page - 1) * limit;
let parameter = [
@@ -106,7 +109,7 @@ export default async function handler(req, res) {
: formattedQuery
}`,
`defType=edismax`,
- 'qf=name_s description_clean_t category_name manufacture_name_s variants_code_t variants_name_t category_id_ids default_code_s',
+ 'qf=name_s description_clean_t category_name manufacture_name_s variants_code_t variants_name_t category_id_ids default_code_s manufacture_id_i category_id_i ',
`start=${parseInt(offset)}`,
`rows=${limit}`,
`sort=${paramOrderBy}`,
@@ -149,7 +152,7 @@ export default async function handler(req, res) {
if (stock) parameter.push(`fq=stock_total_f:{1 TO *}`);
// Single fq in url params
- if (typeof fq === 'string') parameter.push(`fq=${encodeURIComponent(fq)}`);
+ // if (typeof fq === 'string') parameter.push(`fq=${encodeURIComponent(fq)}`);
// Multi fq in url params
if (Array.isArray(fq))
parameter = parameter.concat(
diff --git a/src/pages/api/shop/url-category_brand.js b/src/pages/api/shop/url-category_brand.js
new file mode 100644
index 00000000..160aa166
--- /dev/null
+++ b/src/pages/api/shop/url-category_brand.js
@@ -0,0 +1,20 @@
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ const { url = '', page = 1, limit = 30 } = req.query;
+
+ let offset = (page - 1) * limit;
+
+ const params = [`q.op=AND`, `q=${url ? `"${url}"` : '*'}`, `indent=true`, `rows=${limit}`, `start=${offset}`];
+
+ try {
+ let result = await axios(
+ process.env.SOLR_HOST +
+ `/solr/url_category_brand/select?` +
+ params.join('&')
+ );
+ res.status(200).json(result.data);
+ } catch (error) {
+ res.status(500).json({ error: 'Internal Server Error' });
+ }
+}
diff --git a/src/pages/garansi-resmi.jsx b/src/pages/garansi-resmi.jsx
new file mode 100644
index 00000000..7384a89d
--- /dev/null
+++ b/src/pages/garansi-resmi.jsx
@@ -0,0 +1,13 @@
+import Seo from '@/core/components/Seo'
+import BasicLayout from '@/core/components/layouts/BasicLayout'
+import IframeContent from '@/lib/iframe/components/IframeContent'
+
+export default function GaransiResmi() {
+ return (
+ <BasicLayout>
+ <Seo title='Garansi Resmi - Indoteknik.com' />
+
+ <IframeContent url={`${process.env.NEXT_PUBLIC_ODOO_HOST}/content?url=garansi-resmi`} />
+ </BasicLayout>
+ )
+}
diff --git a/src/pages/pembayaran-tempo.jsx b/src/pages/pembayaran-tempo.jsx
new file mode 100644
index 00000000..363e3099
--- /dev/null
+++ b/src/pages/pembayaran-tempo.jsx
@@ -0,0 +1,13 @@
+import Seo from '@/core/components/Seo'
+import BasicLayout from '@/core/components/layouts/BasicLayout'
+import IframeContent from '@/lib/iframe/components/IframeContent'
+
+export default function PembnayaranTempo() {
+ return (
+ <BasicLayout>
+ <Seo title='Pambayaran Tempo - Indoteknik.com' />
+
+ <IframeContent url={`${process.env.NEXT_PUBLIC_ODOO_HOST}/content?url=pembayaran-tempo`} />
+ </BasicLayout>
+ )
+}
diff --git a/src/pages/shop/find/[slug].jsx b/src/pages/shop/find/[slug].jsx
new file mode 100644
index 00000000..268b1e56
--- /dev/null
+++ b/src/pages/shop/find/[slug].jsx
@@ -0,0 +1,69 @@
+import axios from 'axios';
+import { useRouter } from 'next/router';
+import { useEffect, useState } from 'react';
+import Seo from '@/core/components/Seo';
+import dynamic from 'next/dynamic';
+import { get } from 'lodash-contrib';
+import { getIdFromSlug, getNameFromSlug } from '@/core/utils/slug';
+import { capitalizeEachWord } from '../../../utils/capializeFIrstWord';
+
+const BasicLayout = dynamic(() =>
+ import('@/core/components/layouts/BasicLayout')
+);
+const ProductSearch = dynamic(() =>
+ import('@/lib/product/components/ProductSearch')
+);
+
+const BASE_URL = 'https://indoteknik.com';
+export default function FindPage() {
+ const route = useRouter();
+ const qSlug = route?.query?.slug || null;
+ const url = BASE_URL + route.asPath.split('?')[0];
+ const [result, setResult] = useState(null);
+ const [query, setQuery] = useState(null);
+
+ const __slug = qSlug ? getNameFromSlug(route?.query?.slug) +' '+ getIdFromSlug(route?.query?.slug) : '';
+ const slug = capitalizeEachWord(__slug);
+
+ const getUrls = async (url) => {
+ try {
+ let response = await axios(
+ `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/url-category_brand?url=${url}`
+ );
+ let result = response?.data?.response?.docs[0] || null;
+ setResult(result);
+ } catch (error) {
+ console.error('Error fetching data:', error);
+ }
+ };
+
+ useEffect(() => {
+ getUrls(url);
+ }, []);
+
+ useEffect(() => {
+ if (result) {
+ let fq = `category_parent_ids:${result.category_id_i} AND manufacture_id_i:${result.brand_id_i}`;
+ setQuery({
+ fq: fq,
+ });
+ }
+ }, [result]);
+
+ return (
+ <BasicLayout>
+ <Seo
+ title={`Beli ${slug} Original & Harga Terjangkau - indoteknik.com`}
+ description={`Beli ${slug} Kirim Jakarta Surabaya Semarang Makassar Manado Denpasar Balikpapan Medan Palembang Lampung Bali Bandung Makassar Manado.`}
+ additionalMetaTags={[
+ {
+ property: 'keywords',
+ content: `Beli ${slug}, harga ${slug}, ${slug} murah, toko ${slug}, ${slug} jakarta, ${slug} surabaya`,
+
+ },
+ ]}
+ />
+ {query && <ProductSearch query={query} prefixUrl={`${route.asPath}`} />}
+ </BasicLayout>
+ );
+}
diff --git a/src/pages/sitemap/categories-brand.xml.js b/src/pages/sitemap/categories-brand.xml.js
new file mode 100644
index 00000000..b23363e9
--- /dev/null
+++ b/src/pages/sitemap/categories-brand.xml.js
@@ -0,0 +1,35 @@
+import productSearchApi from '@/lib/product/api/productSearchApi'
+import { create } from 'xmlbuilder'
+import _ from 'lodash-contrib'
+import axios from 'axios'
+
+export async function getServerSideProps({ res }) {
+ const baseUrl = process.env.SELF_HOST + '/sitemap/categories-brand'
+ const limit = 500
+ const categories = await axios(
+ `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/url-category_brand?limit=${limit}`
+ )
+ const pageCount = Math.ceil(categories.data.response.numFound / limit)
+ const pages = Array.from({ length: pageCount }, (_, i) => i + 1)
+ const sitemapIndex = create('sitemapindex', { encoding: 'UTF-8' }).att(
+ 'xmlns',
+ 'http://www.sitemaps.org/schemas/sitemap/0.9'
+ )
+
+ const date = new Date()
+ pages.forEach((page) => {
+ const sitemap = sitemapIndex.ele('sitemap')
+ sitemap.ele('loc', `${baseUrl}/${page}.xml`)
+ sitemap.ele('lastmod', date.toISOString().slice(0, 10))
+ })
+
+ res.setHeader('Content-Type', 'text/xml')
+ res.write(sitemapIndex.end())
+ res.end()
+
+ return { props: {} }
+}
+
+export default function SitemapProducts() {
+ return null
+}
diff --git a/src/pages/sitemap/categories-brand/[page].js b/src/pages/sitemap/categories-brand/[page].js
new file mode 100644
index 00000000..6b55e426
--- /dev/null
+++ b/src/pages/sitemap/categories-brand/[page].js
@@ -0,0 +1,43 @@
+
+import productSearchApi from '@/lib/product/api/productSearchApi'
+import { create } from 'xmlbuilder'
+import _ from 'lodash-contrib'
+import { createSlug } from '@/core/utils/slug'
+import axios from 'axios'
+
+export async function getServerSideProps({ query, res }) {
+ const baseUrl = process.env.SELF_HOST + '/shop/product/'
+ const { page } = query
+ const limit = 500
+ const categories = await axios(
+ `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/url-category_brand?limit=${limit}&page=${page.replace(
+ '.xml',
+ ''
+ )}`
+ )
+
+ const sitemap = create('urlset', { encoding: 'utf-8' }).att(
+ 'xmlns',
+ 'http://www.sitemaps.org/schemas/sitemap/0.9'
+ )
+
+ const date = new Date()
+ categories.data.response.docs.forEach((product) => {
+ const url = sitemap.ele('url')
+ const loc = product.url_s;
+ url.ele('loc', loc)
+ url.ele('lastmod', date.toISOString().slice(0, 10))
+ url.ele('changefreq', 'daily')
+ url.ele('priority', '0.8')
+ })
+
+ res.setHeader('Content-Type', 'text/xml')
+ res.write(sitemap.end())
+ res.end()
+
+ return { props: {} }
+}
+
+export default function SitemapProducts() {
+ return null
+}