createAutocomplete.js 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
  2. function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
  3. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  4. import { checkOptions } from './checkOptions';
  5. import { createStore } from './createStore';
  6. import { getAutocompleteSetters } from './getAutocompleteSetters';
  7. import { getDefaultProps } from './getDefaultProps';
  8. import { getPropGetters } from './getPropGetters';
  9. import { getMetadata, injectMetadata } from './metadata';
  10. import { onInput } from './onInput';
  11. import { stateReducer } from './stateReducer';
  12. export function createAutocomplete(options) {
  13. checkOptions(options);
  14. var subscribers = [];
  15. var props = getDefaultProps(options, subscribers);
  16. var store = createStore(stateReducer, props, onStoreStateChange);
  17. var setters = getAutocompleteSetters({
  18. store: store
  19. });
  20. var propGetters = getPropGetters(_objectSpread({
  21. props: props,
  22. refresh: refresh,
  23. store: store
  24. }, setters));
  25. function onStoreStateChange(_ref) {
  26. var prevState = _ref.prevState,
  27. state = _ref.state;
  28. props.onStateChange(_objectSpread({
  29. prevState: prevState,
  30. state: state,
  31. refresh: refresh
  32. }, setters));
  33. }
  34. function refresh() {
  35. return onInput(_objectSpread({
  36. event: new Event('input'),
  37. nextState: {
  38. isOpen: store.getState().isOpen
  39. },
  40. props: props,
  41. query: store.getState().query,
  42. refresh: refresh,
  43. store: store
  44. }, setters));
  45. }
  46. props.plugins.forEach(function (plugin) {
  47. var _plugin$subscribe;
  48. return (_plugin$subscribe = plugin.subscribe) === null || _plugin$subscribe === void 0 ? void 0 : _plugin$subscribe.call(plugin, _objectSpread(_objectSpread({}, setters), {}, {
  49. refresh: refresh,
  50. onSelect: function onSelect(fn) {
  51. subscribers.push({
  52. onSelect: fn
  53. });
  54. },
  55. onActive: function onActive(fn) {
  56. subscribers.push({
  57. onActive: fn
  58. });
  59. }
  60. }));
  61. });
  62. injectMetadata({
  63. metadata: getMetadata({
  64. plugins: props.plugins,
  65. options: options
  66. }),
  67. environment: props.environment
  68. });
  69. return _objectSpread(_objectSpread({
  70. refresh: refresh
  71. }, propGetters), setters);
  72. }