UNPKG

11.3 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _extends2 = require('babel-runtime/helpers/extends');
8
9var _extends3 = _interopRequireDefault(_extends2);
10
11var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
12
13var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
14
15var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral');
16
17var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2);
18
19var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n display: flex;\n justify-content: space-between;\n'], ['\n display: flex;\n justify-content: space-between;\n']),
20 _templateObject2 = (0, _taggedTemplateLiteral3.default)([''], ['']),
21 _templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n margin-top: 1rem;\n'], ['\n margin-top: 1rem;\n']),
22 _templateObject4 = (0, _taggedTemplateLiteral3.default)(['\n height: 25rem;\n overflow: hidden scroll;\n'], ['\n height: 25rem;\n overflow: hidden scroll;\n']),
23 _templateObject5 = (0, _taggedTemplateLiteral3.default)(['\n width: 4rem;\n'], ['\n width: 4rem;\n']);
24
25var _react = require('react');
26
27var _react2 = _interopRequireDefault(_react);
28
29var _dateFns = require('date-fns');
30
31var _styledComponents = require('styled-components');
32
33var _styledComponents2 = _interopRequireDefault(_styledComponents);
34
35var _SlotfulCTCMercury = require('./SlotfulCTCMercury');
36
37var _SlotfulCTCMercury2 = _interopRequireDefault(_SlotfulCTCMercury);
38
39var _Button = require('./Button');
40
41var _Button2 = _interopRequireDefault(_Button);
42
43var _CTCPopover = require('./CTCPopover');
44
45var _CTCPopover2 = _interopRequireDefault(_CTCPopover);
46
47function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
48
49var _MONTHNAMEFORMAT_ = 'MMM';
50var _YEARNAMEFORMAT_ = 'YYYY';
51
52var FLEX = _styledComponents2.default.div(_templateObject);
53var DATE_HEADING = _styledComponents2.default.div(_templateObject2);
54var CONTAINER = _styledComponents2.default.div(_templateObject3);
55var DROPDOWN = _styledComponents2.default.div(_templateObject4);
56var DROPDOWN_BUTTON = (0, _styledComponents2.default)(_Button2.default)(_templateObject5);
57
58var defaultSharedCTCMercuryProps = {
59 colors: 'lightsmoke',
60 subcolors: 'smoke',
61 size: 22.5,
62 sizeFontRatio: 0.6,
63 mercuryRatio: [10, 20],
64 sideTransform: 0.8
65};
66
67var compare = function compare(a, b, sortOrder) {
68 if (a > b) return sortOrder * -1;
69 if (a < b) return sortOrder;
70 return 0;
71};
72
73var _BIG_ = 10000000000000000;
74var _SMALL_ = -10000000000000000;
75var _LONG_ = 'zzzzzzzzzzzzzzzzzzzzzzzz';
76var _SHORT_ = '';
77
78var OrderedList = function OrderedList(_ref) {
79 var externallySetPageSize = _ref.pageSize,
80 externallySetPageNumber = _ref.pageNumber,
81 _ref$falsyValueSortPr = _ref.falsyValueSortPriority,
82 falsyValueSortPriority = _ref$falsyValueSortPr === undefined ? -1 : _ref$falsyValueSortPr,
83 sortBy = _ref.sortBy,
84 _ref$locale = _ref.locale,
85 locale = _ref$locale === undefined ? {
86 nextPage: 'Next Page',
87 prevPage: 'Previous Page',
88 emptyList: 'No items'
89 } : _ref$locale,
90 sortOrder = _ref.sortOrder,
91 _ref$sharedCTCMercury = _ref.sharedCTCMercuryProps,
92 sharedCTCMercuryProps = _ref$sharedCTCMercury === undefined ? defaultSharedCTCMercuryProps : _ref$sharedCTCMercury,
93 items = _ref.items,
94 headers = _ref.headers,
95 itemToSlotsConvertFunction = _ref.itemToSlotsConvertFunction,
96 children = _ref.children,
97 externalSortingFunction = _ref.sortingFunction;
98
99 var localCompare = function localCompare(a, b) {
100 return compare(a, b, sortOrder);
101 };
102 var sortingFunction = void 0;
103 var type = headers.find(function (header) {
104 return header.key === sortBy;
105 }).type;
106 if (typeof externalSortingFunction !== 'function') {
107 sortingFunction = function sortingFunction(a, b) {
108 var aValue = void 0,
109 bValue = void 0;
110
111 if (sortBy.includes('.')) {
112 var keys = sortBy.split('.');
113 aValue = a;
114 bValue = b;
115 keys.forEach(function (v) {
116 aValue = aValue[v];
117 bValue = bValue[v];
118 });
119 } else {
120 aValue = a[sortBy];
121 bValue = b[sortBy];
122 }
123
124 if (type === 'string') {
125 var A = aValue ? aValue.toLowerCase() : sortOrder === falsyValueSortPriority ? _LONG_ : _SHORT_;
126 var B = bValue ? bValue.toLowerCase() : sortOrder === falsyValueSortPriority ? _LONG_ : _SHORT_;
127 return localCompare(A, B);
128 }
129
130 if (type === 'number') {
131 var _A = aValue ? aValue : sortOrder === falsyValueSortPriority ? _BIG_ : _SMALL_;
132 var _B = bValue ? bValue : sortOrder === falsyValueSortPriority ? _BIG_ : _SMALL_;
133 return localCompare(_A, _B);
134 }
135 };
136 } else {
137 sortingFunction = externalSortingFunction;
138 }
139
140 var _useState = (0, _react.useState)(15),
141 _useState2 = (0, _slicedToArray3.default)(_useState, 2),
142 pageSize = _useState2[0],
143 setPageSizeTo = _useState2[1];
144
145 var _useState3 = (0, _react.useState)(0),
146 _useState4 = (0, _slicedToArray3.default)(_useState3, 2),
147 pageNumber = _useState4[0],
148 setPageNumberTo = _useState4[1];
149
150 if (externallySetPageSize) {
151 pageSize = externallySetPageSize;
152 }
153
154 if (externallySetPageNumber) {
155 pageNumber = externallySetPageNumber;
156 }
157
158 var pageCount = Math.ceil(items.length / pageSize);
159
160 var goToPageButtons = [];
161
162 var _loop = function _loop(i) {
163 goToPageButtons.push(_react2.default.createElement(
164 DROPDOWN_BUTTON,
165 { key: i, colors: 'neutral', onClick: function onClick() {
166 return setPageNumberTo(i);
167 } },
168 i + 1
169 ));
170 };
171
172 for (var i = 0; i < pageCount; i++) {
173 _loop(i);
174 }
175 var setPageSizeButtons = [];
176
177 var _loop2 = function _loop2(i) {
178 setPageSizeButtons.push(_react2.default.createElement(
179 DROPDOWN_BUTTON,
180 { key: i, colors: 'neutral', onClick: function onClick() {
181 return setPageSizeTo(i);
182 } },
183 i
184 ));
185 };
186
187 for (var i = 0; i < 100; i = i + 10) {
188 _loop2(i);
189 }
190
191 var sortedItems = items.sort(sortingFunction);
192 var paginatedItems = sortedItems.slice(pageNumber * pageSize, (pageNumber + 1) * pageSize);
193
194 var renderGoToPage = function renderGoToPage() {
195 return _react2.default.createElement(
196 _CTCPopover2.default,
197 {
198 pivotFrom: 'UPLEFT',
199 renderTrigger: function renderTrigger(_ref2) {
200 var getTriggerProps = _ref2.getTriggerProps;
201 return _react2.default.createElement(
202 _Button2.default,
203 (0, _extends3.default)({}, getTriggerProps()),
204 pageNumber + 1,
205 ' out of ',
206 pageCount
207 );
208 }
209 },
210 function (_ref3) {
211 var getChildrenProps = _ref3.getChildrenProps;
212 return _react2.default.createElement(
213 DROPDOWN,
214 (0, _extends3.default)({}, getChildrenProps()),
215 goToPageButtons
216 );
217 }
218 );
219 };
220
221 var renderPageSize = function renderPageSize() {
222 return _react2.default.createElement(
223 _CTCPopover2.default,
224 {
225 pivotFrom: 'UPLEFT',
226 renderTrigger: function renderTrigger(_ref4) {
227 var getTriggerProps = _ref4.getTriggerProps;
228 return _react2.default.createElement(
229 _Button2.default,
230 (0, _extends3.default)({}, getTriggerProps()),
231 '(showing ',
232 pageNumber * pageSize,
233 ' -',
234 ' ',
235 (pageNumber + 1) * pageSize < items.length ? (pageNumber + 1) * pageSize : items.length,
236 ' ',
237 'out of ',
238 items.length,
239 ')'
240 );
241 }
242 },
243 function (_ref5) {
244 var getChildrenProps = _ref5.getChildrenProps;
245 return _react2.default.createElement(
246 DROPDOWN,
247 (0, _extends3.default)({}, getChildrenProps()),
248 setPageSizeButtons
249 );
250 }
251 );
252 };
253
254 var renderNextPageButton = function renderNextPageButton() {
255 return _react2.default.createElement(
256 _Button2.default,
257 {
258 isDisabled: pageNumber + 1 >= pageCount,
259 onClick: function onClick() {
260 return setPageNumberTo(pageNumber + 1);
261 }
262 },
263 locale.nextPage
264 );
265 };
266
267 var renderPrevPageButton = function renderPrevPageButton() {
268 return _react2.default.createElement(
269 _Button2.default,
270 {
271 isDisabled: pageNumber === 0,
272 onClick: function onClick() {
273 return setPageNumberTo(pageNumber - 1);
274 }
275 },
276 locale.prevPage
277 );
278 };
279
280 var isDate = headers.find(function (header) {
281 return header.key === sortBy;
282 }).isDate;
283
284 return paginatedItems.length > 0 ? _react2.default.createElement(
285 _react.Fragment,
286 null,
287 _react2.default.createElement(_SlotfulCTCMercury2.default, (0, _extends3.default)({}, sharedCTCMercuryProps, {
288 isDisabled: true,
289 marginLock: true,
290 slots: headers
291 })),
292 _react2.default.createElement(
293 CONTAINER,
294 { className: 'orderedlist__container' },
295 paginatedItems.map(function (item, i) {
296 var slotfulButtons = itemToSlotsConvertFunction(item);
297
298 var monthName = (0, _dateFns.format)(item[sortBy], _MONTHNAMEFORMAT_);
299 var yearName = (0, _dateFns.format)(item[sortBy], _YEARNAMEFORMAT_);
300
301 var monthNumber = (0, _dateFns.format)(item[sortBy], 'MM');
302
303 var prevItem = paginatedItems[i - 1];
304
305 var prevMonthName = prevItem && (0, _dateFns.format)(prevItem[sortBy], _MONTHNAMEFORMAT_);
306 var prevYearName = prevItem && (0, _dateFns.format)(prevItem[sortBy], _YEARNAMEFORMAT_);
307
308 var renderDate = function renderDate() {
309 var isAvailable = typeof item[sortBy] === 'number';
310 var renderDate = function renderDate(placeholder, value) {
311 return isAvailable ? _react2.default.createElement(
312 DATE_HEADING,
313 null,
314 value
315 ) : placeholder ? _react2.default.createElement(
316 DATE_HEADING,
317 null,
318 'pending dates'
319 ) : null;
320 };
321 var yearValue = renderDate(true, yearName);
322 var monthValue = renderDate(false, monthNumber + '.' + yearName + ' [' + monthName + ']');
323 return _react2.default.createElement(
324 _react.Fragment,
325 null,
326 i === 0 && yearValue,
327 i === 0 && monthValue,
328 paginatedItems[i - 1] && prevYearName !== yearName && yearValue,
329 paginatedItems[i - 1] && prevMonthName !== monthName && monthValue
330 );
331 };
332
333 return _react2.default.createElement(
334 'div',
335 { key: i + '_' + item.id, className: 'orderedlist__item' },
336 isDate === true && renderDate(),
337 children({ item: item, slotfulButtons: slotfulButtons })
338 );
339 })
340 ),
341 _react2.default.createElement(
342 FLEX,
343 null,
344 renderPrevPageButton(),
345 renderGoToPage(),
346 renderPageSize(),
347 renderNextPageButton()
348 )
349 ) : _react2.default.createElement(
350 'div',
351 null,
352 locale.emptyList
353 );
354};
355
356exports.default = _react2.default.memo(OrderedList);
\No newline at end of file