UNPKG

@appbaseio/reactivesearch-vue

Version:

A Vue UI components library for building search experiences

74 lines (70 loc) 2.54 kB
'use strict'; 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;