diff options
| -rw-r--r-- | src-migrate/modules/product-detail/components/ProductComparisonModal.tsx | 6 | ||||
| -rw-r--r-- | src/pages/api/magento-product.ts | 4 | ||||
| -rw-r--r-- | src/pages/api/shop/search.js | 17 |
3 files changed, 14 insertions, 13 deletions
diff --git a/src-migrate/modules/product-detail/components/ProductComparisonModal.tsx b/src-migrate/modules/product-detail/components/ProductComparisonModal.tsx index d9b0a436..b836c892 100644 --- a/src-migrate/modules/product-detail/components/ProductComparisonModal.tsx +++ b/src-migrate/modules/product-detail/components/ProductComparisonModal.tsx @@ -223,7 +223,6 @@ const ProductComparisonModal = ({ isOpen, onClose, mainProduct, selectedVariant // =========================================================================== useEffect(() => { const delayDebounceFn = setTimeout(async () => { - // Validasi panjang karakter (biarkan tetap minimal 3 agar tidak berat) if (searchQuery.length > 0 && searchQuery.length < 3) { setSearchResults([]); return; @@ -241,12 +240,9 @@ const ProductComparisonModal = ({ isOpen, onClose, mainProduct, selectedVariant setIsSearching(true); try { - // [FIX 1] Gunakan 'let' agar tidak error saat diubah nilainya let queryParam = '*'; if (searchQuery !== '') { - // [FITUR] Wildcard Search: Ubah "7 inc" menjadi "*7* *inc*" - // Ini membantu pencarian parsial (typo tolerance sederhana) const words = searchQuery.trim().split(/\s+/); queryParam = words.map(w => `*${w}*`).join(' '); } @@ -256,14 +252,12 @@ const ProductComparisonModal = ({ isOpen, onClose, mainProduct, selectedVariant q: queryParam, limit: '20', fq: `attribute_set_id_i:${attrSetId}`, - // [FIX 2] Matikan Grouping agar varian muncul terpisah group: 'false' }); const res = await fetch(`/api/shop/search?${params.toString()}`); if (res.ok) { const data = await res.json(); - // Ambil produk dari response setSearchResults(data.response?.products || []); } else { setSearchResults([]); diff --git a/src/pages/api/magento-product.ts b/src/pages/api/magento-product.ts index 551a4a5e..28738878 100644 --- a/src/pages/api/magento-product.ts +++ b/src/pages/api/magento-product.ts @@ -12,8 +12,8 @@ export default async function handler( return res.status(400).json({ error: 'SKUs are required' }); } - const token = 'vxrtcjvztv1icgjzsui45de9kmwlz0lf'; - const baseUrl = 'https://pimdev.1211.my.id/rest/V1'; + const token = process.env.MAGENTO_API_KEY || ''; + const baseUrl = process.env.MAGENTO_API_HOST || ''; try { const skuList = String(skus).split(','); // Contoh: ['221', '222', '223'] diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 37cfa1bd..89d75cd0 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -35,11 +35,14 @@ export default async function handler(req, res) { try { let qCompare = q === '*' ? '*:*' : q; - // Sanitasi Query if (qCompare !== '*:*') { - // Kita escape, tapi biarkan stringnya bersih (jangan ditambah wildcard * manual) - // karena kita serahkan ke 'edismax' parser qCompare = escapeSolrQuery(qCompare); + qCompare = qCompare.split(/\s+/).map(term => { + if (term && !term.includes('*')) { + return term + '*'; + } + return term; + }).join(' '); } // [SOLUSI] Gunakan URLSearchParams untuk menyusun URL dengan aman @@ -59,8 +62,12 @@ export default async function handler(req, res) { // 3. display_name_s^1 : Cadangan params.append('qf', 'default_code_s^20 search_keywords_t^10 display_name_s^1'); - // Minimum Match 100% (Semua kata harus ada), ubah jika ingin lebih longgar - params.append('mm', '100%'); + const compareWords = qCompare.split(/\s+/).filter(w => w.length > 0); + let compareMm = '100%'; + if (compareWords.length >= 3) { + compareMm = '75%'; + } + params.append('mm', compareMm); if (group === 'false') { params.append('group', 'false'); |
