diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/brand/components/Brands.jsx | 18 | ||||
| -rw-r--r-- | src/lib/home/components/PreferredBrand.jsx | 7 | ||||
| -rw-r--r-- | src/lib/home/hooks/usePreferredBrand.js | 13 | ||||
| -rw-r--r-- | src/pages/api/shop/brands.js | 44 |
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 + }) +} |
