UNPKG

@checksub_team/react-widgets

Version:
254 lines (208 loc) 8.88 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireDefault(require("react")); var _reactDom = require("react-dom"); var CustomPropTypes = _interopRequireWildcard(require("./util/PropTypes")); var Props = _interopRequireWildcard(require("./util/Props")); var _widgetHelpers = require("./util/widgetHelpers"); var _reduceToListState = require("./util/reduceToListState"); var _Listbox = _interopRequireDefault(require("./Listbox")); var _ListOption = _interopRequireDefault(require("./ListOption")); var _ListOptionGroup = _interopRequireDefault(require("./ListOptionGroup")); var _messages = require("./messages"); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } var EMPTY_DATA_STATE = {}; var propTypes = { data: _propTypes.default.array, dataState: _propTypes.default.shape({ sortedKeys: _propTypes.default.array, groups: _propTypes.default.object, data: _propTypes.default.array, sequentialData: _propTypes.default.array }), valueAccessor: CustomPropTypes.accessor, textAccessor: CustomPropTypes.accessor, onSelect: _propTypes.default.func, onMove: _propTypes.default.func, activeId: _propTypes.default.string, itemComponent: CustomPropTypes.elementType, groupComponent: CustomPropTypes.elementType, optionComponent: CustomPropTypes.elementType, renderItem: _propTypes.default.func, renderGroup: _propTypes.default.func, focusedItem: _propTypes.default.any, selectedItem: _propTypes.default.any, searchTerm: _propTypes.default.string, isDisabled: _propTypes.default.func.isRequired, messages: _propTypes.default.shape({ emptyList: _propTypes.default.func.isRequired }), translate: _propTypes.default.string }; var defaultProps = { onSelect: function onSelect() {}, data: [], dataState: EMPTY_DATA_STATE, optionComponent: _ListOption.default }; var List = /*#__PURE__*/ function (_React$Component) { _inheritsLoose(List, _React$Component); function List() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; _this.renderItem = function (_ref) { var item = _ref.item, rest = _objectWithoutProperties(_ref, ["item"]); var _this$props = _this.props, isDisabled = _this$props.isDisabled, renderItem = _this$props.renderItem, textAccessor = _this$props.textAccessor, valueAccessor = _this$props.valueAccessor; var Component = _this.props.itemComponent; if (renderItem) { return renderItem(_extends({ item: item }, rest)); } else if (Component) { return _react.default.createElement(Component, _extends({ item: item, value: valueAccessor(item), text: textAccessor(item), disabled: isDisabled(item) }, rest)); } return textAccessor(item); }; _this.renderGroup = function (group) { var _this$props2 = _this.props, renderGroup = _this$props2.renderGroup, Component = _this$props2.groupComponent; if (renderGroup) { return renderGroup({ group: group }); } else if (Component) { return _react.default.createElement(Component, { item: group }); } return group; }; return _this; } var _proto = List.prototype; _proto.componentDidMount = function componentDidMount() { this.move(); }; _proto.componentDidUpdate = function componentDidUpdate() { this.move(); }; _proto.mapItems = function mapItems(fn) { var _this$props3 = this.props, data = _this$props3.data, dataState = _this$props3.dataState; var sortedKeys = dataState.sortedKeys, groups = dataState.groups; if (!groups) return data.map(function (item, idx) { return fn(item, idx, false); }); var idx = -1; return sortedKeys.reduce(function (items, key) { var group = groups[key]; return items.concat(fn(key, idx, true), group.map(function (item) { return fn(item, ++idx, false); })); }, []); }; _proto.move = function move() { var _this$props4 = this.props, focusedItem = _this$props4.focusedItem, onMove = _this$props4.onMove, data = _this$props4.data, dataState = _this$props4.dataState; var list = (0, _reactDom.findDOMNode)(this); var idx = renderedIndexOf(focusedItem, list, data, dataState); var selectedItem = list.children[idx]; if (selectedItem) (0, _widgetHelpers.notify)(onMove, [selectedItem, list, focusedItem]); }; _proto.renderOption = function renderOption(item, index) { var _this$props5 = this.props, activeId = _this$props5.activeId, focusedItem = _this$props5.focusedItem, selectedItem = _this$props5.selectedItem, onSelect = _this$props5.onSelect, isDisabled = _this$props5.isDisabled, searchTerm = _this$props5.searchTerm, translate = _this$props5.translate, Option = _this$props5.optionComponent; var isFocused = focusedItem === item; return _react.default.createElement(Option, { dataItem: item, key: 'item_' + index, index: index, activeId: activeId, focused: isFocused, onSelect: onSelect, disabled: isDisabled(item), selected: selectedItem === item, translate: translate }, this.renderItem({ item: item, index: index, searchTerm: searchTerm })); }; _proto.render = function render() { var _this2 = this; var _this$props6 = this.props, className = _this$props6.className, messages = _this$props6.messages; var elementProps = Props.pickElementProps(this); var _getMessages = (0, _messages.getMessages)(messages), emptyList = _getMessages.emptyList; return _react.default.createElement(_Listbox.default, _extends({}, elementProps, { className: className, emptyListMessage: emptyList(this.props) }), this.mapItems(function (item, idx, isHeader) { return isHeader ? _react.default.createElement(_ListOptionGroup.default, { key: 'group_' + item, group: item }, _this2.renderGroup(item)) : _this2.renderOption(item, idx); })); }; return List; }(_react.default.Component); List.getDataState = _reduceToListState.defaultGetDataState; function renderedIndexOf(item, list, data, dataState) { var groups = dataState.groups, sortedKeys = dataState.sortedKeys; if (!groups) return data.indexOf(item); var runningIdx = -1; var idx = -1; sortedKeys.some(function (group) { var itemIdx = groups[group].indexOf(item); runningIdx++; if (itemIdx !== -1) { idx = runningIdx + itemIdx + 1; return true; } runningIdx += groups[group].length; }); return idx; } List.propTypes = propTypes; List.defaultProps = defaultProps; var _default = List; exports.default = _default; module.exports = exports["default"];