@appbaseio/reactivesearch-vue
Version:
A Vue UI components library for building search experiences
74 lines (70 loc) • 2.54 kB
JavaScript
;
var _rollupPluginBabelHelpers = require('./_rollupPluginBabelHelpers-1a877b17.js');
var vue = require('vue');
var index = require('./index-7ca9570e.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 _rollupPluginBabelHelpers._extends({}, result, (_extends2 = {}, _extends2[index.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 = _rollupPluginBabelHelpers._extends({}, preferences.rsConfig, componentProps);
} else {
componentProps = _rollupPluginBabelHelpers._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 vue.h(component, componentProps, this.$slots);
}
};
};
exports.PreferencesConsumer = PreferencesConsumer;