UNPKG

10.1 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _filter2 = require('ramda/src/filter');
8
9var _filter3 = _interopRequireDefault(_filter2);
10
11var _map2 = require('ramda/src/map');
12
13var _map3 = _interopRequireDefault(_map2);
14
15var _fromPairs2 = require('ramda/src/fromPairs');
16
17var _fromPairs3 = _interopRequireDefault(_fromPairs2);
18
19var _compose2 = require('ramda/src/compose');
20
21var _compose3 = _interopRequireDefault(_compose2);
22
23var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
24
25var _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; };
26
27var _templateObject = _taggedTemplateLiteral(['\n border-radius: 0 0 0.28571429rem 0.28571429rem;\n background: #fff;\n margin: 0 0 0;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.08);\n border: 1px solid rgba(34, 36, 38, 0.15);\n'], ['\n border-radius: 0 0 0.28571429rem 0.28571429rem;\n background: #fff;\n margin: 0 0 0;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.08);\n border: 1px solid rgba(34, 36, 38, 0.15);\n']);
28
29var _react = require('react');
30
31var _react2 = _interopRequireDefault(_react);
32
33var _downshift = require('downshift');
34
35var _downshift2 = _interopRequireDefault(_downshift);
36
37var _semanticUiReact = require('semantic-ui-react');
38
39var _reactVirtualized = require('react-virtualized');
40
41var _styledComponents = require('styled-components');
42
43var _styledComponents2 = _interopRequireDefault(_styledComponents);
44
45var _PortaledPopper = require('../popper-utils/PortaledPopper');
46
47var _PortaledPopper2 = _interopRequireDefault(_PortaledPopper);
48
49function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
50
51function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
52
53function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
54
55function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
56
57function _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
58// import PortaledPopper from '@integec/grid-tools/lib/PortaledPopper'
59
60
61var matches = function matches(inputValue, val) {
62 var i = typeof val === 'string' ? val : val + '';
63 return !inputValue || i.toLowerCase().includes(inputValue.toLowerCase());
64};
65
66var ListContainer = (0, _styledComponents2.default)(_reactVirtualized.List)(_templateObject);
67
68var toMap = (0, _compose3.default)(_fromPairs3.default, (0, _map3.default)(function (_ref) {
69 var text = _ref.text,
70 value = _ref.value;
71 return [value + '', text];
72}));
73
74var rowRenderer = function rowRenderer(_ref2) {
75 var options = _ref2.options,
76 getItemProps = _ref2.getItemProps,
77 highlightedIndex = _ref2.highlightedIndex,
78 selectedItem = _ref2.selectedItem;
79 return function (_ref3) {
80 var key = _ref3.key,
81 index = _ref3.index,
82 isScrolling = _ref3.isScrolling,
83 isVisible = _ref3.isVisible,
84 style = _ref3.style;
85
86 var _ref4 = options[index] || {},
87 value = _ref4.value,
88 text = _ref4.text;
89
90 if (!isVisible) return null;
91
92 var itemStyle = _extends({
93 backgroundColor: highlightedIndex === index ? '#eee' : 'white',
94 fontWeight: selectedItem === value ? 'bold' : 'normal',
95 padding: '0.5em 1.2em',
96 cursor: 'pointer'
97 }, style);
98 return _react2.default.createElement(
99 'div',
100 getItemProps({ index: index, item: value, key: key, style: itemStyle }),
101 text
102 );
103 };
104};
105
106// return (
107// <div style={style} className={className}>
108// {isOpen && (
109// referenceElement={this.input}
110// render={}
111// />
112// )}
113// </div>
114// )
115
116var renderPopper = function renderPopper(_ref5) {
117 var dropdownMenuWidth = _ref5.dropdownMenuWidth,
118 rowHeight = _ref5.rowHeight,
119 filteredOptions = _ref5.filteredOptions,
120 getItemProps = _ref5.getItemProps,
121 highlightedIndex = _ref5.highlightedIndex,
122 selectedItem = _ref5.selectedItem;
123 return function (_ref6) {
124 var ref = _ref6.ref,
125 style = _ref6.style;
126 return _react2.default.createElement(
127 'div',
128 { ref: ref, style: _extends({}, style, { zIndex: 10000000 }) },
129 _react2.default.createElement(ListContainer, {
130 width: dropdownMenuWidth,
131 height: rowHeight * Math.min(filteredOptions.length, 10),
132 rowCount: filteredOptions.length,
133 rowHeight: rowHeight,
134 rowRenderer: rowRenderer({
135 options: filteredOptions,
136 getItemProps: getItemProps,
137 highlightedIndex: highlightedIndex,
138 selectedItem: selectedItem
139 })
140 })
141 );
142 };
143};
144
145var getPopperProps = function getPopperProps(_ref7) {
146 var _ref7$dropdownMenuWid = _ref7.dropdownMenuWidth,
147 dropdownMenuWidth = _ref7$dropdownMenuWid === undefined ? 300 : _ref7$dropdownMenuWid,
148 _ref7$rowHeight = _ref7.rowHeight,
149 rowHeight = _ref7$rowHeight === undefined ? 33 : _ref7$rowHeight,
150 options = _ref7.options,
151 inputValue = _ref7.inputValue,
152 getItemProps = _ref7.getItemProps,
153 highlightedIndex = _ref7.highlightedIndex,
154 selectedItem = _ref7.selectedItem;
155 return {
156 dropdownMenuWidth: dropdownMenuWidth,
157 rowHeight: rowHeight,
158 filteredOptions: filterOptions(inputValue)(options),
159 getItemProps: getItemProps,
160 highlightedIndex: highlightedIndex,
161 selectedItem: selectedItem
162 };
163};
164
165var filterOptions = function filterOptions(inputValue) {
166 return (0, _filter3.default)(function (_ref8) {
167 var value = _ref8.value,
168 text = _ref8.text;
169 return matches(inputValue, value) || matches(inputValue, text);
170 });
171};
172
173var VirtualizedDropDown = function (_React$Component) {
174 _inherits(VirtualizedDropDown, _React$Component);
175
176 function VirtualizedDropDown() {
177 _classCallCheck(this, VirtualizedDropDown);
178
179 return _possibleConstructorReturn(this, (VirtualizedDropDown.__proto__ || Object.getPrototypeOf(VirtualizedDropDown)).apply(this, arguments));
180 }
181
182 _createClass(VirtualizedDropDown, [{
183 key: 'render',
184 value: function render() {
185 var _this2 = this;
186
187 var _props = this.props,
188 defaultValue = _props.defaultValue,
189 value = _props.value,
190 options = _props.options,
191 onChange = _props.onChange,
192 _props$placeholder = _props.placeholder,
193 placeholder = _props$placeholder === undefined ? 'Select Items...' : _props$placeholder,
194 _props$testId = _props.testId,
195 testId = _props$testId === undefined ? 'select' : _props$testId,
196 inputProps = _props.inputProps,
197 disabled = _props.disabled,
198 style = _props.style,
199 className = _props.className;
200
201 var displayMap = toMap(options);
202 var itemToString = function itemToString(value) {
203 return displayMap[value + ''] || (value == null ? '' : value + '');
204 };
205
206 return _react2.default.createElement(
207 _downshift2.default,
208 {
209 itemToString: itemToString,
210 initialInputValue: defaultValue,
211 selectedItem: value,
212 onChange: onChange
213 },
214 function (downshiftProps) {
215 var getInputProps = downshiftProps.getInputProps,
216 getRootProps = downshiftProps.getRootProps,
217 openMenu = downshiftProps.openMenu,
218 toggleMenu = downshiftProps.toggleMenu,
219 isOpen = downshiftProps.isOpen;
220
221 var popperRender = renderPopper(getPopperProps(_extends({}, _this2.props, downshiftProps)));
222
223 return _react2.default.createElement(
224 _PortaledPopper2.default,
225 _extends({
226 popperVisible: isOpen
227 }, getRootProps({ refKey: 'innerRef' }), {
228 popperRender: popperRender
229 }),
230 function (_ref9) {
231 var ref = _ref9.ref;
232 return _react2.default.createElement(
233 _semanticUiReact.Ref,
234 { innerRef: ref },
235 _react2.default.createElement(_semanticUiReact.Input, _extends({}, getInputProps(_extends({
236 placeholder: placeholder
237 }, inputProps, {
238 'data-testid': 'virtualized-dropdown-' + testId + '-input',
239 onFocus: openMenu,
240 onDoubleClick: toggleMenu,
241 disabled: disabled,
242 style: style,
243 className: className
244 })), {
245 fluid: true,
246 disabled: disabled
247 }))
248 );
249 }
250 );
251 }
252 );
253 }
254 }]);
255
256 return VirtualizedDropDown;
257}(_react2.default.Component);
258
259exports.default = VirtualizedDropDown;
260//# sourceMappingURL=VirtualizedDropdown.js.map
\No newline at end of file