UNPKG

@unchainedshop/plugins

Version:

Official plugin collection for the Unchained Engine with payment, delivery, and pricing adapters

67 lines (66 loc) 2.59 kB
import { FilterDirector, FilterAdapter } from '@unchainedshop/core'; import { createLogger } from '@unchainedshop/logger'; import { isDocumentDBCompatModeEnabled } from '@unchainedshop/mongodb'; const logger = createLogger('unchained:local-search'); const LocalSearch = { ...FilterAdapter, key: 'shop.unchained.filters.local-search', label: 'Simple Fulltext search with MongoDB', version: '1.0.0', orderIndex: 10, actions: (params) => { return { ...FilterAdapter.actions(params), searchProducts: async ({ productIds }) => { const { queryString } = params.searchQuery; if (!queryString) return productIds; const products = await params.modules.products.texts.findTexts({ queryString, productIds: productIds ? [...new Set(productIds)] : undefined, }, { projection: { productId: 1, }, }); return products.map(({ productId }) => productId); }, searchAssortments: async ({ assortmentIds }) => { const { queryString } = params.searchQuery; if (!queryString) { return assortmentIds; } const assortments = await params.modules.assortments.texts.findTexts({ queryString, assortmentIds, }, { projection: { assortmentId: 1, }, }); return assortments.map(({ assortmentId }) => assortmentId); }, async transformFilterSelector(last) { const { queryString, filterIds, includeInactive } = params.searchQuery; if (queryString && !filterIds) { const selector = { ...last }; if (selector?.key) { delete selector.key; } if (!includeInactive) { selector.isActive = true; } return selector; } return last; }, }; }, }; export default LocalSearch; if (!isDocumentDBCompatModeEnabled()) { FilterDirector.registerAdapter(LocalSearch); } else { logger.warn('Free text search queries have been disabled due to DocumentDB compatibility mode (env UNCHAINED_DOCUMENTDB_COMPAT_MODE is trueish)'); }