UNPKG

154 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
3 typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :
4 (global = global || self, factory(global.ReactTable = {}, global.React));
5}(this, (function (exports, React) { 'use strict';
6
7 React = React && Object.prototype.hasOwnProperty.call(React, 'default') ? React['default'] : React;
8
9 function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
10 try {
11 var info = gen[key](arg);
12 var value = info.value;
13 } catch (error) {
14 reject(error);
15 return;
16 }
17
18 if (info.done) {
19 resolve(value);
20 } else {
21 Promise.resolve(value).then(_next, _throw);
22 }
23 }
24
25 function _asyncToGenerator(fn) {
26 return function () {
27 var self = this,
28 args = arguments;
29 return new Promise(function (resolve, reject) {
30 var gen = fn.apply(self, args);
31
32 function _next(value) {
33 asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
34 }
35
36 function _throw(err) {
37 asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
38 }
39
40 _next(undefined);
41 });
42 };
43 }
44
45 function _extends() {
46 _extends = Object.assign || function (target) {
47 for (var i = 1; i < arguments.length; i++) {
48 var source = arguments[i];
49
50 for (var key in source) {
51 if (Object.prototype.hasOwnProperty.call(source, key)) {
52 target[key] = source[key];
53 }
54 }
55 }
56
57 return target;
58 };
59
60 return _extends.apply(this, arguments);
61 }
62
63 function _objectWithoutPropertiesLoose(source, excluded) {
64 if (source == null) return {};
65 var target = {};
66 var sourceKeys = Object.keys(source);
67 var key, i;
68
69 for (i = 0; i < sourceKeys.length; i++) {
70 key = sourceKeys[i];
71 if (excluded.indexOf(key) >= 0) continue;
72 target[key] = source[key];
73 }
74
75 return target;
76 }
77
78 function _toPrimitive(input, hint) {
79 if (typeof input !== "object" || input === null) return input;
80 var prim = input[Symbol.toPrimitive];
81
82 if (prim !== undefined) {
83 var res = prim.call(input, hint || "default");
84 if (typeof res !== "object") return res;
85 throw new TypeError("@@toPrimitive must return a primitive value.");
86 }
87
88 return (hint === "string" ? String : Number)(input);
89 }
90
91 function _toPropertyKey(arg) {
92 var key = _toPrimitive(arg, "string");
93
94 return typeof key === "symbol" ? key : String(key);
95 }
96
97 var renderErr = 'Renderer Error ☝️';
98 var actions = {
99 init: 'init'
100 };
101 var defaultRenderer = function defaultRenderer(_ref) {
102 var _ref$value = _ref.value,
103 value = _ref$value === void 0 ? '' : _ref$value;
104 return value;
105 };
106 var emptyRenderer = function emptyRenderer() {
107 return React.createElement(React.Fragment, null, "\xA0");
108 };
109 var defaultColumn = {
110 Cell: defaultRenderer,
111 width: 150,
112 minWidth: 0,
113 maxWidth: Number.MAX_SAFE_INTEGER
114 };
115
116 function mergeProps() {
117 for (var _len = arguments.length, propList = new Array(_len), _key = 0; _key < _len; _key++) {
118 propList[_key] = arguments[_key];
119 }
120
121 return propList.reduce(function (props, next) {
122 var style = next.style,
123 className = next.className,
124 rest = _objectWithoutPropertiesLoose(next, ["style", "className"]);
125
126 props = _extends({}, props, {}, rest);
127
128 if (style) {
129 props.style = props.style ? _extends({}, props.style || {}, {}, style || {}) : style;
130 }
131
132 if (className) {
133 props.className = props.className ? props.className + ' ' + className : className;
134 }
135
136 if (props.className === '') {
137 delete props.className;
138 }
139
140 return props;
141 }, {});
142 }
143
144 function handlePropGetter(prevProps, userProps, meta) {
145 // Handle a lambda, pass it the previous props
146 if (typeof userProps === 'function') {
147 return handlePropGetter({}, userProps(prevProps, meta));
148 } // Handle an array, merge each item as separate props
149
150
151 if (Array.isArray(userProps)) {
152 return mergeProps.apply(void 0, [prevProps].concat(userProps));
153 } // Handle an object by default, merge the two objects
154
155
156 return mergeProps(prevProps, userProps);
157 }
158
159 var makePropGetter = function makePropGetter(hooks, meta) {
160 if (meta === void 0) {
161 meta = {};
162 }
163
164 return function (userProps) {
165 if (userProps === void 0) {
166 userProps = {};
167 }
168
169 return [].concat(hooks, [userProps]).reduce(function (prev, next) {
170 return handlePropGetter(prev, next, _extends({}, meta, {
171 userProps: userProps
172 }));
173 }, {});
174 };
175 };
176 var reduceHooks = function reduceHooks(hooks, initial, meta, allowUndefined) {
177 if (meta === void 0) {
178 meta = {};
179 }
180
181 return hooks.reduce(function (prev, next) {
182 var nextValue = next(prev, meta);
183
184 {
185 if (!allowUndefined && typeof nextValue === 'undefined') {
186 console.info(next);
187 throw new Error('React Table: A reducer hook ☝️ just returned undefined! This is not allowed.');
188 }
189 }
190
191 return nextValue;
192 }, initial);
193 };
194 var loopHooks = function loopHooks(hooks, context, meta) {
195 if (meta === void 0) {
196 meta = {};
197 }
198
199 return hooks.forEach(function (hook) {
200 var nextValue = hook(context, meta);
201
202 {
203 if (typeof nextValue !== 'undefined') {
204 console.info(hook, nextValue);
205 throw new Error('React Table: A loop-type hook ☝️ just returned a value! This is not allowed.');
206 }
207 }
208 });
209 };
210 function ensurePluginOrder(plugins, befores, pluginName, afters) {
211 if ( afters) {
212 throw new Error("Defining plugins in the \"after\" section of ensurePluginOrder is no longer supported (see plugin " + pluginName + ")");
213 }
214
215 var pluginIndex = plugins.findIndex(function (plugin) {
216 return plugin.pluginName === pluginName;
217 });
218
219 if (pluginIndex === -1) {
220 {
221 throw new Error("The plugin \"" + pluginName + "\" was not found in the plugin list!\nThis usually means you need to need to name your plugin hook by setting the 'pluginName' property of the hook function, eg:\n\n " + pluginName + ".pluginName = '" + pluginName + "'\n");
222 }
223 }
224
225 befores.forEach(function (before) {
226 var beforeIndex = plugins.findIndex(function (plugin) {
227 return plugin.pluginName === before;
228 });
229
230 if (beforeIndex > -1 && beforeIndex > pluginIndex) {
231 {
232 throw new Error("React Table: The " + pluginName + " plugin hook must be placed after the " + before + " plugin hook!");
233 }
234 }
235 });
236 }
237 function functionalUpdate(updater, old) {
238 return typeof updater === 'function' ? updater(old) : updater;
239 }
240 function useGetLatest(obj) {
241 var ref = React.useRef();
242 ref.current = obj;
243 return React.useCallback(function () {
244 return ref.current;
245 }, []);
246 } // SSR has issues with useLayoutEffect still, so use useEffect during SSR
247
248 var safeUseLayoutEffect = typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect;
249 function useMountedLayoutEffect(fn, deps) {
250 var mountedRef = React.useRef(false);
251 safeUseLayoutEffect(function () {
252 if (mountedRef.current) {
253 fn();
254 }
255
256 mountedRef.current = true; // eslint-disable-next-line
257 }, deps);
258 }
259 function useAsyncDebounce(defaultFn, defaultWait) {
260 if (defaultWait === void 0) {
261 defaultWait = 0;
262 }
263
264 var debounceRef = React.useRef({});
265 var getDefaultFn = useGetLatest(defaultFn);
266 var getDefaultWait = useGetLatest(defaultWait);
267 return React.useCallback(
268 /*#__PURE__*/
269 function () {
270 var _ref2 = _asyncToGenerator(
271 /*#__PURE__*/
272 regeneratorRuntime.mark(function _callee2() {
273 var _len2,
274 args,
275 _key2,
276 _args2 = arguments;
277
278 return regeneratorRuntime.wrap(function _callee2$(_context2) {
279 while (1) {
280 switch (_context2.prev = _context2.next) {
281 case 0:
282 for (_len2 = _args2.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
283 args[_key2] = _args2[_key2];
284 }
285
286 if (!debounceRef.current.promise) {
287 debounceRef.current.promise = new Promise(function (resolve, reject) {
288 debounceRef.current.resolve = resolve;
289 debounceRef.current.reject = reject;
290 });
291 }
292
293 if (debounceRef.current.timeout) {
294 clearTimeout(debounceRef.current.timeout);
295 }
296
297 debounceRef.current.timeout = setTimeout(
298 /*#__PURE__*/
299 _asyncToGenerator(
300 /*#__PURE__*/
301 regeneratorRuntime.mark(function _callee() {
302 return regeneratorRuntime.wrap(function _callee$(_context) {
303 while (1) {
304 switch (_context.prev = _context.next) {
305 case 0:
306 delete debounceRef.current.timeout;
307 _context.prev = 1;
308 _context.t0 = debounceRef.current;
309 _context.next = 5;
310 return getDefaultFn().apply(void 0, args);
311
312 case 5:
313 _context.t1 = _context.sent;
314
315 _context.t0.resolve.call(_context.t0, _context.t1);
316
317 _context.next = 12;
318 break;
319
320 case 9:
321 _context.prev = 9;
322 _context.t2 = _context["catch"](1);
323 debounceRef.current.reject(_context.t2);
324
325 case 12:
326 _context.prev = 12;
327 delete debounceRef.current.promise;
328 return _context.finish(12);
329
330 case 15:
331 case "end":
332 return _context.stop();
333 }
334 }
335 }, _callee, null, [[1, 9, 12, 15]]);
336 })), getDefaultWait());
337 return _context2.abrupt("return", debounceRef.current.promise);
338
339 case 5:
340 case "end":
341 return _context2.stop();
342 }
343 }
344 }, _callee2);
345 }));
346
347 return function () {
348 return _ref2.apply(this, arguments);
349 };
350 }(), [getDefaultFn, getDefaultWait]);
351 }
352 function makeRenderer(instance, column, meta) {
353 if (meta === void 0) {
354 meta = {};
355 }
356
357 return function (type, userProps) {
358 if (userProps === void 0) {
359 userProps = {};
360 }
361
362 var Comp = typeof type === 'string' ? column[type] : type;
363
364 if (typeof Comp === 'undefined') {
365 console.info(column);
366 throw new Error(renderErr);
367 }
368
369 return flexRender(Comp, _extends({}, instance, {
370 column: column
371 }, meta, {}, userProps));
372 };
373 }
374 function flexRender(Comp, props) {
375 return isReactComponent(Comp) ? React.createElement(Comp, props) : Comp;
376 }
377
378 function isReactComponent(component) {
379 return isClassComponent(component) || typeof component === 'function' || isExoticComponent(component);
380 }
381
382 function isClassComponent(component) {
383 return typeof component === 'function' && function () {
384 var proto = Object.getPrototypeOf(component);
385 return proto.prototype && proto.prototype.isReactComponent;
386 }();
387 }
388
389 function isExoticComponent(component) {
390 return typeof component === 'object' && typeof component.$$typeof === 'symbol' && ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description);
391 }
392
393 function linkColumnStructure(columns, parent, depth) {
394 if (depth === void 0) {
395 depth = 0;
396 }
397
398 return columns.map(function (column) {
399 column = _extends({}, column, {
400 parent: parent,
401 depth: depth
402 });
403 assignColumnAccessor(column);
404
405 if (column.columns) {
406 column.columns = linkColumnStructure(column.columns, column, depth + 1);
407 }
408
409 return column;
410 });
411 }
412 function flattenColumns(columns) {
413 return flattenBy(columns, 'columns');
414 }
415 function assignColumnAccessor(column) {
416 // First check for string accessor
417 var id = column.id,
418 accessor = column.accessor,
419 Header = column.Header;
420
421 if (typeof accessor === 'string') {
422 id = id || accessor;
423 var accessorPath = accessor.split('.');
424
425 accessor = function accessor(row) {
426 return getBy(row, accessorPath);
427 };
428 }
429
430 if (!id && typeof Header === 'string' && Header) {
431 id = Header;
432 }
433
434 if (!id && column.columns) {
435 console.error(column);
436 throw new Error('A column ID (or unique "Header" value) is required!');
437 }
438
439 if (!id) {
440 console.error(column);
441 throw new Error('A column ID (or string accessor) is required!');
442 }
443
444 Object.assign(column, {
445 id: id,
446 accessor: accessor
447 });
448 return column;
449 }
450 function decorateColumn(column, userDefaultColumn) {
451 if (!userDefaultColumn) {
452 throw new Error();
453 }
454
455 Object.assign(column, _extends({
456 // Make sure there is a fallback header, just in case
457 Header: emptyRenderer,
458 Footer: emptyRenderer
459 }, defaultColumn, {}, userDefaultColumn, {}, column));
460 Object.assign(column, {
461 originalWidth: column.width
462 });
463 return column;
464 } // Build the header groups from the bottom up
465
466 function makeHeaderGroups(allColumns, defaultColumn, additionalHeaderProperties) {
467 if (additionalHeaderProperties === void 0) {
468 additionalHeaderProperties = function additionalHeaderProperties() {
469 return {};
470 };
471 }
472
473 var headerGroups = [];
474 var scanColumns = allColumns;
475 var uid = 0;
476
477 var getUID = function getUID() {
478 return uid++;
479 };
480
481 var _loop = function _loop() {
482 // The header group we are creating
483 var headerGroup = {
484 headers: []
485 }; // The parent columns we're going to scan next
486
487 var parentColumns = [];
488 var hasParents = scanColumns.some(function (d) {
489 return d.parent;
490 }); // Scan each column for parents
491
492 scanColumns.forEach(function (column) {
493 // What is the latest (last) parent column?
494 var latestParentColumn = [].concat(parentColumns).reverse()[0];
495 var newParent;
496
497 if (hasParents) {
498 // If the column has a parent, add it if necessary
499 if (column.parent) {
500 newParent = _extends({}, column.parent, {
501 originalId: column.parent.id,
502 id: column.parent.id + "_" + getUID(),
503 headers: [column]
504 }, additionalHeaderProperties(column));
505 } else {
506 // If other columns have parents, we'll need to add a place holder if necessary
507 var originalId = column.id + "_placeholder";
508 newParent = decorateColumn(_extends({
509 originalId: originalId,
510 id: column.id + "_placeholder_" + getUID(),
511 placeholderOf: column,
512 headers: [column]
513 }, additionalHeaderProperties(column)), defaultColumn);
514 } // If the resulting parent columns are the same, just add
515 // the column and increment the header span
516
517
518 if (latestParentColumn && latestParentColumn.originalId === newParent.originalId) {
519 latestParentColumn.headers.push(column);
520 } else {
521 parentColumns.push(newParent);
522 }
523 }
524
525 headerGroup.headers.push(column);
526 });
527 headerGroups.push(headerGroup); // Start scanning the parent columns
528
529 scanColumns = parentColumns;
530 };
531
532 while (scanColumns.length) {
533 _loop();
534 }
535
536 return headerGroups.reverse();
537 }
538 var pathObjCache = new Map();
539 function getBy(obj, path, def) {
540 if (!path) {
541 return obj;
542 }
543
544 var cacheKey = typeof path === 'function' ? path : JSON.stringify(path);
545
546 var pathObj = pathObjCache.get(cacheKey) || function () {
547 var pathObj = makePathArray(path);
548 pathObjCache.set(cacheKey, pathObj);
549 return pathObj;
550 }();
551
552 var val;
553
554 try {
555 val = pathObj.reduce(function (cursor, pathPart) {
556 return cursor[pathPart];
557 }, obj);
558 } catch (e) {// continue regardless of error
559 }
560
561 return typeof val !== 'undefined' ? val : def;
562 }
563 function getFirstDefined() {
564 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
565 args[_key] = arguments[_key];
566 }
567
568 for (var i = 0; i < args.length; i += 1) {
569 if (typeof args[i] !== 'undefined') {
570 return args[i];
571 }
572 }
573 }
574 function isFunction(a) {
575 if (typeof a === 'function') {
576 return a;
577 }
578 }
579 function flattenBy(arr, key) {
580 var flat = [];
581
582 var recurse = function recurse(arr) {
583 arr.forEach(function (d) {
584 if (!d[key]) {
585 flat.push(d);
586 } else {
587 recurse(d[key]);
588 }
589 });
590 };
591
592 recurse(arr);
593 return flat;
594 }
595 function expandRows(rows, _ref) {
596 var manualExpandedKey = _ref.manualExpandedKey,
597 expanded = _ref.expanded,
598 _ref$expandSubRows = _ref.expandSubRows,
599 expandSubRows = _ref$expandSubRows === void 0 ? true : _ref$expandSubRows;
600 var expandedRows = [];
601
602 var handleRow = function handleRow(row, addToExpandedRows) {
603 if (addToExpandedRows === void 0) {
604 addToExpandedRows = true;
605 }
606
607 row.isExpanded = row.original && row.original[manualExpandedKey] || expanded[row.id];
608 row.canExpand = row.subRows && !!row.subRows.length;
609
610 if (addToExpandedRows) {
611 expandedRows.push(row);
612 }
613
614 if (row.subRows && row.subRows.length && row.isExpanded) {
615 row.subRows.forEach(function (row) {
616 return handleRow(row, expandSubRows);
617 });
618 }
619 };
620
621 rows.forEach(function (row) {
622 return handleRow(row);
623 });
624 return expandedRows;
625 }
626 function getFilterMethod(filter, userFilterTypes, filterTypes) {
627 return isFunction(filter) || userFilterTypes[filter] || filterTypes[filter] || filterTypes.text;
628 }
629 function shouldAutoRemoveFilter(autoRemove, value, column) {
630 return autoRemove ? autoRemove(value, column) : typeof value === 'undefined';
631 }
632 function unpreparedAccessWarning() {
633 throw new Error('React-Table: You have not called prepareRow(row) one or more rows you are attempting to render.');
634 }
635 var passiveSupported = null;
636 function passiveEventSupported() {
637 // memoize support to avoid adding multiple test events
638 if (typeof passiveSupported === 'boolean') return passiveSupported;
639 var supported = false;
640
641 try {
642 var options = {
643 get passive() {
644 supported = true;
645 return false;
646 }
647
648 };
649 window.addEventListener('test', null, options);
650 window.removeEventListener('test', null, options);
651 } catch (err) {
652 supported = false;
653 }
654
655 passiveSupported = supported;
656 return passiveSupported;
657 } //
658
659 var reOpenBracket = /\[/g;
660 var reCloseBracket = /\]/g;
661
662 function makePathArray(obj) {
663 return flattenDeep(obj) // remove all periods in parts
664 .map(function (d) {
665 return String(d).replace('.', '_');
666 }) // join parts using period
667 .join('.') // replace brackets with periods
668 .replace(reOpenBracket, '.').replace(reCloseBracket, '') // split it back out on periods
669 .split('.');
670 }
671
672 function flattenDeep(arr, newArr) {
673 if (newArr === void 0) {
674 newArr = [];
675 }
676
677 if (!Array.isArray(arr)) {
678 newArr.push(arr);
679 } else {
680 for (var i = 0; i < arr.length; i += 1) {
681 flattenDeep(arr[i], newArr);
682 }
683 }
684
685 return newArr;
686 }
687
688 var defaultGetTableProps = function defaultGetTableProps(props) {
689 return _extends({
690 role: 'table'
691 }, props);
692 };
693
694 var defaultGetTableBodyProps = function defaultGetTableBodyProps(props) {
695 return _extends({
696 role: 'rowgroup'
697 }, props);
698 };
699
700 var defaultGetHeaderProps = function defaultGetHeaderProps(props, _ref) {
701 var column = _ref.column;
702 return _extends({
703 key: "header_" + column.id,
704 colSpan: column.totalVisibleHeaderCount,
705 role: 'columnheader'
706 }, props);
707 };
708
709 var defaultGetFooterProps = function defaultGetFooterProps(props, _ref2) {
710 var column = _ref2.column;
711 return _extends({
712 key: "footer_" + column.id,
713 colSpan: column.totalVisibleHeaderCount
714 }, props);
715 };
716
717 var defaultGetHeaderGroupProps = function defaultGetHeaderGroupProps(props, _ref3) {
718 var index = _ref3.index;
719 return _extends({
720 key: "headerGroup_" + index,
721 role: 'row'
722 }, props);
723 };
724
725 var defaultGetFooterGroupProps = function defaultGetFooterGroupProps(props, _ref4) {
726 var index = _ref4.index;
727 return _extends({
728 key: "footerGroup_" + index
729 }, props);
730 };
731
732 var defaultGetRowProps = function defaultGetRowProps(props, _ref5) {
733 var row = _ref5.row;
734 return _extends({
735 key: "row_" + row.id,
736 role: 'row'
737 }, props);
738 };
739
740 var defaultGetCellProps = function defaultGetCellProps(props, _ref6) {
741 var cell = _ref6.cell;
742 return _extends({
743 key: "cell_" + cell.row.id + "_" + cell.column.id,
744 role: 'cell'
745 }, props);
746 };
747
748 function makeDefaultPluginHooks() {
749 return {
750 useOptions: [],
751 stateReducers: [],
752 useControlledState: [],
753 columns: [],
754 columnsDeps: [],
755 allColumns: [],
756 allColumnsDeps: [],
757 accessValue: [],
758 materializedColumns: [],
759 materializedColumnsDeps: [],
760 useInstanceAfterData: [],
761 visibleColumns: [],
762 visibleColumnsDeps: [],
763 headerGroups: [],
764 headerGroupsDeps: [],
765 useInstanceBeforeDimensions: [],
766 useInstance: [],
767 prepareRow: [],
768 getTableProps: [defaultGetTableProps],
769 getTableBodyProps: [defaultGetTableBodyProps],
770 getHeaderGroupProps: [defaultGetHeaderGroupProps],
771 getFooterGroupProps: [defaultGetFooterGroupProps],
772 getHeaderProps: [defaultGetHeaderProps],
773 getFooterProps: [defaultGetFooterProps],
774 getRowProps: [defaultGetRowProps],
775 getCellProps: [defaultGetCellProps],
776 useFinalInstance: []
777 };
778 }
779
780 actions.resetHiddenColumns = 'resetHiddenColumns';
781 actions.toggleHideColumn = 'toggleHideColumn';
782 actions.setHiddenColumns = 'setHiddenColumns';
783 actions.toggleHideAllColumns = 'toggleHideAllColumns';
784 var useColumnVisibility = function useColumnVisibility(hooks) {
785 hooks.getToggleHiddenProps = [defaultGetToggleHiddenProps];
786 hooks.getToggleHideAllColumnsProps = [defaultGetToggleHideAllColumnsProps];
787 hooks.stateReducers.push(reducer);
788 hooks.useInstanceBeforeDimensions.push(useInstanceBeforeDimensions);
789 hooks.headerGroupsDeps.push(function (deps, _ref) {
790 var instance = _ref.instance;
791 return [].concat(deps, [instance.state.hiddenColumns]);
792 });
793 hooks.useInstance.push(useInstance);
794 };
795 useColumnVisibility.pluginName = 'useColumnVisibility';
796
797 var defaultGetToggleHiddenProps = function defaultGetToggleHiddenProps(props, _ref2) {
798 var column = _ref2.column;
799 return [props, {
800 onChange: function onChange(e) {
801 column.toggleHidden(!e.target.checked);
802 },
803 style: {
804 cursor: 'pointer'
805 },
806 checked: column.isVisible,
807 title: 'Toggle Column Visible'
808 }];
809 };
810
811 var defaultGetToggleHideAllColumnsProps = function defaultGetToggleHideAllColumnsProps(props, _ref3) {
812 var instance = _ref3.instance;
813 return [props, {
814 onChange: function onChange(e) {
815 instance.toggleHideAllColumns(!e.target.checked);
816 },
817 style: {
818 cursor: 'pointer'
819 },
820 checked: !instance.allColumnsHidden && !instance.state.hiddenColumns.length,
821 title: 'Toggle All Columns Hidden',
822 indeterminate: !instance.allColumnsHidden && instance.state.hiddenColumns.length
823 }];
824 };
825
826 function reducer(state, action, previousState, instance) {
827 if (action.type === actions.init) {
828 return _extends({
829 hiddenColumns: []
830 }, state);
831 }
832
833 if (action.type === actions.resetHiddenColumns) {
834 return _extends({}, state, {
835 hiddenColumns: instance.initialState.hiddenColumns || []
836 });
837 }
838
839 if (action.type === actions.toggleHideColumn) {
840 var should = typeof action.value !== 'undefined' ? action.value : !state.hiddenColumns.includes(action.columnId);
841 var hiddenColumns = should ? [].concat(state.hiddenColumns, [action.columnId]) : state.hiddenColumns.filter(function (d) {
842 return d !== action.columnId;
843 });
844 return _extends({}, state, {
845 hiddenColumns: hiddenColumns
846 });
847 }
848
849 if (action.type === actions.setHiddenColumns) {
850 return _extends({}, state, {
851 hiddenColumns: functionalUpdate(action.value, state.hiddenColumns)
852 });
853 }
854
855 if (action.type === actions.toggleHideAllColumns) {
856 var shouldAll = typeof action.value !== 'undefined' ? action.value : !state.hiddenColumns.length;
857 return _extends({}, state, {
858 hiddenColumns: shouldAll ? instance.allColumns.map(function (d) {
859 return d.id;
860 }) : []
861 });
862 }
863 }
864
865 function useInstanceBeforeDimensions(instance) {
866 var headers = instance.headers,
867 hiddenColumns = instance.state.hiddenColumns;
868 var isMountedRef = React.useRef(false);
869
870 if (!isMountedRef.current) ;
871
872 var handleColumn = function handleColumn(column, parentVisible) {
873 column.isVisible = parentVisible && !hiddenColumns.includes(column.id);
874 var totalVisibleHeaderCount = 0;
875
876 if (column.headers && column.headers.length) {
877 column.headers.forEach(function (subColumn) {
878 return totalVisibleHeaderCount += handleColumn(subColumn, column.isVisible);
879 });
880 } else {
881 totalVisibleHeaderCount = column.isVisible ? 1 : 0;
882 }
883
884 column.totalVisibleHeaderCount = totalVisibleHeaderCount;
885 return totalVisibleHeaderCount;
886 };
887
888 var totalVisibleHeaderCount = 0;
889 headers.forEach(function (subHeader) {
890 return totalVisibleHeaderCount += handleColumn(subHeader, true);
891 });
892 }
893
894 function useInstance(instance) {
895 var columns = instance.columns,
896 flatHeaders = instance.flatHeaders,
897 dispatch = instance.dispatch,
898 allColumns = instance.allColumns,
899 getHooks = instance.getHooks,
900 hiddenColumns = instance.state.hiddenColumns,
901 _instance$autoResetHi = instance.autoResetHiddenColumns,
902 autoResetHiddenColumns = _instance$autoResetHi === void 0 ? true : _instance$autoResetHi;
903 var getInstance = useGetLatest(instance);
904 var allColumnsHidden = allColumns.length === hiddenColumns.length;
905 var toggleHideColumn = React.useCallback(function (columnId, value) {
906 return dispatch({
907 type: actions.toggleHideColumn,
908 columnId: columnId,
909 value: value
910 });
911 }, [dispatch]);
912 var setHiddenColumns = React.useCallback(function (value) {
913 return dispatch({
914 type: actions.setHiddenColumns,
915 value: value
916 });
917 }, [dispatch]);
918 var toggleHideAllColumns = React.useCallback(function (value) {
919 return dispatch({
920 type: actions.toggleHideAllColumns,
921 value: value
922 });
923 }, [dispatch]);
924 var getToggleHideAllColumnsProps = makePropGetter(getHooks().getToggleHideAllColumnsProps, {
925 instance: getInstance()
926 });
927 flatHeaders.forEach(function (column) {
928 column.toggleHidden = function (value) {
929 dispatch({
930 type: actions.toggleHideColumn,
931 columnId: column.id,
932 value: value
933 });
934 };
935
936 column.getToggleHiddenProps = makePropGetter(getHooks().getToggleHiddenProps, {
937 instance: getInstance(),
938 column: column
939 });
940 });
941 var getAutoResetHiddenColumns = useGetLatest(autoResetHiddenColumns);
942 useMountedLayoutEffect(function () {
943 if (getAutoResetHiddenColumns()) {
944 dispatch({
945 type: actions.resetHiddenColumns
946 });
947 }
948 }, [dispatch, columns]);
949 Object.assign(instance, {
950 allColumnsHidden: allColumnsHidden,
951 toggleHideColumn: toggleHideColumn,
952 setHiddenColumns: setHiddenColumns,
953 toggleHideAllColumns: toggleHideAllColumns,
954 getToggleHideAllColumnsProps: getToggleHideAllColumnsProps
955 });
956 }
957
958 var defaultInitialState = {};
959 var defaultColumnInstance = {};
960
961 var defaultReducer = function defaultReducer(state, action, prevState) {
962 return state;
963 };
964
965 var defaultGetSubRows = function defaultGetSubRows(row, index) {
966 return row.subRows || [];
967 };
968
969 var defaultGetRowId = function defaultGetRowId(row, index, parent) {
970 return "" + (parent ? [parent.id, index].join('.') : index);
971 };
972
973 var defaultUseControlledState = function defaultUseControlledState(d) {
974 return d;
975 };
976
977 function applyDefaults(props) {
978 var _props$initialState = props.initialState,
979 initialState = _props$initialState === void 0 ? defaultInitialState : _props$initialState,
980 _props$defaultColumn = props.defaultColumn,
981 defaultColumn = _props$defaultColumn === void 0 ? defaultColumnInstance : _props$defaultColumn,
982 _props$getSubRows = props.getSubRows,
983 getSubRows = _props$getSubRows === void 0 ? defaultGetSubRows : _props$getSubRows,
984 _props$getRowId = props.getRowId,
985 getRowId = _props$getRowId === void 0 ? defaultGetRowId : _props$getRowId,
986 _props$stateReducer = props.stateReducer,
987 stateReducer = _props$stateReducer === void 0 ? defaultReducer : _props$stateReducer,
988 _props$useControlledS = props.useControlledState,
989 useControlledState = _props$useControlledS === void 0 ? defaultUseControlledState : _props$useControlledS,
990 rest = _objectWithoutPropertiesLoose(props, ["initialState", "defaultColumn", "getSubRows", "getRowId", "stateReducer", "useControlledState"]);
991
992 return _extends({}, rest, {
993 initialState: initialState,
994 defaultColumn: defaultColumn,
995 getSubRows: getSubRows,
996 getRowId: getRowId,
997 stateReducer: stateReducer,
998 useControlledState: useControlledState
999 });
1000 }
1001
1002 var useTable = function useTable(props) {
1003 for (var _len = arguments.length, plugins = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1004 plugins[_key - 1] = arguments[_key];
1005 }
1006
1007 // Apply default props
1008 props = applyDefaults(props); // Add core plugins
1009
1010 plugins = [useColumnVisibility].concat(plugins); // Create the table instance
1011
1012 var instanceRef = React.useRef({}); // Create a getter for the instance (helps avoid a lot of potential memory leaks)
1013
1014 var getInstance = useGetLatest(instanceRef.current); // Assign the props, plugins and hooks to the instance
1015
1016 Object.assign(getInstance(), _extends({}, props, {
1017 plugins: plugins,
1018 hooks: makeDefaultPluginHooks()
1019 })); // Allow plugins to register hooks as early as possible
1020
1021 plugins.filter(Boolean).forEach(function (plugin) {
1022 plugin(getInstance().hooks);
1023 }); // Consume all hooks and make a getter for them
1024
1025 var getHooks = useGetLatest(getInstance().hooks);
1026 getInstance().getHooks = getHooks;
1027 delete getInstance().hooks; // Allow useOptions hooks to modify the options coming into the table
1028
1029 Object.assign(getInstance(), reduceHooks(getHooks().useOptions, applyDefaults(props)));
1030
1031 var _getInstance = getInstance(),
1032 data = _getInstance.data,
1033 userColumns = _getInstance.columns,
1034 initialState = _getInstance.initialState,
1035 defaultColumn = _getInstance.defaultColumn,
1036 getSubRows = _getInstance.getSubRows,
1037 getRowId = _getInstance.getRowId,
1038 stateReducer = _getInstance.stateReducer,
1039 useControlledState = _getInstance.useControlledState; // Setup user reducer ref
1040
1041
1042 var getStateReducer = useGetLatest(stateReducer); // Build the reducer
1043
1044 var reducer = React.useCallback(function (state, action) {
1045 // Detect invalid actions
1046 if (!action.type) {
1047 console.info({
1048 action: action
1049 });
1050 throw new Error('Unknown Action 👆');
1051 } // Reduce the state from all plugin reducers
1052
1053
1054 return [].concat(getHooks().stateReducers, Array.isArray(getStateReducer()) ? getStateReducer() : [getStateReducer()]).reduce(function (s, handler) {
1055 return handler(s, action, state, getInstance()) || s;
1056 }, state);
1057 }, [getHooks, getStateReducer, getInstance]); // Start the reducer
1058
1059 var _React$useReducer = React.useReducer(reducer, undefined, function () {
1060 return reducer(initialState, {
1061 type: actions.init
1062 });
1063 }),
1064 reducerState = _React$useReducer[0],
1065 dispatch = _React$useReducer[1]; // Allow the user to control the final state with hooks
1066
1067
1068 var state = reduceHooks([].concat(getHooks().useControlledState, [useControlledState]), reducerState, {
1069 instance: getInstance()
1070 });
1071 Object.assign(getInstance(), {
1072 state: state,
1073 dispatch: dispatch
1074 }); // Decorate All the columns
1075
1076 var columns = React.useMemo(function () {
1077 return linkColumnStructure(reduceHooks(getHooks().columns, userColumns, {
1078 instance: getInstance()
1079 }));
1080 }, [getHooks, getInstance, userColumns].concat(reduceHooks(getHooks().columnsDeps, [], {
1081 instance: getInstance()
1082 })));
1083 getInstance().columns = columns; // Get the flat list of all columns and allow hooks to decorate
1084 // those columns (and trigger this memoization via deps)
1085
1086 var allColumns = React.useMemo(function () {
1087 return reduceHooks(getHooks().allColumns, flattenColumns(columns), {
1088 instance: getInstance()
1089 }).map(assignColumnAccessor);
1090 }, [columns, getHooks, getInstance].concat(reduceHooks(getHooks().allColumnsDeps, [], {
1091 instance: getInstance()
1092 })));
1093 getInstance().allColumns = allColumns; // Access the row model using initial columns
1094
1095 var _React$useMemo = React.useMemo(function () {
1096 var rows = [];
1097 var flatRows = [];
1098 var rowsById = {};
1099 var allColumnsQueue = [].concat(allColumns);
1100
1101 while (allColumnsQueue.length) {
1102 var column = allColumnsQueue.shift();
1103 accessRowsForColumn({
1104 data: data,
1105 rows: rows,
1106 flatRows: flatRows,
1107 rowsById: rowsById,
1108 column: column,
1109 getRowId: getRowId,
1110 getSubRows: getSubRows,
1111 accessValueHooks: getHooks().accessValue,
1112 getInstance: getInstance
1113 });
1114 }
1115
1116 return [rows, flatRows, rowsById];
1117 }, [allColumns, data, getRowId, getSubRows, getHooks, getInstance]),
1118 rows = _React$useMemo[0],
1119 flatRows = _React$useMemo[1],
1120 rowsById = _React$useMemo[2];
1121
1122 Object.assign(getInstance(), {
1123 rows: rows,
1124 initialRows: [].concat(rows),
1125 flatRows: flatRows,
1126 rowsById: rowsById // materializedColumns,
1127
1128 });
1129 loopHooks(getHooks().useInstanceAfterData, getInstance()); // Get the flat list of all columns AFTER the rows
1130 // have been access, and allow hooks to decorate
1131 // those columns (and trigger this memoization via deps)
1132
1133 var visibleColumns = React.useMemo(function () {
1134 return reduceHooks(getHooks().visibleColumns, allColumns, {
1135 instance: getInstance()
1136 }).map(function (d) {
1137 return decorateColumn(d, defaultColumn);
1138 });
1139 }, [getHooks, allColumns, getInstance, defaultColumn].concat(reduceHooks(getHooks().visibleColumnsDeps, [], {
1140 instance: getInstance()
1141 }))); // Combine new visible columns with all columns
1142
1143 allColumns = React.useMemo(function () {
1144 var columns = [].concat(visibleColumns);
1145 allColumns.forEach(function (column) {
1146 if (!columns.find(function (d) {
1147 return d.id === column.id;
1148 })) {
1149 columns.push(column);
1150 }
1151 });
1152 return columns;
1153 }, [allColumns, visibleColumns]);
1154 getInstance().allColumns = allColumns;
1155
1156 {
1157 var duplicateColumns = allColumns.filter(function (column, i) {
1158 return allColumns.findIndex(function (d) {
1159 return d.id === column.id;
1160 }) !== i;
1161 });
1162
1163 if (duplicateColumns.length) {
1164 console.info(allColumns);
1165 throw new Error("Duplicate columns were found with ids: \"" + duplicateColumns.map(function (d) {
1166 return d.id;
1167 }).join(', ') + "\" in the columns array above");
1168 }
1169 } // Make the headerGroups
1170
1171
1172 var headerGroups = React.useMemo(function () {
1173 return reduceHooks(getHooks().headerGroups, makeHeaderGroups(visibleColumns, defaultColumn), getInstance());
1174 }, [getHooks, visibleColumns, defaultColumn, getInstance].concat(reduceHooks(getHooks().headerGroupsDeps, [], {
1175 instance: getInstance()
1176 })));
1177 getInstance().headerGroups = headerGroups; // Get the first level of headers
1178
1179 var headers = React.useMemo(function () {
1180 return headerGroups.length ? headerGroups[0].headers : [];
1181 }, [headerGroups]);
1182 getInstance().headers = headers; // Provide a flat header list for utilities
1183
1184 getInstance().flatHeaders = headerGroups.reduce(function (all, headerGroup) {
1185 return [].concat(all, headerGroup.headers);
1186 }, []);
1187 loopHooks(getHooks().useInstanceBeforeDimensions, getInstance()); // Filter columns down to visible ones
1188
1189 var visibleColumnsDep = visibleColumns.filter(function (d) {
1190 return d.isVisible;
1191 }).map(function (d) {
1192 return d.id;
1193 }).sort().join('_');
1194 visibleColumns = React.useMemo(function () {
1195 return visibleColumns.filter(function (d) {
1196 return d.isVisible;
1197 });
1198 }, // eslint-disable-next-line react-hooks/exhaustive-deps
1199 [visibleColumns, visibleColumnsDep]);
1200 getInstance().visibleColumns = visibleColumns; // Header Visibility is needed by this point
1201
1202 var _calculateHeaderWidth = calculateHeaderWidths(headers),
1203 totalColumnsMinWidth = _calculateHeaderWidth[0],
1204 totalColumnsWidth = _calculateHeaderWidth[1],
1205 totalColumnsMaxWidth = _calculateHeaderWidth[2];
1206
1207 getInstance().totalColumnsMinWidth = totalColumnsMinWidth;
1208 getInstance().totalColumnsWidth = totalColumnsWidth;
1209 getInstance().totalColumnsMaxWidth = totalColumnsMaxWidth;
1210 loopHooks(getHooks().useInstance, getInstance()) // Each materialized header needs to be assigned a render function and other
1211 // prop getter properties here.
1212 ;
1213 [].concat(getInstance().flatHeaders, getInstance().allColumns).forEach(function (column) {
1214 // Give columns/headers rendering power
1215 column.render = makeRenderer(getInstance(), column); // Give columns/headers a default getHeaderProps
1216
1217 column.getHeaderProps = makePropGetter(getHooks().getHeaderProps, {
1218 instance: getInstance(),
1219 column: column
1220 }); // Give columns/headers a default getFooterProps
1221
1222 column.getFooterProps = makePropGetter(getHooks().getFooterProps, {
1223 instance: getInstance(),
1224 column: column
1225 });
1226 });
1227 getInstance().headerGroups = React.useMemo(function () {
1228 return headerGroups.filter(function (headerGroup, i) {
1229 // Filter out any headers and headerGroups that don't have visible columns
1230 headerGroup.headers = headerGroup.headers.filter(function (column) {
1231 var recurse = function recurse(headers) {
1232 return headers.filter(function (column) {
1233 if (column.headers) {
1234 return recurse(column.headers);
1235 }
1236
1237 return column.isVisible;
1238 }).length;
1239 };
1240
1241 if (column.headers) {
1242 return recurse(column.headers);
1243 }
1244
1245 return column.isVisible;
1246 }); // Give headerGroups getRowProps
1247
1248 if (headerGroup.headers.length) {
1249 headerGroup.getHeaderGroupProps = makePropGetter(getHooks().getHeaderGroupProps, {
1250 instance: getInstance(),
1251 headerGroup: headerGroup,
1252 index: i
1253 });
1254 headerGroup.getFooterGroupProps = makePropGetter(getHooks().getFooterGroupProps, {
1255 instance: getInstance(),
1256 headerGroup: headerGroup,
1257 index: i
1258 });
1259 return true;
1260 }
1261
1262 return false;
1263 });
1264 }, [headerGroups, getInstance, getHooks]);
1265 getInstance().footerGroups = [].concat(getInstance().headerGroups).reverse(); // The prepareRow function is absolutely necessary and MUST be called on
1266 // any rows the user wishes to be displayed.
1267
1268 getInstance().prepareRow = React.useCallback(function (row) {
1269 row.getRowProps = makePropGetter(getHooks().getRowProps, {
1270 instance: getInstance(),
1271 row: row
1272 }); // Build the visible cells for each row
1273
1274 row.allCells = allColumns.map(function (column) {
1275 var value = row.values[column.id];
1276 var cell = {
1277 column: column,
1278 row: row,
1279 value: value
1280 }; // Give each cell a getCellProps base
1281
1282 cell.getCellProps = makePropGetter(getHooks().getCellProps, {
1283 instance: getInstance(),
1284 cell: cell
1285 }); // Give each cell a renderer function (supports multiple renderers)
1286
1287 cell.render = makeRenderer(getInstance(), column, {
1288 row: row,
1289 cell: cell,
1290 value: value
1291 });
1292 return cell;
1293 });
1294 row.cells = visibleColumns.map(function (column) {
1295 return row.allCells.find(function (cell) {
1296 return cell.column.id === column.id;
1297 });
1298 }); // need to apply any row specific hooks (useExpanded requires this)
1299
1300 loopHooks(getHooks().prepareRow, row, {
1301 instance: getInstance()
1302 });
1303 }, [getHooks, getInstance, allColumns, visibleColumns]);
1304 getInstance().getTableProps = makePropGetter(getHooks().getTableProps, {
1305 instance: getInstance()
1306 });
1307 getInstance().getTableBodyProps = makePropGetter(getHooks().getTableBodyProps, {
1308 instance: getInstance()
1309 });
1310 loopHooks(getHooks().useFinalInstance, getInstance());
1311 return getInstance();
1312 };
1313
1314 function calculateHeaderWidths(headers, left) {
1315 if (left === void 0) {
1316 left = 0;
1317 }
1318
1319 var sumTotalMinWidth = 0;
1320 var sumTotalWidth = 0;
1321 var sumTotalMaxWidth = 0;
1322 var sumTotalFlexWidth = 0;
1323 headers.forEach(function (header) {
1324 var subHeaders = header.headers;
1325 header.totalLeft = left;
1326
1327 if (subHeaders && subHeaders.length) {
1328 var _calculateHeaderWidth2 = calculateHeaderWidths(subHeaders, left),
1329 totalMinWidth = _calculateHeaderWidth2[0],
1330 totalWidth = _calculateHeaderWidth2[1],
1331 totalMaxWidth = _calculateHeaderWidth2[2],
1332 totalFlexWidth = _calculateHeaderWidth2[3];
1333
1334 header.totalMinWidth = totalMinWidth;
1335 header.totalWidth = totalWidth;
1336 header.totalMaxWidth = totalMaxWidth;
1337 header.totalFlexWidth = totalFlexWidth;
1338 } else {
1339 header.totalMinWidth = header.minWidth;
1340 header.totalWidth = Math.min(Math.max(header.minWidth, header.width), header.maxWidth);
1341 header.totalMaxWidth = header.maxWidth;
1342 header.totalFlexWidth = header.canResize ? header.totalWidth : 0;
1343 }
1344
1345 if (header.isVisible) {
1346 left += header.totalWidth;
1347 sumTotalMinWidth += header.totalMinWidth;
1348 sumTotalWidth += header.totalWidth;
1349 sumTotalMaxWidth += header.totalMaxWidth;
1350 sumTotalFlexWidth += header.totalFlexWidth;
1351 }
1352 });
1353 return [sumTotalMinWidth, sumTotalWidth, sumTotalMaxWidth, sumTotalFlexWidth];
1354 }
1355
1356 function accessRowsForColumn(_ref) {
1357 var data = _ref.data,
1358 rows = _ref.rows,
1359 flatRows = _ref.flatRows,
1360 rowsById = _ref.rowsById,
1361 column = _ref.column,
1362 getRowId = _ref.getRowId,
1363 getSubRows = _ref.getSubRows,
1364 accessValueHooks = _ref.accessValueHooks,
1365 getInstance = _ref.getInstance;
1366
1367 // Access the row's data column-by-column
1368 // We do it this way so we can incrementally add materialized
1369 // columns after the first pass and avoid excessive looping
1370 var accessRow = function accessRow(originalRow, rowIndex, depth, parent, parentRows) {
1371 if (depth === void 0) {
1372 depth = 0;
1373 }
1374
1375 // Keep the original reference around
1376 var original = originalRow;
1377 var id = getRowId(originalRow, rowIndex, parent);
1378 var row = rowsById[id]; // If the row hasn't been created, let's make it
1379
1380 if (!row) {
1381 row = {
1382 id: id,
1383 original: original,
1384 index: rowIndex,
1385 depth: depth,
1386 cells: [{}] // This is a dummy cell
1387
1388 }; // Override common array functions (and the dummy cell's getCellProps function)
1389 // to show an error if it is accessed without calling prepareRow
1390
1391 row.cells.map = unpreparedAccessWarning;
1392 row.cells.filter = unpreparedAccessWarning;
1393 row.cells.forEach = unpreparedAccessWarning;
1394 row.cells[0].getCellProps = unpreparedAccessWarning; // Create the cells and values
1395
1396 row.values = {}; // Push this row into the parentRows array
1397
1398 parentRows.push(row); // Keep track of every row in a flat array
1399
1400 flatRows.push(row); // Also keep track of every row by its ID
1401
1402 rowsById[id] = row; // Get the original subrows
1403
1404 row.originalSubRows = getSubRows(originalRow, rowIndex); // Then recursively access them
1405
1406 if (row.originalSubRows) {
1407 var subRows = [];
1408 row.originalSubRows.forEach(function (d, i) {
1409 return accessRow(d, i, depth + 1, row, subRows);
1410 }); // Keep the new subRows array on the row
1411
1412 row.subRows = subRows;
1413 }
1414 } else if (row.subRows) {
1415 // If the row exists, then it's already been accessed
1416 // Keep recursing, but don't worry about passing the
1417 // accumlator array (those rows already exist)
1418 row.originalSubRows.forEach(function (d, i) {
1419 return accessRow(d, i, depth + 1, row);
1420 });
1421 } // If the column has an accessor, use it to get a value
1422
1423
1424 if (column.accessor) {
1425 row.values[column.id] = column.accessor(originalRow, rowIndex, row, parentRows, data);
1426 } // Allow plugins to manipulate the column value
1427
1428
1429 row.values[column.id] = reduceHooks(accessValueHooks, row.values[column.id], {
1430 row: row,
1431 column: column,
1432 instance: getInstance()
1433 }, true);
1434 };
1435
1436 data.forEach(function (originalRow, rowIndex) {
1437 return accessRow(originalRow, rowIndex, 0, undefined, rows);
1438 });
1439 }
1440
1441 actions.resetExpanded = 'resetExpanded';
1442 actions.toggleRowExpanded = 'toggleRowExpanded';
1443 actions.toggleAllRowsExpanded = 'toggleAllRowsExpanded';
1444 var useExpanded = function useExpanded(hooks) {
1445 hooks.getToggleAllRowsExpandedProps = [defaultGetToggleAllRowsExpandedProps];
1446 hooks.getToggleRowExpandedProps = [defaultGetToggleRowExpandedProps];
1447 hooks.stateReducers.push(reducer$1);
1448 hooks.useInstance.push(useInstance$1);
1449 hooks.prepareRow.push(prepareRow);
1450 };
1451 useExpanded.pluginName = 'useExpanded';
1452
1453 var defaultGetToggleAllRowsExpandedProps = function defaultGetToggleAllRowsExpandedProps(props, _ref) {
1454 var instance = _ref.instance;
1455 return [props, {
1456 onClick: function onClick(e) {
1457 instance.toggleAllRowsExpanded();
1458 },
1459 style: {
1460 cursor: 'pointer'
1461 },
1462 title: 'Toggle All Rows Expanded'
1463 }];
1464 };
1465
1466 var defaultGetToggleRowExpandedProps = function defaultGetToggleRowExpandedProps(props, _ref2) {
1467 var row = _ref2.row;
1468 return [props, {
1469 onClick: function onClick() {
1470 row.toggleRowExpanded();
1471 },
1472 style: {
1473 cursor: 'pointer'
1474 },
1475 title: 'Toggle Row Expanded'
1476 }];
1477 }; // Reducer
1478
1479
1480 function reducer$1(state, action, previousState, instance) {
1481 if (action.type === actions.init) {
1482 return _extends({
1483 expanded: {}
1484 }, state);
1485 }
1486
1487 if (action.type === actions.resetExpanded) {
1488 return _extends({}, state, {
1489 expanded: instance.initialState.expanded || {}
1490 });
1491 }
1492
1493 if (action.type === actions.toggleAllRowsExpanded) {
1494 var value = action.value;
1495 var rowsById = instance.rowsById;
1496 var isAllRowsExpanded = Object.keys(rowsById).length === Object.keys(state.expanded).length;
1497 var expandAll = typeof value !== 'undefined' ? value : !isAllRowsExpanded;
1498
1499 if (expandAll) {
1500 var expanded = {};
1501 Object.keys(rowsById).forEach(function (rowId) {
1502 expanded[rowId] = true;
1503 });
1504 return _extends({}, state, {
1505 expanded: expanded
1506 });
1507 }
1508
1509 return _extends({}, state, {
1510 expanded: {}
1511 });
1512 }
1513
1514 if (action.type === actions.toggleRowExpanded) {
1515 var id = action.id,
1516 setExpanded = action.value;
1517 var exists = state.expanded[id];
1518 var shouldExist = typeof setExpanded !== 'undefined' ? setExpanded : !exists;
1519
1520 if (!exists && shouldExist) {
1521 var _extends2;
1522
1523 return _extends({}, state, {
1524 expanded: _extends({}, state.expanded, (_extends2 = {}, _extends2[id] = true, _extends2))
1525 });
1526 } else if (exists && !shouldExist) {
1527 var _state$expanded = state.expanded,
1528 _ = _state$expanded[id],
1529 rest = _objectWithoutPropertiesLoose(_state$expanded, [id].map(_toPropertyKey));
1530
1531 return _extends({}, state, {
1532 expanded: rest
1533 });
1534 } else {
1535 return state;
1536 }
1537 }
1538 }
1539
1540 function useInstance$1(instance) {
1541 var data = instance.data,
1542 rows = instance.rows,
1543 rowsById = instance.rowsById,
1544 _instance$manualExpan = instance.manualExpandedKey,
1545 manualExpandedKey = _instance$manualExpan === void 0 ? 'expanded' : _instance$manualExpan,
1546 _instance$paginateExp = instance.paginateExpandedRows,
1547 paginateExpandedRows = _instance$paginateExp === void 0 ? true : _instance$paginateExp,
1548 _instance$expandSubRo = instance.expandSubRows,
1549 expandSubRows = _instance$expandSubRo === void 0 ? true : _instance$expandSubRo,
1550 _instance$autoResetEx = instance.autoResetExpanded,
1551 autoResetExpanded = _instance$autoResetEx === void 0 ? true : _instance$autoResetEx,
1552 getHooks = instance.getHooks,
1553 plugins = instance.plugins,
1554 expanded = instance.state.expanded,
1555 dispatch = instance.dispatch;
1556 ensurePluginOrder(plugins, ['useSortBy', 'useGroupBy', 'usePivotColumns', 'useGlobalFilter'], 'useExpanded');
1557 var getAutoResetExpanded = useGetLatest(autoResetExpanded);
1558 var isAllRowsExpanded = Boolean(Object.keys(rowsById).length && Object.keys(expanded).length);
1559
1560 if (isAllRowsExpanded) {
1561 if (Object.keys(rowsById).some(function (id) {
1562 return !expanded[id];
1563 })) {
1564 isAllRowsExpanded = false;
1565 }
1566 } // Bypass any effects from firing when this changes
1567
1568
1569 useMountedLayoutEffect(function () {
1570 if (getAutoResetExpanded()) {
1571 dispatch({
1572 type: actions.resetExpanded
1573 });
1574 }
1575 }, [dispatch, data]);
1576 var toggleRowExpanded = React.useCallback(function (id, value) {
1577 dispatch({
1578 type: actions.toggleRowExpanded,
1579 id: id,
1580 value: value
1581 });
1582 }, [dispatch]);
1583 var toggleAllRowsExpanded = React.useCallback(function (value) {
1584 return dispatch({
1585 type: actions.toggleAllRowsExpanded,
1586 value: value
1587 });
1588 }, [dispatch]);
1589 var expandedRows = React.useMemo(function () {
1590 if (paginateExpandedRows) {
1591 return expandRows(rows, {
1592 manualExpandedKey: manualExpandedKey,
1593 expanded: expanded,
1594 expandSubRows: expandSubRows
1595 });
1596 }
1597
1598 return rows;
1599 }, [paginateExpandedRows, rows, manualExpandedKey, expanded, expandSubRows]);
1600 var expandedDepth = React.useMemo(function () {
1601 return findExpandedDepth(expanded);
1602 }, [expanded]);
1603 var getInstance = useGetLatest(instance);
1604 var getToggleAllRowsExpandedProps = makePropGetter(getHooks().getToggleAllRowsExpandedProps, {
1605 instance: getInstance()
1606 });
1607 Object.assign(instance, {
1608 preExpandedRows: rows,
1609 expandedRows: expandedRows,
1610 rows: expandedRows,
1611 expandedDepth: expandedDepth,
1612 isAllRowsExpanded: isAllRowsExpanded,
1613 toggleRowExpanded: toggleRowExpanded,
1614 toggleAllRowsExpanded: toggleAllRowsExpanded,
1615 getToggleAllRowsExpandedProps: getToggleAllRowsExpandedProps
1616 });
1617 }
1618
1619 function prepareRow(row, _ref3) {
1620 var getHooks = _ref3.instance.getHooks,
1621 instance = _ref3.instance;
1622
1623 row.toggleRowExpanded = function (set) {
1624 return instance.toggleRowExpanded(row.id, set);
1625 };
1626
1627 row.getToggleRowExpandedProps = makePropGetter(getHooks().getToggleRowExpandedProps, {
1628 instance: instance,
1629 row: row
1630 });
1631 }
1632
1633 function findExpandedDepth(expanded) {
1634 var maxDepth = 0;
1635 Object.keys(expanded).forEach(function (id) {
1636 var splitId = id.split('.');
1637 maxDepth = Math.max(maxDepth, splitId.length);
1638 });
1639 return maxDepth;
1640 }
1641
1642 var text = function text(rows, ids, filterValue) {
1643 rows = rows.filter(function (row) {
1644 return ids.some(function (id) {
1645 var rowValue = row.values[id];
1646 return String(rowValue).toLowerCase().includes(String(filterValue).toLowerCase());
1647 });
1648 });
1649 return rows;
1650 };
1651
1652 text.autoRemove = function (val) {
1653 return !val;
1654 };
1655
1656 var exactText = function exactText(rows, ids, filterValue) {
1657 return rows.filter(function (row) {
1658 return ids.some(function (id) {
1659 var rowValue = row.values[id];
1660 return rowValue !== undefined ? String(rowValue).toLowerCase() === String(filterValue).toLowerCase() : true;
1661 });
1662 });
1663 };
1664
1665 exactText.autoRemove = function (val) {
1666 return !val;
1667 };
1668
1669 var exactTextCase = function exactTextCase(rows, ids, filterValue) {
1670 return rows.filter(function (row) {
1671 return ids.some(function (id) {
1672 var rowValue = row.values[id];
1673 return rowValue !== undefined ? String(rowValue) === String(filterValue) : true;
1674 });
1675 });
1676 };
1677
1678 exactTextCase.autoRemove = function (val) {
1679 return !val;
1680 };
1681
1682 var includes = function includes(rows, ids, filterValue) {
1683 return rows.filter(function (row) {
1684 return ids.some(function (id) {
1685 var rowValue = row.values[id];
1686 return rowValue.includes(filterValue);
1687 });
1688 });
1689 };
1690
1691 includes.autoRemove = function (val) {
1692 return !val || !val.length;
1693 };
1694
1695 var includesAll = function includesAll(rows, ids, filterValue) {
1696 return rows.filter(function (row) {
1697 return ids.some(function (id) {
1698 var rowValue = row.values[id];
1699 return rowValue && rowValue.length && filterValue.every(function (val) {
1700 return rowValue.includes(val);
1701 });
1702 });
1703 });
1704 };
1705
1706 includesAll.autoRemove = function (val) {
1707 return !val || !val.length;
1708 };
1709
1710 var includesSome = function includesSome(rows, ids, filterValue) {
1711 return rows.filter(function (row) {
1712 return ids.some(function (id) {
1713 var rowValue = row.values[id];
1714 return rowValue && rowValue.length && filterValue.some(function (val) {
1715 return rowValue.includes(val);
1716 });
1717 });
1718 });
1719 };
1720
1721 includesSome.autoRemove = function (val) {
1722 return !val || !val.length;
1723 };
1724
1725 var includesValue = function includesValue(rows, ids, filterValue) {
1726 return rows.filter(function (row) {
1727 return ids.some(function (id) {
1728 var rowValue = row.values[id];
1729 return filterValue.includes(rowValue);
1730 });
1731 });
1732 };
1733
1734 includesValue.autoRemove = function (val) {
1735 return !val || !val.length;
1736 };
1737
1738 var exact = function exact(rows, ids, filterValue) {
1739 return rows.filter(function (row) {
1740 return ids.some(function (id) {
1741 var rowValue = row.values[id];
1742 return rowValue === filterValue;
1743 });
1744 });
1745 };
1746
1747 exact.autoRemove = function (val) {
1748 return typeof val === 'undefined';
1749 };
1750
1751 var equals = function equals(rows, ids, filterValue) {
1752 return rows.filter(function (row) {
1753 return ids.some(function (id) {
1754 var rowValue = row.values[id]; // eslint-disable-next-line eqeqeq
1755
1756 return rowValue == filterValue;
1757 });
1758 });
1759 };
1760
1761 equals.autoRemove = function (val) {
1762 return val == null;
1763 };
1764
1765 var between = function between(rows, ids, filterValue) {
1766 var _ref = filterValue || [],
1767 min = _ref[0],
1768 max = _ref[1];
1769
1770 min = typeof min === 'number' ? min : -Infinity;
1771 max = typeof max === 'number' ? max : Infinity;
1772
1773 if (min > max) {
1774 var temp = min;
1775 min = max;
1776 max = temp;
1777 }
1778
1779 return rows.filter(function (row) {
1780 return ids.some(function (id) {
1781 var rowValue = row.values[id];
1782 return rowValue >= min && rowValue <= max;
1783 });
1784 });
1785 };
1786
1787 between.autoRemove = function (val) {
1788 return !val || typeof val[0] !== 'number' && typeof val[1] !== 'number';
1789 };
1790
1791 var filterTypes = /*#__PURE__*/Object.freeze({
1792 __proto__: null,
1793 text: text,
1794 exactText: exactText,
1795 exactTextCase: exactTextCase,
1796 includes: includes,
1797 includesAll: includesAll,
1798 includesSome: includesSome,
1799 includesValue: includesValue,
1800 exact: exact,
1801 equals: equals,
1802 between: between
1803 });
1804
1805 actions.resetFilters = 'resetFilters';
1806 actions.setFilter = 'setFilter';
1807 actions.setAllFilters = 'setAllFilters';
1808 var useFilters = function useFilters(hooks) {
1809 hooks.stateReducers.push(reducer$2);
1810 hooks.useInstance.push(useInstance$2);
1811 };
1812 useFilters.pluginName = 'useFilters';
1813
1814 function reducer$2(state, action, previousState, instance) {
1815 if (action.type === actions.init) {
1816 return _extends({
1817 filters: []
1818 }, state);
1819 }
1820
1821 if (action.type === actions.resetFilters) {
1822 return _extends({}, state, {
1823 filters: instance.initialState.filters || []
1824 });
1825 }
1826
1827 if (action.type === actions.setFilter) {
1828 var columnId = action.columnId,
1829 filterValue = action.filterValue;
1830 var allColumns = instance.allColumns,
1831 userFilterTypes = instance.filterTypes;
1832 var column = allColumns.find(function (d) {
1833 return d.id === columnId;
1834 });
1835
1836 if (!column) {
1837 throw new Error("React-Table: Could not find a column with id: " + columnId);
1838 }
1839
1840 var filterMethod = getFilterMethod(column.filter, userFilterTypes || {}, filterTypes);
1841 var previousfilter = state.filters.find(function (d) {
1842 return d.id === columnId;
1843 });
1844 var newFilter = functionalUpdate(filterValue, previousfilter && previousfilter.value); //
1845
1846 if (shouldAutoRemoveFilter(filterMethod.autoRemove, newFilter, column)) {
1847 return _extends({}, state, {
1848 filters: state.filters.filter(function (d) {
1849 return d.id !== columnId;
1850 })
1851 });
1852 }
1853
1854 if (previousfilter) {
1855 return _extends({}, state, {
1856 filters: state.filters.map(function (d) {
1857 if (d.id === columnId) {
1858 return {
1859 id: columnId,
1860 value: newFilter
1861 };
1862 }
1863
1864 return d;
1865 })
1866 });
1867 }
1868
1869 return _extends({}, state, {
1870 filters: [].concat(state.filters, [{
1871 id: columnId,
1872 value: newFilter
1873 }])
1874 });
1875 }
1876
1877 if (action.type === actions.setAllFilters) {
1878 var filters = action.filters;
1879 var _allColumns = instance.allColumns,
1880 _userFilterTypes = instance.filterTypes;
1881 return _extends({}, state, {
1882 // Filter out undefined values
1883 filters: functionalUpdate(filters, state.filters).filter(function (filter) {
1884 var column = _allColumns.find(function (d) {
1885 return d.id === filter.id;
1886 });
1887
1888 var filterMethod = getFilterMethod(column.filter, _userFilterTypes || {}, filterTypes);
1889
1890 if (shouldAutoRemoveFilter(filterMethod.autoRemove, filter.value, column)) {
1891 return false;
1892 }
1893
1894 return true;
1895 })
1896 });
1897 }
1898 }
1899
1900 function useInstance$2(instance) {
1901 var data = instance.data,
1902 rows = instance.rows,
1903 flatRows = instance.flatRows,
1904 rowsById = instance.rowsById,
1905 allColumns = instance.allColumns,
1906 userFilterTypes = instance.filterTypes,
1907 manualFilters = instance.manualFilters,
1908 _instance$defaultCanF = instance.defaultCanFilter,
1909 defaultCanFilter = _instance$defaultCanF === void 0 ? false : _instance$defaultCanF,
1910 disableFilters = instance.disableFilters,
1911 filters = instance.state.filters,
1912 dispatch = instance.dispatch,
1913 _instance$autoResetFi = instance.autoResetFilters,
1914 autoResetFilters = _instance$autoResetFi === void 0 ? true : _instance$autoResetFi;
1915 var setFilter = React.useCallback(function (columnId, filterValue) {
1916 dispatch({
1917 type: actions.setFilter,
1918 columnId: columnId,
1919 filterValue: filterValue
1920 });
1921 }, [dispatch]);
1922 var setAllFilters = React.useCallback(function (filters) {
1923 dispatch({
1924 type: actions.setAllFilters,
1925 filters: filters
1926 });
1927 }, [dispatch]);
1928 allColumns.forEach(function (column) {
1929 var id = column.id,
1930 accessor = column.accessor,
1931 columnDefaultCanFilter = column.defaultCanFilter,
1932 columnDisableFilters = column.disableFilters; // Determine if a column is filterable
1933
1934 column.canFilter = accessor ? getFirstDefined(columnDisableFilters === true ? false : undefined, disableFilters === true ? false : undefined, true) : getFirstDefined(columnDefaultCanFilter, defaultCanFilter, false); // Provide the column a way of updating the filter value
1935
1936 column.setFilter = function (val) {
1937 return setFilter(column.id, val);
1938 }; // Provide the current filter value to the column for
1939 // convenience
1940
1941
1942 var found = filters.find(function (d) {
1943 return d.id === id;
1944 });
1945 column.filterValue = found && found.value;
1946 });
1947
1948 var _React$useMemo = React.useMemo(function () {
1949 if (manualFilters || !filters.length) {
1950 return [rows, flatRows, rowsById];
1951 }
1952
1953 var filteredFlatRows = [];
1954 var filteredRowsById = {}; // Filters top level and nested rows
1955
1956 var filterRows = function filterRows(rows, depth) {
1957 if (depth === void 0) {
1958 depth = 0;
1959 }
1960
1961 var filteredRows = rows;
1962 filteredRows = filters.reduce(function (filteredSoFar, _ref) {
1963 var columnId = _ref.id,
1964 filterValue = _ref.value;
1965 // Find the filters column
1966 var column = allColumns.find(function (d) {
1967 return d.id === columnId;
1968 });
1969
1970 if (!column) {
1971 return filteredSoFar;
1972 }
1973
1974 if (depth === 0) {
1975 column.preFilteredRows = filteredSoFar;
1976 }
1977
1978 var filterMethod = getFilterMethod(column.filter, userFilterTypes || {}, filterTypes);
1979
1980 if (!filterMethod) {
1981 console.warn("Could not find a valid 'column.filter' for column with the ID: " + column.id + ".");
1982 return filteredSoFar;
1983 } // Pass the rows, id, filterValue and column to the filterMethod
1984 // to get the filtered rows back
1985
1986
1987 column.filteredRows = filterMethod(filteredSoFar, [columnId], filterValue);
1988 return column.filteredRows;
1989 }, rows); // Apply the filter to any subRows
1990 // We technically could do this recursively in the above loop,
1991 // but that would severely hinder the API for the user, since they
1992 // would be required to do that recursion in some scenarios
1993
1994 filteredRows.forEach(function (row) {
1995 filteredFlatRows.push(row);
1996 filteredRowsById[row.id] = row;
1997
1998 if (!row.subRows) {
1999 return;
2000 }
2001
2002 row.subRows = row.subRows && row.subRows.length > 0 ? filterRows(row.subRows, depth + 1) : row.subRows;
2003 });
2004 return filteredRows;
2005 };
2006
2007 return [filterRows(rows), filteredFlatRows, filteredRowsById];
2008 }, [manualFilters, filters, rows, flatRows, rowsById, allColumns, userFilterTypes]),
2009 filteredRows = _React$useMemo[0],
2010 filteredFlatRows = _React$useMemo[1],
2011 filteredRowsById = _React$useMemo[2];
2012
2013 React.useMemo(function () {
2014 // Now that each filtered column has it's partially filtered rows,
2015 // lets assign the final filtered rows to all of the other columns
2016 var nonFilteredColumns = allColumns.filter(function (column) {
2017 return !filters.find(function (d) {
2018 return d.id === column.id;
2019 });
2020 }); // This essentially enables faceted filter options to be built easily
2021 // using every column's preFilteredRows value
2022
2023 nonFilteredColumns.forEach(function (column) {
2024 column.preFilteredRows = filteredRows;
2025 column.filteredRows = filteredRows;
2026 });
2027 }, [filteredRows, filters, allColumns]);
2028 var getAutoResetFilters = useGetLatest(autoResetFilters);
2029 useMountedLayoutEffect(function () {
2030 if (getAutoResetFilters()) {
2031 dispatch({
2032 type: actions.resetFilters
2033 });
2034 }
2035 }, [dispatch, manualFilters ? null : data]);
2036 Object.assign(instance, {
2037 preFilteredRows: rows,
2038 preFilteredFlatRows: flatRows,
2039 preFilteredRowsById: rowsById,
2040 filteredRows: filteredRows,
2041 filteredFlatRows: filteredFlatRows,
2042 filteredRowsById: filteredRowsById,
2043 rows: filteredRows,
2044 flatRows: filteredFlatRows,
2045 rowsById: filteredRowsById,
2046 setFilter: setFilter,
2047 setAllFilters: setAllFilters
2048 });
2049 }
2050
2051 actions.resetGlobalFilter = 'resetGlobalFilter';
2052 actions.setGlobalFilter = 'setGlobalFilter';
2053 var useGlobalFilter = function useGlobalFilter(hooks) {
2054 hooks.stateReducers.push(reducer$3);
2055 hooks.useInstance.push(useInstance$3);
2056 };
2057 useGlobalFilter.pluginName = 'useGlobalFilter';
2058
2059 function reducer$3(state, action, previousState, instance) {
2060 if (action.type === actions.resetGlobalFilter) {
2061 return _extends({}, state, {
2062 globalFilter: instance.initialState.globalFilter || undefined
2063 });
2064 }
2065
2066 if (action.type === actions.setGlobalFilter) {
2067 var filterValue = action.filterValue;
2068 var userFilterTypes = instance.userFilterTypes;
2069 var filterMethod = getFilterMethod(instance.globalFilter, userFilterTypes || {}, filterTypes);
2070 var newFilter = functionalUpdate(filterValue, state.globalFilter); //
2071
2072 if (shouldAutoRemoveFilter(filterMethod.autoRemove, newFilter)) {
2073 var globalFilter = state.globalFilter,
2074 stateWithoutGlobalFilter = _objectWithoutPropertiesLoose(state, ["globalFilter"]);
2075
2076 return stateWithoutGlobalFilter;
2077 }
2078
2079 return _extends({}, state, {
2080 globalFilter: newFilter
2081 });
2082 }
2083 }
2084
2085 function useInstance$3(instance) {
2086 var data = instance.data,
2087 rows = instance.rows,
2088 flatRows = instance.flatRows,
2089 rowsById = instance.rowsById,
2090 allColumns = instance.allColumns,
2091 userFilterTypes = instance.filterTypes,
2092 globalFilter = instance.globalFilter,
2093 manualGlobalFilter = instance.manualGlobalFilter,
2094 globalFilterValue = instance.state.globalFilter,
2095 dispatch = instance.dispatch,
2096 _instance$autoResetGl = instance.autoResetGlobalFilter,
2097 autoResetGlobalFilter = _instance$autoResetGl === void 0 ? true : _instance$autoResetGl,
2098 disableGlobalFilter = instance.disableGlobalFilter;
2099 var setGlobalFilter = React.useCallback(function (filterValue) {
2100 dispatch({
2101 type: actions.setGlobalFilter,
2102 filterValue: filterValue
2103 });
2104 }, [dispatch]); // TODO: Create a filter cache for incremental high speed multi-filtering
2105 // This gets pretty complicated pretty fast, since you have to maintain a
2106 // cache for each row group (top-level rows, and each row's recursive subrows)
2107 // This would make multi-filtering a lot faster though. Too far?
2108
2109 var _React$useMemo = React.useMemo(function () {
2110 if (manualGlobalFilter || typeof globalFilterValue === 'undefined') {
2111 return [rows, flatRows, rowsById];
2112 }
2113
2114 var filteredFlatRows = [];
2115 var filteredRowsById = {};
2116 var filterMethod = getFilterMethod(globalFilter, userFilterTypes || {}, filterTypes);
2117
2118 if (!filterMethod) {
2119 console.warn("Could not find a valid 'globalFilter' option.");
2120 return rows;
2121 }
2122
2123 allColumns.forEach(function (column) {
2124 var columnDisableGlobalFilter = column.disableGlobalFilter;
2125 column.canFilter = getFirstDefined(columnDisableGlobalFilter === true ? false : undefined, disableGlobalFilter === true ? false : undefined, true);
2126 });
2127 var filterableColumns = allColumns.filter(function (c) {
2128 return c.canFilter === true;
2129 }); // Filters top level and nested rows
2130
2131 var filterRows = function filterRows(filteredRows) {
2132 filteredRows = filterMethod(filteredRows, filterableColumns.map(function (d) {
2133 return d.id;
2134 }), globalFilterValue);
2135 filteredRows.forEach(function (row) {
2136 filteredFlatRows.push(row);
2137 filteredRowsById[row.id] = row;
2138 row.subRows = row.subRows && row.subRows.length ? filterRows(row.subRows) : row.subRows;
2139 });
2140 return filteredRows;
2141 };
2142
2143 return [filterRows(rows), filteredFlatRows, filteredRowsById];
2144 }, [manualGlobalFilter, globalFilterValue, globalFilter, userFilterTypes, allColumns, rows, flatRows, rowsById, disableGlobalFilter]),
2145 globalFilteredRows = _React$useMemo[0],
2146 globalFilteredFlatRows = _React$useMemo[1],
2147 globalFilteredRowsById = _React$useMemo[2];
2148
2149 var getAutoResetGlobalFilter = useGetLatest(autoResetGlobalFilter);
2150 useMountedLayoutEffect(function () {
2151 if (getAutoResetGlobalFilter()) {
2152 dispatch({
2153 type: actions.resetGlobalFilter
2154 });
2155 }
2156 }, [dispatch, manualGlobalFilter ? null : data]);
2157 Object.assign(instance, {
2158 preGlobalFilteredRows: rows,
2159 preGlobalFilteredFlatRows: flatRows,
2160 preGlobalFilteredRowsById: rowsById,
2161 globalFilteredRows: globalFilteredRows,
2162 globalFilteredFlatRows: globalFilteredFlatRows,
2163 globalFilteredRowsById: globalFilteredRowsById,
2164 rows: globalFilteredRows,
2165 flatRows: globalFilteredFlatRows,
2166 rowsById: globalFilteredRowsById,
2167 setGlobalFilter: setGlobalFilter,
2168 disableGlobalFilter: disableGlobalFilter
2169 });
2170 }
2171
2172 function sum(values, aggregatedValues) {
2173 // It's faster to just add the aggregations together instead of
2174 // process leaf nodes individually
2175 return aggregatedValues.reduce(function (sum, next) {
2176 return sum + (typeof next === 'number' ? next : 0);
2177 }, 0);
2178 }
2179 function min(values) {
2180 var min = values[0] || 0;
2181 values.forEach(function (value) {
2182 if (typeof value === 'number') {
2183 min = Math.min(min, value);
2184 }
2185 });
2186 return min;
2187 }
2188 function max(values) {
2189 var max = values[0] || 0;
2190 values.forEach(function (value) {
2191 if (typeof value === 'number') {
2192 max = Math.max(max, value);
2193 }
2194 });
2195 return max;
2196 }
2197 function minMax(values) {
2198 var min = values[0] || 0;
2199 var max = values[0] || 0;
2200 values.forEach(function (value) {
2201 if (typeof value === 'number') {
2202 min = Math.min(min, value);
2203 max = Math.max(max, value);
2204 }
2205 });
2206 return min + ".." + max;
2207 }
2208 function average(values) {
2209 return sum(null, values) / values.length;
2210 }
2211 function median(values) {
2212 if (!values.length) {
2213 return null;
2214 }
2215
2216 var mid = Math.floor(values.length / 2);
2217 var nums = [].concat(values).sort(function (a, b) {
2218 return a - b;
2219 });
2220 return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;
2221 }
2222 function unique(values) {
2223 return Array.from(new Set(values).values());
2224 }
2225 function uniqueCount(values) {
2226 return new Set(values).size;
2227 }
2228 function count(values) {
2229 return values.length;
2230 }
2231
2232 var aggregations = /*#__PURE__*/Object.freeze({
2233 __proto__: null,
2234 sum: sum,
2235 min: min,
2236 max: max,
2237 minMax: minMax,
2238 average: average,
2239 median: median,
2240 unique: unique,
2241 uniqueCount: uniqueCount,
2242 count: count
2243 });
2244
2245 var emptyArray = [];
2246 var emptyObject = {}; // Actions
2247
2248 actions.resetGroupBy = 'resetGroupBy';
2249 actions.setGroupBy = 'setGroupBy';
2250 actions.toggleGroupBy = 'toggleGroupBy';
2251 var useGroupBy = function useGroupBy(hooks) {
2252 hooks.getGroupByToggleProps = [defaultGetGroupByToggleProps];
2253 hooks.stateReducers.push(reducer$4);
2254 hooks.visibleColumnsDeps.push(function (deps, _ref) {
2255 var instance = _ref.instance;
2256 return [].concat(deps, [instance.state.groupBy]);
2257 });
2258 hooks.visibleColumns.push(visibleColumns);
2259 hooks.useInstance.push(useInstance$4);
2260 hooks.prepareRow.push(prepareRow$1);
2261 };
2262 useGroupBy.pluginName = 'useGroupBy';
2263
2264 var defaultGetGroupByToggleProps = function defaultGetGroupByToggleProps(props, _ref2) {
2265 var header = _ref2.header;
2266 return [props, {
2267 onClick: header.canGroupBy ? function (e) {
2268 e.persist();
2269 header.toggleGroupBy();
2270 } : undefined,
2271 style: {
2272 cursor: header.canGroupBy ? 'pointer' : undefined
2273 },
2274 title: 'Toggle GroupBy'
2275 }];
2276 }; // Reducer
2277
2278
2279 function reducer$4(state, action, previousState, instance) {
2280 if (action.type === actions.init) {
2281 return _extends({
2282 groupBy: []
2283 }, state);
2284 }
2285
2286 if (action.type === actions.resetGroupBy) {
2287 return _extends({}, state, {
2288 groupBy: instance.initialState.groupBy || []
2289 });
2290 }
2291
2292 if (action.type === actions.setGroupBy) {
2293 var value = action.value;
2294 return _extends({}, state, {
2295 groupBy: value
2296 });
2297 }
2298
2299 if (action.type === actions.toggleGroupBy) {
2300 var columnId = action.columnId,
2301 setGroupBy = action.value;
2302 var resolvedGroupBy = typeof setGroupBy !== 'undefined' ? setGroupBy : !state.groupBy.includes(columnId);
2303
2304 if (resolvedGroupBy) {
2305 return _extends({}, state, {
2306 groupBy: [].concat(state.groupBy, [columnId])
2307 });
2308 }
2309
2310 return _extends({}, state, {
2311 groupBy: state.groupBy.filter(function (d) {
2312 return d !== columnId;
2313 })
2314 });
2315 }
2316 }
2317
2318 function visibleColumns(columns, _ref3) {
2319 var groupBy = _ref3.instance.state.groupBy;
2320 // Sort grouped columns to the start of the column list
2321 // before the headers are built
2322 var groupByColumns = groupBy.map(function (g) {
2323 return columns.find(function (col) {
2324 return col.id === g;
2325 });
2326 }).filter(Boolean);
2327 var nonGroupByColumns = columns.filter(function (col) {
2328 return !groupBy.includes(col.id);
2329 });
2330 columns = [].concat(groupByColumns, nonGroupByColumns);
2331 columns.forEach(function (column) {
2332 column.isGrouped = groupBy.includes(column.id);
2333 column.groupedIndex = groupBy.indexOf(column.id);
2334 });
2335 return columns;
2336 }
2337
2338 var defaultUserAggregations = {};
2339
2340 function useInstance$4(instance) {
2341 var data = instance.data,
2342 rows = instance.rows,
2343 flatRows = instance.flatRows,
2344 rowsById = instance.rowsById,
2345 allColumns = instance.allColumns,
2346 flatHeaders = instance.flatHeaders,
2347 _instance$groupByFn = instance.groupByFn,
2348 groupByFn = _instance$groupByFn === void 0 ? defaultGroupByFn : _instance$groupByFn,
2349 manualGroupBy = instance.manualGroupBy,
2350 _instance$aggregation = instance.aggregations,
2351 userAggregations = _instance$aggregation === void 0 ? defaultUserAggregations : _instance$aggregation,
2352 plugins = instance.plugins,
2353 groupBy = instance.state.groupBy,
2354 dispatch = instance.dispatch,
2355 _instance$autoResetGr = instance.autoResetGroupBy,
2356 autoResetGroupBy = _instance$autoResetGr === void 0 ? true : _instance$autoResetGr,
2357 disableGroupBy = instance.disableGroupBy,
2358 defaultCanGroupBy = instance.defaultCanGroupBy,
2359 getHooks = instance.getHooks;
2360 ensurePluginOrder(plugins, ['useColumnOrder', 'useFilters'], 'useGroupBy');
2361 var getInstance = useGetLatest(instance);
2362 allColumns.forEach(function (column) {
2363 var accessor = column.accessor,
2364 defaultColumnGroupBy = column.defaultGroupBy,
2365 columnDisableGroupBy = column.disableGroupBy;
2366 column.canGroupBy = accessor ? getFirstDefined(column.canGroupBy, columnDisableGroupBy === true ? false : undefined, disableGroupBy === true ? false : undefined, true) : getFirstDefined(column.canGroupBy, defaultColumnGroupBy, defaultCanGroupBy, false);
2367
2368 if (column.canGroupBy) {
2369 column.toggleGroupBy = function () {
2370 return instance.toggleGroupBy(column.id);
2371 };
2372 }
2373
2374 column.Aggregated = column.Aggregated || column.Cell;
2375 });
2376 var toggleGroupBy = React.useCallback(function (columnId, value) {
2377 dispatch({
2378 type: actions.toggleGroupBy,
2379 columnId: columnId,
2380 value: value
2381 });
2382 }, [dispatch]);
2383 var setGroupBy = React.useCallback(function (value) {
2384 dispatch({
2385 type: actions.setGroupBy,
2386 value: value
2387 });
2388 }, [dispatch]);
2389 flatHeaders.forEach(function (header) {
2390 header.getGroupByToggleProps = makePropGetter(getHooks().getGroupByToggleProps, {
2391 instance: getInstance(),
2392 header: header
2393 });
2394 });
2395
2396 var _React$useMemo = React.useMemo(function () {
2397 if (manualGroupBy || !groupBy.length) {
2398 return [rows, flatRows, rowsById, emptyArray, emptyObject, flatRows, rowsById];
2399 } // Ensure that the list of filtered columns exist
2400
2401
2402 var existingGroupBy = groupBy.filter(function (g) {
2403 return allColumns.find(function (col) {
2404 return col.id === g;
2405 });
2406 }); // Find the columns that can or are aggregating
2407 // Uses each column to aggregate rows into a single value
2408
2409 var aggregateRowsToValues = function aggregateRowsToValues(leafRows, groupedRows, depth) {
2410 var values = {};
2411 allColumns.forEach(function (column) {
2412 // Don't aggregate columns that are in the groupBy
2413 if (existingGroupBy.includes(column.id)) {
2414 values[column.id] = groupedRows[0] ? groupedRows[0].values[column.id] : null;
2415 return;
2416 } // Aggregate the values
2417
2418
2419 var aggregateFn = typeof column.aggregate === 'function' ? column.aggregate : userAggregations[column.aggregate] || aggregations[column.aggregate];
2420
2421 if (aggregateFn) {
2422 // Get the columnValues to aggregate
2423 var groupedValues = groupedRows.map(function (row) {
2424 return row.values[column.id];
2425 }); // Get the columnValues to aggregate
2426
2427 var leafValues = leafRows.map(function (row) {
2428 var columnValue = row.values[column.id];
2429
2430 if (!depth && column.aggregateValue) {
2431 var aggregateValueFn = typeof column.aggregateValue === 'function' ? column.aggregateValue : userAggregations[column.aggregateValue] || aggregations[column.aggregateValue];
2432
2433 if (!aggregateValueFn) {
2434 console.info({
2435 column: column
2436 });
2437 throw new Error("React Table: Invalid column.aggregateValue option for column listed above");
2438 }
2439
2440 columnValue = aggregateValueFn(columnValue, row, column);
2441 }
2442
2443 return columnValue;
2444 });
2445 values[column.id] = aggregateFn(leafValues, groupedValues);
2446 } else if (column.aggregate) {
2447 console.info({
2448 column: column
2449 });
2450 throw new Error("React Table: Invalid column.aggregate option for column listed above");
2451 } else {
2452 values[column.id] = null;
2453 }
2454 });
2455 return values;
2456 };
2457
2458 var groupedFlatRows = [];
2459 var groupedRowsById = {};
2460 var onlyGroupedFlatRows = [];
2461 var onlyGroupedRowsById = {};
2462 var nonGroupedFlatRows = [];
2463 var nonGroupedRowsById = {}; // Recursively group the data
2464
2465 var groupUpRecursively = function groupUpRecursively(rows, depth, parentId) {
2466 if (depth === void 0) {
2467 depth = 0;
2468 }
2469
2470 // This is the last level, just return the rows
2471 if (depth === existingGroupBy.length) {
2472 return rows.map(function (row) {
2473 return _extends({}, row, {
2474 depth: depth
2475 });
2476 });
2477 }
2478
2479 var columnId = existingGroupBy[depth]; // Group the rows together for this level
2480
2481 var rowGroupsMap = groupByFn(rows, columnId); // Peform aggregations for each group
2482
2483 var aggregatedGroupedRows = Object.entries(rowGroupsMap).map(function (_ref4, index) {
2484 var groupByVal = _ref4[0],
2485 groupedRows = _ref4[1];
2486 var id = columnId + ":" + groupByVal;
2487 id = parentId ? parentId + ">" + id : id; // First, Recurse to group sub rows before aggregation
2488
2489 var subRows = groupUpRecursively(groupedRows, depth + 1, id); // Flatten the leaf rows of the rows in this group
2490
2491 var leafRows = depth ? flattenBy(groupedRows, 'leafRows') : groupedRows;
2492 var values = aggregateRowsToValues(leafRows, groupedRows, depth);
2493 var row = {
2494 id: id,
2495 isGrouped: true,
2496 groupByID: columnId,
2497 groupByVal: groupByVal,
2498 values: values,
2499 subRows: subRows,
2500 leafRows: leafRows,
2501 depth: depth,
2502 index: index
2503 };
2504 subRows.forEach(function (subRow) {
2505 groupedFlatRows.push(subRow);
2506 groupedRowsById[subRow.id] = subRow;
2507
2508 if (subRow.isGrouped) {
2509 onlyGroupedFlatRows.push(subRow);
2510 onlyGroupedRowsById[subRow.id] = subRow;
2511 } else {
2512 nonGroupedFlatRows.push(subRow);
2513 nonGroupedRowsById[subRow.id] = subRow;
2514 }
2515 });
2516 return row;
2517 });
2518 return aggregatedGroupedRows;
2519 };
2520
2521 var groupedRows = groupUpRecursively(rows);
2522 groupedRows.forEach(function (subRow) {
2523 groupedFlatRows.push(subRow);
2524 groupedRowsById[subRow.id] = subRow;
2525
2526 if (subRow.isGrouped) {
2527 onlyGroupedFlatRows.push(subRow);
2528 onlyGroupedRowsById[subRow.id] = subRow;
2529 } else {
2530 nonGroupedFlatRows.push(subRow);
2531 nonGroupedRowsById[subRow.id] = subRow;
2532 }
2533 }); // Assign the new data
2534
2535 return [groupedRows, groupedFlatRows, groupedRowsById, onlyGroupedFlatRows, onlyGroupedRowsById, nonGroupedFlatRows, nonGroupedRowsById];
2536 }, [manualGroupBy, groupBy, rows, flatRows, rowsById, allColumns, userAggregations, groupByFn]),
2537 groupedRows = _React$useMemo[0],
2538 groupedFlatRows = _React$useMemo[1],
2539 groupedRowsById = _React$useMemo[2],
2540 onlyGroupedFlatRows = _React$useMemo[3],
2541 onlyGroupedRowsById = _React$useMemo[4],
2542 nonGroupedFlatRows = _React$useMemo[5],
2543 nonGroupedRowsById = _React$useMemo[6];
2544
2545 var getAutoResetGroupBy = useGetLatest(autoResetGroupBy);
2546 useMountedLayoutEffect(function () {
2547 if (getAutoResetGroupBy()) {
2548 dispatch({
2549 type: actions.resetGroupBy
2550 });
2551 }
2552 }, [dispatch, manualGroupBy ? null : data]);
2553 Object.assign(instance, {
2554 preGroupedRows: rows,
2555 preGroupedFlatRow: flatRows,
2556 preGroupedRowsById: rowsById,
2557 groupedRows: groupedRows,
2558 groupedFlatRows: groupedFlatRows,
2559 groupedRowsById: groupedRowsById,
2560 onlyGroupedFlatRows: onlyGroupedFlatRows,
2561 onlyGroupedRowsById: onlyGroupedRowsById,
2562 nonGroupedFlatRows: nonGroupedFlatRows,
2563 nonGroupedRowsById: nonGroupedRowsById,
2564 rows: groupedRows,
2565 flatRows: groupedFlatRows,
2566 rowsById: groupedRowsById,
2567 toggleGroupBy: toggleGroupBy,
2568 setGroupBy: setGroupBy
2569 });
2570 }
2571
2572 function prepareRow$1(row) {
2573 row.allCells.forEach(function (cell) {
2574 var _row$subRows;
2575
2576 // Grouped cells are in the groupBy and the pivot cell for the row
2577 cell.isGrouped = cell.column.isGrouped && cell.column.id === row.groupByID; // Placeholder cells are any columns in the groupBy that are not grouped
2578
2579 cell.isPlaceholder = !cell.isGrouped && cell.column.isGrouped; // Aggregated cells are not grouped, not repeated, but still have subRows
2580
2581 cell.isAggregated = !cell.isGrouped && !cell.isPlaceholder && ((_row$subRows = row.subRows) == null ? void 0 : _row$subRows.length);
2582 });
2583 }
2584
2585 function defaultGroupByFn(rows, columnId) {
2586 return rows.reduce(function (prev, row, i) {
2587 // TODO: Might want to implement a key serializer here so
2588 // irregular column values can still be grouped if needed?
2589 var resKey = "" + row.values[columnId];
2590 prev[resKey] = Array.isArray(prev[resKey]) ? prev[resKey] : [];
2591 prev[resKey].push(row);
2592 return prev;
2593 }, {});
2594 }
2595
2596 var reSplitAlphaNumeric = /([0-9]+)/gm; // Mixed sorting is slow, but very inclusive of many edge cases.
2597 // It handles numbers, mixed alphanumeric combinations, and even
2598 // null, undefined, and Infinity
2599
2600 var alphanumeric = function alphanumeric(rowA, rowB, columnId) {
2601 var _getRowValuesByColumn = getRowValuesByColumnID(rowA, rowB, columnId),
2602 a = _getRowValuesByColumn[0],
2603 b = _getRowValuesByColumn[1]; // Force to strings (or "" for unsupported types)
2604
2605
2606 a = toString(a);
2607 b = toString(b); // Split on number groups, but keep the delimiter
2608 // Then remove falsey split values
2609
2610 a = a.split(reSplitAlphaNumeric).filter(Boolean);
2611 b = b.split(reSplitAlphaNumeric).filter(Boolean); // While
2612
2613 while (a.length && b.length) {
2614 var aa = a.shift();
2615 var bb = b.shift();
2616 var an = parseInt(aa, 10);
2617 var bn = parseInt(bb, 10);
2618 var combo = [an, bn].sort(); // Both are string
2619
2620 if (isNaN(combo[0])) {
2621 if (aa > bb) {
2622 return 1;
2623 }
2624
2625 if (bb > aa) {
2626 return -1;
2627 }
2628
2629 continue;
2630 } // One is a string, one is a number
2631
2632
2633 if (isNaN(combo[1])) {
2634 return isNaN(an) ? -1 : 1;
2635 } // Both are numbers
2636
2637
2638 if (an > bn) {
2639 return 1;
2640 }
2641
2642 if (bn > an) {
2643 return -1;
2644 }
2645 }
2646
2647 return a.length - b.length;
2648 };
2649 function datetime(rowA, rowB, columnId) {
2650 var _getRowValuesByColumn2 = getRowValuesByColumnID(rowA, rowB, columnId),
2651 a = _getRowValuesByColumn2[0],
2652 b = _getRowValuesByColumn2[1];
2653
2654 a = a.getTime();
2655 b = b.getTime();
2656 return compareBasic(a, b);
2657 }
2658 function basic(rowA, rowB, columnId) {
2659 var _getRowValuesByColumn3 = getRowValuesByColumnID(rowA, rowB, columnId),
2660 a = _getRowValuesByColumn3[0],
2661 b = _getRowValuesByColumn3[1];
2662
2663 return compareBasic(a, b);
2664 }
2665 function string(rowA, rowB, columnId) {
2666 var _getRowValuesByColumn4 = getRowValuesByColumnID(rowA, rowB, columnId),
2667 a = _getRowValuesByColumn4[0],
2668 b = _getRowValuesByColumn4[1];
2669
2670 a = a.split('').filter(Boolean);
2671 b = b.split('').filter(Boolean);
2672
2673 while (a.length && b.length) {
2674 var aa = a.shift();
2675 var bb = b.shift();
2676 var alower = aa.toLowerCase();
2677 var blower = bb.toLowerCase(); // Case insensitive comparison until characters match
2678
2679 if (alower > blower) {
2680 return 1;
2681 }
2682
2683 if (blower > alower) {
2684 return -1;
2685 } // If lowercase characters are identical
2686
2687
2688 if (aa > bb) {
2689 return 1;
2690 }
2691
2692 if (bb > aa) {
2693 return -1;
2694 }
2695
2696 continue;
2697 }
2698
2699 return a.length - b.length;
2700 }
2701 function number(rowA, rowB, columnId) {
2702 var _getRowValuesByColumn5 = getRowValuesByColumnID(rowA, rowB, columnId),
2703 a = _getRowValuesByColumn5[0],
2704 b = _getRowValuesByColumn5[1];
2705
2706 var replaceNonNumeric = /[^0-9.]/gi;
2707 a = Number(String(a).replace(replaceNonNumeric, ''));
2708 b = Number(String(b).replace(replaceNonNumeric, ''));
2709 return compareBasic(a, b);
2710 } // Utils
2711
2712 function compareBasic(a, b) {
2713 return a === b ? 0 : a > b ? 1 : -1;
2714 }
2715
2716 function getRowValuesByColumnID(row1, row2, columnId) {
2717 return [row1.values[columnId], row2.values[columnId]];
2718 }
2719
2720 function toString(a) {
2721 if (typeof a === 'number') {
2722 if (isNaN(a) || a === Infinity || a === -Infinity) {
2723 return '';
2724 }
2725
2726 return String(a);
2727 }
2728
2729 if (typeof a === 'string') {
2730 return a;
2731 }
2732
2733 return '';
2734 }
2735
2736 var sortTypes = /*#__PURE__*/Object.freeze({
2737 __proto__: null,
2738 alphanumeric: alphanumeric,
2739 datetime: datetime,
2740 basic: basic,
2741 string: string,
2742 number: number
2743 });
2744
2745 actions.resetSortBy = 'resetSortBy';
2746 actions.setSortBy = 'setSortBy';
2747 actions.toggleSortBy = 'toggleSortBy';
2748 actions.clearSortBy = 'clearSortBy';
2749 defaultColumn.sortType = 'alphanumeric';
2750 defaultColumn.sortDescFirst = false;
2751 var useSortBy = function useSortBy(hooks) {
2752 hooks.getSortByToggleProps = [defaultGetSortByToggleProps];
2753 hooks.stateReducers.push(reducer$5);
2754 hooks.useInstance.push(useInstance$5);
2755 };
2756 useSortBy.pluginName = 'useSortBy';
2757
2758 var defaultGetSortByToggleProps = function defaultGetSortByToggleProps(props, _ref) {
2759 var instance = _ref.instance,
2760 column = _ref.column;
2761 var _instance$isMultiSort = instance.isMultiSortEvent,
2762 isMultiSortEvent = _instance$isMultiSort === void 0 ? function (e) {
2763 return e.shiftKey;
2764 } : _instance$isMultiSort;
2765 return [props, {
2766 onClick: column.canSort ? function (e) {
2767 e.persist();
2768 column.toggleSortBy(undefined, !instance.disableMultiSort && isMultiSortEvent(e));
2769 } : undefined,
2770 style: {
2771 cursor: column.canSort ? 'pointer' : undefined
2772 },
2773 title: column.canSort ? 'Toggle SortBy' : undefined
2774 }];
2775 }; // Reducer
2776
2777
2778 function reducer$5(state, action, previousState, instance) {
2779 if (action.type === actions.init) {
2780 return _extends({
2781 sortBy: []
2782 }, state);
2783 }
2784
2785 if (action.type === actions.resetSortBy) {
2786 return _extends({}, state, {
2787 sortBy: instance.initialState.sortBy || []
2788 });
2789 }
2790
2791 if (action.type === actions.clearSortBy) {
2792 var sortBy = state.sortBy;
2793 var newSortBy = sortBy.filter(function (d) {
2794 return d.id !== action.columnId;
2795 });
2796 return _extends({}, state, {
2797 sortBy: newSortBy
2798 });
2799 }
2800
2801 if (action.type === actions.setSortBy) {
2802 var _sortBy = action.sortBy;
2803 return _extends({}, state, {
2804 sortBy: _sortBy
2805 });
2806 }
2807
2808 if (action.type === actions.toggleSortBy) {
2809 var columnId = action.columnId,
2810 desc = action.desc,
2811 multi = action.multi;
2812 var allColumns = instance.allColumns,
2813 disableMultiSort = instance.disableMultiSort,
2814 disableSortRemove = instance.disableSortRemove,
2815 disableMultiRemove = instance.disableMultiRemove,
2816 _instance$maxMultiSor = instance.maxMultiSortColCount,
2817 maxMultiSortColCount = _instance$maxMultiSor === void 0 ? Number.MAX_SAFE_INTEGER : _instance$maxMultiSor;
2818 var _sortBy2 = state.sortBy; // Find the column for this columnId
2819
2820 var column = allColumns.find(function (d) {
2821 return d.id === columnId;
2822 });
2823 var sortDescFirst = column.sortDescFirst; // Find any existing sortBy for this column
2824
2825 var existingSortBy = _sortBy2.find(function (d) {
2826 return d.id === columnId;
2827 });
2828
2829 var existingIndex = _sortBy2.findIndex(function (d) {
2830 return d.id === columnId;
2831 });
2832
2833 var hasDescDefined = typeof desc !== 'undefined' && desc !== null;
2834 var _newSortBy = []; // What should we do with this sort action?
2835
2836 var sortAction;
2837
2838 if (!disableMultiSort && multi) {
2839 if (existingSortBy) {
2840 sortAction = 'toggle';
2841 } else {
2842 sortAction = 'add';
2843 }
2844 } else {
2845 // Normal mode
2846 if (existingIndex !== _sortBy2.length - 1 || _sortBy2.length !== 1) {
2847 sortAction = 'replace';
2848 } else if (existingSortBy) {
2849 sortAction = 'toggle';
2850 } else {
2851 sortAction = 'replace';
2852 }
2853 } // Handle toggle states that will remove the sortBy
2854
2855
2856 if (sortAction === 'toggle' && // Must be toggling
2857 !disableSortRemove && // If disableSortRemove, disable in general
2858 !hasDescDefined && ( // Must not be setting desc
2859 multi ? !disableMultiRemove : true) && ( // If multi, don't allow if disableMultiRemove
2860 existingSortBy && // Finally, detect if it should indeed be removed
2861 existingSortBy.desc && !sortDescFirst || !existingSortBy.desc && sortDescFirst)) {
2862 sortAction = 'remove';
2863 }
2864
2865 if (sortAction === 'replace') {
2866 _newSortBy = [{
2867 id: columnId,
2868 desc: hasDescDefined ? desc : sortDescFirst
2869 }];
2870 } else if (sortAction === 'add') {
2871 _newSortBy = [].concat(_sortBy2, [{
2872 id: columnId,
2873 desc: hasDescDefined ? desc : sortDescFirst
2874 }]); // Take latest n columns
2875
2876 _newSortBy.splice(0, _newSortBy.length - maxMultiSortColCount);
2877 } else if (sortAction === 'toggle') {
2878 // This flips (or sets) the
2879 _newSortBy = _sortBy2.map(function (d) {
2880 if (d.id === columnId) {
2881 return _extends({}, d, {
2882 desc: hasDescDefined ? desc : !existingSortBy.desc
2883 });
2884 }
2885
2886 return d;
2887 });
2888 } else if (sortAction === 'remove') {
2889 _newSortBy = _sortBy2.filter(function (d) {
2890 return d.id !== columnId;
2891 });
2892 }
2893
2894 return _extends({}, state, {
2895 sortBy: _newSortBy
2896 });
2897 }
2898 }
2899
2900 function useInstance$5(instance) {
2901 var data = instance.data,
2902 rows = instance.rows,
2903 flatRows = instance.flatRows,
2904 allColumns = instance.allColumns,
2905 _instance$orderByFn = instance.orderByFn,
2906 orderByFn = _instance$orderByFn === void 0 ? defaultOrderByFn : _instance$orderByFn,
2907 userSortTypes = instance.sortTypes,
2908 manualSortBy = instance.manualSortBy,
2909 defaultCanSort = instance.defaultCanSort,
2910 disableSortBy = instance.disableSortBy,
2911 flatHeaders = instance.flatHeaders,
2912 sortBy = instance.state.sortBy,
2913 dispatch = instance.dispatch,
2914 plugins = instance.plugins,
2915 getHooks = instance.getHooks,
2916 _instance$autoResetSo = instance.autoResetSortBy,
2917 autoResetSortBy = _instance$autoResetSo === void 0 ? true : _instance$autoResetSo;
2918 ensurePluginOrder(plugins, ['useFilters', 'useGlobalFilter', 'useGroupBy', 'usePivotColumns'], 'useSortBy');
2919 var setSortBy = React.useCallback(function (sortBy) {
2920 dispatch({
2921 type: actions.setSortBy,
2922 sortBy: sortBy
2923 });
2924 }, [dispatch]); // Updates sorting based on a columnId, desc flag and multi flag
2925
2926 var toggleSortBy = React.useCallback(function (columnId, desc, multi) {
2927 dispatch({
2928 type: actions.toggleSortBy,
2929 columnId: columnId,
2930 desc: desc,
2931 multi: multi
2932 });
2933 }, [dispatch]); // use reference to avoid memory leak in #1608
2934
2935 var getInstance = useGetLatest(instance); // Add the getSortByToggleProps method to columns and headers
2936
2937 flatHeaders.forEach(function (column) {
2938 var accessor = column.accessor,
2939 defaultColumnCanSort = column.canSort,
2940 columnDisableSortBy = column.disableSortBy,
2941 id = column.id;
2942 var canSort = accessor ? getFirstDefined(columnDisableSortBy === true ? false : undefined, disableSortBy === true ? false : undefined, true) : getFirstDefined(defaultCanSort, defaultColumnCanSort, false);
2943 column.canSort = canSort;
2944
2945 if (column.canSort) {
2946 column.toggleSortBy = function (desc, multi) {
2947 return toggleSortBy(column.id, desc, multi);
2948 };
2949
2950 column.clearSortBy = function () {
2951 dispatch({
2952 type: actions.clearSortBy,
2953 columnId: column.id
2954 });
2955 };
2956 }
2957
2958 column.getSortByToggleProps = makePropGetter(getHooks().getSortByToggleProps, {
2959 instance: getInstance(),
2960 column: column
2961 });
2962 var columnSort = sortBy.find(function (d) {
2963 return d.id === id;
2964 });
2965 column.isSorted = !!columnSort;
2966 column.sortedIndex = sortBy.findIndex(function (d) {
2967 return d.id === id;
2968 });
2969 column.isSortedDesc = column.isSorted ? columnSort.desc : undefined;
2970 });
2971
2972 var _React$useMemo = React.useMemo(function () {
2973 if (manualSortBy || !sortBy.length) {
2974 return [rows, flatRows];
2975 }
2976
2977 var sortedFlatRows = []; // Filter out sortBys that correspond to non existing columns
2978
2979 var availableSortBy = sortBy.filter(function (sort) {
2980 return allColumns.find(function (col) {
2981 return col.id === sort.id;
2982 });
2983 });
2984
2985 var sortData = function sortData(rows) {
2986 // Use the orderByFn to compose multiple sortBy's together.
2987 // This will also perform a stable sorting using the row index
2988 // if needed.
2989 var sortedData = orderByFn(rows, availableSortBy.map(function (sort) {
2990 // Support custom sorting methods for each column
2991 var column = allColumns.find(function (d) {
2992 return d.id === sort.id;
2993 });
2994
2995 if (!column) {
2996 throw new Error("React-Table: Could not find a column with id: " + sort.id + " while sorting");
2997 }
2998
2999 var sortType = column.sortType; // Look up sortBy functions in this order:
3000 // column function
3001 // column string lookup on user sortType
3002 // column string lookup on built-in sortType
3003 // default function
3004 // default string lookup on user sortType
3005 // default string lookup on built-in sortType
3006
3007 var sortMethod = isFunction(sortType) || (userSortTypes || {})[sortType] || sortTypes[sortType];
3008
3009 if (!sortMethod) {
3010 throw new Error("React-Table: Could not find a valid sortType of '" + sortType + "' for column '" + sort.id + "'.");
3011 } // Return the correct sortFn.
3012 // This function should always return in ascending order
3013
3014
3015 return function (a, b) {
3016 return sortMethod(a, b, sort.id, sort.desc);
3017 };
3018 }), // Map the directions
3019 availableSortBy.map(function (sort) {
3020 // Detect and use the sortInverted option
3021 var column = allColumns.find(function (d) {
3022 return d.id === sort.id;
3023 });
3024
3025 if (column && column.sortInverted) {
3026 return sort.desc;
3027 }
3028
3029 return !sort.desc;
3030 })); // If there are sub-rows, sort them
3031
3032 sortedData.forEach(function (row) {
3033 sortedFlatRows.push(row);
3034
3035 if (!row.subRows || row.subRows.length === 0) {
3036 return;
3037 }
3038
3039 row.subRows = sortData(row.subRows);
3040 });
3041 return sortedData;
3042 };
3043
3044 return [sortData(rows), sortedFlatRows];
3045 }, [manualSortBy, sortBy, rows, flatRows, allColumns, orderByFn, userSortTypes]),
3046 sortedRows = _React$useMemo[0],
3047 sortedFlatRows = _React$useMemo[1];
3048
3049 var getAutoResetSortBy = useGetLatest(autoResetSortBy);
3050 useMountedLayoutEffect(function () {
3051 if (getAutoResetSortBy()) {
3052 dispatch({
3053 type: actions.resetSortBy
3054 });
3055 }
3056 }, [manualSortBy ? null : data]);
3057 Object.assign(instance, {
3058 preSortedRows: rows,
3059 preSortedFlatRows: flatRows,
3060 sortedRows: sortedRows,
3061 sortedFlatRows: sortedFlatRows,
3062 rows: sortedRows,
3063 flatRows: sortedFlatRows,
3064 setSortBy: setSortBy,
3065 toggleSortBy: toggleSortBy
3066 });
3067 }
3068
3069 function defaultOrderByFn(arr, funcs, dirs) {
3070 return [].concat(arr).sort(function (rowA, rowB) {
3071 for (var i = 0; i < funcs.length; i += 1) {
3072 var sortFn = funcs[i];
3073 var desc = dirs[i] === false || dirs[i] === 'desc';
3074 var sortInt = sortFn(rowA, rowB);
3075
3076 if (sortInt !== 0) {
3077 return desc ? -sortInt : sortInt;
3078 }
3079 }
3080
3081 return dirs[0] ? rowA.index - rowB.index : rowB.index - rowA.index;
3082 });
3083 }
3084
3085 var pluginName = 'usePagination'; // Actions
3086
3087 actions.resetPage = 'resetPage';
3088 actions.gotoPage = 'gotoPage';
3089 actions.setPageSize = 'setPageSize';
3090 var usePagination = function usePagination(hooks) {
3091 hooks.stateReducers.push(reducer$6);
3092 hooks.useInstance.push(useInstance$6);
3093 };
3094 usePagination.pluginName = pluginName;
3095
3096 function reducer$6(state, action, previousState, instance) {
3097 if (action.type === actions.init) {
3098 return _extends({
3099 pageSize: 10,
3100 pageIndex: 0
3101 }, state);
3102 }
3103
3104 if (action.type === actions.resetPage) {
3105 return _extends({}, state, {
3106 pageIndex: instance.initialState.pageIndex || 0
3107 });
3108 }
3109
3110 if (action.type === actions.gotoPage) {
3111 var pageCount = instance.pageCount,
3112 page = instance.page;
3113 var newPageIndex = functionalUpdate(action.pageIndex, state.pageIndex);
3114 var canNavigate = false;
3115
3116 if (newPageIndex > state.pageIndex) {
3117 // next page
3118 canNavigate = pageCount === -1 ? page.length >= state.pageSize : newPageIndex < pageCount;
3119 } else if (newPageIndex < state.pageIndex) {
3120 // prev page
3121 canNavigate = newPageIndex > -1;
3122 }
3123
3124 if (!canNavigate) {
3125 return state;
3126 }
3127
3128 return _extends({}, state, {
3129 pageIndex: newPageIndex
3130 });
3131 }
3132
3133 if (action.type === actions.setPageSize) {
3134 var pageSize = action.pageSize;
3135 var topRowIndex = state.pageSize * state.pageIndex;
3136 var pageIndex = Math.floor(topRowIndex / pageSize);
3137 return _extends({}, state, {
3138 pageIndex: pageIndex,
3139 pageSize: pageSize
3140 });
3141 }
3142 }
3143
3144 function useInstance$6(instance) {
3145 var rows = instance.rows,
3146 _instance$autoResetPa = instance.autoResetPage,
3147 autoResetPage = _instance$autoResetPa === void 0 ? true : _instance$autoResetPa,
3148 _instance$manualExpan = instance.manualExpandedKey,
3149 manualExpandedKey = _instance$manualExpan === void 0 ? 'expanded' : _instance$manualExpan,
3150 plugins = instance.plugins,
3151 userPageCount = instance.pageCount,
3152 _instance$paginateExp = instance.paginateExpandedRows,
3153 paginateExpandedRows = _instance$paginateExp === void 0 ? true : _instance$paginateExp,
3154 _instance$expandSubRo = instance.expandSubRows,
3155 expandSubRows = _instance$expandSubRo === void 0 ? true : _instance$expandSubRo,
3156 _instance$state = instance.state,
3157 pageSize = _instance$state.pageSize,
3158 pageIndex = _instance$state.pageIndex,
3159 expanded = _instance$state.expanded,
3160 globalFilter = _instance$state.globalFilter,
3161 filters = _instance$state.filters,
3162 groupBy = _instance$state.groupBy,
3163 sortBy = _instance$state.sortBy,
3164 dispatch = instance.dispatch,
3165 data = instance.data,
3166 manualPagination = instance.manualPagination;
3167 ensurePluginOrder(plugins, ['useGlobalFilter', 'useFilters', 'useGroupBy', 'useSortBy', 'useExpanded'], 'usePagination');
3168 var getAutoResetPage = useGetLatest(autoResetPage);
3169 useMountedLayoutEffect(function () {
3170 if (getAutoResetPage()) {
3171 dispatch({
3172 type: actions.resetPage
3173 });
3174 }
3175 }, [dispatch, manualPagination ? null : data, globalFilter, filters, groupBy, sortBy]);
3176 var pageCount = manualPagination ? userPageCount : Math.ceil(rows.length / pageSize);
3177 var pageOptions = React.useMemo(function () {
3178 return pageCount > 0 ? [].concat(new Array(pageCount)).fill(null).map(function (d, i) {
3179 return i;
3180 }) : [];
3181 }, [pageCount]);
3182 var page = React.useMemo(function () {
3183 var page;
3184
3185 if (manualPagination) {
3186 page = rows;
3187 } else {
3188 var pageStart = pageSize * pageIndex;
3189 var pageEnd = pageStart + pageSize;
3190 page = rows.slice(pageStart, pageEnd);
3191 }
3192
3193 if (paginateExpandedRows) {
3194 return page;
3195 }
3196
3197 return expandRows(page, {
3198 manualExpandedKey: manualExpandedKey,
3199 expanded: expanded,
3200 expandSubRows: expandSubRows
3201 });
3202 }, [expandSubRows, expanded, manualExpandedKey, manualPagination, pageIndex, pageSize, paginateExpandedRows, rows]);
3203 var canPreviousPage = pageIndex > 0;
3204 var canNextPage = pageCount === -1 ? page.length >= pageSize : pageIndex < pageCount - 1;
3205 var gotoPage = React.useCallback(function (pageIndex) {
3206 dispatch({
3207 type: actions.gotoPage,
3208 pageIndex: pageIndex
3209 });
3210 }, [dispatch]);
3211 var previousPage = React.useCallback(function () {
3212 return gotoPage(function (old) {
3213 return old - 1;
3214 });
3215 }, [gotoPage]);
3216 var nextPage = React.useCallback(function () {
3217 return gotoPage(function (old) {
3218 return old + 1;
3219 });
3220 }, [gotoPage]);
3221 var setPageSize = React.useCallback(function (pageSize) {
3222 dispatch({
3223 type: actions.setPageSize,
3224 pageSize: pageSize
3225 });
3226 }, [dispatch]);
3227 Object.assign(instance, {
3228 pageOptions: pageOptions,
3229 pageCount: pageCount,
3230 page: page,
3231 canPreviousPage: canPreviousPage,
3232 canNextPage: canNextPage,
3233 gotoPage: gotoPage,
3234 previousPage: previousPage,
3235 nextPage: nextPage,
3236 setPageSize: setPageSize
3237 });
3238 }
3239
3240 actions.resetPivot = 'resetPivot';
3241 actions.togglePivot = 'togglePivot';
3242 var _UNSTABLE_usePivotColumns = function _UNSTABLE_usePivotColumns(hooks) {
3243 hooks.getPivotToggleProps = [defaultGetPivotToggleProps];
3244 hooks.stateReducers.push(reducer$7);
3245 hooks.useInstanceAfterData.push(useInstanceAfterData);
3246 hooks.allColumns.push(allColumns);
3247 hooks.accessValue.push(accessValue);
3248 hooks.materializedColumns.push(materializedColumns);
3249 hooks.materializedColumnsDeps.push(materializedColumnsDeps);
3250 hooks.visibleColumns.push(visibleColumns$1);
3251 hooks.visibleColumnsDeps.push(visibleColumnsDeps);
3252 hooks.useInstance.push(useInstance$7);
3253 hooks.prepareRow.push(prepareRow$2);
3254 };
3255 _UNSTABLE_usePivotColumns.pluginName = 'usePivotColumns';
3256 var defaultPivotColumns = [];
3257
3258 var defaultGetPivotToggleProps = function defaultGetPivotToggleProps(props, _ref) {
3259 var header = _ref.header;
3260 return [props, {
3261 onClick: header.canPivot ? function (e) {
3262 e.persist();
3263 header.togglePivot();
3264 } : undefined,
3265 style: {
3266 cursor: header.canPivot ? 'pointer' : undefined
3267 },
3268 title: 'Toggle Pivot'
3269 }];
3270 }; // Reducer
3271
3272
3273 function reducer$7(state, action, previousState, instance) {
3274 if (action.type === actions.init) {
3275 return _extends({
3276 pivotColumns: defaultPivotColumns
3277 }, state);
3278 }
3279
3280 if (action.type === actions.resetPivot) {
3281 return _extends({}, state, {
3282 pivotColumns: instance.initialState.pivotColumns || defaultPivotColumns
3283 });
3284 }
3285
3286 if (action.type === actions.togglePivot) {
3287 var columnId = action.columnId,
3288 setPivot = action.value;
3289 var resolvedPivot = typeof setPivot !== 'undefined' ? setPivot : !state.pivotColumns.includes(columnId);
3290
3291 if (resolvedPivot) {
3292 return _extends({}, state, {
3293 pivotColumns: [].concat(state.pivotColumns, [columnId])
3294 });
3295 }
3296
3297 return _extends({}, state, {
3298 pivotColumns: state.pivotColumns.filter(function (d) {
3299 return d !== columnId;
3300 })
3301 });
3302 }
3303 }
3304
3305 function useInstanceAfterData(instance) {
3306 instance.allColumns.forEach(function (column) {
3307 column.isPivotSource = instance.state.pivotColumns.includes(column.id);
3308 });
3309 }
3310
3311 function allColumns(columns, _ref2) {
3312 var instance = _ref2.instance;
3313 columns.forEach(function (column) {
3314 column.isPivotSource = instance.state.pivotColumns.includes(column.id);
3315 column.uniqueValues = new Set();
3316 });
3317 return columns;
3318 }
3319
3320 function accessValue(value, _ref3) {
3321 var column = _ref3.column;
3322
3323 if (column.uniqueValues && typeof value !== 'undefined') {
3324 column.uniqueValues.add(value);
3325 }
3326
3327 return value;
3328 }
3329
3330 function materializedColumns(materialized, _ref4) {
3331 var instance = _ref4.instance;
3332 var allColumns = instance.allColumns,
3333 state = instance.state;
3334
3335 if (!state.pivotColumns.length || !state.groupBy || !state.groupBy.length) {
3336 return materialized;
3337 }
3338
3339 var pivotColumns = state.pivotColumns.map(function (id) {
3340 return allColumns.find(function (d) {
3341 return d.id === id;
3342 });
3343 }).filter(Boolean);
3344 var sourceColumns = allColumns.filter(function (d) {
3345 return !d.isPivotSource && !state.groupBy.includes(d.id) && !state.pivotColumns.includes(d.id);
3346 });
3347
3348 var buildPivotColumns = function buildPivotColumns(depth, parent, pivotFilters) {
3349 if (depth === void 0) {
3350 depth = 0;
3351 }
3352
3353 if (pivotFilters === void 0) {
3354 pivotFilters = [];
3355 }
3356
3357 var pivotColumn = pivotColumns[depth];
3358
3359 if (!pivotColumn) {
3360 return sourceColumns.map(function (sourceColumn) {
3361 // TODO: We could offer support here for renesting pivoted
3362 // columns inside copies of their header groups. For now,
3363 // that seems like it would be (1) overkill on nesting, considering
3364 // you already get nesting for every pivot level and (2)
3365 // really hard. :)
3366 return _extends({}, sourceColumn, {
3367 canPivot: false,
3368 isPivoted: true,
3369 parent: parent,
3370 depth: depth,
3371 id: "" + (parent ? parent.id + "." + sourceColumn.id : sourceColumn.id),
3372 accessor: function accessor(originalRow, i, row) {
3373 if (pivotFilters.every(function (filter) {
3374 return filter(row);
3375 })) {
3376 return row.values[sourceColumn.id];
3377 }
3378 }
3379 });
3380 });
3381 }
3382
3383 var uniqueValues = Array.from(pivotColumn.uniqueValues).sort();
3384 return uniqueValues.map(function (uniqueValue) {
3385 var columnGroup = _extends({}, pivotColumn, {
3386 Header: pivotColumn.PivotHeader || typeof pivotColumn.header === 'string' ? pivotColumn.Header + ": " + uniqueValue : uniqueValue,
3387 isPivotGroup: true,
3388 parent: parent,
3389 depth: depth,
3390 id: parent ? parent.id + "." + pivotColumn.id + "." + uniqueValue : pivotColumn.id + "." + uniqueValue,
3391 pivotValue: uniqueValue
3392 });
3393
3394 columnGroup.columns = buildPivotColumns(depth + 1, columnGroup, [].concat(pivotFilters, [function (row) {
3395 return row.values[pivotColumn.id] === uniqueValue;
3396 }]));
3397 return columnGroup;
3398 });
3399 };
3400
3401 var newMaterialized = flattenColumns(buildPivotColumns());
3402 return [].concat(materialized, newMaterialized);
3403 }
3404
3405 function materializedColumnsDeps(deps, _ref5) {
3406 var _ref5$instance$state = _ref5.instance.state,
3407 pivotColumns = _ref5$instance$state.pivotColumns,
3408 groupBy = _ref5$instance$state.groupBy;
3409 return [].concat(deps, [pivotColumns, groupBy]);
3410 }
3411
3412 function visibleColumns$1(visibleColumns, _ref6) {
3413 var state = _ref6.instance.state;
3414 visibleColumns = visibleColumns.filter(function (d) {
3415 return !d.isPivotSource;
3416 });
3417
3418 if (state.pivotColumns.length && state.groupBy && state.groupBy.length) {
3419 visibleColumns = visibleColumns.filter(function (column) {
3420 return column.isGrouped || column.isPivoted;
3421 });
3422 }
3423
3424 return visibleColumns;
3425 }
3426
3427 function visibleColumnsDeps(deps, _ref7) {
3428 var instance = _ref7.instance;
3429 return [].concat(deps, [instance.state.pivotColumns, instance.state.groupBy]);
3430 }
3431
3432 function useInstance$7(instance) {
3433 var columns = instance.columns,
3434 allColumns = instance.allColumns,
3435 flatHeaders = instance.flatHeaders,
3436 getHooks = instance.getHooks,
3437 plugins = instance.plugins,
3438 dispatch = instance.dispatch,
3439 _instance$autoResetPi = instance.autoResetPivot,
3440 autoResetPivot = _instance$autoResetPi === void 0 ? true : _instance$autoResetPi,
3441 manaulPivot = instance.manaulPivot,
3442 disablePivot = instance.disablePivot,
3443 defaultCanPivot = instance.defaultCanPivot;
3444 ensurePluginOrder(plugins, ['useGroupBy'], 'usePivotColumns');
3445 var getInstance = useGetLatest(instance);
3446 allColumns.forEach(function (column) {
3447 var accessor = column.accessor,
3448 defaultColumnPivot = column.defaultPivot,
3449 columnDisablePivot = column.disablePivot;
3450 column.canPivot = accessor ? getFirstDefined(column.canPivot, columnDisablePivot === true ? false : undefined, disablePivot === true ? false : undefined, true) : getFirstDefined(column.canPivot, defaultColumnPivot, defaultCanPivot, false);
3451
3452 if (column.canPivot) {
3453 column.togglePivot = function () {
3454 return instance.togglePivot(column.id);
3455 };
3456 }
3457
3458 column.Aggregated = column.Aggregated || column.Cell;
3459 });
3460
3461 var togglePivot = function togglePivot(columnId, value) {
3462 dispatch({
3463 type: actions.togglePivot,
3464 columnId: columnId,
3465 value: value
3466 });
3467 };
3468
3469 flatHeaders.forEach(function (header) {
3470 header.getPivotToggleProps = makePropGetter(getHooks().getPivotToggleProps, {
3471 instance: getInstance(),
3472 header: header
3473 });
3474 });
3475 var getAutoResetPivot = useGetLatest(autoResetPivot);
3476 useMountedLayoutEffect(function () {
3477 if (getAutoResetPivot()) {
3478 dispatch({
3479 type: actions.resetPivot
3480 });
3481 }
3482 }, [dispatch, manaulPivot ? null : columns]);
3483 Object.assign(instance, {
3484 togglePivot: togglePivot
3485 });
3486 }
3487
3488 function prepareRow$2(row) {
3489 row.allCells.forEach(function (cell) {
3490 // Grouped cells are in the pivotColumns and the pivot cell for the row
3491 cell.isPivoted = cell.column.isPivoted;
3492 });
3493 }
3494
3495 var pluginName$1 = 'useRowSelect'; // Actions
3496
3497 actions.resetSelectedRows = 'resetSelectedRows';
3498 actions.toggleAllRowsSelected = 'toggleAllRowsSelected';
3499 actions.toggleRowSelected = 'toggleRowSelected';
3500 actions.toggleAllPageRowsSelected = 'toggleAllPageRowsSelected';
3501 var useRowSelect = function useRowSelect(hooks) {
3502 hooks.getToggleRowSelectedProps = [defaultGetToggleRowSelectedProps];
3503 hooks.getToggleAllRowsSelectedProps = [defaultGetToggleAllRowsSelectedProps];
3504 hooks.getToggleAllPageRowsSelectedProps = [defaultGetToggleAllPageRowsSelectedProps];
3505 hooks.stateReducers.push(reducer$8);
3506 hooks.useInstance.push(useInstance$8);
3507 hooks.prepareRow.push(prepareRow$3);
3508 };
3509 useRowSelect.pluginName = pluginName$1;
3510
3511 var defaultGetToggleRowSelectedProps = function defaultGetToggleRowSelectedProps(props, _ref) {
3512 var instance = _ref.instance,
3513 row = _ref.row;
3514 var _instance$manualRowSe = instance.manualRowSelectedKey,
3515 manualRowSelectedKey = _instance$manualRowSe === void 0 ? 'isSelected' : _instance$manualRowSe;
3516 var checked = false;
3517
3518 if (row.original && row.original[manualRowSelectedKey]) {
3519 checked = true;
3520 } else {
3521 checked = row.isSelected;
3522 }
3523
3524 return [props, {
3525 onChange: function onChange(e) {
3526 row.toggleRowSelected(e.target.checked);
3527 },
3528 style: {
3529 cursor: 'pointer'
3530 },
3531 checked: checked,
3532 title: 'Toggle Row Selected',
3533 indeterminate: row.isSomeSelected
3534 }];
3535 };
3536
3537 var defaultGetToggleAllRowsSelectedProps = function defaultGetToggleAllRowsSelectedProps(props, _ref2) {
3538 var instance = _ref2.instance;
3539 return [props, {
3540 onChange: function onChange(e) {
3541 instance.toggleAllRowsSelected(e.target.checked);
3542 },
3543 style: {
3544 cursor: 'pointer'
3545 },
3546 checked: instance.isAllRowsSelected,
3547 title: 'Toggle All Rows Selected',
3548 indeterminate: Boolean(!instance.isAllRowsSelected && Object.keys(instance.state.selectedRowIds).length)
3549 }];
3550 };
3551
3552 var defaultGetToggleAllPageRowsSelectedProps = function defaultGetToggleAllPageRowsSelectedProps(props, _ref3) {
3553 var instance = _ref3.instance;
3554 return [props, {
3555 onChange: function onChange(e) {
3556 instance.toggleAllPageRowsSelected(e.target.checked);
3557 },
3558 style: {
3559 cursor: 'pointer'
3560 },
3561 checked: instance.isAllPageRowsSelected,
3562 title: 'Toggle All Current Page Rows Selected',
3563 indeterminate: Boolean(!instance.isAllPageRowsSelected && instance.page.some(function (_ref4) {
3564 var id = _ref4.id;
3565 return instance.state.selectedRowIds[id];
3566 }))
3567 }];
3568 }; // eslint-disable-next-line max-params
3569
3570
3571 function reducer$8(state, action, previousState, instance) {
3572 if (action.type === actions.init) {
3573 return _extends({
3574 selectedRowIds: {}
3575 }, state);
3576 }
3577
3578 if (action.type === actions.resetSelectedRows) {
3579 return _extends({}, state, {
3580 selectedRowIds: instance.initialState.selectedRowIds || {}
3581 });
3582 }
3583
3584 if (action.type === actions.toggleAllRowsSelected) {
3585 var setSelected = action.value;
3586 var isAllRowsSelected = instance.isAllRowsSelected,
3587 rowsById = instance.rowsById,
3588 _instance$nonGroupedR = instance.nonGroupedRowsById,
3589 nonGroupedRowsById = _instance$nonGroupedR === void 0 ? rowsById : _instance$nonGroupedR;
3590 var selectAll = typeof setSelected !== 'undefined' ? setSelected : !isAllRowsSelected; // Only remove/add the rows that are visible on the screen
3591 // Leave all the other rows that are selected alone.
3592
3593 var selectedRowIds = Object.assign({}, state.selectedRowIds);
3594
3595 if (selectAll) {
3596 Object.keys(nonGroupedRowsById).forEach(function (rowId) {
3597 selectedRowIds[rowId] = true;
3598 });
3599 } else {
3600 Object.keys(nonGroupedRowsById).forEach(function (rowId) {
3601 delete selectedRowIds[rowId];
3602 });
3603 }
3604
3605 return _extends({}, state, {
3606 selectedRowIds: selectedRowIds
3607 });
3608 }
3609
3610 if (action.type === actions.toggleRowSelected) {
3611 var id = action.id,
3612 _setSelected = action.value;
3613 var _rowsById = instance.rowsById,
3614 _instance$selectSubRo = instance.selectSubRows,
3615 selectSubRows = _instance$selectSubRo === void 0 ? true : _instance$selectSubRo,
3616 getSubRows = instance.getSubRows;
3617 var isSelected = state.selectedRowIds[id];
3618 var shouldExist = typeof _setSelected !== 'undefined' ? _setSelected : !isSelected;
3619
3620 if (isSelected === shouldExist) {
3621 return state;
3622 }
3623
3624 var newSelectedRowIds = _extends({}, state.selectedRowIds);
3625
3626 var handleRowById = function handleRowById(id) {
3627 var row = _rowsById[id];
3628
3629 if (row) {
3630 if (!row.isGrouped) {
3631 if (shouldExist) {
3632 newSelectedRowIds[id] = true;
3633 } else {
3634 delete newSelectedRowIds[id];
3635 }
3636 }
3637
3638 if (selectSubRows && getSubRows(row)) {
3639 return getSubRows(row).forEach(function (row) {
3640 return handleRowById(row.id);
3641 });
3642 }
3643 }
3644 };
3645
3646 handleRowById(id);
3647 return _extends({}, state, {
3648 selectedRowIds: newSelectedRowIds
3649 });
3650 }
3651
3652 if (action.type === actions.toggleAllPageRowsSelected) {
3653 var _setSelected2 = action.value;
3654
3655 var page = instance.page,
3656 _rowsById2 = instance.rowsById,
3657 _instance$selectSubRo2 = instance.selectSubRows,
3658 _selectSubRows = _instance$selectSubRo2 === void 0 ? true : _instance$selectSubRo2,
3659 isAllPageRowsSelected = instance.isAllPageRowsSelected,
3660 _getSubRows = instance.getSubRows;
3661
3662 var _selectAll = typeof _setSelected2 !== 'undefined' ? _setSelected2 : !isAllPageRowsSelected;
3663
3664 var _newSelectedRowIds = _extends({}, state.selectedRowIds);
3665
3666 var _handleRowById = function _handleRowById(id) {
3667 var row = _rowsById2[id];
3668
3669 if (!row.isGrouped) {
3670 if (_selectAll) {
3671 _newSelectedRowIds[id] = true;
3672 } else {
3673 delete _newSelectedRowIds[id];
3674 }
3675 }
3676
3677 if (_selectSubRows && _getSubRows(row)) {
3678 return _getSubRows(row).forEach(function (row) {
3679 return _handleRowById(row.id);
3680 });
3681 }
3682 };
3683
3684 page.forEach(function (row) {
3685 return _handleRowById(row.id);
3686 });
3687 return _extends({}, state, {
3688 selectedRowIds: _newSelectedRowIds
3689 });
3690 }
3691
3692 return state;
3693 }
3694
3695 function useInstance$8(instance) {
3696 var data = instance.data,
3697 rows = instance.rows,
3698 getHooks = instance.getHooks,
3699 plugins = instance.plugins,
3700 rowsById = instance.rowsById,
3701 _instance$nonGroupedR2 = instance.nonGroupedRowsById,
3702 nonGroupedRowsById = _instance$nonGroupedR2 === void 0 ? rowsById : _instance$nonGroupedR2,
3703 _instance$autoResetSe = instance.autoResetSelectedRows,
3704 autoResetSelectedRows = _instance$autoResetSe === void 0 ? true : _instance$autoResetSe,
3705 selectedRowIds = instance.state.selectedRowIds,
3706 _instance$selectSubRo3 = instance.selectSubRows,
3707 selectSubRows = _instance$selectSubRo3 === void 0 ? true : _instance$selectSubRo3,
3708 dispatch = instance.dispatch,
3709 page = instance.page,
3710 getSubRows = instance.getSubRows;
3711 ensurePluginOrder(plugins, ['useFilters', 'useGroupBy', 'useSortBy', 'useExpanded', 'usePagination'], 'useRowSelect');
3712 var selectedFlatRows = React.useMemo(function () {
3713 var selectedFlatRows = [];
3714 rows.forEach(function (row) {
3715 var isSelected = selectSubRows ? getRowIsSelected(row, selectedRowIds, getSubRows) : !!selectedRowIds[row.id];
3716 row.isSelected = !!isSelected;
3717 row.isSomeSelected = isSelected === null;
3718
3719 if (isSelected) {
3720 selectedFlatRows.push(row);
3721 }
3722 });
3723 return selectedFlatRows;
3724 }, [rows, selectSubRows, selectedRowIds, getSubRows]);
3725 var isAllRowsSelected = Boolean(Object.keys(nonGroupedRowsById).length && Object.keys(selectedRowIds).length);
3726 var isAllPageRowsSelected = isAllRowsSelected;
3727
3728 if (isAllRowsSelected) {
3729 if (Object.keys(nonGroupedRowsById).some(function (id) {
3730 return !selectedRowIds[id];
3731 })) {
3732 isAllRowsSelected = false;
3733 }
3734 }
3735
3736 if (!isAllRowsSelected) {
3737 if (page && page.length && page.some(function (_ref5) {
3738 var id = _ref5.id;
3739 return !selectedRowIds[id];
3740 })) {
3741 isAllPageRowsSelected = false;
3742 }
3743 }
3744
3745 var getAutoResetSelectedRows = useGetLatest(autoResetSelectedRows);
3746 useMountedLayoutEffect(function () {
3747 if (getAutoResetSelectedRows()) {
3748 dispatch({
3749 type: actions.resetSelectedRows
3750 });
3751 }
3752 }, [dispatch, data]);
3753 var toggleAllRowsSelected = React.useCallback(function (value) {
3754 return dispatch({
3755 type: actions.toggleAllRowsSelected,
3756 value: value
3757 });
3758 }, [dispatch]);
3759 var toggleAllPageRowsSelected = React.useCallback(function (value) {
3760 return dispatch({
3761 type: actions.toggleAllPageRowsSelected,
3762 value: value
3763 });
3764 }, [dispatch]);
3765 var toggleRowSelected = React.useCallback(function (id, value) {
3766 return dispatch({
3767 type: actions.toggleRowSelected,
3768 id: id,
3769 value: value
3770 });
3771 }, [dispatch]);
3772 var getInstance = useGetLatest(instance);
3773 var getToggleAllRowsSelectedProps = makePropGetter(getHooks().getToggleAllRowsSelectedProps, {
3774 instance: getInstance()
3775 });
3776 var getToggleAllPageRowsSelectedProps = makePropGetter(getHooks().getToggleAllPageRowsSelectedProps, {
3777 instance: getInstance()
3778 });
3779 Object.assign(instance, {
3780 selectedFlatRows: selectedFlatRows,
3781 isAllRowsSelected: isAllRowsSelected,
3782 isAllPageRowsSelected: isAllPageRowsSelected,
3783 toggleRowSelected: toggleRowSelected,
3784 toggleAllRowsSelected: toggleAllRowsSelected,
3785 getToggleAllRowsSelectedProps: getToggleAllRowsSelectedProps,
3786 getToggleAllPageRowsSelectedProps: getToggleAllPageRowsSelectedProps,
3787 toggleAllPageRowsSelected: toggleAllPageRowsSelected
3788 });
3789 }
3790
3791 function prepareRow$3(row, _ref6) {
3792 var instance = _ref6.instance;
3793
3794 row.toggleRowSelected = function (set) {
3795 return instance.toggleRowSelected(row.id, set);
3796 };
3797
3798 row.getToggleRowSelectedProps = makePropGetter(instance.getHooks().getToggleRowSelectedProps, {
3799 instance: instance,
3800 row: row
3801 });
3802 }
3803
3804 function getRowIsSelected(row, selectedRowIds, getSubRows) {
3805 if (selectedRowIds[row.id]) {
3806 return true;
3807 }
3808
3809 var subRows = getSubRows(row);
3810
3811 if (subRows && subRows.length) {
3812 var allChildrenSelected = true;
3813 var someSelected = false;
3814 subRows.forEach(function (subRow) {
3815 // Bail out early if we know both of these
3816 if (someSelected && !allChildrenSelected) {
3817 return;
3818 }
3819
3820 if (getRowIsSelected(subRow, selectedRowIds, getSubRows)) {
3821 someSelected = true;
3822 } else {
3823 allChildrenSelected = false;
3824 }
3825 });
3826 return allChildrenSelected ? true : someSelected ? null : false;
3827 }
3828
3829 return false;
3830 }
3831
3832 var defaultInitialRowStateAccessor = function defaultInitialRowStateAccessor(row) {
3833 return {};
3834 };
3835
3836 var defaultInitialCellStateAccessor = function defaultInitialCellStateAccessor(cell) {
3837 return {};
3838 }; // Actions
3839
3840
3841 actions.setRowState = 'setRowState';
3842 actions.setCellState = 'setCellState';
3843 actions.resetRowState = 'resetRowState';
3844 var useRowState = function useRowState(hooks) {
3845 hooks.stateReducers.push(reducer$9);
3846 hooks.useInstance.push(useInstance$9);
3847 hooks.prepareRow.push(prepareRow$4);
3848 };
3849 useRowState.pluginName = 'useRowState';
3850
3851 function reducer$9(state, action, previousState, instance) {
3852 var _instance$initialRowS = instance.initialRowStateAccessor,
3853 initialRowStateAccessor = _instance$initialRowS === void 0 ? defaultInitialRowStateAccessor : _instance$initialRowS,
3854 _instance$initialCell = instance.initialCellStateAccessor,
3855 initialCellStateAccessor = _instance$initialCell === void 0 ? defaultInitialCellStateAccessor : _instance$initialCell,
3856 rowsById = instance.rowsById;
3857
3858 if (action.type === actions.init) {
3859 return _extends({
3860 rowState: {}
3861 }, state);
3862 }
3863
3864 if (action.type === actions.resetRowState) {
3865 return _extends({}, state, {
3866 rowState: instance.initialState.rowState || {}
3867 });
3868 }
3869
3870 if (action.type === actions.setRowState) {
3871 var _extends2;
3872
3873 var rowId = action.rowId,
3874 value = action.value;
3875 var oldRowState = typeof state.rowState[rowId] !== 'undefined' ? state.rowState[rowId] : initialRowStateAccessor(rowsById[rowId]);
3876 return _extends({}, state, {
3877 rowState: _extends({}, state.rowState, (_extends2 = {}, _extends2[rowId] = functionalUpdate(value, oldRowState), _extends2))
3878 });
3879 }
3880
3881 if (action.type === actions.setCellState) {
3882 var _oldRowState$cellStat, _rowsById$_rowId, _rowsById$_rowId$cell, _extends3, _extends4;
3883
3884 var _rowId = action.rowId,
3885 columnId = action.columnId,
3886 _value = action.value;
3887
3888 var _oldRowState = typeof state.rowState[_rowId] !== 'undefined' ? state.rowState[_rowId] : initialRowStateAccessor(rowsById[_rowId]);
3889
3890 var oldCellState = typeof (_oldRowState == null ? void 0 : (_oldRowState$cellStat = _oldRowState.cellState) == null ? void 0 : _oldRowState$cellStat[columnId]) !== 'undefined' ? _oldRowState.cellState[columnId] : initialCellStateAccessor((_rowsById$_rowId = rowsById[_rowId]) == null ? void 0 : (_rowsById$_rowId$cell = _rowsById$_rowId.cells) == null ? void 0 : _rowsById$_rowId$cell.find(function (cell) {
3891 return cell.column.id === columnId;
3892 }));
3893 return _extends({}, state, {
3894 rowState: _extends({}, state.rowState, (_extends4 = {}, _extends4[_rowId] = _extends({}, _oldRowState, {
3895 cellState: _extends({}, _oldRowState.cellState || {}, (_extends3 = {}, _extends3[columnId] = functionalUpdate(_value, oldCellState), _extends3))
3896 }), _extends4))
3897 });
3898 }
3899 }
3900
3901 function useInstance$9(instance) {
3902 var _instance$autoResetRo = instance.autoResetRowState,
3903 autoResetRowState = _instance$autoResetRo === void 0 ? true : _instance$autoResetRo,
3904 data = instance.data,
3905 dispatch = instance.dispatch;
3906 var setRowState = React.useCallback(function (rowId, value) {
3907 return dispatch({
3908 type: actions.setRowState,
3909 rowId: rowId,
3910 value: value
3911 });
3912 }, [dispatch]);
3913 var setCellState = React.useCallback(function (rowId, columnId, value) {
3914 return dispatch({
3915 type: actions.setCellState,
3916 rowId: rowId,
3917 columnId: columnId,
3918 value: value
3919 });
3920 }, [dispatch]);
3921 var getAutoResetRowState = useGetLatest(autoResetRowState);
3922 useMountedLayoutEffect(function () {
3923 if (getAutoResetRowState()) {
3924 dispatch({
3925 type: actions.resetRowState
3926 });
3927 }
3928 }, [data]);
3929 Object.assign(instance, {
3930 setRowState: setRowState,
3931 setCellState: setCellState
3932 });
3933 }
3934
3935 function prepareRow$4(row, _ref) {
3936 var instance = _ref.instance;
3937 var _instance$initialRowS2 = instance.initialRowStateAccessor,
3938 initialRowStateAccessor = _instance$initialRowS2 === void 0 ? defaultInitialRowStateAccessor : _instance$initialRowS2,
3939 _instance$initialCell2 = instance.initialCellStateAccessor,
3940 initialCellStateAccessor = _instance$initialCell2 === void 0 ? defaultInitialCellStateAccessor : _instance$initialCell2,
3941 rowState = instance.state.rowState;
3942
3943 if (row) {
3944 row.state = typeof rowState[row.id] !== 'undefined' ? rowState[row.id] : initialRowStateAccessor(row);
3945
3946 row.setState = function (updater) {
3947 return instance.setRowState(row.id, updater);
3948 };
3949
3950 row.cells.forEach(function (cell) {
3951 if (!row.state.cellState) {
3952 row.state.cellState = {};
3953 }
3954
3955 cell.state = typeof row.state.cellState[cell.column.id] !== 'undefined' ? row.state.cellState[cell.column.id] : initialCellStateAccessor(cell);
3956
3957 cell.setState = function (updater) {
3958 return instance.setCellState(row.id, cell.column.id, updater);
3959 };
3960 });
3961 }
3962 }
3963
3964 actions.resetColumnOrder = 'resetColumnOrder';
3965 actions.setColumnOrder = 'setColumnOrder';
3966 var useColumnOrder = function useColumnOrder(hooks) {
3967 hooks.stateReducers.push(reducer$a);
3968 hooks.visibleColumnsDeps.push(function (deps, _ref) {
3969 var instance = _ref.instance;
3970 return [].concat(deps, [instance.state.columnOrder]);
3971 });
3972 hooks.visibleColumns.push(visibleColumns$2);
3973 hooks.useInstance.push(useInstance$a);
3974 };
3975 useColumnOrder.pluginName = 'useColumnOrder';
3976
3977 function reducer$a(state, action, previousState, instance) {
3978 if (action.type === actions.init) {
3979 return _extends({
3980 columnOrder: []
3981 }, state);
3982 }
3983
3984 if (action.type === actions.resetColumnOrder) {
3985 return _extends({}, state, {
3986 columnOrder: instance.initialState.columnOrder || []
3987 });
3988 }
3989
3990 if (action.type === actions.setColumnOrder) {
3991 return _extends({}, state, {
3992 columnOrder: functionalUpdate(action.columnOrder, state.columnOrder)
3993 });
3994 }
3995 }
3996
3997 function visibleColumns$2(columns, _ref2) {
3998 var columnOrder = _ref2.instance.state.columnOrder;
3999
4000 // If there is no order, return the normal columns
4001 if (!columnOrder || !columnOrder.length) {
4002 return columns;
4003 }
4004
4005 var columnOrderCopy = [].concat(columnOrder); // If there is an order, make a copy of the columns
4006
4007 var columnsCopy = [].concat(columns); // And make a new ordered array of the columns
4008
4009 var columnsInOrder = []; // Loop over the columns and place them in order into the new array
4010
4011 var _loop = function _loop() {
4012 var targetColumnId = columnOrderCopy.shift();
4013 var foundIndex = columnsCopy.findIndex(function (d) {
4014 return d.id === targetColumnId;
4015 });
4016
4017 if (foundIndex > -1) {
4018 columnsInOrder.push(columnsCopy.splice(foundIndex, 1)[0]);
4019 }
4020 };
4021
4022 while (columnsCopy.length && columnOrderCopy.length) {
4023 _loop();
4024 } // If there are any columns left, add them to the end
4025
4026
4027 return [].concat(columnsInOrder, columnsCopy);
4028 }
4029
4030 function useInstance$a(instance) {
4031 var dispatch = instance.dispatch;
4032 instance.setColumnOrder = React.useCallback(function (columnOrder) {
4033 return dispatch({
4034 type: actions.setColumnOrder,
4035 columnOrder: columnOrder
4036 });
4037 }, [dispatch]);
4038 }
4039
4040 defaultColumn.canResize = true; // Actions
4041
4042 actions.columnStartResizing = 'columnStartResizing';
4043 actions.columnResizing = 'columnResizing';
4044 actions.columnDoneResizing = 'columnDoneResizing';
4045 actions.resetResize = 'resetResize';
4046 var useResizeColumns = function useResizeColumns(hooks) {
4047 hooks.getResizerProps = [defaultGetResizerProps];
4048 hooks.getHeaderProps.push({
4049 style: {
4050 position: 'relative'
4051 }
4052 });
4053 hooks.stateReducers.push(reducer$b);
4054 hooks.useInstance.push(useInstance$b);
4055 hooks.useInstanceBeforeDimensions.push(useInstanceBeforeDimensions$1);
4056 };
4057
4058 var defaultGetResizerProps = function defaultGetResizerProps(props, _ref) {
4059 var instance = _ref.instance,
4060 header = _ref.header;
4061 var dispatch = instance.dispatch;
4062
4063 var onResizeStart = function onResizeStart(e, header) {
4064 var isTouchEvent = false;
4065
4066 if (e.type === 'touchstart') {
4067 // lets not respond to multiple touches (e.g. 2 or 3 fingers)
4068 if (e.touches && e.touches.length > 1) {
4069 return;
4070 }
4071
4072 isTouchEvent = true;
4073 }
4074
4075 var headersToResize = getLeafHeaders(header);
4076 var headerIdWidths = headersToResize.map(function (d) {
4077 return [d.id, d.totalWidth];
4078 });
4079 var clientX = isTouchEvent ? Math.round(e.touches[0].clientX) : e.clientX;
4080 var raf;
4081 var mostRecentClientX;
4082
4083 var dispatchEnd = function dispatchEnd() {
4084 window.cancelAnimationFrame(raf);
4085 raf = null;
4086 dispatch({
4087 type: actions.columnDoneResizing
4088 });
4089 };
4090
4091 var dispatchMove = function dispatchMove() {
4092 window.cancelAnimationFrame(raf);
4093 raf = null;
4094 dispatch({
4095 type: actions.columnResizing,
4096 clientX: mostRecentClientX
4097 });
4098 };
4099
4100 var scheduleDispatchMoveOnNextAnimationFrame = function scheduleDispatchMoveOnNextAnimationFrame(clientXPos) {
4101 mostRecentClientX = clientXPos;
4102
4103 if (!raf) {
4104 raf = window.requestAnimationFrame(dispatchMove);
4105 }
4106 };
4107
4108 var handlersAndEvents = {
4109 mouse: {
4110 moveEvent: 'mousemove',
4111 moveHandler: function moveHandler(e) {
4112 return scheduleDispatchMoveOnNextAnimationFrame(e.clientX);
4113 },
4114 upEvent: 'mouseup',
4115 upHandler: function upHandler(e) {
4116 document.removeEventListener('mousemove', handlersAndEvents.mouse.moveHandler);
4117 document.removeEventListener('mouseup', handlersAndEvents.mouse.upHandler);
4118 dispatchEnd();
4119 }
4120 },
4121 touch: {
4122 moveEvent: 'touchmove',
4123 moveHandler: function moveHandler(e) {
4124 if (e.cancelable) {
4125 e.preventDefault();
4126 e.stopPropagation();
4127 }
4128
4129 scheduleDispatchMoveOnNextAnimationFrame(e.touches[0].clientX);
4130 return false;
4131 },
4132 upEvent: 'touchend',
4133 upHandler: function upHandler(e) {
4134 document.removeEventListener(handlersAndEvents.touch.moveEvent, handlersAndEvents.touch.moveHandler);
4135 document.removeEventListener(handlersAndEvents.touch.upEvent, handlersAndEvents.touch.moveHandler);
4136 dispatchEnd();
4137 }
4138 }
4139 };
4140 var events = isTouchEvent ? handlersAndEvents.touch : handlersAndEvents.mouse;
4141 var passiveIfSupported = passiveEventSupported() ? {
4142 passive: false
4143 } : false;
4144 document.addEventListener(events.moveEvent, events.moveHandler, passiveIfSupported);
4145 document.addEventListener(events.upEvent, events.upHandler, passiveIfSupported);
4146 dispatch({
4147 type: actions.columnStartResizing,
4148 columnId: header.id,
4149 columnWidth: header.totalWidth,
4150 headerIdWidths: headerIdWidths,
4151 clientX: clientX
4152 });
4153 };
4154
4155 return [props, {
4156 onMouseDown: function onMouseDown(e) {
4157 return e.persist() || onResizeStart(e, header);
4158 },
4159 onTouchStart: function onTouchStart(e) {
4160 return e.persist() || onResizeStart(e, header);
4161 },
4162 style: {
4163 cursor: 'col-resize'
4164 },
4165 draggable: false,
4166 role: 'separator'
4167 }];
4168 };
4169
4170 useResizeColumns.pluginName = 'useResizeColumns';
4171
4172 function reducer$b(state, action) {
4173 if (action.type === actions.init) {
4174 return _extends({
4175 columnResizing: {
4176 columnWidths: {}
4177 }
4178 }, state);
4179 }
4180
4181 if (action.type === actions.resetResize) {
4182 return _extends({}, state, {
4183 columnResizing: {
4184 columnWidths: {}
4185 }
4186 });
4187 }
4188
4189 if (action.type === actions.columnStartResizing) {
4190 var clientX = action.clientX,
4191 columnId = action.columnId,
4192 columnWidth = action.columnWidth,
4193 headerIdWidths = action.headerIdWidths;
4194 return _extends({}, state, {
4195 columnResizing: _extends({}, state.columnResizing, {
4196 startX: clientX,
4197 headerIdWidths: headerIdWidths,
4198 columnWidth: columnWidth,
4199 isResizingColumn: columnId
4200 })
4201 });
4202 }
4203
4204 if (action.type === actions.columnResizing) {
4205 var _clientX = action.clientX;
4206
4207 var _state$columnResizing = state.columnResizing,
4208 startX = _state$columnResizing.startX,
4209 _columnWidth = _state$columnResizing.columnWidth,
4210 _state$columnResizing2 = _state$columnResizing.headerIdWidths,
4211 _headerIdWidths = _state$columnResizing2 === void 0 ? [] : _state$columnResizing2;
4212
4213 var deltaX = _clientX - startX;
4214 var percentageDeltaX = deltaX / _columnWidth;
4215 var newColumnWidths = {};
4216
4217 _headerIdWidths.forEach(function (_ref2) {
4218 var headerId = _ref2[0],
4219 headerWidth = _ref2[1];
4220 newColumnWidths[headerId] = Math.max(headerWidth + headerWidth * percentageDeltaX, 0);
4221 });
4222
4223 return _extends({}, state, {
4224 columnResizing: _extends({}, state.columnResizing, {
4225 columnWidths: _extends({}, state.columnResizing.columnWidths, {}, newColumnWidths)
4226 })
4227 });
4228 }
4229
4230 if (action.type === actions.columnDoneResizing) {
4231 return _extends({}, state, {
4232 columnResizing: _extends({}, state.columnResizing, {
4233 startX: null,
4234 isResizingColumn: null
4235 })
4236 });
4237 }
4238 }
4239
4240 var useInstanceBeforeDimensions$1 = function useInstanceBeforeDimensions(instance) {
4241 var flatHeaders = instance.flatHeaders,
4242 disableResizing = instance.disableResizing,
4243 getHooks = instance.getHooks,
4244 columnResizing = instance.state.columnResizing;
4245 var getInstance = useGetLatest(instance);
4246 flatHeaders.forEach(function (header) {
4247 var canResize = getFirstDefined(header.disableResizing === true ? false : undefined, disableResizing === true ? false : undefined, true);
4248 header.canResize = canResize;
4249 header.width = columnResizing.columnWidths[header.id] || header.originalWidth || header.width;
4250 header.isResizing = columnResizing.isResizingColumn === header.id;
4251
4252 if (canResize) {
4253 header.getResizerProps = makePropGetter(getHooks().getResizerProps, {
4254 instance: getInstance(),
4255 header: header
4256 });
4257 }
4258 });
4259 };
4260
4261 function useInstance$b(instance) {
4262 var plugins = instance.plugins,
4263 dispatch = instance.dispatch,
4264 _instance$autoResetRe = instance.autoResetResize,
4265 autoResetResize = _instance$autoResetRe === void 0 ? true : _instance$autoResetRe,
4266 columns = instance.columns;
4267 ensurePluginOrder(plugins, ['useAbsoluteLayout'], 'useResizeColumns');
4268 var getAutoResetResize = useGetLatest(autoResetResize);
4269 useMountedLayoutEffect(function () {
4270 if (getAutoResetResize()) {
4271 dispatch({
4272 type: actions.resetResize
4273 });
4274 }
4275 }, [columns]);
4276 var resetResizing = React.useCallback(function () {
4277 return dispatch({
4278 type: actions.resetResize
4279 });
4280 }, [dispatch]);
4281 Object.assign(instance, {
4282 resetResizing: resetResizing
4283 });
4284 }
4285
4286 function getLeafHeaders(header) {
4287 var leafHeaders = [];
4288
4289 var recurseHeader = function recurseHeader(header) {
4290 if (header.columns && header.columns.length) {
4291 header.columns.map(recurseHeader);
4292 }
4293
4294 leafHeaders.push(header);
4295 };
4296
4297 recurseHeader(header);
4298 return leafHeaders;
4299 }
4300
4301 var cellStyles = {
4302 position: 'absolute',
4303 top: 0
4304 };
4305 var useAbsoluteLayout = function useAbsoluteLayout(hooks) {
4306 hooks.getTableBodyProps.push(getRowStyles);
4307 hooks.getRowProps.push(getRowStyles);
4308 hooks.getHeaderGroupProps.push(getRowStyles);
4309 hooks.getFooterGroupProps.push(getRowStyles);
4310 hooks.getHeaderProps.push(function (props, _ref) {
4311 var column = _ref.column;
4312 return [props, {
4313 style: _extends({}, cellStyles, {
4314 left: column.totalLeft + "px",
4315 width: column.totalWidth + "px"
4316 })
4317 }];
4318 });
4319 hooks.getCellProps.push(function (props, _ref2) {
4320 var cell = _ref2.cell;
4321 return [props, {
4322 style: _extends({}, cellStyles, {
4323 left: cell.column.totalLeft + "px",
4324 width: cell.column.totalWidth + "px"
4325 })
4326 }];
4327 });
4328 hooks.getFooterProps.push(function (props, _ref3) {
4329 var column = _ref3.column;
4330 return [props, {
4331 style: _extends({}, cellStyles, {
4332 left: column.totalLeft + "px",
4333 width: column.totalWidth + "px"
4334 })
4335 }];
4336 });
4337 };
4338 useAbsoluteLayout.pluginName = 'useAbsoluteLayout';
4339
4340 var getRowStyles = function getRowStyles(props, _ref4) {
4341 var instance = _ref4.instance;
4342 return [props, {
4343 style: {
4344 position: 'relative',
4345 width: instance.totalColumnsWidth + "px"
4346 }
4347 }];
4348 };
4349
4350 var cellStyles$1 = {
4351 display: 'inline-block',
4352 boxSizing: 'border-box'
4353 };
4354
4355 var getRowStyles$1 = function getRowStyles(props, _ref) {
4356 var instance = _ref.instance;
4357 return [props, {
4358 style: {
4359 display: 'flex',
4360 width: instance.totalColumnsWidth + "px"
4361 }
4362 }];
4363 };
4364
4365 var useBlockLayout = function useBlockLayout(hooks) {
4366 hooks.getRowProps.push(getRowStyles$1);
4367 hooks.getHeaderGroupProps.push(getRowStyles$1);
4368 hooks.getFooterGroupProps.push(getRowStyles$1);
4369 hooks.getHeaderProps.push(function (props, _ref2) {
4370 var column = _ref2.column;
4371 return [props, {
4372 style: _extends({}, cellStyles$1, {
4373 width: column.totalWidth + "px"
4374 })
4375 }];
4376 });
4377 hooks.getCellProps.push(function (props, _ref3) {
4378 var cell = _ref3.cell;
4379 return [props, {
4380 style: _extends({}, cellStyles$1, {
4381 width: cell.column.totalWidth + "px"
4382 })
4383 }];
4384 });
4385 hooks.getFooterProps.push(function (props, _ref4) {
4386 var column = _ref4.column;
4387 return [props, {
4388 style: _extends({}, cellStyles$1, {
4389 width: column.totalWidth + "px"
4390 })
4391 }];
4392 });
4393 };
4394 useBlockLayout.pluginName = 'useBlockLayout';
4395
4396 function useFlexLayout(hooks) {
4397 hooks.getTableProps.push(getTableProps);
4398 hooks.getRowProps.push(getRowStyles$2);
4399 hooks.getHeaderGroupProps.push(getRowStyles$2);
4400 hooks.getFooterGroupProps.push(getRowStyles$2);
4401 hooks.getHeaderProps.push(getHeaderProps);
4402 hooks.getCellProps.push(getCellProps);
4403 hooks.getFooterProps.push(getFooterProps);
4404 }
4405 useFlexLayout.pluginName = 'useFlexLayout';
4406
4407 var getTableProps = function getTableProps(props, _ref) {
4408 var instance = _ref.instance;
4409 return [props, {
4410 style: {
4411 minWidth: instance.totalColumnsMinWidth + "px"
4412 }
4413 }];
4414 };
4415
4416 var getRowStyles$2 = function getRowStyles(props, _ref2) {
4417 var instance = _ref2.instance;
4418 return [props, {
4419 style: {
4420 display: 'flex',
4421 flex: '1 0 auto',
4422 minWidth: instance.totalColumnsMinWidth + "px"
4423 }
4424 }];
4425 };
4426
4427 var getHeaderProps = function getHeaderProps(props, _ref3) {
4428 var column = _ref3.column;
4429 return [props, {
4430 style: {
4431 boxSizing: 'border-box',
4432 flex: column.totalFlexWidth ? column.totalFlexWidth + " 0 auto" : undefined,
4433 minWidth: column.totalMinWidth + "px",
4434 width: column.totalWidth + "px"
4435 }
4436 }];
4437 };
4438
4439 var getCellProps = function getCellProps(props, _ref4) {
4440 var cell = _ref4.cell;
4441 return [props, {
4442 style: {
4443 boxSizing: 'border-box',
4444 flex: cell.column.totalFlexWidth + " 0 auto",
4445 minWidth: cell.column.totalMinWidth + "px",
4446 width: cell.column.totalWidth + "px"
4447 }
4448 }];
4449 };
4450
4451 var getFooterProps = function getFooterProps(props, _ref5) {
4452 var column = _ref5.column;
4453 return [props, {
4454 style: {
4455 boxSizing: 'border-box',
4456 flex: column.totalFlexWidth ? column.totalFlexWidth + " 0 auto" : undefined,
4457 minWidth: column.totalMinWidth + "px",
4458 width: column.totalWidth + "px"
4459 }
4460 }];
4461 };
4462
4463 actions.columnStartResizing = 'columnStartResizing';
4464 actions.columnResizing = 'columnResizing';
4465 actions.columnDoneResizing = 'columnDoneResizing';
4466 actions.resetResize = 'resetResize';
4467 function useGridLayout(hooks) {
4468 hooks.stateReducers.push(reducer$c);
4469 hooks.getTableProps.push(getTableProps$1);
4470 hooks.getHeaderProps.push(getHeaderProps$1);
4471 hooks.getRowProps.push(getRowProps);
4472 }
4473 useGridLayout.pluginName = 'useGridLayout';
4474
4475 var getTableProps$1 = function getTableProps(props, _ref) {
4476 var instance = _ref.instance;
4477 var gridTemplateColumns = instance.visibleColumns.map(function (column) {
4478 var _instance$state$colum;
4479
4480 if (instance.state.gridLayout.columnWidths[column.id]) return instance.state.gridLayout.columnWidths[column.id] + "px"; // When resizing, lock the width of all unset columns
4481 // instead of using user-provided width or defaultColumn width,
4482 // which could potentially be 'auto' or 'fr' units that don't scale linearly
4483
4484 if ((_instance$state$colum = instance.state.columnResizing) == null ? void 0 : _instance$state$colum.isResizingColumn) return instance.state.gridLayout.startWidths[column.id] + "px";
4485 if (typeof column.width === 'number') return column.width + "px";
4486 return column.width;
4487 });
4488 return [props, {
4489 style: {
4490 display: "grid",
4491 gridTemplateColumns: gridTemplateColumns.join(" ")
4492 }
4493 }];
4494 };
4495
4496 var getHeaderProps$1 = function getHeaderProps(props, _ref2) {
4497 var column = _ref2.column;
4498 return [props, {
4499 id: "header-cell-" + column.id,
4500 style: {
4501 position: "sticky",
4502 //enables a scroll wrapper to be placed around the table and have sticky headers
4503 gridColumn: "span " + column.totalVisibleHeaderCount
4504 }
4505 }];
4506 };
4507
4508 var getRowProps = function getRowProps(props, _ref3) {
4509 var row = _ref3.row;
4510
4511 if (row.isExpanded) {
4512 return [props, {
4513 style: {
4514 gridColumn: "1 / " + (row.cells.length + 1)
4515 }
4516 }];
4517 }
4518
4519 return [props, {}];
4520 };
4521
4522 function reducer$c(state, action, previousState, instance) {
4523 if (action.type === actions.init) {
4524 return _extends({
4525 gridLayout: {
4526 columnWidths: {}
4527 }
4528 }, state);
4529 }
4530
4531 if (action.type === actions.resetResize) {
4532 return _extends({}, state, {
4533 gridLayout: {
4534 columnWidths: {}
4535 }
4536 });
4537 }
4538
4539 if (action.type === actions.columnStartResizing) {
4540 var columnId = action.columnId,
4541 headerIdWidths = action.headerIdWidths;
4542 var columnWidth = getElementWidth(columnId);
4543
4544 if (columnWidth !== undefined) {
4545 var startWidths = instance.visibleColumns.reduce(function (acc, column) {
4546 var _extends2;
4547
4548 return _extends({}, acc, (_extends2 = {}, _extends2[column.id] = getElementWidth(column.id), _extends2));
4549 }, {});
4550 var minWidths = instance.visibleColumns.reduce(function (acc, column) {
4551 var _extends3;
4552
4553 return _extends({}, acc, (_extends3 = {}, _extends3[column.id] = column.minWidth, _extends3));
4554 }, {});
4555 var maxWidths = instance.visibleColumns.reduce(function (acc, column) {
4556 var _extends4;
4557
4558 return _extends({}, acc, (_extends4 = {}, _extends4[column.id] = column.maxWidth, _extends4));
4559 }, {});
4560 var headerIdGridWidths = headerIdWidths.map(function (_ref4) {
4561 var headerId = _ref4[0];
4562 return [headerId, getElementWidth(headerId)];
4563 });
4564 return _extends({}, state, {
4565 gridLayout: _extends({}, state.gridLayout, {
4566 startWidths: startWidths,
4567 minWidths: minWidths,
4568 maxWidths: maxWidths,
4569 headerIdGridWidths: headerIdGridWidths,
4570 columnWidth: columnWidth
4571 })
4572 });
4573 } else {
4574 return state;
4575 }
4576 }
4577
4578 if (action.type === actions.columnResizing) {
4579 var clientX = action.clientX;
4580 var startX = state.columnResizing.startX;
4581
4582 var _state$gridLayout = state.gridLayout,
4583 _columnWidth = _state$gridLayout.columnWidth,
4584 _minWidths = _state$gridLayout.minWidths,
4585 _maxWidths = _state$gridLayout.maxWidths,
4586 _state$gridLayout$hea = _state$gridLayout.headerIdGridWidths,
4587 _headerIdGridWidths = _state$gridLayout$hea === void 0 ? [] : _state$gridLayout$hea;
4588
4589 var deltaX = clientX - startX;
4590 var percentageDeltaX = deltaX / _columnWidth;
4591 var newColumnWidths = {};
4592
4593 _headerIdGridWidths.forEach(function (_ref5) {
4594 var headerId = _ref5[0],
4595 headerWidth = _ref5[1];
4596 newColumnWidths[headerId] = Math.min(Math.max(_minWidths[headerId], headerWidth + headerWidth * percentageDeltaX), _maxWidths[headerId]);
4597 });
4598
4599 return _extends({}, state, {
4600 gridLayout: _extends({}, state.gridLayout, {
4601 columnWidths: _extends({}, state.gridLayout.columnWidths, {}, newColumnWidths)
4602 })
4603 });
4604 }
4605
4606 if (action.type === actions.columnDoneResizing) {
4607 return _extends({}, state, {
4608 gridLayout: _extends({}, state.gridLayout, {
4609 startWidths: {},
4610 minWidths: {},
4611 maxWidths: {}
4612 })
4613 });
4614 }
4615 }
4616
4617 function getElementWidth(columnId) {
4618 var _document$getElementB;
4619
4620 var width = (_document$getElementB = document.getElementById("header-cell-" + columnId)) == null ? void 0 : _document$getElementB.offsetWidth;
4621
4622 if (width !== undefined) {
4623 return width;
4624 }
4625 }
4626
4627 exports._UNSTABLE_usePivotColumns = _UNSTABLE_usePivotColumns;
4628 exports.actions = actions;
4629 exports.defaultColumn = defaultColumn;
4630 exports.defaultGroupByFn = defaultGroupByFn;
4631 exports.defaultOrderByFn = defaultOrderByFn;
4632 exports.defaultRenderer = defaultRenderer;
4633 exports.emptyRenderer = emptyRenderer;
4634 exports.ensurePluginOrder = ensurePluginOrder;
4635 exports.flexRender = flexRender;
4636 exports.functionalUpdate = functionalUpdate;
4637 exports.loopHooks = loopHooks;
4638 exports.makePropGetter = makePropGetter;
4639 exports.makeRenderer = makeRenderer;
4640 exports.reduceHooks = reduceHooks;
4641 exports.safeUseLayoutEffect = safeUseLayoutEffect;
4642 exports.useAbsoluteLayout = useAbsoluteLayout;
4643 exports.useAsyncDebounce = useAsyncDebounce;
4644 exports.useBlockLayout = useBlockLayout;
4645 exports.useColumnOrder = useColumnOrder;
4646 exports.useExpanded = useExpanded;
4647 exports.useFilters = useFilters;
4648 exports.useFlexLayout = useFlexLayout;
4649 exports.useGetLatest = useGetLatest;
4650 exports.useGlobalFilter = useGlobalFilter;
4651 exports.useGridLayout = useGridLayout;
4652 exports.useGroupBy = useGroupBy;
4653 exports.useMountedLayoutEffect = useMountedLayoutEffect;
4654 exports.usePagination = usePagination;
4655 exports.useResizeColumns = useResizeColumns;
4656 exports.useRowSelect = useRowSelect;
4657 exports.useRowState = useRowState;
4658 exports.useSortBy = useSortBy;
4659 exports.useTable = useTable;
4660
4661 Object.defineProperty(exports, '__esModule', { value: true });
4662
4663})));
4664//# sourceMappingURL=react-table.development.js.map