summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHATEC\SPVDEV001 <tri.susilo@altama.co.id>2023-09-25 16:48:25 +0700
committerHATEC\SPVDEV001 <tri.susilo@altama.co.id>2023-09-25 16:48:25 +0700
commit065a0e341cc42443fe5e2380e078983b3c66f111 (patch)
treeee778d9ca0c4c97dc7bb943e6d788814da11949f /src
parent4d329fbe4ecadd7864809f340d9e4f46d910e418 (diff)
migrasi get brand di homepage dan page all brand ke solr
Diffstat (limited to 'src')
-rw-r--r--src/lib/brand/components/Brands.jsx18
-rw-r--r--src/lib/home/components/PreferredBrand.jsx7
-rw-r--r--src/lib/home/hooks/usePreferredBrand.js13
-rw-r--r--src/pages/api/shop/brands.js44
4 files changed, 75 insertions, 7 deletions
diff --git a/src/lib/brand/components/Brands.jsx b/src/lib/brand/components/Brands.jsx
index c7483e40..ccdd134d 100644
--- a/src/lib/brand/components/Brands.jsx
+++ b/src/lib/brand/components/Brands.jsx
@@ -2,6 +2,7 @@ import odooApi from '@/core/api/odooApi'
import { useCallback, useEffect, useState } from 'react'
import BrandCard from './BrandCard'
import LogoSpinner from '@/core/components/elements/Spinner/LogoSpinner'
+import axios from 'axios'
const Brands = () => {
const alpha = Array.from(Array(26)).map((e, i) => i + 65)
@@ -13,13 +14,22 @@ const Brands = () => {
const loadBrand = useCallback(async () => {
setIsLoading(true)
- const name = startWith ? `${startWith}%` : ''
- const result = await odooApi(
+ const name = startWith ? `${startWith}*` : ''
+ //Get brand from odoo
+ /*const result = await odooApi(
'GET',
`/api/v1/manufacture?limit=0&offset=${manufactures.length}&name=${name}`
- )
+ )*/
+
+ // Change get brands from solr
+ let result = null
+ if (name) {
+ result = await axios(`${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/brands?params=${name}`)
+ } else {
+ result = await axios(`${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/brands`)
+ }
setIsLoading(false)
- setManufactures((manufactures) => [...manufactures, ...result.manufactures])
+ setManufactures((manufactures) => [...manufactures, ...result.data])
}, [startWith])
const toggleStartWith = (alphabet) => {
diff --git a/src/lib/home/components/PreferredBrand.jsx b/src/lib/home/components/PreferredBrand.jsx
index 55abe0b7..0b80bcf1 100644
--- a/src/lib/home/components/PreferredBrand.jsx
+++ b/src/lib/home/components/PreferredBrand.jsx
@@ -6,7 +6,10 @@ import useDevice from '@/core/hooks/useDevice'
import Link from '@/core/components/elements/Link/Link'
const PreferredBrand = () => {
- const { preferredBrands } = usePreferredBrand()
+ let query = 'level_s'
+ let params = 'prioritas'
+ const { preferredBrands } = usePreferredBrand(query, params)
+ console.log('ini brands level', preferredBrands?.data?.data)
const { isMobile, isDesktop } = useDevice()
return (
@@ -22,7 +25,7 @@ const PreferredBrand = () => {
{preferredBrands.isLoading && <PreferredBrandSkeleton />}
{!preferredBrands.isLoading && (
<Swiper slidesPerView={isMobile ? 3.5 : 7.5} spaceBetween={isMobile ? 12 : 24} freeMode>
- {preferredBrands.data?.manufactures.map((brand) => (
+ {preferredBrands.data?.data.map((brand) => (
<SwiperSlide key={brand.id}>
<BrandCard brand={brand} />
</SwiperSlide>
diff --git a/src/lib/home/hooks/usePreferredBrand.js b/src/lib/home/hooks/usePreferredBrand.js
index e56d361f..d2f2bcf1 100644
--- a/src/lib/home/hooks/usePreferredBrand.js
+++ b/src/lib/home/hooks/usePreferredBrand.js
@@ -1,3 +1,4 @@
+import axios from 'axios'
import preferredBrandApi from '../api/preferredBrandApi'
import { useQuery } from 'react-query'
@@ -10,4 +11,14 @@ const usePreferredBrand = () => {
}
}
-export default usePreferredBrand
+const GetBrands = (query, params) => {
+ const fetchingbrand = async () =>
+ await axios(`${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/brands?params=` + query)
+
+ const { data, isLoading } = useQuery('preferredBrand', fetchingbrand)
+ return {
+ preferredBrands: { data, isLoading }
+ }
+}
+
+export default GetBrands
diff --git a/src/pages/api/shop/brands.js b/src/pages/api/shop/brands.js
new file mode 100644
index 00000000..e4619d15
--- /dev/null
+++ b/src/pages/api/shop/brands.js
@@ -0,0 +1,44 @@
+import axios from 'axios'
+
+export default async function handler(req, res) {
+ try {
+ let params = '*:*'
+ let sort = 'sort=if(exists(sequence_i),0,1) asc,sequence_i asc'
+ let rows = 2000
+
+ if (req.query.params) {
+ rows = 100
+ switch (req?.query?.params) {
+ case 'level_s':
+ params = 'level_s:prioritas'
+ break
+ default:
+ params = `name_s:${req.query.params}`
+ }
+ }
+ let brands = await axios(
+ process.env.SOLR_HOST +
+ `/solr/brands/select?q=${params}&q.op=OR&indent=true&rows=${rows}&${sort}`
+ )
+
+ let dataBrands = responseMap(brands.data.response.docs)
+
+ res.status(200).json(dataBrands)
+ } catch (error) {
+ console.error('Error fetching data from Solr:', error)
+ res.status(500).json({ error: 'Internal Server Error' })
+ }
+}
+
+const responseMap = (brands) => {
+ return brands.map((brand) => {
+ let brandMapping = {
+ id: brand.id,
+ name: brand.display_name_s,
+ logo: brand.image_s || '',
+ sequance: brand.sequence_i || ''
+ }
+
+ return brandMapping
+ })
+}