1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _extends2 = require('babel-runtime/helpers/extends');
|
8 |
|
9 | var _extends3 = _interopRequireDefault(_extends2);
|
10 |
|
11 | var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
|
12 |
|
13 | var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
|
14 |
|
15 | var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral');
|
16 |
|
17 | var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2);
|
18 |
|
19 | var _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 |
|
25 | var _react = require('react');
|
26 |
|
27 | var _react2 = _interopRequireDefault(_react);
|
28 |
|
29 | var _dateFns = require('date-fns');
|
30 |
|
31 | var _styledComponents = require('styled-components');
|
32 |
|
33 | var _styledComponents2 = _interopRequireDefault(_styledComponents);
|
34 |
|
35 | var _SlotfulCTCMercury = require('./SlotfulCTCMercury');
|
36 |
|
37 | var _SlotfulCTCMercury2 = _interopRequireDefault(_SlotfulCTCMercury);
|
38 |
|
39 | var _Button = require('./Button');
|
40 |
|
41 | var _Button2 = _interopRequireDefault(_Button);
|
42 |
|
43 | var _CTCPopover = require('./CTCPopover');
|
44 |
|
45 | var _CTCPopover2 = _interopRequireDefault(_CTCPopover);
|
46 |
|
47 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
48 |
|
49 | var _MONTHNAMEFORMAT_ = 'MMM';
|
50 | var _YEARNAMEFORMAT_ = 'YYYY';
|
51 |
|
52 | var FLEX = _styledComponents2.default.div(_templateObject);
|
53 | var DATE_HEADING = _styledComponents2.default.div(_templateObject2);
|
54 | var CONTAINER = _styledComponents2.default.div(_templateObject3);
|
55 | var DROPDOWN = _styledComponents2.default.div(_templateObject4);
|
56 | var DROPDOWN_BUTTON = (0, _styledComponents2.default)(_Button2.default)(_templateObject5);
|
57 |
|
58 | var 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 |
|
67 | var compare = function compare(a, b, sortOrder) {
|
68 | if (a > b) return sortOrder * -1;
|
69 | if (a < b) return sortOrder;
|
70 | return 0;
|
71 | };
|
72 |
|
73 | var _BIG_ = 10000000000000000;
|
74 | var _SMALL_ = -10000000000000000;
|
75 | var _LONG_ = 'zzzzzzzzzzzzzzzzzzzzzzzz';
|
76 | var _SHORT_ = '';
|
77 |
|
78 | var 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 |
|
356 | exports.default = _react2.default.memo(OrderedList); |
\ | No newline at end of file |