@appbaseio/reactivesearch-vue
Version:
A Vue UI components library for building search experiences
72 lines (69 loc) • 2.42 kB
JavaScript
import { a as _extends } from './_rollupPluginBabelHelpers-5e8399d7.js';
import { h } from 'vue';
import { b as getCamelCase } from './index-3af85a74.js';
var deepValue = function deepValue(o, p) {
return p.split('.').reduce(function (a, v) {
return a ? a[v] : null;
}, o);
};
/**
* PreferencesConsumer reads the preferences from SearchPreferencesContext
* and set the props from preferences to the component
*
*/
var PreferencesConsumer = function PreferencesConsumer(component) {
return {
name: 'PreferencesConsumer',
inject: {
$searchPreferences: {
"default": null
}
},
render: function render() {
var _this = this;
var userProps = Object.keys(this.$attrs).reduce(function (result, key) {
var _extends2;
return _extends({}, result, (_extends2 = {}, _extends2[getCamelCase(key)] = _this.$attrs[key], _extends2));
}, {});
var context = this.$searchPreferences;
if (!userProps || !userProps.componentId) {
throw Error('ReactiveSearch: componentId is required');
}
var componentId = userProps.componentId;
var preferencesPath = userProps.preferencesPath;
var preferences;
if (context) {
if (preferencesPath) {
// read preferences from path
preferences = deepValue(context, preferencesPath);
} else {
preferences = deepValue(context, ['componentSettings', componentId].join('.'));
// read preferences from componentSettings
}
}
// Retrieve component specific preferences
var componentProps = userProps;
if (preferences) {
if (preferences.rsConfig) {
componentProps = _extends({}, preferences.rsConfig, componentProps);
} else {
componentProps = _extends({}, preferences, componentProps);
}
if (preferences.enabled !== undefined && !preferences.enabled) {
return null;
}
}
// Parse component props
Object.keys(componentProps).forEach(function (p) {
if (typeof componentProps[p] === 'string') {
if (['defaultQuery', 'customQuery', 'setOption'].includes(p)) {
// eslint-disable-next-line
componentProps[p] = eval(componentProps[p]);
}
}
});
return h(component, componentProps, this.$slots);
}
};
};
export { PreferencesConsumer as P };