@unchainedshop/plugins
Version:
Official plugin collection for the Unchained Engine with payment, delivery, and pricing adapters
67 lines (66 loc) • 2.59 kB
JavaScript
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)');
}