reakit
Version:
Toolkit for building accessible rich web apps with React
134 lines (117 loc) • 5.5 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var _rollupPluginBabelHelpers = require('../_rollupPluginBabelHelpers-8f9a8751.js');
var createComponent = require('reakit-system/createComponent');
var createHook = require('reakit-system/createHook');
require('reakit-utils/shallowEqual');
var Box_Box = require('../Box/Box.js');
var React = require('react');
require('reakit-utils/useForkRef');
require('reakit-utils/isButton');
require('reakit-warning');
var useLiveRef = require('reakit-utils/useLiveRef');
require('reakit-utils/isSelfTarget');
require('reakit-utils/useIsomorphicEffect');
require('reakit-utils/hasFocusWithin');
require('reakit-utils/isPortalEvent');
require('reakit-utils/dom');
require('reakit-utils/tabbable');
require('../Role/Role.js');
require('../Tabbable/Tabbable.js');
require('../Clickable/Clickable.js');
require('reakit-utils/getDocument');
require('../getCurrentId-eade2850.js');
require('../__keys-3b597476.js');
require('../userFocus-0afea51a.js');
var __keys = require('../__keys-a7141fdd.js');
require('reakit-utils/isTextField');
require('reakit-utils/ensureFocus');
require('../Id/IdProvider.js');
require('../Id/Id.js');
require('reakit-utils/fireEvent');
require('../setTextFieldValue-b0584ae1.js');
var Composite_CompositeItem = require('../Composite/CompositeItem.js');
function kebabCase(string) {
return string.toLowerCase().replace(/[^a-z0-9]/g, "-");
}
function getItemId(baseId, value, id) {
return id || baseId + "-" + kebabCase(value);
}
var unstable_useComboboxItem = createHook.createHook({
name: "ComboboxItem",
compose: Box_Box.useBox,
keys: __keys.COMBOBOX_ITEM_KEYS,
propsAreEqual: function propsAreEqual(prev, next) {
if (prev.value !== next.value) return false;
if (!prev.value || !next.value || !prev.baseId || !next.baseId) {
return Composite_CompositeItem.useCompositeItem.unstable_propsAreEqual(prev, next);
}
var prevCurrentValue = prev.currentValue,
prevInputValue = prev.inputValue,
prevMatches = prev.matches,
prevProps = _rollupPluginBabelHelpers._objectWithoutPropertiesLoose(prev, ["currentValue", "inputValue", "matches"]);
var nextCurrentValue = next.currentValue,
nextInputValue = next.inputValue,
nextMatches = next.matches,
nextProps = _rollupPluginBabelHelpers._objectWithoutPropertiesLoose(next, ["currentValue", "inputValue", "matches"]);
if (prevCurrentValue !== nextCurrentValue) {
if (next.value === prevCurrentValue || next.value === nextCurrentValue) {
return false;
}
}
var prevId = getItemId(prev.baseId, prev.value, prev.id);
var nextId = getItemId(next.baseId, next.value, prev.id);
return Composite_CompositeItem.useCompositeItem.unstable_propsAreEqual(_rollupPluginBabelHelpers._objectSpread2(_rollupPluginBabelHelpers._objectSpread2({}, prevProps), {}, {
id: prevId
}), _rollupPluginBabelHelpers._objectSpread2(_rollupPluginBabelHelpers._objectSpread2({}, nextProps), {}, {
id: nextId
}));
},
useOptions: function useOptions(options) {
var trulyDisabled = options.disabled && !options.focusable;
var value = trulyDisabled ? undefined : options.value;
var registerItem = React.useCallback(function (item) {
if (options.visible) {
var _options$registerItem;
(_options$registerItem = options.registerItem) === null || _options$registerItem === void 0 ? void 0 : _options$registerItem.call(options, _rollupPluginBabelHelpers._objectSpread2(_rollupPluginBabelHelpers._objectSpread2({}, item), {}, {
value: value
}));
}
}, [options.registerItem, options.visible, value]);
if (options.id || !options.baseId || !options.value) {
return _rollupPluginBabelHelpers._objectSpread2(_rollupPluginBabelHelpers._objectSpread2({}, options), {}, {
registerItem: registerItem
});
}
var id = getItemId(options.baseId, options.value, options.id);
return _rollupPluginBabelHelpers._objectSpread2(_rollupPluginBabelHelpers._objectSpread2({}, options), {}, {
registerItem: registerItem,
id: id
});
},
useProps: function useProps(options, _ref) {
var htmlOnClick = _ref.onClick,
htmlProps = _rollupPluginBabelHelpers._objectWithoutPropertiesLoose(_ref, ["onClick"]);
var onClickRef = useLiveRef.useLiveRef(htmlOnClick);
var onClick = React.useCallback(function (event) {
var _onClickRef$current, _options$hide, _options$setInputValu;
(_onClickRef$current = onClickRef.current) === null || _onClickRef$current === void 0 ? void 0 : _onClickRef$current.call(onClickRef, event);
if (event.defaultPrevented) return;
if (!options.value) return;
(_options$hide = options.hide) === null || _options$hide === void 0 ? void 0 : _options$hide.call(options);
(_options$setInputValu = options.setInputValue) === null || _options$setInputValu === void 0 ? void 0 : _options$setInputValu.call(options, options.value);
}, [options.hide, options.setInputValue, options.value]);
return _rollupPluginBabelHelpers._objectSpread2({
children: options.value,
onClick: onClick,
tabIndex: -1
}, htmlProps);
}
});
var unstable_ComboboxItem = createComponent.createComponent({
as: "span",
memo: true,
useHook: unstable_useComboboxItem
});
exports.unstable_ComboboxItem = unstable_ComboboxItem;
exports.unstable_useComboboxItem = unstable_useComboboxItem;