addsearch-js-client
Version:
AddSearch API JavaScript client
197 lines • 6.44 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const util_1 = require("./util");
class SettingsManager {
constructor() {
this.settings = {
keyword: '*',
callback: null,
throttleTimeMs: 200,
fuzzy: 'auto',
paging: {
page: 1,
pageSize: 10,
sortBy: 'relevance',
sortOrder: 'desc'
},
customFieldFilters: [],
userToken: null,
suggestionsSize: 10,
facetFields: [],
autocomplete: {
size: 10
},
searchOperator: null,
enableLogicalOperators: false,
cacheResponseTime: null,
statsRequestIntercepted: false,
apiMethod: 'GET'
};
}
getSettings() {
return this.settings;
}
setKeyword(keyword) {
this.settings.keyword = keyword || '*';
}
setCallback(cb) {
this.settings.callback = cb;
}
setThrottleTime(delay) {
this.settings.throttleTimeMs = delay;
}
setSuggestionsPrefix(prefix) {
this.settings.suggestionsPrefix = prefix;
}
setSuggestionsSize(size) {
this.settings.suggestionsSize = size;
}
setAutocompleteSize(size) {
this.settings.autocomplete.size = size;
}
setAutocompleteParams(field, prefix) {
this.settings.autocomplete.field = field;
this.settings.autocomplete.prefix = prefix;
}
setLanguage(language) {
let languageIntlLocale;
if (Intl && Intl.Locale) {
try {
languageIntlLocale = new Intl.Locale(language).language;
}
catch (e) {
console.debug(e);
throw new Error(`Use an accepted language code provided by the ECMAScript Internationalization API (e.g., "en", "en-GB").`);
}
}
else {
languageIntlLocale = language;
}
if (languageIntlLocale && languageIntlLocale.length !== 2) {
throw new Error('Use a 2-char/4-char language code (e.g., "en", "en-GB")');
}
this.settings.lang = languageIntlLocale;
}
setFuzzyMatch(fuzzy) {
if (fuzzy !== true && fuzzy !== false && fuzzy !== 'auto' && fuzzy !== 'retry') {
throw new Error("Fuzzy matching can be true, false, 'auto', or 'retry'");
}
this.settings.fuzzy = fuzzy;
}
enableLogicalOperators(enable) {
this.settings.enableLogicalOperators = enable;
}
setCacheResponseTime(cacheResponseTime) {
this.settings.cacheResponseTime = cacheResponseTime;
}
setPostfixWildcard(wildcard) {
this.settings.postfixWildcard = wildcard;
}
setCollectAnalytics(collectAnalytics) {
this.settings.collectAnalytics = collectAnalytics;
}
setAnalyticsTag(tagName) {
this.settings.analyticsTag = tagName;
}
setCategoryFilters(categories) {
this.settings.categories = categories;
}
setFilterObject(filter) {
this.settings.filterObject = filter;
}
setPriceRangeFilter(minCents, maxCents) {
this.settings.priceFromCents = minCents;
this.settings.priceToCents = maxCents;
}
addCustomFieldFilter(fieldName, value) {
const filter = encodeURIComponent(`${fieldName}=${value}`);
if (!this.settings.customFieldFilters.includes(filter)) {
this.settings.customFieldFilters.push(filter);
}
}
removeCustomFieldFilter(fieldName, value) {
const removeAll = !value;
const filter = encodeURIComponent(`${fieldName}=${value || ''}`);
this.settings.customFieldFilters = this.settings.customFieldFilters.filter((v) => {
if (removeAll) {
return !v.startsWith(filter);
}
return v !== filter;
});
}
setDateFilter(dateFrom, dateTo) {
this.settings.dateFrom = dateFrom;
this.settings.dateTo = dateTo;
}
setJWT(jwt) {
this.settings.jwt = jwt;
}
setUserToken(token) {
this.settings.userToken = token;
}
setPersonalizationEvents(events) {
if (Array.isArray(events)) {
this.settings.personalizationEvents = events;
}
}
setResultType(type) {
this.settings.resultType = type;
}
addFacetField(field) {
if (!this.settings.facetFields.includes(field)) {
this.settings.facetFields.push(field);
}
}
addHierarchicalFacetSetting(setting) {
this.settings.hierarchicalFacetSetting = setting;
}
addRangeFacet(field, ranges) {
var _a;
var _b;
(_a = (_b = this.settings).rangeFacets) !== null && _a !== void 0 ? _a : (_b.rangeFacets = []);
this.settings.rangeFacets.push({ field, ranges });
}
addStatsField(field) {
var _a;
var _b;
(_a = (_b = this.settings).statsFields) !== null && _a !== void 0 ? _a : (_b.statsFields = []);
if (!this.settings.statsFields.includes(field)) {
this.settings.statsFields.push(field);
}
}
setNumberOfFacets(numFacets) {
this.settings.numFacets = numFacets;
}
setPaging(page, pageSize, sortBy, sortOrder) {
(0, util_1.validateSetPagingParams)(page, pageSize, sortBy, sortOrder);
this.settings.paging = { page, pageSize, sortBy, sortOrder };
}
setShuffleAndLimitTo(shuffleAndLimitTo) {
this.settings.shuffleAndLimitTo = shuffleAndLimitTo;
}
nextPage() {
this.settings.paging.page++;
}
previousPage() {
if (this.settings.paging.page > 0) {
this.settings.paging.page--;
}
}
setSearchOperator(operator) {
if (operator !== 'and' && operator !== 'or') {
throw new Error("Operator must be 'and' or 'or'");
}
this.settings.searchOperator = operator;
}
setStatsRequestIntercepted(isIntercepted) {
this.settings.statsRequestIntercepted = isIntercepted;
}
setApiMethod(method) {
if (method !== 'GET' && method !== 'POST') {
throw new Error("API method must be 'GET' or 'POST'");
}
this.settings.apiMethod = method;
}
}
exports.default = SettingsManager;
//# sourceMappingURL=settings.js.map
;