diff --git a/.gitignore b/.gitignore index f100702aa6..43fde204e4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,10 @@ node_modules/ -lib/ -es/ -docs/build -react-table.js -react-table.min.js -react-table.css +#lib/ +#es/ +#docs/build +#react-table.js +#react-table.min.js +#react-table.css *.log .idea .DS_Store diff --git a/es/defaultProps.js b/es/defaultProps.js new file mode 100644 index 0000000000..119b31e8f8 --- /dev/null +++ b/es/defaultProps.js @@ -0,0 +1,355 @@ +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +import React from 'react'; +import classnames from 'classnames'; +// +import _ from './utils'; +import Pagination from './pagination'; + +var emptyObj = function emptyObj() { + return {}; +}; + +export default { + // General + data: [], + resolveData: function resolveData(data) { + return data; + }, + loading: false, + showPagination: true, + showPaginationTop: false, + showPaginationBottom: true, + showPageSizeOptions: true, + pageSizeOptions: [5, 10, 20, 25, 50, 100], + defaultPage: 0, + defaultPageSize: 20, + showPageJump: true, + collapseOnSortingChange: true, + collapseOnPageChange: true, + collapseOnDataChange: true, + freezeWhenExpanded: false, + sortable: true, + multiSort: true, + resizable: true, + filterable: false, + defaultSortDesc: false, + defaultSorted: [], + defaultFiltered: [], + defaultResized: [], + defaultExpanded: {}, + // eslint-disable-next-line no-unused-vars + defaultFilterMethod: function defaultFilterMethod(filter, row, column) { + var id = filter.pivotId || filter.id; + return row[id] !== undefined ? String(row[id]).startsWith(filter.value) : true; + }, + // eslint-disable-next-line no-unused-vars + defaultSortMethod: function defaultSortMethod(a, b, desc) { + // force null and undefined to the bottom + a = a === null || a === undefined ? '' : a; + b = b === null || b === undefined ? '' : b; + // force any string values to lowercase + a = typeof a === 'string' ? a.toLowerCase() : a; + b = typeof b === 'string' ? b.toLowerCase() : b; + // Return either 1 or -1 to indicate a sort priority + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + // returning 0, undefined or any falsey value will use subsequent sorts or + // the index as a tiebreaker + return 0; + }, + + // Controlled State Props + // page: undefined, + // pageSize: undefined, + // sorted: [], + // filtered: [], + // resized: [], + // expanded: {}, + + // Controlled State Callbacks + onPageChange: undefined, + onPageSizeChange: undefined, + onSortedChange: undefined, + onFilteredChange: undefined, + onResizedChange: undefined, + onExpandedChange: undefined, + + // Pivoting + pivotBy: undefined, + + // Key Constants + pivotValKey: '_pivotVal', + pivotIDKey: '_pivotID', + subRowsKey: '_subRows', + aggregatedKey: '_aggregated', + nestingLevelKey: '_nestingLevel', + originalKey: '_original', + indexKey: '_index', + groupedByPivotKey: '_groupedByPivot', + + // Server-side Callbacks + onFetchData: function onFetchData() { + return null; + }, + + // Classes + className: '', + style: {}, + + // Component decorators + getProps: emptyObj, + getTableProps: emptyObj, + getTheadGroupProps: emptyObj, + getTheadGroupTrProps: emptyObj, + getTheadGroupThProps: emptyObj, + getTheadProps: emptyObj, + getTheadTrProps: emptyObj, + getTheadThProps: emptyObj, + getTheadFilterProps: emptyObj, + getTheadFilterTrProps: emptyObj, + getTheadFilterThProps: emptyObj, + getTbodyProps: emptyObj, + getTrGroupProps: emptyObj, + getTrProps: emptyObj, + getTdProps: emptyObj, + getTfootProps: emptyObj, + getTfootTrProps: emptyObj, + getTfootTdProps: emptyObj, + getPaginationProps: emptyObj, + getLoadingProps: emptyObj, + getNoDataProps: emptyObj, + getResizerProps: emptyObj, + + // Global Column Defaults + column: { + // Renderers + Cell: undefined, + Header: undefined, + Footer: undefined, + Aggregated: undefined, + Pivot: undefined, + PivotValue: undefined, + Expander: undefined, + Filter: undefined, + Placeholder: undefined, + // All Columns + sortable: undefined, // use table default + resizable: undefined, // use table default + filterable: undefined, // use table default + show: true, + minWidth: 100, + minResizeWidth: 11, + // Cells only + className: '', + style: {}, + getProps: emptyObj, + // Pivot only + aggregate: undefined, + // Headers only + headerClassName: '', + headerStyle: {}, + getHeaderProps: emptyObj, + // Footers only + footerClassName: '', + footerStyle: {}, + getFooterProps: emptyObj, + filterMethod: undefined, + filterAll: false, + sortMethod: undefined + }, + + // Global Expander Column Defaults + expanderDefaults: { + sortable: false, + resizable: false, + filterable: false, + width: 35 + }, + + pivotDefaults: { + // extend the defaults for pivoted columns here + }, + + // Text + previousText: 'Previous', + nextText: 'Next', + loadingText: 'Loading...', + noDataText: 'No rows found', + pageText: 'Page', + ofText: 'of', + rowsText: 'rows', + pageJumpText: 'jump to page', + rowsSelectorText: 'rows per page', + + // Components + TableComponent: function TableComponent(_ref) { + var children = _ref.children, + className = _ref.className, + rest = _objectWithoutProperties(_ref, ['children', 'className']); + + return React.createElement( + 'div', + _extends({ + className: classnames('rt-table', className), + role: 'grid' + // tabIndex='0' + }, rest), + children + ); + }, + TheadComponent: _.makeTemplateComponent('rt-thead', 'Thead'), + TbodyComponent: _.makeTemplateComponent('rt-tbody', 'Tbody'), + TrGroupComponent: function TrGroupComponent(_ref2) { + var children = _ref2.children, + className = _ref2.className, + rest = _objectWithoutProperties(_ref2, ['children', 'className']); + + return React.createElement( + 'div', + _extends({ className: classnames('rt-tr-group', className), role: 'rowgroup' }, rest), + children + ); + }, + TrComponent: function TrComponent(_ref3) { + var children = _ref3.children, + className = _ref3.className, + rest = _objectWithoutProperties(_ref3, ['children', 'className']); + + return React.createElement( + 'div', + _extends({ className: classnames('rt-tr', className), role: 'row' }, rest), + children + ); + }, + ThComponent: function ThComponent(_ref4) { + var toggleSort = _ref4.toggleSort, + className = _ref4.className, + children = _ref4.children, + rest = _objectWithoutProperties(_ref4, ['toggleSort', 'className', 'children']); + + return ( + // eslint-disable-next-line jsx-a11y/click-events-have-key-events + React.createElement( + 'div', + _extends({ + className: classnames('rt-th', className), + onClick: function onClick(e) { + return toggleSort && toggleSort(e); + }, + role: 'columnheader', + tabIndex: '-1' // Resolves eslint issues without implementing keyboard navigation incorrectly + }, rest), + children + ) + ); + }, + TdComponent: function TdComponent(_ref5) { + var toggleSort = _ref5.toggleSort, + className = _ref5.className, + children = _ref5.children, + rest = _objectWithoutProperties(_ref5, ['toggleSort', 'className', 'children']); + + return React.createElement( + 'div', + _extends({ className: classnames('rt-td', className), role: 'gridcell' }, rest), + children + ); + }, + TfootComponent: _.makeTemplateComponent('rt-tfoot', 'Tfoot'), + FilterComponent: function FilterComponent(_ref6) { + var filter = _ref6.filter, + _onChange = _ref6.onChange, + column = _ref6.column; + return React.createElement('input', { + type: 'text', + style: { + width: '100%' + }, + placeholder: column.Placeholder, + value: filter ? filter.value : '', + onChange: function onChange(event) { + return _onChange(event.target.value); + } + }); + }, + ExpanderComponent: function ExpanderComponent(_ref7) { + var isExpanded = _ref7.isExpanded; + return React.createElement( + 'div', + { className: classnames('rt-expander', isExpanded && '-open') }, + '\u2022' + ); + }, + PivotValueComponent: function PivotValueComponent(_ref8) { + var subRows = _ref8.subRows, + value = _ref8.value; + return React.createElement( + 'span', + null, + value, + ' ', + subRows && '(' + subRows.length + ')' + ); + }, + AggregatedComponent: function AggregatedComponent(_ref9) { + var subRows = _ref9.subRows, + column = _ref9.column; + + var previewValues = subRows.filter(function (d) { + return typeof d[column.id] !== 'undefined'; + }).map(function (row, i) { + return ( + // eslint-disable-next-line react/no-array-index-key + React.createElement( + 'span', + { key: i }, + row[column.id], + i < subRows.length - 1 ? ', ' : '' + ) + ); + }); + return React.createElement( + 'span', + null, + previewValues + ); + }, + PivotComponent: undefined, // this is a computed default generated using + // the ExpanderComponent and PivotValueComponent at run-time in methods.js + PaginationComponent: Pagination, + PreviousComponent: undefined, + NextComponent: undefined, + LoadingComponent: function LoadingComponent(_ref10) { + var className = _ref10.className, + loading = _ref10.loading, + loadingText = _ref10.loadingText, + rest = _objectWithoutProperties(_ref10, ['className', 'loading', 'loadingText']); + + return React.createElement( + 'div', + _extends({ className: classnames('-loading', { '-active': loading }, className) }, rest), + React.createElement( + 'div', + { className: '-loading-inner' }, + loadingText + ) + ); + }, + NoDataComponent: _.makeTemplateComponent('rt-noData', 'NoData'), + ResizerComponent: _.makeTemplateComponent('rt-resizer', 'Resizer'), + PadRowComponent: function PadRowComponent() { + return React.createElement( + 'span', + null, + '\xA0' + ); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWZhdWx0UHJvcHMuanMiXSwibmFtZXMiOlsiUmVhY3QiLCJjbGFzc25hbWVzIiwiXyIsIlBhZ2luYXRpb24iLCJlbXB0eU9iaiIsImRhdGEiLCJyZXNvbHZlRGF0YSIsImxvYWRpbmciLCJzaG93UGFnaW5hdGlvbiIsInNob3dQYWdpbmF0aW9uVG9wIiwic2hvd1BhZ2luYXRpb25Cb3R0b20iLCJzaG93UGFnZVNpemVPcHRpb25zIiwicGFnZVNpemVPcHRpb25zIiwiZGVmYXVsdFBhZ2UiLCJkZWZhdWx0UGFnZVNpemUiLCJzaG93UGFnZUp1bXAiLCJjb2xsYXBzZU9uU29ydGluZ0NoYW5nZSIsImNvbGxhcHNlT25QYWdlQ2hhbmdlIiwiY29sbGFwc2VPbkRhdGFDaGFuZ2UiLCJmcmVlemVXaGVuRXhwYW5kZWQiLCJzb3J0YWJsZSIsIm11bHRpU29ydCIsInJlc2l6YWJsZSIsImZpbHRlcmFibGUiLCJkZWZhdWx0U29ydERlc2MiLCJkZWZhdWx0U29ydGVkIiwiZGVmYXVsdEZpbHRlcmVkIiwiZGVmYXVsdFJlc2l6ZWQiLCJkZWZhdWx0RXhwYW5kZWQiLCJkZWZhdWx0RmlsdGVyTWV0aG9kIiwiZmlsdGVyIiwicm93IiwiY29sdW1uIiwiaWQiLCJwaXZvdElkIiwidW5kZWZpbmVkIiwiU3RyaW5nIiwic3RhcnRzV2l0aCIsInZhbHVlIiwiZGVmYXVsdFNvcnRNZXRob2QiLCJhIiwiYiIsImRlc2MiLCJ0b0xvd2VyQ2FzZSIsIm9uUGFnZUNoYW5nZSIsIm9uUGFnZVNpemVDaGFuZ2UiLCJvblNvcnRlZENoYW5nZSIsIm9uRmlsdGVyZWRDaGFuZ2UiLCJvblJlc2l6ZWRDaGFuZ2UiLCJvbkV4cGFuZGVkQ2hhbmdlIiwicGl2b3RCeSIsInBpdm90VmFsS2V5IiwicGl2b3RJREtleSIsInN1YlJvd3NLZXkiLCJhZ2dyZWdhdGVkS2V5IiwibmVzdGluZ0xldmVsS2V5Iiwib3JpZ2luYWxLZXkiLCJpbmRleEtleSIsImdyb3VwZWRCeVBpdm90S2V5Iiwib25GZXRjaERhdGEiLCJjbGFzc05hbWUiLCJzdHlsZSIsImdldFByb3BzIiwiZ2V0VGFibGVQcm9wcyIsImdldFRoZWFkR3JvdXBQcm9wcyIsImdldFRoZWFkR3JvdXBUclByb3BzIiwiZ2V0VGhlYWRHcm91cFRoUHJvcHMiLCJnZXRUaGVhZFByb3BzIiwiZ2V0VGhlYWRUclByb3BzIiwiZ2V0VGhlYWRUaFByb3BzIiwiZ2V0VGhlYWRGaWx0ZXJQcm9wcyIsImdldFRoZWFkRmlsdGVyVHJQcm9wcyIsImdldFRoZWFkRmlsdGVyVGhQcm9wcyIsImdldFRib2R5UHJvcHMiLCJnZXRUckdyb3VwUHJvcHMiLCJnZXRUclByb3BzIiwiZ2V0VGRQcm9wcyIsImdldFRmb290UHJvcHMiLCJnZXRUZm9vdFRyUHJvcHMiLCJnZXRUZm9vdFRkUHJvcHMiLCJnZXRQYWdpbmF0aW9uUHJvcHMiLCJnZXRMb2FkaW5nUHJvcHMiLCJnZXROb0RhdGFQcm9wcyIsImdldFJlc2l6ZXJQcm9wcyIsIkNlbGwiLCJIZWFkZXIiLCJGb290ZXIiLCJBZ2dyZWdhdGVkIiwiUGl2b3QiLCJQaXZvdFZhbHVlIiwiRXhwYW5kZXIiLCJGaWx0ZXIiLCJQbGFjZWhvbGRlciIsInNob3ciLCJtaW5XaWR0aCIsIm1pblJlc2l6ZVdpZHRoIiwiYWdncmVnYXRlIiwiaGVhZGVyQ2xhc3NOYW1lIiwiaGVhZGVyU3R5bGUiLCJnZXRIZWFkZXJQcm9wcyIsImZvb3RlckNsYXNzTmFtZSIsImZvb3RlclN0eWxlIiwiZ2V0Rm9vdGVyUHJvcHMiLCJmaWx0ZXJNZXRob2QiLCJmaWx0ZXJBbGwiLCJzb3J0TWV0aG9kIiwiZXhwYW5kZXJEZWZhdWx0cyIsIndpZHRoIiwicGl2b3REZWZhdWx0cyIsInByZXZpb3VzVGV4dCIsIm5leHRUZXh0IiwibG9hZGluZ1RleHQiLCJub0RhdGFUZXh0IiwicGFnZVRleHQiLCJvZlRleHQiLCJyb3dzVGV4dCIsInBhZ2VKdW1wVGV4dCIsInJvd3NTZWxlY3RvclRleHQiLCJUYWJsZUNvbXBvbmVudCIsImNoaWxkcmVuIiwicmVzdCIsIlRoZWFkQ29tcG9uZW50IiwibWFrZVRlbXBsYXRlQ29tcG9uZW50IiwiVGJvZHlDb21wb25lbnQiLCJUckdyb3VwQ29tcG9uZW50IiwiVHJDb21wb25lbnQiLCJUaENvbXBvbmVudCIsInRvZ2dsZVNvcnQiLCJlIiwiVGRDb21wb25lbnQiLCJUZm9vdENvbXBvbmVudCIsIkZpbHRlckNvbXBvbmVudCIsIm9uQ2hhbmdlIiwiZXZlbnQiLCJ0YXJnZXQiLCJFeHBhbmRlckNvbXBvbmVudCIsImlzRXhwYW5kZWQiLCJQaXZvdFZhbHVlQ29tcG9uZW50Iiwic3ViUm93cyIsImxlbmd0aCIsIkFnZ3JlZ2F0ZWRDb21wb25lbnQiLCJwcmV2aWV3VmFsdWVzIiwiZCIsIm1hcCIsImkiLCJQaXZvdENvbXBvbmVudCIsIlBhZ2luYXRpb25Db21wb25lbnQiLCJQcmV2aW91c0NvbXBvbmVudCIsIk5leHRDb21wb25lbnQiLCJMb2FkaW5nQ29tcG9uZW50IiwiTm9EYXRhQ29tcG9uZW50IiwiUmVzaXplckNvbXBvbmVudCIsIlBhZFJvd0NvbXBvbmVudCJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU9BLEtBQVAsTUFBa0IsT0FBbEI7QUFDQSxPQUFPQyxVQUFQLE1BQXVCLFlBQXZCO0FBQ0E7QUFDQSxPQUFPQyxDQUFQLE1BQWMsU0FBZDtBQUNBLE9BQU9DLFVBQVAsTUFBdUIsY0FBdkI7O0FBRUEsSUFBTUMsV0FBVyxTQUFYQSxRQUFXO0FBQUEsU0FBTyxFQUFQO0FBQUEsQ0FBakI7O0FBRUEsZUFBZTtBQUNiO0FBQ0FDLFFBQU0sRUFGTztBQUdiQyxlQUFhO0FBQUEsV0FBUUQsSUFBUjtBQUFBLEdBSEE7QUFJYkUsV0FBUyxLQUpJO0FBS2JDLGtCQUFnQixJQUxIO0FBTWJDLHFCQUFtQixLQU5OO0FBT2JDLHdCQUFzQixJQVBUO0FBUWJDLHVCQUFxQixJQVJSO0FBU2JDLG1CQUFpQixDQUFDLENBQUQsRUFBSSxFQUFKLEVBQVEsRUFBUixFQUFZLEVBQVosRUFBZ0IsRUFBaEIsRUFBb0Is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QixVQUNoQkEsU0FEZ0I7QUFBQSxRQUNMckQsT0FESyxVQUNMQSxPQURLO0FBQUEsUUFDSXdHLFdBREosVUFDSUEsV0FESjtBQUFBLFFBQ29CUyxJQURwQjs7QUFBQSxXQUdoQjtBQUFBO0FBQUEsaUJBQUssV0FBV3ZILFdBQVcsVUFBWCxFQUF1QixFQUFFLFdBQVdNLE9BQWIsRUFBdkIsRUFBK0NxRCxTQUEvQyxDQUFoQixJQUErRTRELElBQS9FO0FBQ0U7QUFBQTtBQUFBLFVBQUssV0FBVSxnQkFBZjtBQUFpQ1Q7QUFBakM7QUFERixLQUhnQjtBQUFBLEdBM1BMO0FBa1FidUMsbUJBQWlCcEosRUFBRXdILHFCQUFGLENBQXdCLFdBQXhCLEVBQXFDLFFBQXJDLENBbFFKO0FBbVFiNkIsb0JBQWtCckosRUFBRXdILHFCQUFGLENBQXdCLFlBQXhCLEVBQXNDLFNBQXRDLENBblFMO0FBb1FiOEIsbUJBQWlCO0FBQUEsV0FBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQU47QUFBQTtBQXBRSixDQUFmIiwiZmlsZSI6ImRlZmF1bHRQcm9wcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG4vL1xuaW1wb3J0IF8gZnJvbSAnLi91dGlscydcbmltcG9ydCBQYWdpbmF0aW9uIGZyb20gJy4vcGFnaW5hdGlvbidcblxuY29uc3QgZW1wdHlPYmogPSAoKSA9PiAoe30pXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLy8gR2VuZXJhbFxuICBkYXRhOiBbXSxcbiAgcmVzb2x2ZURhdGE6IGRhdGEgPT4gZGF0YSxcbiAgbG9hZGluZzogZmFsc2UsXG4gIHNob3dQYWdpbmF0aW9uOiB0cnVlLFxuICBzaG93UGFnaW5hdGlvblRvcDogZmFsc2UsXG4gIHNob3dQYWdpbmF0aW9uQm90dG9tOiB0cnVlLFxuICBzaG93UGFnZVNpemVPcHRpb25zOiB0cnVlLFxuICBwYWdlU2l6ZU9wdGlvbnM6IFs1LCAxMCwgMjAsIDI1LCA1MCwgMTAwXSxcbiAgZGVmYXVsdFBhZ2U6IDAsXG4gIGRlZmF1bHRQYWdlU2l6ZTogMjAsXG4gIHNob3dQYWdlSnVtcDogdHJ1ZSxcbiAgY29sbGFwc2VPblNvcnRpbmdDaGFuZ2U6IHRydWUsXG4gIGNvbGxhcHNlT25QYWdlQ2hhbmdlOiB0cnVlLFxuICBjb2xsYXBzZU9uRGF0YUNoYW5nZTogdHJ1ZSxcbiAgZnJlZXplV2hlbkV4cGFuZGVkOiBmYWxzZSxcbiAgc29ydGFibGU6IHRydWUsXG4gIG11bHRpU29ydDogdHJ1ZSxcbiAgcmVzaXphYmxlOiB0cnVlLFxuICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgZGVmYXVsdFNvcnREZXNjOiBmYWxzZSxcbiAgZGVmYXVsdFNvcnRlZDogW10sXG4gIGRlZmF1bHRGaWx0ZXJlZDogW10sXG4gIGRlZmF1bHRSZXNpemVkOiBbXSxcbiAgZGVmYXVsdEV4cGFuZGVkOiB7fSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGRlZmF1bHRGaWx0ZXJNZXRob2Q6IChmaWx0ZXIsIHJvdywgY29sdW1uKSA9PiB7XG4gICAgY29uc3QgaWQgPSBmaWx0ZXIucGl2b3RJZCB8fCBmaWx0ZXIuaWRcbiAgICByZXR1cm4gcm93W2lkXSAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKHJvd1tpZF0pLnN0YXJ0c1dpdGgoZmlsdGVyLnZhbHVlKSA6IHRydWVcbiAgfSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGRlZmF1bHRTb3J0TWV0aG9kOiAoYSwgYiwgZGVzYykgPT4ge1xuICAgIC8vIGZvcmNlIG51bGwgYW5kIHVuZGVmaW5lZCB0byB0aGUgYm90dG9tXG4gICAgYSA9IGEgPT09IG51bGwgfHwgYSA9PT0gdW5kZWZpbmVkID8gJycgOiBhXG4gICAgYiA9IGIgPT09IG51bGwgfHwgYiA9PT0gdW5kZWZpbmVkID8gJycgOiBiXG4gICAgLy8gZm9yY2UgYW55IHN0cmluZyB2YWx1ZXMgdG8gbG93ZXJjYXNlXG4gICAgYSA9IHR5cGVvZiBhID09PSAnc3RyaW5nJyA/IGEudG9Mb3dlckNhc2UoKSA6IGFcbiAgICBiID0gdHlwZW9mIGIgPT09ICdzdHJpbmcnID8gYi50b0xvd2VyQ2FzZSgpIDogYlxuICAgIC8vIFJldHVybiBlaXRoZXIgMSBvciAtMSB0byBpbmRpY2F0ZSBhIHNvcnQgcHJpb3JpdHlcbiAgICBpZiAoYSA+IGIpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfVxuICAgIGlmIChhIDwgYikge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIC8vIHJldHVybmluZyAwLCB1bmRlZmluZWQgb3IgYW55IGZhbHNleSB2YWx1ZSB3aWxsIHVzZSBzdWJzZXF1ZW50IHNvcnRzIG9yXG4gICAgLy8gdGhlIGluZGV4IGFzIGEgdGllYnJlYWtlclxuICAgIHJldHVybiAwXG4gIH0sXG5cbiAgLy8gQ29udHJvbGxlZCBTdGF0ZSBQcm9wc1xuICAvLyBwYWdlOiB1bmRlZmluZWQsXG4gIC8vIHBhZ2VTaXplOiB1bmRlZmluZWQsXG4gIC8vIHNvcnRlZDogW10sXG4gIC8vIGZpbHRlcmVkOiBbXSxcbiAgLy8gcmVzaXplZDogW10sXG4gIC8vIGV4cGFuZGVkOiB7fSxcblxuICAvLyBDb250cm9sbGVkIFN0YXRlIENhbGxiYWNrc1xuICBvblBhZ2VDaGFuZ2U6IHVuZGVmaW5lZCxcbiAgb25QYWdlU2l6ZUNoYW5nZTogdW5kZWZpbmVkLFxuICBvblNvcnRlZENoYW5nZTogdW5kZWZpbmVkLFxuICBvbkZpbHRlcmVkQ2hhbmdlOiB1bmRlZmluZWQsXG4gIG9uUmVzaXplZENoYW5nZTogdW5kZWZpbmVkLFxuICBvbkV4cGFuZGVkQ2hhbmdlOiB1bmRlZmluZWQsXG5cbiAgLy8gUGl2b3RpbmdcbiAgcGl2b3RCeTogdW5kZWZpbmVkLFxuXG4gIC8vIEtleSBDb25zdGFudHNcbiAgcGl2b3RWYWxLZXk6ICdfcGl2b3RWYWwnLFxuICBwaXZvdElES2V5OiAnX3Bpdm90SUQnLFxuICBzdWJSb3dzS2V5OiAnX3N1YlJvd3MnLFxuICBhZ2dyZWdhdGVkS2V5OiAnX2FnZ3JlZ2F0ZWQnLFxuICBuZXN0aW5nTGV2ZWxLZXk6ICdfbmVzdGluZ0xldmVsJyxcbiAgb3JpZ2luYWxLZXk6ICdfb3JpZ2luYWwnLFxuICBpbmRleEtleTogJ19pbmRleCcsXG4gIGdyb3VwZWRCeVBpdm90S2V5OiAnX2dyb3VwZWRCeVBpdm90JyxcblxuICAvLyBTZXJ2ZXItc2lkZSBDYWxsYmFja3NcbiAgb25GZXRjaERhdGE6ICgpID0+IG51bGwsXG5cbiAgLy8gQ2xhc3Nlc1xuICBjbGFzc05hbWU6ICcnLFxuICBzdHlsZToge30sXG5cbiAgLy8gQ29tcG9uZW50IGRlY29yYXRvcnNcbiAgZ2V0UHJvcHM6IGVtcHR5T2JqLFxuICBnZXRUYWJsZVByb3BzOiBlbXB0eU9iaixcbiAgZ2V0VGhlYWRHcm91cFByb3BzOiBlbXB0eU9iaixcbiAgZ2V0VGhlYWRHcm91cFRyUHJvcHM6IGVtcHR5T2JqLFxuICBnZXRUaGVhZEdyb3VwVGhQcm9wczogZW1wdHlPYmosXG4gIGdldFRoZWFkUHJvcHM6IGVtcHR5T2JqLFxuICBnZXRUaGVhZFRyUHJvcHM6IGVtcHR5T2JqLFxuICBnZXRUaGVhZFRoUHJvcHM6IGVtcHR5T2JqLFxuICBnZXRUaGVhZEZpbHRlclByb3BzOiBlbXB0eU9iaixcbiAgZ2V0VGhlYWRGaWx0ZXJUclByb3BzOiBlbXB0eU9iaixcbiAgZ2V0VGhlYWRGaWx0ZXJUaFByb3BzOiBlbXB0eU9iaixcbiAgZ2V0VGJvZHlQcm9wczogZW1wdHlPYmosXG4gIGdldFRyR3JvdXBQcm9wczogZW1wdHlPYmosXG4gIGdldFRyUHJvcHM6IGVtcHR5T2JqLFxuICBnZXRUZFByb3BzOiBlbXB0eU9iaixcbiAgZ2V0VGZvb3RQcm9wczogZW1wdHlPYmosXG4gIGdldFRmb290VHJQcm9wczogZW1wdHlPYmosXG4gIGdldFRmb290VGRQcm9wczogZW1wdHlPYmosXG4gIGdldFBhZ2luYXRpb25Qcm9wczogZW1wdHlPYmosXG4gIGdldExvYWRpbmdQcm9wczogZW1wdHlPYmosXG4gIGdldE5vRGF0YVByb3BzOiBlbXB0eU9iaixcbiAgZ2V0UmVzaXplclByb3BzOiBlbXB0eU9iaixcblxuICAvLyBHbG9iYWwgQ29sdW1uIERlZmF1bHRzXG4gIGNvbHVtbjoge1xuICAgIC8vIFJlbmRlcmVyc1xuICAgIENlbGw6IHVuZGVmaW5lZCxcbiAgICBIZWFkZXI6IHVuZGVmaW5lZCxcbiAgICBGb290ZXI6IHVuZGVmaW5lZCxcbiAgICBBZ2dyZWdhdGVkOiB1bmRlZmluZWQsXG4gICAgUGl2b3Q6IHVuZGVmaW5lZCxcbiAgICBQaXZvdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgRXhwYW5kZXI6IHVuZGVmaW5lZCxcbiAgICBGaWx0ZXI6IHVuZGVmaW5lZCxcbiAgICBQbGFjZWhvbGRlcjogdW5kZWZpbmVkLFxuICAgIC8vIEFsbCBDb2x1bW5zXG4gICAgc29ydGFibGU6IHVuZGVmaW5lZCwgLy8gdXNlIHRhYmxlIGRlZmF1bHRcbiAgICByZXNpemFibGU6IHVuZGVmaW5lZCwgLy8gdXNlIHRhYmxlIGRlZmF1bHRcbiAgICBmaWx0ZXJhYmxlOiB1bmRlZmluZWQsIC8vIHVzZSB0YWJsZSBkZWZhdWx0XG4gICAgc2hvdzogdHJ1ZSxcbiAgICBtaW5XaWR0aDogMTAwLFxuICAgIG1pblJlc2l6ZVdpZHRoOiAxMSxcbiAgICAvLyBDZWxscyBvbmx5XG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBzdHlsZToge30sXG4gICAgZ2V0UHJvcHM6IGVtcHR5T2JqLFxuICAgIC8vIFBpdm90IG9ubHlcbiAgICBhZ2dyZWdhdGU6IHVuZGVmaW5lZCxcbiAgICAvLyBIZWFkZXJzIG9ubHlcbiAgICBoZWFkZXJDbGFzc05hbWU6ICcnLFxuICAgIGhlYWRlclN0eWxlOiB7fSxcbiAgICBnZXRIZWFkZXJQcm9wczogZW1wdHlPYmosXG4gICAgLy8gRm9vdGVycyBvbmx5XG4gICAgZm9vdGVyQ2xhc3NOYW1lOiAnJyxcbiAgICBmb290ZXJTdHlsZToge30sXG4gICAgZ2V0Rm9vdGVyUHJvcHM6IGVtcHR5T2JqLFxuICAgIGZpbHRlck1ldGhvZDogdW5kZWZpbmVkLFxuICAgIGZpbHRlckFsbDogZmFsc2UsXG4gICAgc29ydE1ldGhvZDogdW5kZWZpbmVkLFxuICB9LFxuXG4gIC8vIEdsb2JhbCBFeHBhbmRlciBDb2x1bW4gRGVmYXVsdHNcbiAgZXhwYW5kZXJEZWZhdWx0czoge1xuICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICByZXNpemFibGU6IGZhbHNlLFxuICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgIHdpZHRoOiAzNSxcbiAgfSxcblxuICBwaXZvdERlZmF1bHRzOiB7XG4gICAgLy8gZXh0ZW5kIHRoZSBkZWZhdWx0cyBmb3IgcGl2b3RlZCBjb2x1bW5zIGhlcmVcbiAgfSxcblxuICAvLyBUZXh0XG4gIHByZXZpb3VzVGV4dDogJ1ByZXZpb3VzJyxcbiAgbmV4dFRleHQ6ICdOZXh0JyxcbiAgbG9hZGluZ1RleHQ6ICdMb2FkaW5nLi4uJyxcbiAgbm9EYXRhVGV4dDogJ05vIHJvd3MgZm91bmQnLFxuICBwYWdlVGV4dDogJ1BhZ2UnLFxuICBvZlRleHQ6ICdvZicsXG4gIHJvd3NUZXh0OiAncm93cycsXG4gIHBhZ2VKdW1wVGV4dDogJ2p1bXAgdG8gcGFnZScsXG4gIHJvd3NTZWxlY3RvclRleHQ6ICdyb3dzIHBlciBwYWdlJyxcblxuICAvLyBDb21wb25lbnRzXG4gIFRhYmxlQ29tcG9uZW50OiAoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCAuLi5yZXN0IH0pID0+IChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ3J0LXRhYmxlJywgY2xhc3NOYW1lKX1cbiAgICAgIHJvbGU9XCJncmlkXCJcbiAgICAgIC8vIHRhYkluZGV4PScwJ1xuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApLFxuICBUaGVhZENvbXBvbmVudDogXy5tYWtlVGVtcGxhdGVDb21wb25lbnQoJ3J0LXRoZWFkJywgJ1RoZWFkJyksXG4gIFRib2R5Q29tcG9uZW50OiBfLm1ha2VUZW1wbGF0ZUNvbXBvbmVudCgncnQtdGJvZHknLCAnVGJvZHknKSxcbiAgVHJHcm91cENvbXBvbmVudDogKHsgY2hpbGRyZW4sIGNsYXNzTmFtZSwgLi4ucmVzdCB9KSA9PiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ3J0LXRyLWdyb3VwJywgY2xhc3NOYW1lKX0gcm9sZT1cInJvd2dyb3VwXCIgey4uLnJlc3R9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApLFxuICBUckNvbXBvbmVudDogKHsgY2hpbGRyZW4sIGNsYXNzTmFtZSwgLi4ucmVzdCB9KSA9PiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ3J0LXRyJywgY2xhc3NOYW1lKX0gcm9sZT1cInJvd1wiIHsuLi5yZXN0fT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKSxcbiAgVGhDb21wb25lbnQ6ICh7XG4gICAgdG9nZ2xlU29ydCwgY2xhc3NOYW1lLCBjaGlsZHJlbiwgLi4ucmVzdFxuICB9KSA9PiAoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHNcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ3J0LXRoJywgY2xhc3NOYW1lKX1cbiAgICAgIG9uQ2xpY2s9e2UgPT4gdG9nZ2xlU29ydCAmJiB0b2dnbGVTb3J0KGUpfVxuICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICB0YWJJbmRleD1cIi0xXCIgLy8gUmVzb2x2ZXMgZXNsaW50IGlzc3VlcyB3aXRob3V0IGltcGxlbWVudGluZyBrZXlib2FyZCBuYXZpZ2F0aW9uIGluY29ycmVjdGx5XG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICksXG4gIFRkQ29tcG9uZW50OiAoe1xuICAgIHRvZ2dsZVNvcnQsIGNsYXNzTmFtZSwgY2hpbGRyZW4sIC4uLnJlc3RcbiAgfSkgPT4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdydC10ZCcsIGNsYXNzTmFtZSl9IHJvbGU9XCJncmlkY2VsbFwiIHsuLi5yZXN0fT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKSxcbiAgVGZvb3RDb21wb25lbnQ6IF8ubWFrZVRlbXBsYXRlQ29tcG9uZW50KCdydC10Zm9vdCcsICdUZm9vdCcpLFxuICBGaWx0ZXJDb21wb25lbnQ6ICh7IGZpbHRlciwgb25DaGFuZ2UsIGNvbHVtbiB9KSA9PiAoXG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgfX1cbiAgICAgIHBsYWNlaG9sZGVyPXtjb2x1bW4uUGxhY2Vob2xkZXJ9XG4gICAgICB2YWx1ZT17ZmlsdGVyID8gZmlsdGVyLnZhbHVlIDogJyd9XG4gICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gb25DaGFuZ2UoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAvPlxuICApLFxuICBFeHBhbmRlckNvbXBvbmVudDogKHsgaXNFeHBhbmRlZCB9KSA9PiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ3J0LWV4cGFuZGVyJywgaXNFeHBhbmRlZCAmJiAnLW9wZW4nKX0+JmJ1bGw7PC9kaXY+XG4gICksXG4gIFBpdm90VmFsdWVDb21wb25lbnQ6ICh7IHN1YlJvd3MsIHZhbHVlIH0pID0+IChcbiAgICA8c3Bhbj5cbiAgICAgIHt2YWx1ZX0ge3N1YlJvd3MgJiYgYCgke3N1YlJvd3MubGVuZ3RofSlgfVxuICAgIDwvc3Bhbj5cbiAgKSxcbiAgQWdncmVnYXRlZENvbXBvbmVudDogKHsgc3ViUm93cywgY29sdW1uIH0pID0+IHtcbiAgICBjb25zdCBwcmV2aWV3VmFsdWVzID0gc3ViUm93cy5maWx0ZXIoZCA9PiB0eXBlb2YgZFtjb2x1bW4uaWRdICE9PSAndW5kZWZpbmVkJykubWFwKChyb3csIGkpID0+IChcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcbiAgICAgIDxzcGFuIGtleT17aX0+XG4gICAgICAgIHtyb3dbY29sdW1uLmlkXX1cbiAgICAgICAge2kgPCBzdWJSb3dzLmxlbmd0aCAtIDEgPyAnLCAnIDogJyd9XG4gICAgICA8L3NwYW4+XG4gICAgKSlcbiAgICByZXR1cm4gPHNwYW4+e3ByZXZpZXdWYWx1ZXN9PC9zcGFuPlxuICB9LFxuICBQaXZvdENvbXBvbmVudDogdW5kZWZpbmVkLCAvLyB0aGlzIGlzIGEgY29tcHV0ZWQgZGVmYXVsdCBnZW5lcmF0ZWQgdXNpbmdcbiAgLy8gdGhlIEV4cGFuZGVyQ29tcG9uZW50IGFuZCBQaXZvdFZhbHVlQ29tcG9uZW50IGF0IHJ1bi10aW1lIGluIG1ldGhvZHMuanNcbiAgUGFnaW5hdGlvbkNvbXBvbmVudDogUGFnaW5hdGlvbixcbiAgUHJldmlvdXNDb21wb25lbnQ6IHVuZGVmaW5lZCxcbiAgTmV4dENvbXBvbmVudDogdW5kZWZpbmVkLFxuICBMb2FkaW5nQ29tcG9uZW50OiAoe1xuICAgIGNsYXNzTmFtZSwgbG9hZGluZywgbG9hZGluZ1RleHQsIC4uLnJlc3RcbiAgfSkgPT4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCctbG9hZGluZycsIHsgJy1hY3RpdmUnOiBsb2FkaW5nIH0sIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiLWxvYWRpbmctaW5uZXJcIj57bG9hZGluZ1RleHR9PC9kaXY+XG4gICAgPC9kaXY+XG4gICksXG4gIE5vRGF0YUNvbXBvbmVudDogXy5tYWtlVGVtcGxhdGVDb21wb25lbnQoJ3J0LW5vRGF0YScsICdOb0RhdGEnKSxcbiAgUmVzaXplckNvbXBvbmVudDogXy5tYWtlVGVtcGxhdGVDb21wb25lbnQoJ3J0LXJlc2l6ZXInLCAnUmVzaXplcicpLFxuICBQYWRSb3dDb21wb25lbnQ6ICgpID0+IDxzcGFuPiZuYnNwOzwvc3Bhbj4sXG59XG4iXX0= \ No newline at end of file diff --git a/es/hoc/advancedExpandTable/index.js b/es/hoc/advancedExpandTable/index.js new file mode 100644 index 0000000000..605b270568 --- /dev/null +++ b/es/hoc/advancedExpandTable/index.js @@ -0,0 +1,235 @@ +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import set from 'lodash.set'; +import get from 'lodash.get'; + +/* + AdvancedExpandTableHOC for ReactTable + + HOC which allows any Cell in the row to toggle the row's + SubComponent. Also allows the SubComponent to toggle itself. + + Expand functions available to any SubComponent or Column Cell: + toggleRowSubComponent + showRowSubComponent + hideRowSubComponent + + Each Column Renderer (E.g. Cell ) gets the expand functions in its props + And Each SubComponent gets the expand functions in its props + + Expand functions takes the `rowInfo` given to each + Column Renderer and SubComponent already by ReactTable. +*/ + +export var subComponentWithToggle = function subComponentWithToggle(SubComponent, expandFuncs) { + return function (props) { + return React.createElement(SubComponent, _extends({}, props, expandFuncs)); + }; +}; + +// each cell in the column gets passed the function to toggle a sub component +export var columnsWithToggle = function columnsWithToggle(columns, expandFuncs) { + return columns.map(function (column) { + if (column.columns) { + return _extends({}, column, { + columns: columnsWithToggle(column.columns, expandFuncs) + }); + } + return _extends({}, column, { + getProps: function getProps() { + return _extends({}, expandFuncs); + } + }); + }); +}; + +var advancedExpandTableHOC = function advancedExpandTableHOC(TableComponent) { + var _class, _temp; + + return _temp = _class = function (_Component) { + _inherits(AdvancedExpandTable, _Component); + + _createClass(AdvancedExpandTable, null, [{ + key: 'getDerivedStateFromProps', + + // after initial render if we get new + // data, columns, page changes, etc. + // we reset expanded state. + value: function getDerivedStateFromProps() { + return { + expanded: {} + }; + } + }]); + + function AdvancedExpandTable(props) { + _classCallCheck(this, AdvancedExpandTable); + + var _this = _possibleConstructorReturn(this, (AdvancedExpandTable.__proto__ || Object.getPrototypeOf(AdvancedExpandTable)).call(this, props)); + + _this.state = { + expanded: {} + }; + _this.toggleRowSubComponent = _this.toggleRowSubComponent.bind(_this); + _this.showRowSubComponent = _this.showRowSubComponent.bind(_this); + _this.hideRowSubComponent = _this.hideRowSubComponent.bind(_this); + _this.getTdProps = _this.getTdProps.bind(_this); + _this.fireOnExpandedChange = _this.fireOnExpandedChange.bind(_this); + _this.expandFuncs = { + toggleRowSubComponent: _this.toggleRowSubComponent, + showRowSubComponent: _this.showRowSubComponent, + hideRowSubComponent: _this.hideRowSubComponent + }; + return _this; + } + + _createClass(AdvancedExpandTable, [{ + key: 'fireOnExpandedChange', + value: function fireOnExpandedChange(rowInfo, e) { + // fire callback once state has changed. + if (this.props.onExpandedChange) { + this.props.onExpandedChange(rowInfo, e); + } + } + }, { + key: 'resolveNewTableState', + value: function resolveNewTableState(rowInfoOrNestingPath, e, expandType) { + var _this2 = this; + + // derive nestingPath if only rowInfo is passed + var nestingPath = rowInfoOrNestingPath; + + if (rowInfoOrNestingPath.nestingPath) { + nestingPath = rowInfoOrNestingPath.nestingPath; + } + + this.setState(function (prevState) { + var isExpanded = get(prevState.expanded, nestingPath); + // since we do not support nested rows, a shallow clone is okay. + var newExpanded = _extends({}, prevState.expanded); + + switch (expandType) { + case 'show': + set(newExpanded, nestingPath, {}); + break; + case 'hide': + set(newExpanded, nestingPath, false); + break; + default: + // toggle + set(newExpanded, nestingPath, isExpanded ? false : {}); + } + return _extends({}, prevState, { + expanded: newExpanded + }); + }, function () { + return _this2.fireOnExpandedChange(rowInfoOrNestingPath, e); + }); + } + }, { + key: 'toggleRowSubComponent', + value: function toggleRowSubComponent(rowInfo, e) { + this.resolveNewTableState(rowInfo, e); + } + }, { + key: 'showRowSubComponent', + value: function showRowSubComponent(rowInfo, e) { + this.resolveNewTableState(rowInfo, e, 'show'); + } + }, { + key: 'hideRowSubComponent', + value: function hideRowSubComponent(rowInfo, e) { + this.resolveNewTableState(rowInfo, e, 'hide'); + } + }, { + key: 'getTdProps', + value: function getTdProps(tableState, rowInfo, column) { + var _this3 = this; + + var expander = column.expander; + + + if (!expander) { + // no overrides + return {}; + } + + return { + // only override onClick for column Td + onClick: function onClick(e) { + _this3.toggleRowSubComponent(rowInfo, e); + } + }; + } + }, { + key: 'getWrappedInstance', + value: function getWrappedInstance() { + if (!this.wrappedInstance) { + console.warn('AdvancedExpandTable - No wrapped instance'); + } + if (this.wrappedInstance.getWrappedInstance) { + return this.wrappedInstance.getWrappedInstance(); + } + return this.wrappedInstance; + } + }, { + key: 'render', + value: function render() { + var _props = this.props, + columns = _props.columns, + SubComponent = _props.SubComponent, + onExpandedChange = _props.onExpandedChange, + rest = _objectWithoutProperties(_props, ['columns', 'SubComponent', 'onExpandedChange']); + + var wrappedColumns = columnsWithToggle(columns, this.expandFuncs); + var WrappedSubComponent = subComponentWithToggle(SubComponent, this.expandFuncs); + + return React.createElement(TableComponent, _extends({}, rest, { + columns: wrappedColumns, + expanded: this.state.expanded, + getTdProps: this.getTdProps, + SubComponent: WrappedSubComponent, + TdComponent: AdvancedExpandTable.TdComponent + })); + } + }], [{ + key: 'TdComponent', + + + // since we pass the expand functions to each Cell, + // we need to filter it out from being passed as an + // actual DOM attribute. See getProps in columnsWithToggle above. + value: function TdComponent(_ref) { + var toggleRowSubComponent = _ref.toggleRowSubComponent, + showRowSubComponent = _ref.showRowSubComponent, + hideRowSubComponent = _ref.hideRowSubComponent, + rest = _objectWithoutProperties(_ref, ['toggleRowSubComponent', 'showRowSubComponent', 'hideRowSubComponent']); + + // eslint-disable-next-line react/jsx-pascal-case + return React.createElement(TableComponent.defaultProps.TdComponent, rest); + } + }]); + + return AdvancedExpandTable; + }(Component), _class.propTypes = { + columns: PropTypes.array.isRequired, + SubComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]).isRequired, + onExpandedChange: PropTypes.func + }, _class.defaultProps = { + onExpandedChange: null + }, _class.DisplayName = 'AdvancedExpandTable', _temp; +}; +export { advancedExpandTableHOC }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob2MvYWR2YW5jZWRFeHBhbmRUYWJsZS9pbmRleC5qcyJdLCJuYW1lcyI6WyJSZWFjdCIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsInNldCIsImdldCIsInN1YkNvbXBvbmVudFdpdGhUb2dnbGUiLCJTdWJDb21wb25lbnQiLCJleHBhbmRGdW5jcyIsInByb3BzIiwiY29sdW1uc1dpdGhUb2dnbGUiLCJjb2x1bW5zIiwibWFwIiwiY29sdW1uIiwiZ2V0UHJvcHMiLCJhZHZhbmNlZEV4cGFuZFRhYmxlSE9DIiwiZXhwYW5kZWQiLCJzdGF0ZSIsInRvZ2dsZVJvd1N1YkNvbXBvbmVudCIsImJpbmQiLCJzaG93Um93U3ViQ29tcG9uZW50IiwiaGlkZVJvd1N1YkNvbXBvbmVudCIsImdldFRkUHJvcHMiLCJmaXJlT25FeHBhbmRlZENoYW5nZSIsInJvd0luZm8iLCJlIiwib25FeHBhbmRlZENoYW5nZSIsInJvd0luZm9Pck5lc3RpbmdQYXRoIiwiZXhwYW5kVHlwZSIsIm5lc3RpbmdQYXRoIiwic2V0U3RhdGUiLCJpc0V4cGFuZGVkIiwicHJldlN0YXRlIiwibmV3RXhwYW5kZWQiLCJyZXNvbHZlTmV3VGFibGVTdGF0ZSIsInRhYmxlU3RhdGUiLCJleHBhbmRlciIsIm9uQ2xpY2siLCJ3cmFwcGVkSW5zdGFuY2UiLCJjb25zb2xlIiwid2FybiIsImdldFdyYXBwZWRJbnN0YW5jZSIsInJlc3QiLCJ3cmFwcGVkQ29sdW1ucyIsIldyYXBwZWRTdWJDb21wb25lbnQiLCJBZHZhbmNlZEV4cGFuZFRhYmxlIiwiVGRDb21wb25lbnQiLCJwcm9wVHlwZXMiLCJhcnJheSIsImlzUmVxdWlyZWQiLCJvbmVPZlR5cGUiLCJmdW5jIiwiZWxlbWVudCIsImRlZmF1bHRQcm9wcyIsIkRpc3BsYXlOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFPQSxLQUFQLElBQWdCQyxTQUFoQixRQUFpQyxPQUFqQztBQUNBLE9BQU9DLFNBQVAs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LHNCQUFrQnZCLFVBQVVnRDtBQUpYLEdBNUJlLFNBbUMzQkUsWUFuQzJCLEdBbUNaO0FBQ3BCM0Isc0JBQWtCO0FBREUsR0FuQ1ksU0F1QzNCNEIsV0F2QzJCLEdBdUNiLHFCQXZDYTtBQUFBLENBQS9CIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHNldCBmcm9tICdsb2Rhc2guc2V0J1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0J1xuXG4vKlxuICBBZHZhbmNlZEV4cGFuZFRhYmxlSE9DIGZvciBSZWFjdFRhYmxlXG5cbiAgSE9DIHdoaWNoIGFsbG93cyBhbnkgQ2VsbCBpbiB0aGUgcm93IHRvIHRvZ2dsZSB0aGUgcm93J3NcbiAgU3ViQ29tcG9uZW50LiBBbHNvIGFsbG93cyB0aGUgU3ViQ29tcG9uZW50IHRvIHRvZ2dsZSBpdHNlbGYuXG5cbiAgRXhwYW5kIGZ1bmN0aW9ucyBhdmFpbGFibGUgdG8gYW55IFN1YkNvbXBvbmVudCBvciBDb2x1bW4gQ2VsbDpcbiAgICB0b2dnbGVSb3dTdWJDb21wb25lbnRcbiAgICBzaG93Um93U3ViQ29tcG9uZW50XG4gICAgaGlkZVJvd1N1YkNvbXBvbmVudFxuXG4gIEVhY2ggQ29sdW1uIFJlbmRlcmVyIChFLmcuIENlbGwgKSBnZXRzIHRoZSBleHBhbmQgZnVuY3Rpb25zIGluIGl0cyBwcm9wc1xuICBBbmQgRWFjaCBTdWJDb21wb25lbnQgZ2V0cyB0aGUgZXhwYW5kIGZ1bmN0aW9ucyBpbiBpdHMgcHJvcHNcblxuICBFeHBhbmQgZnVuY3Rpb25zIHRha2VzIHRoZSBgcm93SW5mb2AgZ2l2ZW4gdG8gZWFjaFxuICBDb2x1bW4gUmVuZGVyZXIgYW5kIFN1YkNvbXBvbmVudCBhbHJlYWR5IGJ5IFJlYWN0VGFibGUuXG4qL1xuXG5leHBvcnQgY29uc3Qgc3ViQ29tcG9uZW50V2l0aFRvZ2dsZSA9IChTdWJDb21wb25lbnQsIGV4cGFuZEZ1bmNzKSA9PiBwcm9wcyA9PiAoXG4gIDxTdWJDb21wb25lbnQgey4uLnByb3BzfSB7Li4uZXhwYW5kRnVuY3N9IC8+XG4pXG5cbi8vIGVhY2ggY2VsbCBpbiB0aGUgY29sdW1uIGdldHMgcGFzc2VkIHRoZSBmdW5jdGlvbiB0byB0b2dnbGUgYSBzdWIgY29tcG9uZW50XG5leHBvcnQgY29uc3QgY29sdW1uc1dpdGhUb2dnbGUgPSAoY29sdW1ucywgZXhwYW5kRnVuY3MpID0+XG4gIGNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgaWYgKGNvbHVtbi5jb2x1bW5zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgIGNvbHVtbnM6IGNvbHVtbnNXaXRoVG9nZ2xlKGNvbHVtbi5jb2x1bW5zLCBleHBhbmRGdW5jcyksXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb2x1bW4sXG4gICAgICBnZXRQcm9wcyAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZXhwYW5kRnVuY3MsXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfVxuICB9KVxuXG5leHBvcnQgY29uc3QgYWR2YW5jZWRFeHBhbmRUYWJsZUhPQyA9IFRhYmxlQ29tcG9uZW50ID0+XG4gIGNsYXNzIEFkdmFuY2VkRXhwYW5kVGFibGUgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIC8vIGFmdGVyIGluaXRpYWwgcmVuZGVyIGlmIHdlIGdldCBuZXdcbiAgICAvLyBkYXRhLCBjb2x1bW5zLCBwYWdlIGNoYW5nZXMsIGV0Yy5cbiAgICAvLyB3ZSByZXNldCBleHBhbmRlZCBzdGF0ZS5cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cGFuZGVkOiB7fSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKVxuICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgZXhwYW5kZWQ6IHt9LFxuICAgICAgfVxuICAgICAgdGhpcy50b2dnbGVSb3dTdWJDb21wb25lbnQgPSB0aGlzLnRvZ2dsZVJvd1N1YkNvbXBvbmVudC5iaW5kKHRoaXMpXG4gICAgICB0aGlzLnNob3dSb3dTdWJDb21wb25lbnQgPSB0aGlzLnNob3dSb3dTdWJDb21wb25lbnQuYmluZCh0aGlzKVxuICAgICAgdGhpcy5oaWRlUm93U3ViQ29tcG9uZW50ID0gdGhpcy5oaWRlUm93U3ViQ29tcG9uZW50LmJpbmQodGhpcylcbiAgICAgIHRoaXMuZ2V0VGRQcm9wcyA9IHRoaXMuZ2V0VGRQcm9wcy5iaW5kKHRoaXMpXG4gICAgICB0aGlzLmZpcmVPbkV4cGFuZGVkQ2hhbmdlID0gdGhpcy5maXJlT25FeHBhbmRlZENoYW5nZS5iaW5kKHRoaXMpXG4gICAgICB0aGlzLmV4cGFuZEZ1bmNzID0ge1xuICAgICAgICB0b2dnbGVSb3dTdWJDb21wb25lbnQ6IHRoaXMudG9nZ2xlUm93U3ViQ29tcG9uZW50LFxuICAgICAgICBzaG93Um93U3ViQ29tcG9uZW50OiB0aGlzLnNob3dSb3dTdWJDb21wb25lbnQsXG4gICAgICAgIGhpZGVSb3dTdWJDb21wb25lbnQ6IHRoaXMuaGlkZVJvd1N1YkNvbXBvbmVudCxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgICBTdWJDb21wb25lbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuZWxlbWVudF0pXG4gICAgICAgIC5pc1JlcXVpcmVkLFxuICAgICAgb25FeHBhbmRlZENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgfTtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBvbkV4cGFuZGVkQ2hhbmdlOiBudWxsLFxuICAgIH07XG5cbiAgICBzdGF0aWMgRGlzcGxheU5hbWUgPSAnQWR2YW5jZWRFeHBhbmRUYWJsZSc7XG5cbiAgICAvLyBzaW5jZSB3ZSBwYXNzIHRoZSBleHBhbmQgZnVuY3Rpb25zIHRvIGVhY2ggQ2VsbCxcbiAgICAvLyB3ZSBuZWVkIHRvIGZpbHRlciBpdCBvdXQgZnJvbSBiZWluZyBwYXNzZWQgYXMgYW5cbiAgICAvLyBhY3R1YWwgRE9NIGF0dHJpYnV0ZS4gU2VlIGdldFByb3BzIGluIGNvbHVtbnNXaXRoVG9nZ2xlIGFib3ZlLlxuICAgIHN0YXRpYyBUZENvbXBvbmVudCAoe1xuICAgICAgdG9nZ2xlUm93U3ViQ29tcG9uZW50LFxuICAgICAgc2hvd1Jvd1N1YkNvbXBvbmVudCxcbiAgICAgIGhpZGVSb3dTdWJDb21wb25lbnQsXG4gICAgICAuLi5yZXN0XG4gICAgfSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2pzeC1wYXNjYWwtY2FzZVxuICAgICAgcmV0dXJuIDxUYWJsZUNvbXBvbmVudC5kZWZhdWx0UHJvcHMuVGRDb21wb25lbnQgey4uLnJlc3R9IC8+XG4gICAgfVxuXG4gICAgZmlyZU9uRXhwYW5kZWRDaGFuZ2UgKHJvd0luZm8sIGUpIHtcbiAgICAgIC8vIGZpcmUgY2FsbGJhY2sgb25jZSBzdGF0ZSBoYXMgY2hhbmdlZC5cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRXhwYW5kZWRDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkV4cGFuZGVkQ2hhbmdlKHJvd0luZm8sIGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzb2x2ZU5ld1RhYmxlU3RhdGUgKHJvd0luZm9Pck5lc3RpbmdQYXRoLCBlLCBleHBhbmRUeXBlKSB7XG4gICAgICAvLyBkZXJpdmUgbmVzdGluZ1BhdGggaWYgb25seSByb3dJbmZvIGlzIHBhc3NlZFxuICAgICAgbGV0IG5lc3RpbmdQYXRoID0gcm93SW5mb09yTmVzdGluZ1BhdGhcblxuICAgICAgaWYgKHJvd0luZm9Pck5lc3RpbmdQYXRoLm5lc3RpbmdQYXRoKSB7XG4gICAgICAgIG5lc3RpbmdQYXRoID0gcm93SW5mb09yTmVzdGluZ1BhdGgubmVzdGluZ1BhdGhcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgcHJldlN0YXRlID0+IHtcbiAgICAgICAgICBjb25zdCBpc0V4cGFuZGVkID0gZ2V0KHByZXZTdGF0ZS5leHBhbmRlZCwgbmVzdGluZ1BhdGgpXG4gICAgICAgICAgLy8gc2luY2Ugd2UgZG8gbm90IHN1cHBvcnQgbmVzdGVkIHJvd3MsIGEgc2hhbGxvdyBjbG9uZSBpcyBva2F5LlxuICAgICAgICAgIGNvbnN0IG5ld0V4cGFuZGVkID0geyAuLi5wcmV2U3RhdGUuZXhwYW5kZWQgfVxuXG4gICAgICAgICAgc3dpdGNoIChleHBhbmRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdzaG93JzpcbiAgICAgICAgICAgICAgc2V0KG5ld0V4cGFuZGVkLCBuZXN0aW5nUGF0aCwge30pXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBjYXNlICdoaWRlJzpcbiAgICAgICAgICAgICAgc2V0KG5ld0V4cGFuZGVkLCBuZXN0aW5nUGF0aCwgZmFsc2UpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAvLyB0b2dnbGVcbiAgICAgICAgICAgICAgc2V0KG5ld0V4cGFuZGVkLCBuZXN0aW5nUGF0aCwgaXNFeHBhbmRlZCA/IGZhbHNlIDoge30pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICBleHBhbmRlZDogbmV3RXhwYW5kZWQsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB0aGlzLmZpcmVPbkV4cGFuZGVkQ2hhbmdlKHJvd0luZm9Pck5lc3RpbmdQYXRoLCBlKVxuICAgICAgKVxuICAgIH1cblxuICAgIHRvZ2dsZVJvd1N1YkNvbXBvbmVudCAocm93SW5mbywgZSkge1xuICAgICAgdGhpcy5yZXNvbHZlTmV3VGFibGVTdGF0ZShyb3dJbmZvLCBlKVxuICAgIH1cblxuICAgIHNob3dSb3dTdWJDb21wb25lbnQgKHJvd0luZm8sIGUpIHtcbiAgICAgIHRoaXMucmVzb2x2ZU5ld1RhYmxlU3RhdGUocm93SW5mbywgZSwgJ3Nob3cnKVxuICAgIH1cblxuICAgIGhpZGVSb3dTdWJDb21wb25lbnQgKHJvd0luZm8sIGUpIHtcbiAgICAgIHRoaXMucmVzb2x2ZU5ld1RhYmxlU3RhdGUocm93SW5mbywgZSwgJ2hpZGUnKVxuICAgIH1cblxuICAgIGdldFRkUHJvcHMgKHRhYmxlU3RhdGUsIHJvd0luZm8sIGNvbHVtbikge1xuICAgICAgY29uc3QgeyBleHBhbmRlciB9ID0gY29sdW1uXG5cbiAgICAgIGlmICghZXhwYW5kZXIpIHtcbiAgICAgICAgLy8gbm8gb3ZlcnJpZGVzXG4gICAgICAgIHJldHVybiB7fVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBvbmx5IG92ZXJyaWRlIG9uQ2xpY2sgZm9yIGNvbHVtbiBUZFxuICAgICAgICBvbkNsaWNrOiBlID0+IHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZVJvd1N1YkNvbXBvbmVudChyb3dJbmZvLCBlKVxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cblxuICAgIGdldFdyYXBwZWRJbnN0YW5jZSAoKSB7XG4gICAgICBpZiAoIXRoaXMud3JhcHBlZEluc3RhbmNlKSB7IGNvbnNvbGUud2FybignQWR2YW5jZWRFeHBhbmRUYWJsZSAtIE5vIHdyYXBwZWQgaW5zdGFuY2UnKSB9XG4gICAgICBpZiAodGhpcy53cmFwcGVkSW5zdGFuY2UuZ2V0V3JhcHBlZEluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZS5nZXRXcmFwcGVkSW5zdGFuY2UoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZEluc3RhbmNlXG4gICAgfVxuXG4gICAgcmVuZGVyICgpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sdW1ucywgU3ViQ29tcG9uZW50LCBvbkV4cGFuZGVkQ2hhbmdlLCAuLi5yZXN0XG4gICAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgICBjb25zdCB3cmFwcGVkQ29sdW1ucyA9IGNvbHVtbnNXaXRoVG9nZ2xlKGNvbHVtbnMsIHRoaXMuZXhwYW5kRnVuY3MpXG4gICAgICBjb25zdCBXcmFwcGVkU3ViQ29tcG9uZW50ID0gc3ViQ29tcG9uZW50V2l0aFRvZ2dsZShcbiAgICAgICAgU3ViQ29tcG9uZW50LFxuICAgICAgICB0aGlzLmV4cGFuZEZ1bmNzXG4gICAgICApXG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUYWJsZUNvbXBvbmVudFxuICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgIGNvbHVtbnM9e3dyYXBwZWRDb2x1bW5zfVxuICAgICAgICAgIGV4cGFuZGVkPXt0aGlzLnN0YXRlLmV4cGFuZGVkfVxuICAgICAgICAgIGdldFRkUHJvcHM9e3RoaXMuZ2V0VGRQcm9wc31cbiAgICAgICAgICBTdWJDb21wb25lbnQ9e1dyYXBwZWRTdWJDb21wb25lbnR9XG4gICAgICAgICAgVGRDb21wb25lbnQ9e0FkdmFuY2VkRXhwYW5kVGFibGUuVGRDb21wb25lbnR9XG4gICAgICAgIC8+XG4gICAgICApXG4gICAgfVxuICB9XG4iXX0= \ No newline at end of file diff --git a/es/hoc/foldableTable/index.js b/es/hoc/foldableTable/index.js new file mode 100644 index 0000000000..bdf8bc3968 --- /dev/null +++ b/es/hoc/foldableTable/index.js @@ -0,0 +1,308 @@ +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +/* eslint-disable */ + +import React from 'react'; +import left from './left.svg'; +import right from './right.svg'; + +var defaultFoldIconComponent = function defaultFoldIconComponent(_ref) { + var collapsed = _ref.collapsed; + + var style = { width: 25 }; + + if (collapsed) return React.createElement('img', { src: right, style: style, alt: 'right' }); + return React.createElement('img', { src: left, style: style, alt: 'left' }); +}; + +var defaultFoldButtonComponent = function defaultFoldButtonComponent(_ref2) { + var header = _ref2.header, + collapsed = _ref2.collapsed, + icon = _ref2.icon, + onClick = _ref2.onClick; + + var style = { + marginLeft: '0px', + marginTop: '-5px', + marginBottom: '-8px', + float: 'left', + cursor: 'pointer' + }; + + return React.createElement( + 'div', + null, + React.createElement( + 'div', + { style: style, onClick: onClick }, + icon + ), + !collapsed && React.createElement( + 'div', + null, + header + ) + ); +}; + +export default (function (ReactTable) { + var wrapper = function (_React$Component) { + _inherits(RTFoldableTable, _React$Component); + + _createClass(RTFoldableTable, null, [{ + key: 'getDerivedStateFromProps', + value: function getDerivedStateFromProps(props, state) { + if (state.resized !== props.resized) { + return { + resized: props.resized || [] + }; + } + + return null; + } + }]); + + function RTFoldableTable(props, context) { + _classCallCheck(this, RTFoldableTable); + + var _this = _possibleConstructorReturn(this, (RTFoldableTable.__proto__ || Object.getPrototypeOf(RTFoldableTable)).call(this, props, context)); + + _this.onResizedChange = function (resized) { + var onResizedChange = _this.props.onResizedChange; + + if (onResizedChange) onResizedChange(resized);else { + _this.setState(function (p) { + return { resized: resized }; + }); + } + }; + + _this.removeResized = function (column) { + var id = column.id; + + if (!id) return; + + var resized = _this.state.resized; + + if (!resized) return; + + var rs = resized.find(function (r) { + return r.id === id; + }); + if (!rs) return; + + var newResized = resized.filter(function (r) { + return r !== rs; + }); + _this.onResizedChange(newResized); + }; + + _this.getWrappedInstance = function () { + if (!_this.wrappedInstance) console.warn('RTFoldableTable - No wrapped instance'); + if (_this.wrappedInstance.getWrappedInstance) return _this.wrappedInstance.getWrappedInstance(); + return _this.wrappedInstance; + }; + + _this.getCopiedKey = function (key) { + var foldableOriginalKey = _this.props.foldableOriginalKey; + + return '' + foldableOriginalKey + key; + }; + + _this.copyOriginals = function (column) { + var FoldedColumn = _this.props.FoldedColumn; + + // Stop copy if the column already copied + + if (column.original_Header) return; + + Object.keys(FoldedColumn).forEach(function (k) { + var copiedKey = _this.getCopiedKey(k); + + if (k === 'Cell') column[copiedKey] = column[k] ? column[k] : function (c) { + return c.value; + };else column[copiedKey] = column[k]; + }); + + // Copy sub Columns + if (column.columns && !column.original_Columns) column.original_Columns = column.columns; + + // Copy Header + if (!column.original_Header) column.original_Header = column.Header; + }; + + _this.restoreToOriginal = function (column) { + var FoldedColumn = _this.props.FoldedColumn; + + + Object.keys(FoldedColumn).forEach(function (k) { + // ignore header as handling by foldableHeaderRender + if (k === 'Header') return; + + var copiedKey = _this.getCopiedKey(k); + column[k] = column[copiedKey]; + }); + + if (column.columns && column.original_Columns) column.columns = column.original_Columns; + }; + + _this.getState = function () { + return _this.props.onFoldChange ? _this.props.folded : _this.state.folded; + }; + + _this.isFolded = function (col) { + var folded = _this.getState(); + return folded[col.id] === true; + }; + + _this.foldingHandler = function (col) { + if (!col || !col.id) return; + + var onFoldChange = _this.props.onFoldChange; + + var folded = _this.getState(); + var id = col.id; + + + var newFold = Object.assign({}, folded); + newFold[id] = !newFold[id]; + + // Remove the Resized if have + _this.removeResized(col); + + if (onFoldChange) onFoldChange(newFold);else { + _this.setState(function (previous) { + return { folded: newFold }; + }); + } + }; + + _this.foldableHeaderRender = function (cell) { + var _this$props = _this.props, + FoldButtonComponent = _this$props.FoldButtonComponent, + FoldIconComponent = _this$props.FoldIconComponent; + var column = cell.column; + + var collapsed = _this.isFolded(column); + var icon = React.createElement(FoldIconComponent, { collapsed: collapsed }); + var onClick = function onClick() { + return _this.foldingHandler(column); + }; + + return React.createElement(FoldButtonComponent, { + header: column.original_Header, + collapsed: collapsed, + icon: icon, + onClick: onClick + }); + }; + + _this.applyFoldableForColumn = function (column) { + var collapsed = _this.isFolded(column); + var FoldedColumn = _this.props.FoldedColumn; + + // Handle Column Header + + if (column.columns) { + if (collapsed) { + column.columns = [FoldedColumn]; + column.width = FoldedColumn.width; + column.style = FoldedColumn.style; + } else _this.restoreToOriginal(column); + } + // Handle Normal Column. + else if (collapsed) column = Object.assign(column, FoldedColumn);else { + _this.restoreToOriginal(column); + } + }; + + _this.applyFoldableForColumns = function (columns) { + return columns.map(function (col, index) { + if (!col.foldable) return col; + + // If col don't have id then generate id based on index + if (!col.id) col.id = 'col_' + index; + + _this.copyOriginals(col); + // Replace current header with internal header render. + col.Header = function (c) { + return _this.foldableHeaderRender(c); + }; + // apply foldable + _this.applyFoldableForColumn(col); + + // return the new column out + return col; + }); + }; + + _this.state = { + folded: props.onFoldChange ? undefined : {}, + resized: props.resized || [] + }; + return _this; + } + + // this is so we can expose the underlying ReactTable. + + + _createClass(RTFoldableTable, [{ + key: 'render', + value: function render() { + var _this2 = this; + + var _props = this.props, + originalCols = _props.columns, + FoldButtonComponent = _props.FoldButtonComponent, + FoldIconComponent = _props.FoldIconComponent, + FoldedColumn = _props.FoldedColumn, + rest = _objectWithoutProperties(_props, ['columns', 'FoldButtonComponent', 'FoldIconComponent', 'FoldedColumn']); + + var columns = this.applyFoldableForColumns([].concat(_toConsumableArray(originalCols))); + + var extra = { + columns: columns, + onResizedChange: this.onResizedChange, + resized: this.state.resized + }; + + return React.createElement(ReactTable, _extends({}, rest, extra, { ref: function ref(r) { + return _this2.wrappedInstance = r; + } })); + } + }]); + + return RTFoldableTable; + }(React.Component); + + wrapper.displayName = 'RTFoldableTable'; + wrapper.defaultProps = { + FoldIconComponent: defaultFoldIconComponent, + FoldButtonComponent: defaultFoldButtonComponent, + foldableOriginalKey: 'original_', + FoldedColumn: { + Cell: function Cell(c) { + return ''; + }, + width: 30, + sortable: false, + resizable: false, + filterable: false + } + }; + + return wrapper; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob2MvZm9sZGFibGVUYWJsZS9pbmRleC5qcyJdLCJuYW1lcyI6WyJSZWFjdCIsImxlZnQiLCJyaWdodCIsImRlZmF1bHRGb2xkSWNvbkNvbXBvbmVudCIsImNvbGxhcHNlZCIsInN0eWxlIiwid2lkdGgiLCJkZWZhdWx0Rm9sZEJ1dHRvbkNvbXBvbmVudCIsImhlYWRlciIsImljb24iLCJvbkNsaWNrIiwibWFyZ2luTGVmdCIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsImZsb2F0IiwiY3Vyc29yIiwid3JhcHBlciIsInByb3BzIiwic3RhdGUiLCJyZXNpemVkIiwiY29udGV4dCIsIm9uUmVzaXplZENoYW5nZSIsInNldFN0YXRlIiwicmVtb3ZlUmVzaXplZCIsImlkIiwiY29sdW1uIiwicnMiLCJmaW5kIiwiciIsIm5ld1Jlc2l6ZWQiLCJmaWx0ZXIiLCJnZXRXcmFwcGVkSW5zdGFuY2UiLCJ3cmFwcGVkSW5zdGFuY2UiLCJjb25zb2xlIiwid2FybiIsImdldENvcGllZEtleSIsImZvbGRhYmxlT3JpZ2luYWxLZXkiLCJrZXkiLCJjb3B5T3JpZ2luYWxzIiwiRm9sZGVkQ29sdW1uIiwib3JpZ2luYWxfSGVhZGVyIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJjb3BpZWRLZXkiLCJrIiwiYyIsInZhbHVlIiwiY29sdW1ucyIsIm9yaWdpbmFsX0NvbHVtbnMiLCJIZWFkZXIiLCJyZXN0b3JlVG9PcmlnaW5hbCIsImdldFN0YXRlIiwib25Gb2xkQ2hhbmdlIiwiZm9sZGVkIiwiaXNGb2xkZWQiLCJjb2wiLCJmb2xkaW5nSGFuZGxlciIsIm5ld0ZvbGQiLCJhc3NpZ24iLCJmb2xkYWJsZUhlYWRlclJlbmRlciIsIkZvbGRCdXR0b25Db21wb25lbnQiLCJGb2xkSWNvbkNvbXBvbmVudCIsImNlbGwiLCJjcmVhdGVFbGVtZW50IiwiYXBwbHlGb2xkYWJsZUZvckNvbHVtbiIsImFwcGx5Rm9sZGFibGVGb3JDb2x1bW5zIiwibWFwIiwiaW5kZXgiLCJmb2xkYWJsZSIsInVuZGVmaW5lZCIsIm9yaWdpbmFsQ29scyIsInJlc3QiLCJleHRyYSIsIkNvbXBvbmVudCIsImRpc3BsYXlOYW1lIiwiZGVmYXVsdFByb3BzIiwiQ2VsbCIsInNvcnRhYmxlIiwicmVzaXphYmxlIiwiZmlsdGVyYWJsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQSxPQUFPQSxLQUFQLE1BQWtCLE9BQWxCO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQixZQUFqQjtBQUNBLE9BQU9DLEtBQVAsTUFBa0IsYUFBbEI7O0FBRUEsSUFBTUMsMkJBQTJCLFNBQTNCQSx3QkFBMkIsT0FBbUI7QUFBQSxNQUFoQkMsU0FBZ0IsUUFBaEJBLFNBQWdCOztBQUNsRCxNQUFNQyxRQUFRLEVBQUVDLE9BQU8sRUFBVCxFQUFkOztBQUVBLE1BQUlGLFNBQUosRUFBZSxPQUFPLDZCQUFLLEtBQUtGLEtBQVYsRUFBaUIsT0FBT0csS0FBeEIsRUFBK0IsS0FBSSxPQUFuQyxHQUFQO0FBQ2YsU0FBTyw2QkFBSyxLQUFLSixJQUFWLEVBQWdCLE9BQU9JLEtBQXZCLEVBQThCLEtBQUksTUFBbEMsR0FBUDtBQUNELENBTEQ7O0FBT0EsSUFBTUUsNkJBQTZCLFNBQTdCQSwwQkFBNkIsUUFBMEM7QUFBQSxNQUF2Q0MsTUFBdUMsU0FBdkNBLE1BQXVDO0FBQUEsTUFBL0JKLFNBQStCLFNBQS9CQSxTQUErQjtBQUFBLE1BQXBCSyxJQUFvQixTQUFwQkEsSUFBb0I7QUFBQSxNQUFkQyxPQUFjLFNBQWRBLE9BQWM7O0FBQzNFLE1BQU1MLFFBQVE7QUFDWk0sZ0JBQVksS0FEQTtBQUVaQyxlQUFXLE1BRkM7QUFHWkMsa0JBQWMsTUFIRjtBQUlaQyxXQUFPLE1BSks7QUFLWkMsWUFBUTtBQUxJLEdBQWQ7O0FBUUEsU0FDRTtBQUFBO0FBQUE7QUFDRTtBQUFBO0FBQUEsUUFBSyxPQUFPVixLQUFaLEVBQW1CLFNBQVNLLE9BQTVCO0FBQ0dEO0FBREgsS0FERjtBQUlHLEtBQUNMLFNBQUQs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YjtBQUgwQjtBQU8zQjs7QUF3QkQ7OztBQTFDSTtBQUFBO0FBQUEsK0JBcUtLO0FBQUE7O0FBQUEscUJBT0gsS0FBS0YsS0FQRjtBQUFBLFlBRUlzRCxZQUZKLFVBRUx2QixPQUZLO0FBQUEsWUFHTGEsbUJBSEssVUFHTEEsbUJBSEs7QUFBQSxZQUlMQyxpQkFKSyxVQUlMQSxpQkFKSztBQUFBLFlBS0x2QixZQUxLLFVBS0xBLFlBTEs7QUFBQSxZQU1GaUMsSUFORTs7QUFRUCxZQUFNeEIsVUFBVSxLQUFLa0IsdUJBQUwsOEJBQWlDSyxZQUFqQyxHQUFoQjs7QUFFQSxZQUFNRSxRQUFRO0FBQ1p6QiwwQkFEWTtBQUVaM0IsMkJBQWlCLEtBQUtBLGVBRlY7QUFHWkYsbUJBQVMsS0FBS0QsS0FBTCxDQUFXQztBQUhSLFNBQWQ7O0FBTUEsZUFBTyxvQkFBQyxVQUFELGVBQWdCcUQsSUFBaEIsRUFBMEJDLEtBQTFCLElBQWlDLEtBQUs7QUFBQSxtQkFBTSxPQUFLekMsZUFBTCxHQUF1QkosQ0FBN0I7QUFBQSxXQUF0QyxJQUFQO0FBQ0Q7QUF0TEc7O0FBQUE7QUFBQSxJQUF3QzVCLE1BQU0wRSxTQUE5QyxDQUFOOztBQXlMQTFELFVBQVEyRCxXQUFSLEdBQXNCLGlCQUF0QjtBQUNBM0QsVUFBUTRELFlBQVIsR0FBdUI7QUFDckJkLHVCQUFtQjNELHdCQURFO0FBRXJCMEQseUJBQXFCdEQsMEJBRkE7QUFHckI2Qix5QkFBcUIsV0FIQTtBQUlyQkcsa0JBQWM7QUFDWnNDLFlBQU07QUFBQSxlQUFLLEVBQUw7QUFBQSxPQURNO0FBRVp2RSxhQUFPLEVBRks7QUFHWndFLGdCQUFVLEtBSEU7QUFJWkMsaUJBQVcsS0FKQztBQUtaQyxrQkFBWTtBQUxBO0FBSk8sR0FBdkI7O0FBYUEsU0FBT2hFLE9BQVA7QUFDRCxDQXpNRCIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBsZWZ0IGZyb20gJy4vbGVmdC5zdmcnXG5pbXBvcnQgcmlnaHQgZnJvbSAnLi9yaWdodC5zdmcnXG5cbmNvbnN0IGRlZmF1bHRGb2xkSWNvbkNvbXBvbmVudCA9ICh7IGNvbGxhcHNlZCB9KSA9PiB7XG4gIGNvbnN0IHN0eWxlID0geyB3aWR0aDogMjUgfVxuXG4gIGlmIChjb2xsYXBzZWQpIHJldHVybiA8aW1nIHNyYz17cmlnaHR9IHN0eWxlPXtzdHlsZX0gYWx0PVwicmlnaHRcIiAvPlxuICByZXR1cm4gPGltZyBzcmM9e2xlZnR9IHN0eWxlPXtzdHlsZX0gYWx0PVwibGVmdFwiIC8+XG59XG5cbmNvbnN0IGRlZmF1bHRGb2xkQnV0dG9uQ29tcG9uZW50ID0gKHsgaGVhZGVyLCBjb2xsYXBzZWQsIGljb24sIG9uQ2xpY2sgfSkgPT4ge1xuICBjb25zdCBzdHlsZSA9IHtcbiAgICBtYXJnaW5MZWZ0OiAnMHB4JyxcbiAgICBtYXJnaW5Ub3A6ICctNXB4JyxcbiAgICBtYXJnaW5Cb3R0b206ICctOHB4JyxcbiAgICBmbG9hdDogJ2xlZnQnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPGRpdiBzdHlsZT17c3R5bGV9IG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICB7aWNvbn1cbiAgICAgIDwvZGl2PlxuICAgICAgeyFjb2xsYXBzZWQgJiYgPGRpdj57aGVhZGVyfTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZWFjdFRhYmxlID0+IHtcbiAgY29uc3Qgd3JhcHBlciA9IGNsYXNzIFJURm9sZGFibGVUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICAgIGlmIChzdGF0ZS5yZXNpemVkICE9PSBwcm9wcy5yZXNpemVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzaXplZDogcHJvcHMucmVzaXplZCB8fCBbXSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJvcHMsIGNvbnRleHQpIHtcbiAgICAgIHN1cGVyKHByb3BzLCBjb250ZXh0KVxuXG4gICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICBmb2xkZWQ6IHByb3BzLm9uRm9sZENoYW5nZSA/IHVuZGVmaW5lZCA6IHt9LFxuICAgICAgICByZXNpemVkOiBwcm9wcy5yZXNpemVkIHx8IFtdLFxuICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVzaXplZENoYW5nZSA9IHJlc2l6ZWQgPT4ge1xuICAgICAgY29uc3QgeyBvblJlc2l6ZWRDaGFuZ2UgfSA9IHRoaXMucHJvcHNcbiAgICAgIGlmIChvblJlc2l6ZWRDaGFuZ2UpIG9uUmVzaXplZENoYW5nZShyZXNpemVkKVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUocCA9PiAoeyByZXNpemVkIH0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZVJlc2l6ZWQgPSBjb2x1bW4gPT4ge1xuICAgICAgY29uc3QgeyBpZCB9ID0gY29sdW1uXG4gICAgICBpZiAoIWlkKSByZXR1cm5cblxuICAgICAgY29uc3QgeyByZXNpemVkIH0gPSB0aGlzLnN0YXRlXG4gICAgICBpZiAoIXJlc2l6ZWQpIHJldHVyblxuXG4gICAgICBjb25zdCBycyA9IHJlc2l6ZWQuZmluZChyID0+IHIuaWQgPT09IGlkKVxuICAgICAgaWYgKCFycykgcmV0dXJuXG5cbiAgICAgIGNvbnN0IG5ld1Jlc2l6ZWQgPSByZXNpemVkLmZpbHRlcihyID0+IHIgIT09IHJzKVxuICAgICAgdGhpcy5vblJlc2l6ZWRDaGFuZ2UobmV3UmVzaXplZClcbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIHNvIHdlIGNhbiBleHBvc2UgdGhlIHVuZGVybHlpbmcgUmVhY3RUYWJsZS5cbiAgICBnZXRXcmFwcGVkSW5zdGFuY2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMud3JhcHBlZEluc3RhbmNlKSBjb25zb2xlLndhcm4oJ1JURm9sZGFibGVUYWJsZSAtIE5vIHdyYXBwZWQgaW5zdGFuY2UnKVxuICAgICAgaWYgKHRoaXMud3JhcHBlZEluc3RhbmNlLmdldFdyYXBwZWRJbnN0YW5jZSkgcmV0dXJuIHRoaXMud3JhcHBlZEluc3RhbmNlLmdldFdyYXBwZWRJbnN0YW5jZSgpXG4gICAgICByZXR1cm4gdGhpcy53cmFwcGVkSW5zdGFuY2VcbiAgICB9XG5cbiAgICBnZXRDb3BpZWRLZXkgPSBrZXkgPT4ge1xuICAgICAgY29uc3QgeyBmb2xkYWJsZU9yaWdpbmFsS2V5IH0gPSB0aGlzLnByb3BzXG4gICAgICByZXR1cm4gYCR7Zm9sZGFibGVPcmlnaW5hbEtleX0ke2tleX1gXG4gICAgfVxuXG4gICAgY29weU9yaWdpbmFscyA9IGNvbHVtbiA9PiB7XG4gICAgICBjb25zdCB7IEZvbGRlZENvbHVtbiB9ID0gdGhpcy5wcm9wc1xuXG4gICAgICAvLyBTdG9wIGNvcHkgaWYgdGhlIGNvbHVtbiBhbHJlYWR5IGNvcGllZFxuICAgICAgaWYgKGNvbHVtbi5vcmlnaW5hbF9IZWFkZXIpIHJldHVyblxuXG4gICAgICBPYmplY3Qua2V5cyhGb2xkZWRDb2x1bW4pLmZvckVhY2goayA9PiB7XG4gICAgICAgIGNvbnN0IGNvcGllZEtleSA9IHRoaXMuZ2V0Q29waWVkS2V5KGspXG5cbiAgICAgICAgaWYgKGsgPT09ICdDZWxsJykgY29sdW1uW2NvcGllZEtleV0gPSBjb2x1bW5ba10gPyBjb2x1bW5ba10gOiBjID0+IGMudmFsdWVcbiAgICAgICAgZWxzZSBjb2x1bW5bY29waWVkS2V5XSA9IGNvbHVtbltrXVxuICAgICAgfSlcblxuICAgICAgLy8gQ29weSBzdWIgQ29sdW1uc1xuICAgICAgaWYgKGNvbHVtbi5jb2x1bW5zICYmICFjb2x1bW4ub3JpZ2luYWxfQ29sdW1ucykgY29sdW1uLm9yaWdpbmFsX0NvbHVtbnMgPSBjb2x1bW4uY29sdW1uc1xuXG4gICAgICAvLyBDb3B5IEhlYWRlclxuICAgICAgaWYgKCFjb2x1bW4ub3JpZ2luYWxfSGVhZGVyKSBjb2x1bW4ub3JpZ2luYWxfSGVhZGVyID0gY29sdW1uLkhlYWRlclxuICAgIH1cblxuICAgIHJlc3RvcmVUb09yaWdpbmFsID0gY29sdW1uID0+IHtcbiAgICAgIGNvbnN0IHsgRm9sZGVkQ29sdW1uIH0gPSB0aGlzLnByb3BzXG5cbiAgICAgIE9iamVjdC5rZXlzKEZvbGRlZENvbHVtbikuZm9yRWFjaChrID0+IHtcbiAgICAgICAgLy8gaWdub3JlIGhlYWRlciBhcyBoYW5kbGluZyBieSBmb2xkYWJsZUhlYWRlclJlbmRlclxuICAgICAgICBpZiAoayA9PT0gJ0hlYWRlcicpIHJldHVyblxuXG4gICAgICAgIGNvbnN0IGNvcGllZEtleSA9IHRoaXMuZ2V0Q29waWVkS2V5KGspXG4gICAgICAgIGNvbHVtbltrXSA9IGNvbHVtbltjb3BpZWRLZXldXG4gICAgICB9KVxuXG4gICAgICBpZiAoY29sdW1uLmNvbHVtbnMgJiYgY29sdW1uLm9yaWdpbmFsX0NvbHVtbnMpIGNvbHVtbi5jb2x1bW5zID0gY29sdW1uLm9yaWdpbmFsX0NvbHVtbnNcbiAgICB9XG5cbiAgICBnZXRTdGF0ZSA9ICgpID0+ICh0aGlzLnByb3BzLm9uRm9sZENoYW5nZSA/IHRoaXMucHJvcHMuZm9sZGVkIDogdGhpcy5zdGF0ZS5mb2xkZWQpXG5cbiAgICBpc0ZvbGRlZCA9IGNvbCA9PiB7XG4gICAgICBjb25zdCBmb2xkZWQgPSB0aGlzLmdldFN0YXRlKClcbiAgICAgIHJldHVybiBmb2xkZWRbY29sLmlkXSA9PT0gdHJ1ZVxuICAgIH1cblxuICAgIGZvbGRpbmdIYW5kbGVyID0gY29sID0+IHtcbiAgICAgIGlmICghY29sIHx8ICFjb2wuaWQpIHJldHVyblxuXG4gICAgICBjb25zdCB7IG9uRm9sZENoYW5nZSB9ID0gdGhpcy5wcm9wc1xuICAgICAgY29uc3QgZm9sZGVkID0gdGhpcy5nZXRTdGF0ZSgpXG4gICAgICBjb25zdCB7IGlkIH0gPSBjb2xcblxuICAgICAgY29uc3QgbmV3Rm9sZCA9IE9iamVjdC5hc3NpZ24oe30sIGZvbGRlZClcbiAgICAgIG5ld0ZvbGRbaWRdID0gIW5ld0ZvbGRbaWRdXG5cbiAgICAgIC8vIFJlbW92ZSB0aGUgUmVzaXplZCBpZiBoYXZlXG4gICAgICB0aGlzLnJlbW92ZVJlc2l6ZWQoY29sKVxuXG4gICAgICBpZiAob25Gb2xkQ2hhbmdlKSBvbkZvbGRDaGFuZ2UobmV3Rm9sZClcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHByZXZpb3VzID0+ICh7IGZvbGRlZDogbmV3Rm9sZCB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb2xkYWJsZUhlYWRlclJlbmRlciA9IGNlbGwgPT4ge1xuICAgICAgY29uc3QgeyBGb2xkQnV0dG9uQ29tcG9uZW50LCBGb2xkSWNvbkNvbXBvbmVudCB9ID0gdGhpcy5wcm9wc1xuICAgICAgY29uc3QgeyBjb2x1bW4gfSA9IGNlbGxcbiAgICAgIGNvbnN0IGNvbGxhcHNlZCA9IHRoaXMuaXNGb2xkZWQoY29sdW1uKVxuICAgICAgY29uc3QgaWNvbiA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoRm9sZEljb25Db21wb25lbnQsIHsgY29sbGFwc2VkIH0pXG4gICAgICBjb25zdCBvbkNsaWNrID0gKCkgPT4gdGhpcy5mb2xkaW5nSGFuZGxlcihjb2x1bW4pXG5cbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRCdXR0b25Db21wb25lbnQsIHtcbiAgICAgICAgaGVhZGVyOiBjb2x1bW4ub3JpZ2luYWxfSGVhZGVyLFxuICAgICAgICBjb2xsYXBzZWQsXG4gICAgICAgIGljb24sXG4gICAgICAgIG9uQ2xpY2ssXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFwcGx5Rm9sZGFibGVGb3JDb2x1bW4gPSBjb2x1bW4gPT4ge1xuICAgICAgY29uc3QgY29sbGFwc2VkID0gdGhpcy5pc0ZvbGRlZChjb2x1bW4pXG4gICAgICBjb25zdCB7IEZvbGRlZENvbHVtbiB9ID0gdGhpcy5wcm9wc1xuXG4gICAgICAvLyBIYW5kbGUgQ29sdW1uIEhlYWRlclxuICAgICAgaWYgKGNvbHVtbi5jb2x1bW5zKSB7XG4gICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICBjb2x1bW4uY29sdW1ucyA9IFtGb2xkZWRDb2x1bW5dXG4gICAgICAgICAgY29sdW1uLndpZHRoID0gRm9sZGVkQ29sdW1uLndpZHRoXG4gICAgICAgICAgY29sdW1uLnN0eWxlID0gRm9sZGVkQ29sdW1uLnN0eWxlXG4gICAgICAgIH0gZWxzZSB0aGlzLnJlc3RvcmVUb09yaWdpbmFsKGNvbHVtbilcbiAgICAgIH1cbiAgICAgIC8vIEhhbmRsZSBOb3JtYWwgQ29sdW1uLlxuICAgICAgZWxzZSBpZiAoY29sbGFwc2VkKSBjb2x1bW4gPSBPYmplY3QuYXNzaWduKGNvbHVtbiwgRm9sZGVkQ29sdW1uKVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMucmVzdG9yZVRvT3JpZ2luYWwoY29sdW1uKVxuICAgICAgfVxuICAgIH1cblxuICAgIGFwcGx5Rm9sZGFibGVGb3JDb2x1bW5zID0gY29sdW1ucyA9PlxuICAgICAgY29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCFjb2wuZm9sZGFibGUpIHJldHVybiBjb2xcblxuICAgICAgICAvLyBJZiBjb2wgZG9uJ3QgaGF2ZSBpZCB0aGVuIGdlbmVyYXRlIGlkIGJhc2VkIG9uIGluZGV4XG4gICAgICAgIGlmICghY29sLmlkKSBjb2wuaWQgPSBgY29sXyR7aW5kZXh9YFxuXG4gICAgICAgIHRoaXMuY29weU9yaWdpbmFscyhjb2wpXG4gICAgICAgIC8vIFJlcGxhY2UgY3VycmVudCBoZWFkZXIgd2l0aCBpbnRlcm5hbCBoZWFkZXIgcmVuZGVyLlxuICAgICAgICBjb2wuSGVhZGVyID0gYyA9PiB0aGlzLmZvbGRhYmxlSGVhZGVyUmVuZGVyKGMpXG4gICAgICAgIC8vIGFwcGx5IGZvbGRhYmxlXG4gICAgICAgIHRoaXMuYXBwbHlGb2xkYWJsZUZvckNvbHVtbihjb2wpXG5cbiAgICAgICAgLy8gcmV0dXJuIHRoZSBuZXcgY29sdW1uIG91dFxuICAgICAgICByZXR1cm4gY29sXG4gICAgICB9KVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb2x1bW5zOiBvcmlnaW5hbENvbHMsXG4gICAgICAgIEZvbGRCdXR0b25Db21wb25lbnQsXG4gICAgICAgIEZvbGRJY29uQ29tcG9uZW50LFxuICAgICAgICBGb2xkZWRDb2x1bW4sXG4gICAgICAgIC4uLnJlc3RcbiAgICAgIH0gPSB0aGlzLnByb3BzXG4gICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5hcHBseUZvbGRhYmxlRm9yQ29sdW1ucyhbLi4ub3JpZ2luYWxDb2xzXSlcblxuICAgICAgY29uc3QgZXh0cmEgPSB7XG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIG9uUmVzaXplZENoYW5nZTogdGhpcy5vblJlc2l6ZWRDaGFuZ2UsXG4gICAgICAgIHJlc2l6ZWQ6IHRoaXMuc3RhdGUucmVzaXplZCxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIDxSZWFjdFRhYmxlIHsuLi5yZXN0fSB7Li4uZXh0cmF9IHJlZj17ciA9PiAodGhpcy53cmFwcGVkSW5zdGFuY2UgPSByKX0gLz5cbiAgICB9XG4gIH1cblxuICB3cmFwcGVyLmRpc3BsYXlOYW1lID0gJ1JURm9sZGFibGVUYWJsZSdcbiAgd3JhcHBlci5kZWZhdWx0UHJvcHMgPSB7XG4gICAgRm9sZEljb25Db21wb25lbnQ6IGRlZmF1bHRGb2xkSWNvbkNvbXBvbmVudCxcbiAgICBGb2xkQnV0dG9uQ29tcG9uZW50OiBkZWZhdWx0Rm9sZEJ1dHRvbkNvbXBvbmVudCxcbiAgICBmb2xkYWJsZU9yaWdpbmFsS2V5OiAnb3JpZ2luYWxfJyxcbiAgICBGb2xkZWRDb2x1bW46IHtcbiAgICAgIENlbGw6IGMgPT4gJycsXG4gICAgICB3aWR0aDogMzAsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICByZXNpemFibGU6IGZhbHNlLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiB3cmFwcGVyXG59XG4iXX0= \ No newline at end of file diff --git a/es/hoc/selectTable/index.js b/es/hoc/selectTable/index.js new file mode 100644 index 0000000000..b869d6bdc3 --- /dev/null +++ b/es/hoc/selectTable/index.js @@ -0,0 +1,161 @@ +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +/* eslint-disable */ + +import React from 'react'; + +var defaultSelectInputComponent = function defaultSelectInputComponent(props) { + return React.createElement('input', { + type: props.selectType || 'checkbox', + 'aria-label': (props.checked ? 'Un-select' : 'Select') + ' row with id:' + props.id, + checked: props.checked, + id: props.id, + onClick: function onClick(e) { + var shiftKey = e.shiftKey; + + e.stopPropagation(); + props.onClick(props.id, shiftKey, props.row); + }, + onChange: function onChange() {} + }); +}; + +export default (function (Component, options) { + var wrapper = function (_React$Component) { + _inherits(RTSelectTable, _React$Component); + + function RTSelectTable(props) { + _classCallCheck(this, RTSelectTable); + + return _possibleConstructorReturn(this, (RTSelectTable.__proto__ || Object.getPrototypeOf(RTSelectTable)).call(this, props)); + } + + _createClass(RTSelectTable, [{ + key: 'rowSelector', + value: function rowSelector(row) { + if (!row || !row.hasOwnProperty(this.props.keyField)) return null; + var _props = this.props, + toggleSelection = _props.toggleSelection, + selectType = _props.selectType, + keyField = _props.keyField; + + var checked = this.props.isSelected(row[this.props.keyField]); + var inputProps = { + checked: checked, + onClick: toggleSelection, + selectType: selectType, + row: row, + id: 'select-' + row[keyField] + }; + return React.createElement(this.props.SelectInputComponent, inputProps); + } + }, { + key: 'headSelector', + value: function headSelector(row) { + var selectType = this.props.selectType; + + if (selectType === 'radio') return null; + + var _props2 = this.props, + toggleAll = _props2.toggleAll, + checked = _props2.selectAll, + SelectAllInputComponent = _props2.SelectAllInputComponent; + + var inputProps = { + checked: checked, + onClick: toggleAll, + selectType: selectType, + id: 'select-all' + }; + + return React.createElement(SelectAllInputComponent, inputProps); + } + + // this is so we can expose the underlying ReactTable to get at the sortedData for selectAll + + }, { + key: 'getWrappedInstance', + value: function getWrappedInstance() { + if (!this.wrappedInstance) console.warn('RTSelectTable - No wrapped instance'); + if (this.wrappedInstance.getWrappedInstance) return this.wrappedInstance.getWrappedInstance();else return this.wrappedInstance; + } + }, { + key: 'render', + value: function render() { + var _this2 = this; + + var _props3 = this.props, + originalCols = _props3.columns, + isSelected = _props3.isSelected, + toggleSelection = _props3.toggleSelection, + toggleAll = _props3.toggleAll, + keyField = _props3.keyField, + selectAll = _props3.selectAll, + selectType = _props3.selectType, + selectWidth = _props3.selectWidth, + SelectAllInputComponent = _props3.SelectAllInputComponent, + SelectInputComponent = _props3.SelectInputComponent, + rest = _objectWithoutProperties(_props3, ['columns', 'isSelected', 'toggleSelection', 'toggleAll', 'keyField', 'selectAll', 'selectType', 'selectWidth', 'SelectAllInputComponent', 'SelectInputComponent']); + + var select = { + id: '_selector', + accessor: function accessor() { + return 'x'; + }, // this value is not important + Header: this.headSelector.bind(this), + Cell: function Cell(ci) { + return _this2.rowSelector.bind(_this2)(ci.original); + }, + width: selectWidth || 30, + filterable: false, + sortable: false, + resizable: false, + style: { textAlign: 'center' } + }; + + var columns = options !== undefined && options.floatingLeft === true ? [].concat(_toConsumableArray(originalCols), [select]) : [select].concat(_toConsumableArray(originalCols)); + var extra = { + columns: columns + }; + return React.createElement(Component, _extends({}, rest, extra, { ref: function ref(r) { + return _this2.wrappedInstance = r; + } })); + } + }]); + + return RTSelectTable; + }(React.Component); + + wrapper.displayName = 'RTSelectTable'; + wrapper.defaultProps = { + keyField: '_id', + isSelected: function isSelected(key) { + console.log('No isSelected handler provided:', { key: key }); + }, + selectAll: false, + toggleSelection: function toggleSelection(key, shift, row) { + console.log('No toggleSelection handler provided:', { key: key, shift: shift, row: row }); + }, + toggleAll: function toggleAll() { + console.log('No toggleAll handler provided.'); + }, + selectType: 'checkbox', + SelectInputComponent: defaultSelectInputComponent, + SelectAllInputComponent: defaultSelectInputComponent + }; + + return wrapper; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob2Mvc2VsZWN0VGFibGUvaW5kZXguanMiXSwibmFtZXMiOlsiUmVhY3QiLCJkZWZhdWx0U2VsZWN0SW5wdXRDb21wb25lbnQiLCJwcm9wcyIsInNlbGVjdFR5cGUiLCJjaGVja2VkIiwiaWQiLCJzaGlmdEtleSIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJvbkNsaWNrIiwicm93IiwiQ29tcG9uZW50Iiwib3B0aW9ucyIsIndyYXBwZXIiLCJoYXNPd25Qcm9wZXJ0eSIsImtleUZpZWxkIiwidG9nZ2xlU2VsZWN0aW9uIiwiaXNTZWxlY3RlZCIsImlucHV0UHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiU2VsZWN0SW5wdXRDb21wb25lbnQiLCJ0b2dnbGVBbGwiLCJzZWxlY3RBbGwiLCJTZWxlY3RBbGxJbnB1dENvbXBvbmVudCIsIndyYXBwZWRJbnN0YW5jZSIsImNvbnNvbGUiLCJ3YXJuIiwiZ2V0V3JhcHBlZEluc3RhbmNlIiwib3JpZ2luYWxDb2xzIiwiY29sdW1ucyIsInNlbGVjdFdpZHRoIiwicmVzdCIsInNlbGVjdCIsImFjY2Vzc29yIiwiSGVhZGVyIiwiaGVhZFNlbGVjdG9yIiwiYmluZCIsIkNlbGwiLCJyb3dTZWxlY3RvciIsImNpIiwib3JpZ2luYWwiLCJ3aWR0aCIsImZpbHRlcmFibGUiLCJzb3J0YWJsZSIsInJlc2l6YWJsZSIsInN0eWxlIiwidGV4dEFsaWduIiwidW5kZWZpbmVkIiwiZmxvYXRpbmdMZWZ0IiwiZXh0cmEiLCJyIiwiZGlzcGxheU5hbWUiLCJkZWZhdWx0UHJvcHMiLCJsb2ciLCJrZXkiLCJzaGlmdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQSxPQUFPQSxLQUFQLE1BQWtCLE9BQWxCOztBQUVBLElBQU1DLDhCQUE4QixTQUE5QkEsMkJBQThCLFFBQVM7QUFDM0MsU0FDRTtBQUNFLFVBQU1DLE1BQU1DLFVBQU4sSUFBb0IsVUFENUI7QUFFRSxtQkFBZUQsTUFBTUUsT0FBTixH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RUFBcUI7QUFDcENlLGNBQVE0QixHQUFSLENBQVksc0NBQVosRUFBb0QsRUFBRUMsUUFBRixFQUFPQyxZQUFQLEVBQWM3QyxRQUFkLEVBQXBEO0FBQ0QsS0FSb0I7QUFTckJXLGVBQVcscUJBQU07QUFDZkksY0FBUTRCLEdBQVIsQ0FBWSxnQ0FBWjtBQUNELEtBWG9CO0FBWXJCbEQsZ0JBQVksVUFaUztBQWFyQmlCLDBCQUFzQm5CLDJCQWJEO0FBY3JCc0IsNkJBQXlCdEI7QUFkSixHQUF2Qjs7QUFpQkEsU0FBT1ksT0FBUDtBQUNELENBakdEIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5jb25zdCBkZWZhdWx0U2VsZWN0SW5wdXRDb21wb25lbnQgPSBwcm9wcyA9PiB7XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICB0eXBlPXtwcm9wcy5zZWxlY3RUeXBlIHx8ICdjaGVja2JveCd9XG4gICAgICBhcmlhLWxhYmVsPXtgJHtwcm9wcy5jaGVja2VkID8gJ1VuLXNlbGVjdCc6J1NlbGVjdCd9IHJvdyB3aXRoIGlkOiR7cHJvcHMuaWR9YCB9XG4gICAgICBjaGVja2VkPXtwcm9wcy5jaGVja2VkfVxuICAgICAgaWQ9e3Byb3BzLmlkfVxuICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2hpZnRLZXkgfSA9IGVcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBwcm9wcy5vbkNsaWNrKHByb3BzLmlkLCBzaGlmdEtleSwgcHJvcHMucm93KVxuICAgICAgfX1cbiAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7fX1cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IChDb21wb25lbnQsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgd3JhcHBlciA9IGNsYXNzIFJUU2VsZWN0VGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcylcbiAgICB9XG5cbiAgICByb3dTZWxlY3Rvcihyb3cpIHtcbiAgICAgIGlmICghcm93IHx8ICFyb3cuaGFzT3duUHJvcGVydHkodGhpcy5wcm9wcy5rZXlGaWVsZCkpIHJldHVybiBudWxsXG4gICAgICBjb25zdCB7IHRvZ2dsZVNlbGVjdGlvbiwgc2VsZWN0VHlwZSwga2V5RmllbGQgfSA9IHRoaXMucHJvcHNcbiAgICAgIGNvbnN0IGNoZWNrZWQgPSB0aGlzLnByb3BzLmlzU2VsZWN0ZWQocm93W3RoaXMucHJvcHMua2V5RmllbGRdKVxuICAgICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgb25DbGljazogdG9nZ2xlU2VsZWN0aW9uLFxuICAgICAgICBzZWxlY3RUeXBlLFxuICAgICAgICByb3csXG4gICAgICAgIGlkOiBgc2VsZWN0LSR7cm93W2tleUZpZWxkXX1gXG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh0aGlzLnByb3BzLlNlbGVjdElucHV0Q29tcG9uZW50LCBpbnB1dFByb3BzKVxuICAgIH1cblxuICAgIGhlYWRTZWxlY3Rvcihyb3cpIHtcbiAgICAgIGNvbnN0IHsgc2VsZWN0VHlwZSB9ID0gdGhpcy5wcm9wc1xuICAgICAgaWYgKHNlbGVjdFR5cGUgPT09ICdyYWRpbycpIHJldHVybiBudWxsXG5cbiAgICAgIGNvbnN0IHsgdG9nZ2xlQWxsLCBzZWxlY3RBbGw6IGNoZWNrZWQsIFNlbGVjdEFsbElucHV0Q29tcG9uZW50IH0gPSB0aGlzLnByb3BzXG4gICAgICBjb25zdCBpbnB1dFByb3BzID0ge1xuICAgICAgICBjaGVja2VkLFxuICAgICAgICBvbkNsaWNrOiB0b2dnbGVBbGwsXG4gICAgICAgIHNlbGVjdFR5cGUsXG4gICAgICAgIGlkOiAnc2VsZWN0LWFsbCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0QWxsSW5wdXRDb21wb25lbnQsIGlucHV0UHJvcHMpXG4gICAgfVxuXG4gICAgLy8gdGhpcyBpcyBzbyB3ZSBjYW4gZXhwb3NlIHRoZSB1bmRlcmx5aW5nIFJlYWN0VGFibGUgdG8gZ2V0IGF0IHRoZSBzb3J0ZWREYXRhIGZvciBzZWxlY3RBbGxcbiAgICBnZXRXcmFwcGVkSW5zdGFuY2UoKSB7XG4gICAgICBpZiAoIXRoaXMud3JhcHBlZEluc3RhbmNlKSBjb25zb2xlLndhcm4oJ1JUU2VsZWN0VGFibGUgLSBObyB3cmFwcGVkIGluc3RhbmNlJylcbiAgICAgIGlmICh0aGlzLndyYXBwZWRJbnN0YW5jZS5nZXRXcmFwcGVkSW5zdGFuY2UpIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZS5nZXRXcmFwcGVkSW5zdGFuY2UoKVxuICAgICAgZWxzZSByZXR1cm4gdGhpcy53cmFwcGVkSW5zdGFuY2VcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbnM6IG9yaWdpbmFsQ29scyxcbiAgICAgICAgaXNTZWxlY3RlZCxcbiAgICAgICAgdG9nZ2xlU2VsZWN0aW9uLFxuICAgICAgICB0b2dnbGVBbGwsXG4gICAgICAgIGtleUZpZWxkLFxuICAgICAgICBzZWxlY3RBbGwsXG4gICAgICAgIHNlbGVjdFR5cGUsXG4gICAgICAgIHNlbGVjdFdpZHRoLFxuICAgICAgICBTZWxlY3RBbGxJbnB1dENvbXBvbmVudCxcbiAgICAgICAgU2VsZWN0SW5wdXRDb21wb25lbnQsXG4gICAgICAgIC4uLnJlc3RcbiAgICAgIH0gPSB0aGlzLnByb3BzXG4gICAgICBjb25zdCBzZWxlY3QgPSB7XG4gICAgICAgIGlkOiAnX3NlbGVjdG9yJyxcbiAgICAgICAgYWNjZXNzb3I6ICgpID0+ICd4JywgLy8gdGhpcyB2YWx1ZSBpcyBub3QgaW1wb3J0YW50XG4gICAgICAgIEhlYWRlcjogdGhpcy5oZWFkU2VsZWN0b3IuYmluZCh0aGlzKSxcbiAgICAgICAgQ2VsbDogY2kgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdG9yLmJpbmQodGhpcykoY2kub3JpZ2luYWwpXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiBzZWxlY3RXaWR0aCB8fCAzMCxcbiAgICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgc3R5bGU6IHsgdGV4dEFsaWduOiAnY2VudGVyJyB9LFxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2x1bW5zID0gKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmZsb2F0aW5nTGVmdCA9PT0gdHJ1ZSkgPyBbLi4ub3JpZ2luYWxDb2xzLCBzZWxlY3RdIDogW3NlbGVjdCwgLi4ub3JpZ2luYWxDb2xzXVxuICAgICAgY29uc3QgZXh0cmEgPSB7XG4gICAgICAgIGNvbHVtbnMsXG4gICAgICB9XG4gICAgICByZXR1cm4gPENvbXBvbmVudCB7Li4ucmVzdH0gey4uLmV4dHJhfSByZWY9e3IgPT4gKHRoaXMud3JhcHBlZEluc3RhbmNlID0gcil9IC8+XG4gICAgfVxuICB9XG5cbiAgd3JhcHBlci5kaXNwbGF5TmFtZSA9ICdSVFNlbGVjdFRhYmxlJ1xuICB3cmFwcGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBrZXlGaWVsZDogJ19pZCcsXG4gICAgaXNTZWxlY3RlZDoga2V5ID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdObyBpc1NlbGVjdGVkIGhhbmRsZXIgcHJvdmlkZWQ6JywgeyBrZXkgfSlcbiAgICB9LFxuICAgIHNlbGVjdEFsbDogZmFsc2UsXG4gICAgdG9nZ2xlU2VsZWN0aW9uOiAoa2V5LCBzaGlmdCwgcm93KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnTm8gdG9nZ2xlU2VsZWN0aW9uIGhhbmRsZXIgcHJvdmlkZWQ6JywgeyBrZXksIHNoaWZ0LCByb3cgfSlcbiAgICB9LFxuICAgIHRvZ2dsZUFsbDogKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ05vIHRvZ2dsZUFsbCBoYW5kbGVyIHByb3ZpZGVkLicpXG4gICAgfSxcbiAgICBzZWxlY3RUeXBlOiAnY2hlY2tib3gnLFxuICAgIFNlbGVjdElucHV0Q29tcG9uZW50OiBkZWZhdWx0U2VsZWN0SW5wdXRDb21wb25lbnQsXG4gICAgU2VsZWN0QWxsSW5wdXRDb21wb25lbnQ6IGRlZmF1bHRTZWxlY3RJbnB1dENvbXBvbmVudCxcbiAgfVxuXG4gIHJldHVybiB3cmFwcGVyXG59XG4iXX0= \ No newline at end of file diff --git a/es/hoc/treeTable/index.js b/es/hoc/treeTable/index.js new file mode 100644 index 0000000000..e986c85ea3 --- /dev/null +++ b/es/hoc/treeTable/index.js @@ -0,0 +1,122 @@ +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +/* eslint-disable */ + +import React from 'react'; + +export default (function (Component) { + var _class, _temp, _initialiseProps; + + var wrapper = (_temp = _class = function (_React$Component) { + _inherits(RTTreeTable, _React$Component); + + function RTTreeTable(props) { + _classCallCheck(this, RTTreeTable); + + var _this = _possibleConstructorReturn(this, (RTTreeTable.__proto__ || Object.getPrototypeOf(RTTreeTable)).call(this, props)); + + _initialiseProps.call(_this); + + _this.getWrappedInstance.bind(_this); + _this.TrComponent.bind(_this); + _this.getTrProps.bind(_this); + return _this; + } + + // this is so we can expose the underlying ReactTable to get at the sortedData for selectAll + + + _createClass(RTTreeTable, [{ + key: 'render', + value: function render() { + var _this2 = this; + + var _props = this.props, + columns = _props.columns, + treeTableIndent = _props.treeTableIndent, + rest = _objectWithoutProperties(_props, ['columns', 'treeTableIndent']); + + var TrComponent = this.TrComponent, + getTrProps = this.getTrProps; + + var extra = { + columns: columns.map(function (col) { + var column = col; + if (rest.pivotBy && (rest.pivotBy.includes(col.accessor) || rest.pivotBy.includes(col.id))) { + column = { + id: col.id, + accessor: col.accessor, + width: treeTableIndent + 'px', + show: false, + Header: '', + Expander: col.Expander, + PivotValue: col.PivotValue, + Pivot: col.Pivot + }; + } + return column; + }), + TrComponent: TrComponent, + getTrProps: getTrProps + }; + + return React.createElement(Component, _extends({}, rest, extra, { ref: function ref(r) { + return _this2.wrappedInstance = r; + } })); + } + }]); + + return RTTreeTable; + }(React.Component), _initialiseProps = function _initialiseProps() { + var _this3 = this; + + this.getWrappedInstance = function () { + if (!_this3.wrappedInstance) console.warn('RTTreeTable - No wrapped instance'); + if (_this3.wrappedInstance.getWrappedInstance) return _this3.wrappedInstance.getWrappedInstance();else return _this3.wrappedInstance; + }; + + this.TrComponent = function (props) { + var ri = props.ri, + rest = _objectWithoutProperties(props, ['ri']); + + if (ri && ri.groupedByPivot) { + var cell = _extends({}, props.children[ri.level]); + + cell.props.style.flex = 'unset'; + cell.props.style.width = '100%'; + cell.props.style.maxWidth = 'unset'; + cell.props.style.paddingLeft = _this3.props.treeTableIndent * ri.level + 'px'; + // cell.props.style.backgroundColor = '#DDD'; + cell.props.style.borderBottom = '1px solid rgba(128,128,128,0.2)'; + + return React.createElement( + 'div', + { className: 'rt-tr ' + rest.className, role: 'row', style: rest.style }, + cell + ); + } + return React.createElement(Component.defaultProps.TrComponent, rest); + }; + + this.getTrProps = function (state, ri, ci, instance) { + return { ri: ri }; + }; + }, _temp); + wrapper.displayName = 'RTTreeTable'; + wrapper.defaultProps = { + treeTableIndent: 10 + }; + + return wrapper; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob2MvdHJlZVRhYmxlL2luZGV4LmpzIl0sIm5hbWVzIjpbIlJlYWN0Iiwid3JhcHBlciIsInByb3BzIiwiZ2V0V3JhcHBlZEluc3RhbmNlIiwiYmluZCIsIlRyQ29tcG9uZW50IiwiZ2V0VHJQcm9wcyIsImNvbHVtbnMiLCJ0cmVlVGFibGVJbmRlbnQiLCJyZXN0IiwiZXh0cmEiLCJtYXAiLCJjb2x1bW4iLCJjb2wiLCJwaXZvdEJ5IiwiaW5jbHVkZXMiLCJhY2Nlc3NvciIsImlkIiwid2lkdGgiLCJzaG93IiwiSGVhZGVyIiwiRXhwYW5kZXIiLCJQaXZvdFZhbHVlIiwiUGl2b3QiLCJ3cmFwcGVkSW5zdGFuY2UiLCJyIiwiQ29tcG9uZW50IiwiY29uc29sZSIsIndhcm4iLCJyaSIsImdyb3VwZWRCeVBpdm90IiwiY2VsbCIsImNoaWxkcmVuIiwibGV2ZWwiLCJzdHlsZSIsImZsZXgiLCJtYXhXaWR0aCIsInBhZGRpbmdMZWZ0IiwiYm9yZGVyQm90dG9tIiwiY2xhc3NOYW1lIiwic3RhdGUiLCJjaSIsImluc3RhbmNlIiwiZGlzcGxheU5hbWUiLCJkZWZhdWx0UHJvcHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBLE9BQU9BLEtBQVAsTUFBa0IsT0FBbEI7O0FBRUEsZ0JBQWUscUJBQWE7QUFBQTs7QUFDMUIsTUFBTUM7QUFBQTs7QUFDSix5QkFBWUMsS0FBWixFQUFtQjtBQUFBOztBQUFBLDRIQUNYQSxLQURXOztBQUFBOztBQUVqQixZQUFLQyxrQkFBTCxDQUF3QkMsSUFBeEI7QUFDQSxZQUFLQyxXQUFMLENBQWlCRCxJQUFqQjtBQUNBLFlBQUtFLFVBQUwsQ0FBZ0JGLElBQWhCO0FBSmlCO0FBS2xCOztBQUVEOzs7QUFSSTtBQUFBO0FBQUEsK0JBd0NLO0FBQUE7O0FBQUEscUJBQ3VDLEtBQUtGLEtBRDVDO0FBQUEsWUFDQ0ssT0FERCxVQUNDQSxPQUREO0FBQUEsWUFDVUMsZUFEVixVQUNVQSxlQURWO0FB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QVEyQyxZQUFSLEdBQXVCO0FBQ3JCcEMscUJBQWlCO0FBREksR0FBdkI7O0FBSUEsU0FBT1AsT0FBUDtBQUNELENBMUVEIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQgPT4ge1xuICBjb25zdCB3cmFwcGVyID0gY2xhc3MgUlRUcmVlVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcylcbiAgICAgIHRoaXMuZ2V0V3JhcHBlZEluc3RhbmNlLmJpbmQodGhpcylcbiAgICAgIHRoaXMuVHJDb21wb25lbnQuYmluZCh0aGlzKVxuICAgICAgdGhpcy5nZXRUclByb3BzLmJpbmQodGhpcylcbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIHNvIHdlIGNhbiBleHBvc2UgdGhlIHVuZGVybHlpbmcgUmVhY3RUYWJsZSB0byBnZXQgYXQgdGhlIHNvcnRlZERhdGEgZm9yIHNlbGVjdEFsbFxuICAgIGdldFdyYXBwZWRJbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy53cmFwcGVkSW5zdGFuY2UpIGNvbnNvbGUud2FybignUlRUcmVlVGFibGUgLSBObyB3cmFwcGVkIGluc3RhbmNlJylcbiAgICAgIGlmICh0aGlzLndyYXBwZWRJbnN0YW5jZS5nZXRXcmFwcGVkSW5zdGFuY2UpIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZS5nZXRXcmFwcGVkSW5zdGFuY2UoKVxuICAgICAgZWxzZSByZXR1cm4gdGhpcy53cmFwcGVkSW5zdGFuY2VcbiAgICB9XG5cbiAgICBUckNvbXBvbmVudCA9IHByb3BzID0+IHtcbiAgICAgIGNvbnN0IHsgcmksIC4uLnJlc3QgfSA9IHByb3BzXG4gICAgICBpZiAocmkgJiYgcmkuZ3JvdXBlZEJ5UGl2b3QpIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHsgLi4ucHJvcHMuY2hpbGRyZW5bcmkubGV2ZWxdIH1cblxuICAgICAgICBjZWxsLnByb3BzLnN0eWxlLmZsZXggPSAndW5zZXQnXG4gICAgICAgIGNlbGwucHJvcHMuc3R5bGUud2lkdGggPSAnMTAwJSdcbiAgICAgICAgY2VsbC5wcm9wcy5zdHlsZS5tYXhXaWR0aCA9ICd1bnNldCdcbiAgICAgICAgY2VsbC5wcm9wcy5zdHlsZS5wYWRkaW5nTGVmdCA9IGAke3RoaXMucHJvcHMudHJlZVRhYmxlSW5kZW50ICogcmkubGV2ZWx9cHhgXG4gICAgICAgIC8vIGNlbGwucHJvcHMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNEREQnO1xuICAgICAgICBjZWxsLnByb3BzLnN0eWxlLmJvcmRlckJvdHRvbSA9ICcxcHggc29saWQgcmdiYSgxMjgsMTI4LDEyOCwwLjIpJ1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BydC10ciAke3Jlc3QuY2xhc3NOYW1lfWB9IHJvbGU9XCJyb3dcIiBzdHlsZT17cmVzdC5zdHlsZX0+XG4gICAgICAgICAgICB7Y2VsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIDxDb21wb25lbnQuZGVmYXVsdFByb3BzLlRyQ29tcG9uZW50IHsuLi5yZXN0fSAvPlxuICAgIH1cblxuICAgIGdldFRyUHJvcHMgPSAoc3RhdGUsIHJpLCBjaSwgaW5zdGFuY2UpID0+IHtcbiAgICAgIHJldHVybiB7IHJpIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIHRyZWVUYWJsZUluZGVudCwgLi4ucmVzdCB9ID0gdGhpcy5wcm9wc1xuICAgICAgY29uc3QgeyBUckNvbXBvbmVudCwgZ2V0VHJQcm9wcyB9ID0gdGhpc1xuICAgICAgY29uc3QgZXh0cmEgPSB7XG4gICAgICAgIGNvbHVtbnM6IGNvbHVtbnMubWFwKGNvbCA9PiB7XG4gICAgICAgICAgbGV0IGNvbHVtbiA9IGNvbFxuICAgICAgICAgIGlmIChyZXN0LnBpdm90QnkgJiYgKHJlc3QucGl2b3RCeS5pbmNsdWRlcyhjb2wuYWNjZXNzb3IpIHx8IHJlc3QucGl2b3RCeS5pbmNsdWRlcyhjb2wuaWQpKSkge1xuICAgICAgICAgICAgY29sdW1uID0ge1xuICAgICAgICAgICAgICBpZDogY29sLmlkLFxuICAgICAgICAgICAgICBhY2Nlc3NvcjogY29sLmFjY2Vzc29yLFxuICAgICAgICAgICAgICB3aWR0aDogYCR7dHJlZVRhYmxlSW5kZW50fXB4YCxcbiAgICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICAgIEhlYWRlcjogJycsXG4gICAgICAgICAgICAgIEV4cGFuZGVyOiBjb2wuRXhwYW5kZXIsXG4gICAgICAgICAgICAgIFBpdm90VmFsdWU6IGNvbC5QaXZvdFZhbHVlLFxuICAgICAgICAgICAgICBQaXZvdDogY29sLlBpdm90LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29sdW1uXG4gICAgICAgIH0pLFxuICAgICAgICBUckNvbXBvbmVudCxcbiAgICAgICAgZ2V0VHJQcm9wcyxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIDxDb21wb25lbnQgey4uLnJlc3R9IHsuLi5leHRyYX0gcmVmPXtyID0+ICh0aGlzLndyYXBwZWRJbnN0YW5jZSA9IHIpfSAvPlxuICAgIH1cbiAgfVxuICB3cmFwcGVyLmRpc3BsYXlOYW1lID0gJ1JUVHJlZVRhYmxlJ1xuICB3cmFwcGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgICB0cmVlVGFibGVJbmRlbnQ6IDEwLFxuICB9XG5cbiAgcmV0dXJuIHdyYXBwZXJcbn1cbiJdfQ== \ No newline at end of file diff --git a/es/index.js b/es/index.js new file mode 100644 index 0000000000..03cd53d723 --- /dev/null +++ b/es/index.js @@ -0,0 +1,793 @@ +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +import React, { Component } from 'react'; +import classnames from 'classnames'; +// +import _ from './utils'; +import Lifecycle from './lifecycle'; +import Methods from './methods'; +import defaultProps from './defaultProps'; +import propTypes from './propTypes'; + +export var ReactTableDefaults = defaultProps; + +var ReactTable = function (_Methods) { + _inherits(ReactTable, _Methods); + + function ReactTable(props) { + _classCallCheck(this, ReactTable); + + var _this = _possibleConstructorReturn(this, (ReactTable.__proto__ || Object.getPrototypeOf(ReactTable)).call(this, props)); + + _this.getResolvedState = _this.getResolvedState.bind(_this); + _this.getDataModel = _this.getDataModel.bind(_this); + _this.getSortedData = _this.getSortedData.bind(_this); + _this.fireFetchData = _this.fireFetchData.bind(_this); + _this.getPropOrState = _this.getPropOrState.bind(_this); + _this.getStateOrProp = _this.getStateOrProp.bind(_this); + _this.filterData = _this.filterData.bind(_this); + _this.sortData = _this.sortData.bind(_this); + _this.getMinRows = _this.getMinRows.bind(_this); + _this.onPageChange = _this.onPageChange.bind(_this); + _this.onPageSizeChange = _this.onPageSizeChange.bind(_this); + _this.sortColumn = _this.sortColumn.bind(_this); + _this.filterColumn = _this.filterColumn.bind(_this); + _this.resizeColumnStart = _this.resizeColumnStart.bind(_this); + _this.resizeColumnEnd = _this.resizeColumnEnd.bind(_this); + _this.resizeColumnMoving = _this.resizeColumnMoving.bind(_this); + return _this; + } + + _createClass(ReactTable, [{ + key: 'render', + value: function render() { + var _this2 = this; + + var resolvedState = this.getResolvedState(); + var children = resolvedState.children, + className = resolvedState.className, + style = resolvedState.style, + getProps = resolvedState.getProps, + getTableProps = resolvedState.getTableProps, + getTheadGroupProps = resolvedState.getTheadGroupProps, + getTheadGroupTrProps = resolvedState.getTheadGroupTrProps, + getTheadGroupThProps = resolvedState.getTheadGroupThProps, + getTheadProps = resolvedState.getTheadProps, + getTheadTrProps = resolvedState.getTheadTrProps, + getTheadThProps = resolvedState.getTheadThProps, + getTheadFilterProps = resolvedState.getTheadFilterProps, + getTheadFilterTrProps = resolvedState.getTheadFilterTrProps, + getTheadFilterThProps = resolvedState.getTheadFilterThProps, + getTbodyProps = resolvedState.getTbodyProps, + getTrGroupProps = resolvedState.getTrGroupProps, + getTrProps = resolvedState.getTrProps, + getTdProps = resolvedState.getTdProps, + getTfootProps = resolvedState.getTfootProps, + getTfootTrProps = resolvedState.getTfootTrProps, + getTfootTdProps = resolvedState.getTfootTdProps, + getPaginationProps = resolvedState.getPaginationProps, + getLoadingProps = resolvedState.getLoadingProps, + getNoDataProps = resolvedState.getNoDataProps, + getResizerProps = resolvedState.getResizerProps, + showPagination = resolvedState.showPagination, + showPaginationTop = resolvedState.showPaginationTop, + showPaginationBottom = resolvedState.showPaginationBottom, + manual = resolvedState.manual, + loadingText = resolvedState.loadingText, + noDataText = resolvedState.noDataText, + sortable = resolvedState.sortable, + multiSort = resolvedState.multiSort, + resizable = resolvedState.resizable, + filterable = resolvedState.filterable, + pivotIDKey = resolvedState.pivotIDKey, + pivotValKey = resolvedState.pivotValKey, + pivotBy = resolvedState.pivotBy, + subRowsKey = resolvedState.subRowsKey, + aggregatedKey = resolvedState.aggregatedKey, + originalKey = resolvedState.originalKey, + indexKey = resolvedState.indexKey, + groupedByPivotKey = resolvedState.groupedByPivotKey, + loading = resolvedState.loading, + pageSize = resolvedState.pageSize, + page = resolvedState.page, + sorted = resolvedState.sorted, + filtered = resolvedState.filtered, + resized = resolvedState.resized, + expanded = resolvedState.expanded, + pages = resolvedState.pages, + onExpandedChange = resolvedState.onExpandedChange, + TableComponent = resolvedState.TableComponent, + TheadComponent = resolvedState.TheadComponent, + TbodyComponent = resolvedState.TbodyComponent, + TrGroupComponent = resolvedState.TrGroupComponent, + TrComponent = resolvedState.TrComponent, + ThComponent = resolvedState.ThComponent, + TdComponent = resolvedState.TdComponent, + TfootComponent = resolvedState.TfootComponent, + PaginationComponent = resolvedState.PaginationComponent, + LoadingComponent = resolvedState.LoadingComponent, + SubComponent = resolvedState.SubComponent, + NoDataComponent = resolvedState.NoDataComponent, + ResizerComponent = resolvedState.ResizerComponent, + ExpanderComponent = resolvedState.ExpanderComponent, + PivotValueComponent = resolvedState.PivotValueComponent, + PivotComponent = resolvedState.PivotComponent, + AggregatedComponent = resolvedState.AggregatedComponent, + FilterComponent = resolvedState.FilterComponent, + PadRowComponent = resolvedState.PadRowComponent, + resolvedData = resolvedState.resolvedData, + allVisibleColumns = resolvedState.allVisibleColumns, + headerGroups = resolvedState.headerGroups, + hasHeaderGroups = resolvedState.hasHeaderGroups, + sortedData = resolvedState.sortedData, + currentlyResizing = resolvedState.currentlyResizing; + + // Pagination + + var startRow = pageSize * page; + var endRow = startRow + pageSize; + var pageRows = manual ? resolvedData : sortedData.slice(startRow, endRow); + var minRows = this.getMinRows(); + var padRows = _.range(Math.max(minRows - pageRows.length, 0)); + + var hasColumnFooter = allVisibleColumns.some(function (d) { + return d.Footer; + }); + var hasFilters = filterable || allVisibleColumns.some(function (d) { + return d.filterable; + }); + + var recurseRowsViewIndex = function recurseRowsViewIndex(rows) { + var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1; + return [rows.map(function (row, i) { + index += 1; + var rowWithViewIndex = _extends({}, row, { + _viewIndex: index + }); + var newPath = path.concat([i]); + if (rowWithViewIndex[subRowsKey] && _.get(expanded, newPath)) { + var _recurseRowsViewIndex = recurseRowsViewIndex(rowWithViewIndex[subRowsKey], newPath, index); + + var _recurseRowsViewIndex2 = _slicedToArray(_recurseRowsViewIndex, 2); + + rowWithViewIndex[subRowsKey] = _recurseRowsViewIndex2[0]; + index = _recurseRowsViewIndex2[1]; + } + return rowWithViewIndex; + }), index]; + }; + + var _recurseRowsViewIndex3 = recurseRowsViewIndex(pageRows); + + var _recurseRowsViewIndex4 = _slicedToArray(_recurseRowsViewIndex3, 1); + + pageRows = _recurseRowsViewIndex4[0]; + + + var canPrevious = page > 0; + var canNext = page + 1 < pages; + + var rowMinWidth = _.sum(allVisibleColumns.map(function (d) { + var resizedColumn = resized.find(function (x) { + return x.id === d.id; + }) || {}; + return _.getFirstDefined(resizedColumn.value, d.width, d.minWidth); + })); + + var rowIndex = -1; + + var finalState = _extends({}, resolvedState, { + startRow: startRow, + endRow: endRow, + pageRows: pageRows, + minRows: minRows, + padRows: padRows, + hasColumnFooter: hasColumnFooter, + canPrevious: canPrevious, + canNext: canNext, + rowMinWidth: rowMinWidth + }); + + var rootProps = _.splitProps(getProps(finalState, undefined, undefined, this)); + var tableProps = _.splitProps(getTableProps(finalState, undefined, undefined, this)); + var tBodyProps = _.splitProps(getTbodyProps(finalState, undefined, undefined, this)); + var loadingProps = getLoadingProps(finalState, undefined, undefined, this); + var noDataProps = getNoDataProps(finalState, undefined, undefined, this); + + // Visual Components + + var makeHeaderGroup = function makeHeaderGroup(column, i) { + var resizedValue = function resizedValue(col) { + return (resized.find(function (x) { + return x.id === col.id; + }) || {}).value; + }; + var flex = _.sum(column.columns.map(function (col) { + return col.width || resizedValue(col) ? 0 : col.minWidth; + })); + var width = _.sum(column.columns.map(function (col) { + return _.getFirstDefined(resizedValue(col), col.width, col.minWidth); + })); + var maxWidth = _.sum(column.columns.map(function (col) { + return _.getFirstDefined(resizedValue(col), col.width, col.maxWidth); + })); + + var theadGroupThProps = _.splitProps(getTheadGroupThProps(finalState, undefined, column, _this2)); + var columnHeaderProps = _.splitProps(column.getHeaderProps(finalState, undefined, column, _this2)); + + var classes = [column.headerClassName, theadGroupThProps.className, columnHeaderProps.className]; + + var styles = _extends({}, column.headerStyle, theadGroupThProps.style, columnHeaderProps.style); + + var rest = _extends({}, theadGroupThProps.rest, columnHeaderProps.rest); + + var flexStyles = { + flex: flex + ' 0 auto', + width: _.asPx(width), + maxWidth: _.asPx(maxWidth) + }; + + return React.createElement( + ThComponent, + _extends({ + key: i + '-' + column.id, + className: classnames(classes), + style: _extends({}, styles, flexStyles) + }, rest), + _.normalizeComponent(column.Header, { + data: sortedData, + column: column + }) + ); + }; + + var makeHeaderGroups = function makeHeaderGroups() { + var theadGroupProps = _.splitProps(getTheadGroupProps(finalState, undefined, undefined, _this2)); + var theadGroupTrProps = _.splitProps(getTheadGroupTrProps(finalState, undefined, undefined, _this2)); + return React.createElement( + TheadComponent, + _extends({ + className: classnames('-headerGroups', theadGroupProps.className), + style: _extends({}, theadGroupProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, theadGroupProps.rest), + React.createElement( + TrComponent, + _extends({ + className: theadGroupTrProps.className, + style: theadGroupTrProps.style + }, theadGroupTrProps.rest), + headerGroups.map(makeHeaderGroup) + ) + ); + }; + + var makeHeader = function makeHeader(column, i) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var sort = sorted.find(function (d) { + return d.id === column.id; + }); + var show = typeof column.show === 'function' ? column.show() : column.show; + var width = _.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var maxWidth = _.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var theadThProps = _.splitProps(getTheadThProps(finalState, undefined, column, _this2)); + var columnHeaderProps = _.splitProps(column.getHeaderProps(finalState, undefined, column, _this2)); + + var classes = [column.headerClassName, theadThProps.className, columnHeaderProps.className]; + + var styles = _extends({}, column.headerStyle, theadThProps.style, columnHeaderProps.style); + + var rest = _extends({}, theadThProps.rest, columnHeaderProps.rest); + + var isResizable = _.getFirstDefined(column.resizable, resizable, false); + var resizer = isResizable ? React.createElement(ResizerComponent, _extends({ + onMouseDown: function onMouseDown(e) { + return _this2.resizeColumnStart(e, column, false); + }, + onTouchStart: function onTouchStart(e) { + return _this2.resizeColumnStart(e, column, true); + } + }, getResizerProps('finalState', undefined, column, _this2))) : null; + + var isSortable = _.getFirstDefined(column.sortable, sortable, false); + + return React.createElement( + ThComponent, + _extends({ + key: i + '-' + column.id, + className: classnames(classes, isResizable && 'rt-resizable-header', sort ? sort.desc ? '-sort-desc' : '-sort-asc' : '', isSortable && '-cursor-pointer', !show && '-hidden', pivotBy && pivotBy.slice(0, -1).includes(column.id) && 'rt-header-pivot'), + style: _extends({}, styles, { + flex: width + ' 0 auto', + width: _.asPx(width), + maxWidth: _.asPx(maxWidth) + }), + toggleSort: function toggleSort(e) { + if (isSortable) _this2.sortColumn(column, multiSort ? e.shiftKey : false); + } + }, rest), + React.createElement( + 'div', + { className: classnames(isResizable && 'rt-resizable-header-content') }, + _.normalizeComponent(column.Header, { + data: sortedData, + column: column + }) + ), + resizer + ); + }; + + var makeHeaders = function makeHeaders() { + var theadProps = _.splitProps(getTheadProps(finalState, undefined, undefined, _this2)); + var theadTrProps = _.splitProps(getTheadTrProps(finalState, undefined, undefined, _this2)); + return React.createElement( + TheadComponent, + _extends({ + className: classnames('-header', theadProps.className), + style: _extends({}, theadProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, theadProps.rest), + React.createElement( + TrComponent, + _extends({ + className: theadTrProps.className, + style: theadTrProps.style + }, theadTrProps.rest), + allVisibleColumns.map(makeHeader) + ) + ); + }; + + var makeFilter = function makeFilter(column, i) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var width = _.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var maxWidth = _.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var theadFilterThProps = _.splitProps(getTheadFilterThProps(finalState, undefined, column, _this2)); + var columnHeaderProps = _.splitProps(column.getHeaderProps(finalState, undefined, column, _this2)); + + var classes = [column.headerClassName, theadFilterThProps.className, columnHeaderProps.className]; + + var styles = _extends({}, column.headerStyle, theadFilterThProps.style, columnHeaderProps.style); + + var rest = _extends({}, theadFilterThProps.rest, columnHeaderProps.rest); + + var filter = filtered.find(function (filter) { + return filter.id === column.id; + }); + + var ResolvedFilterComponent = column.Filter || FilterComponent; + + var isFilterable = _.getFirstDefined(column.filterable, filterable, false); + + return React.createElement( + ThComponent, + _extends({ + key: i + '-' + column.id, + className: classnames(classes), + style: _extends({}, styles, { + flex: width + ' 0 auto', + width: _.asPx(width), + maxWidth: _.asPx(maxWidth) + }) + }, rest), + isFilterable ? _.normalizeComponent(ResolvedFilterComponent, { + column: column, + filter: filter, + onChange: function onChange(value) { + return _this2.filterColumn(column, value); + } + }, defaultProps.column.Filter) : null + ); + }; + + var makeFilters = function makeFilters() { + var theadFilterProps = _.splitProps(getTheadFilterProps(finalState, undefined, undefined, _this2)); + var theadFilterTrProps = _.splitProps(getTheadFilterTrProps(finalState, undefined, undefined, _this2)); + return React.createElement( + TheadComponent, + _extends({ + className: classnames('-filters', theadFilterProps.className), + style: _extends({}, theadFilterProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, theadFilterProps.rest), + React.createElement( + TrComponent, + _extends({ + className: theadFilterTrProps.className, + style: theadFilterTrProps.style + }, theadFilterTrProps.rest), + allVisibleColumns.map(makeFilter) + ) + ); + }; + + var makePageRow = function makePageRow(row, i) { + var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + + var rowInfo = { + original: row[originalKey], + row: row, + index: row[indexKey], + viewIndex: rowIndex += 1, + pageSize: pageSize, + page: page, + level: path.length, + nestingPath: path.concat([i]), + aggregated: row[aggregatedKey], + groupedByPivot: row[groupedByPivotKey], + subRows: row[subRowsKey] + }; + var isExpanded = _.get(expanded, rowInfo.nestingPath); + var trGroupProps = getTrGroupProps(finalState, rowInfo, undefined, _this2); + var trProps = _.splitProps(getTrProps(finalState, rowInfo, undefined, _this2)); + return React.createElement( + TrGroupComponent, + _extends({ key: rowInfo.nestingPath.join('_') }, trGroupProps), + React.createElement( + TrComponent, + _extends({ + className: classnames(trProps.className, row._viewIndex % 2 ? '-even' : '-odd'), + style: trProps.style + }, trProps.rest), + allVisibleColumns.map(function (column, i2) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var show = typeof column.show === 'function' ? column.show() : column.show; + var width = _.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var maxWidth = _.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var tdProps = _.splitProps(getTdProps(finalState, rowInfo, column, _this2)); + var columnProps = _.splitProps(column.getProps(finalState, rowInfo, column, _this2)); + + var classes = [tdProps.className, column.className, columnProps.className]; + + var styles = _extends({}, tdProps.style, column.style, columnProps.style); + + var cellInfo = _extends({}, rowInfo, { + isExpanded: isExpanded, + column: _extends({}, column), + value: rowInfo.row[column.id], + pivoted: column.pivoted, + expander: column.expander, + resized: resized, + show: show, + width: width, + maxWidth: maxWidth, + tdProps: tdProps, + columnProps: columnProps, + classes: classes, + styles: styles + }); + + var value = cellInfo.value; + + var useOnExpanderClick = void 0; + var isBranch = void 0; + var isPreview = void 0; + + var onExpanderClick = function onExpanderClick(e) { + var newExpanded = _.clone(expanded); + if (isExpanded) { + newExpanded = _.set(newExpanded, cellInfo.nestingPath, false); + } else { + newExpanded = _.set(newExpanded, cellInfo.nestingPath, {}); + } + + return _this2.setStateWithData({ + expanded: newExpanded + }, function () { + return onExpandedChange && onExpandedChange(newExpanded, cellInfo.nestingPath, e, cellInfo); + }); + }; + + // Default to a standard cell + var resolvedCell = _.normalizeComponent(column.Cell, cellInfo, value); + + // Resolve Renderers + var ResolvedAggregatedComponent = column.Aggregated || (!column.aggregate ? AggregatedComponent : column.Cell); + var ResolvedExpanderComponent = column.Expander || ExpanderComponent; + var ResolvedPivotValueComponent = column.PivotValue || PivotValueComponent; + var DefaultResolvedPivotComponent = PivotComponent || function (props) { + return React.createElement( + 'div', + null, + React.createElement(ResolvedExpanderComponent, props), + React.createElement(ResolvedPivotValueComponent, props) + ); + }; + var ResolvedPivotComponent = column.Pivot || DefaultResolvedPivotComponent; + + // Is this cell expandable? + if (cellInfo.pivoted || cellInfo.expander) { + // Make it expandable by defualt + cellInfo.expandable = true; + useOnExpanderClick = true; + // If pivoted, has no subRows, and does not have a subComponent, + // do not make expandable + if (cellInfo.pivoted && !cellInfo.subRows && !SubComponent) { + cellInfo.expandable = false; + } + } + + if (cellInfo.pivoted) { + // Is this column a branch? + isBranch = rowInfo.row[pivotIDKey] === column.id && cellInfo.subRows; + // Should this column be blank? + isPreview = pivotBy.indexOf(column.id) > pivotBy.indexOf(rowInfo.row[pivotIDKey]) && cellInfo.subRows; + // Pivot Cell Render Override + if (isBranch) { + // isPivot + resolvedCell = _.normalizeComponent(ResolvedPivotComponent, _extends({}, cellInfo, { + value: row[pivotValKey] + }), row[pivotValKey]); + } else if (isPreview) { + // Show the pivot preview + resolvedCell = _.normalizeComponent(ResolvedAggregatedComponent, cellInfo, value); + } else { + resolvedCell = null; + } + } else if (cellInfo.aggregated) { + resolvedCell = _.normalizeComponent(ResolvedAggregatedComponent, cellInfo, value); + } + + if (cellInfo.expander) { + resolvedCell = _.normalizeComponent(ResolvedExpanderComponent, cellInfo, row[pivotValKey]); + if (pivotBy) { + if (cellInfo.groupedByPivot) { + resolvedCell = null; + } + if (!cellInfo.subRows && !SubComponent) { + resolvedCell = null; + } + } + } + + var resolvedOnExpanderClick = useOnExpanderClick ? onExpanderClick : function () {}; + + // If there are multiple onClick events, make sure they don't + // override eachother. This should maybe be expanded to handle all + // function attributes + var interactionProps = { + onClick: resolvedOnExpanderClick + }; + + if (tdProps.rest.onClick) { + interactionProps.onClick = function (e) { + tdProps.rest.onClick(e, function () { + return resolvedOnExpanderClick(e); + }); + }; + } + + if (columnProps.rest.onClick) { + interactionProps.onClick = function (e) { + columnProps.rest.onClick(e, function () { + return resolvedOnExpanderClick(e); + }); + }; + } + + // Return the cell + return React.createElement( + TdComponent + // eslint-disable-next-line react/no-array-index-key + , + _extends({ key: i2 + '-' + column.id, + className: classnames(classes, !cellInfo.expandable && !show && 'hidden', cellInfo.expandable && 'rt-expandable', (isBranch || isPreview) && 'rt-pivot'), + style: _extends({}, styles, { + flex: width + ' 0 auto', + width: _.asPx(width), + maxWidth: _.asPx(maxWidth) + }) + }, tdProps.rest, columnProps.rest, interactionProps), + resolvedCell + ); + }) + ), + rowInfo.subRows && isExpanded && rowInfo.subRows.map(function (d, i) { + return makePageRow(d, i, rowInfo.nestingPath); + }), + SubComponent && !rowInfo.subRows && isExpanded && SubComponent(rowInfo, function () { + var newExpanded = _.clone(expanded); + + _.set(newExpanded, rowInfo.nestingPath, false); + }) + ); + }; + + var makePadColumn = function makePadColumn(column, i) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var show = typeof column.show === 'function' ? column.show() : column.show; + var width = _.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var flex = width; + var maxWidth = _.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var tdProps = _.splitProps(getTdProps(finalState, undefined, column, _this2)); + var columnProps = _.splitProps(column.getProps(finalState, undefined, column, _this2)); + + var classes = [tdProps.className, column.className, columnProps.className]; + + var styles = _extends({}, tdProps.style, column.style, columnProps.style); + + return React.createElement( + TdComponent, + _extends({ + key: i + '-' + column.id, + className: classnames(classes, !show && 'hidden'), + style: _extends({}, styles, { + flex: flex + ' 0 auto', + width: _.asPx(width), + maxWidth: _.asPx(maxWidth) + }) + }, tdProps.rest), + _.normalizeComponent(PadRowComponent) + ); + }; + + var makePadRow = function makePadRow(row, i) { + var trGroupProps = getTrGroupProps(finalState, undefined, undefined, _this2); + var trProps = _.splitProps(getTrProps(finalState, undefined, undefined, _this2)); + return React.createElement( + TrGroupComponent, + _extends({ key: 'pad-' + i }, trGroupProps), + React.createElement( + TrComponent, + { + className: classnames('-padRow', (pageRows.length + i) % 2 ? '-even' : '-odd', trProps.className), + style: trProps.style || {} + }, + allVisibleColumns.map(makePadColumn) + ) + ); + }; + + var makeColumnFooter = function makeColumnFooter(column, i) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var show = typeof column.show === 'function' ? column.show() : column.show; + var width = _.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var maxWidth = _.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var tFootTdProps = _.splitProps(getTfootTdProps(finalState, undefined, column, _this2)); + var columnProps = _.splitProps(column.getProps(finalState, undefined, column, _this2)); + var columnFooterProps = _.splitProps(column.getFooterProps(finalState, undefined, column, _this2)); + + var classes = [tFootTdProps.className, column.className, columnProps.className, columnFooterProps.className]; + + var styles = _extends({}, tFootTdProps.style, column.style, columnProps.style, columnFooterProps.style); + + return React.createElement( + TdComponent, + _extends({ + key: i + '-' + column.id, + className: classnames(classes, !show && 'hidden'), + style: _extends({}, styles, { + flex: width + ' 0 auto', + width: _.asPx(width), + maxWidth: _.asPx(maxWidth) + }) + }, columnProps.rest, tFootTdProps.rest, columnFooterProps.rest), + _.normalizeComponent(column.Footer, { + data: sortedData, + column: column + }) + ); + }; + + var makeColumnFooters = function makeColumnFooters() { + var tFootProps = _.splitProps(getTfootProps(finalState, undefined, undefined, _this2)); + var tFootTrProps = _.splitProps(getTfootTrProps(finalState, undefined, undefined, _this2)); + return React.createElement( + TfootComponent, + _extends({ + className: tFootProps.className, + style: _extends({}, tFootProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, tFootProps.rest), + React.createElement( + TrComponent, + _extends({ + className: classnames(tFootTrProps.className), + style: tFootTrProps.style + }, tFootTrProps.rest), + allVisibleColumns.map(makeColumnFooter) + ) + ); + }; + + var makePagination = function makePagination(isTop) { + var paginationProps = _.splitProps(getPaginationProps(finalState, undefined, undefined, _this2)); + return React.createElement(PaginationComponent, _extends({}, resolvedState, { + pages: pages, + canPrevious: canPrevious, + canNext: canNext, + onPageChange: _this2.onPageChange, + onPageSizeChange: _this2.onPageSizeChange, + className: paginationProps.className, + style: paginationProps.style, + isTop: isTop + }, paginationProps.rest)); + }; + + var makeTable = function makeTable() { + return React.createElement( + 'div', + _extends({ + className: classnames('ReactTable', className, rootProps.className), + style: _extends({}, style, rootProps.style) + }, rootProps.rest), + showPagination && showPaginationTop ? React.createElement( + 'div', + { className: 'pagination-top' }, + makePagination(true) + ) : null, + React.createElement( + TableComponent, + _extends({ + className: classnames(tableProps.className, currentlyResizing ? 'rt-resizing' : ''), + style: tableProps.style + }, tableProps.rest), + hasHeaderGroups ? makeHeaderGroups() : null, + makeHeaders(), + hasFilters ? makeFilters() : null, + React.createElement( + TbodyComponent, + _extends({ + className: classnames(tBodyProps.className), + style: _extends({}, tBodyProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, tBodyProps.rest), + pageRows.map(function (d, i) { + return makePageRow(d, i); + }), + padRows.map(makePadRow) + ), + hasColumnFooter ? makeColumnFooters() : null + ), + showPagination && showPaginationBottom ? React.createElement( + 'div', + { className: 'pagination-bottom' }, + makePagination(false) + ) : null, + !pageRows.length && React.createElement( + NoDataComponent, + noDataProps, + _.normalizeComponent(noDataText) + ), + React.createElement(LoadingComponent, _extends({ loading: loading, loadingText: loadingText }, loadingProps)) + ); + }; + + // childProps are optionally passed to a function-as-a-child + return children ? children(finalState, makeTable, this) : makeTable(); + } + }]); + + return ReactTable; +}(Methods(Lifecycle(Component))); + +ReactTable.propTypes = propTypes; +ReactTable.defaultProps = defaultProps; +export default ReactTable; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJSZWFjdCIsIkNvbXBvbmVudCIsImNsYXNzbmFtZXMiLCJfIiwiTGlmZWN5Y2xlIiwiTWV0aG9kcyIsImRlZmF1bHRQcm9wcyIsInByb3BUeXBlcyIsIlJlYWN0VGFibGVEZWZhdWx0cyIsIlJlYWN0VGFibGUiLCJwcm9wcyIsImdldFJlc29sdmVkU3RhdGUiLCJiaW5kIiwiZ2V0RGF0YU1vZGVsIiwiZ2V0U29ydGVkRGF0YSIsImZpcmVGZXRjaERhdGEiLCJnZXRQcm9wT3JTdGF0ZSIsImdldFN0YXRlT3JQcm9wIiwiZmlsdGVyRGF0YSIsInNvcnREYXRhIiwiZ2V0TWluUm93cyIsIm9uUGFnZUNoYW5nZSIsIm9uUGFnZVNpemVDaGFuZ2UiLCJzb3J0Q29sdW1uIiwiZmlsdGVyQ29sdW1uIiwicmVzaXplQ29sdW1uU3RhcnQiLCJyZXNpemVDb2x1bW5FbmQiLCJyZXNpemVDb2x1bW5Nb3ZpbmciLCJyZXNvbHZlZFN0YXRlIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJzdHlsZSIsImdldFByb3BzIiwiZ2V0VGFibGVQcm9wcyIsImdldFRoZWFkR3JvdXBQcm9wcyIsImdldFRoZWFkR3JvdXBUclByb3BzIiwiZ2V0VGhlYWRHcm91cFRoUHJvcHMiLCJnZXRUaGVhZFByb3BzIiwiZ2V0VGhlYWRUclByb3BzIiwiZ2V0VGhlYWRUaFByb3BzIiwiZ2V0VGhlYWRGaWx0ZXJQcm9wcyIsImdldFRoZWFkRmlsdGVyVHJQcm9wcyIsImdldFRoZWFkRmlsdGVyVGhQcm9wcyIsImdldFRib2R5UHJvcHMiLCJnZXRUckdyb3VwUHJvcHMiLCJnZXRUclByb3BzIiwiZ2V0VGRQcm9wcyIsImdldFRmb290UHJvcHMiLCJnZXRUZm9vdFRyUHJvcHMiLCJnZXRUZm9vdFRkUHJvcHMiLCJnZXRQYWdpbmF0aW9uUHJvcHMiLCJnZXRMb2FkaW5nUHJvcHMiLCJnZXROb0RhdGFQcm9wcyIsImdldFJlc2l6ZXJQcm9wcyIsInNob3dQYWdpbmF0aW9uIiwic2hvd1BhZ2luYXRpb25Ub3AiLCJzaG93UGFnaW5hdGlvbkJvdHRvbSIsIm1hbnVhbCIsImxvYWRpbmdUZXh0Iiwibm9EYXRhVGV4dCIsInNvcnRhYmxlIiwibXVsdGlTb3J0IiwicmVzaXphYmxlIiwiZmlsdGVyYWJsZSIsInBpdm90SURLZXkiLCJwaXZvdFZhbEtleSIsInBpdm90QnkiLCJzdWJSb3dzS2V5IiwiYWdncmVnYXRlZEtleSIsIm9yaWdpbmFsS2V5IiwiaW5kZXhLZXkiLCJncm91cGVkQnlQaXZvdEtleSIsImxvYWRpbmciLCJwYWdlU2l6ZSIsInBhZ2UiLCJzb3J0ZWQiLCJmaWx0ZXJlZCIsInJlc2l6ZWQiLCJleHBhbmRlZCIsInBhZ2VzIiwib25FeHBhbmRlZENoYW5nZSIsIlRhYmxlQ29tcG9uZW50IiwiVGhlYWRDb21wb25lbnQiLCJUYm9keUNvbXBvbmVudCIsIlRyR3JvdXBDb21wb25lbnQiLCJUckNvbXBvbmVudCIsIlRoQ29tcG9uZW50IiwiVGRDb21wb25lbnQiLCJUZm9vdENvbXBvbmVudCIsIlBhZ2luYXRpb25Db21wb25lbnQiLCJMb2FkaW5nQ29tcG9uZW50IiwiU3ViQ29tcG9uZW50IiwiTm9EYXRhQ29tcG9uZW50IiwiUmVzaXplckNvbXBvbmVudCIsIkV4cGFuZGVyQ29tcG9uZW50IiwiUGl2b3RWYWx1ZUNvbXBvbmVudCIsIlBpdm90Q29tcG9uZW50IiwiQWdncmVnYXRlZENvbXBvbmVudCIsIkZpbHRlckNvbXBvbmVudCIsIlBhZFJvd0NvbXBvbmVudCIsInJlc29sdmVkRGF0YSIsImFsbFZpc2libGVDb2x1bW5zIiwiaGVhZGVyR3JvdXBzIiwiaGFzSGVhZGVyR3JvdXBzIiwic29ydGVkRGF0YSIsImN1cnJlbnRseVJlc2l6aW5nIiwic3RhcnRSb3ciLCJlbmRSb3ciLCJwYWdlUm93cyIsInNsaWNlIiwibWluUm93cyIsInBhZFJvd3MiLCJyYW5nZSIsIk1hdGgiLCJtYXgiLCJsZW5ndGgiLCJoYXNDb2x1bW5Gb290ZXIiLCJzb21lIiwiZCIsIkZvb3RlciIsImhhc0ZpbHRlcnMiLCJyZWN1cnNlUm93c1ZpZXdJbmRleCIsInJvd3MiLCJwYXRoIiwiaW5kZXgiLCJtYXAiLCJyb3ciLCJpIiwicm93V2l0aFZpZXdJbmRleCIsIl92aWV3SW5kZXgiLCJuZXdQYXRoIiwiY29uY2F0IiwiZ2V0IiwiY2FuUHJldmlvdXMiLCJjYW5OZXh0Iiwicm93TWluV2lkdGgiLCJzdW0iLCJyZXNpemVkQ29sdW1uIiwiZmluZCIsIngiLCJpZCIsImdldEZpcnN0RGVmaW5lZCIsInZhbHVlIiwid2lkdGgiLCJtaW5XaWR0aCIsInJvd0luZGV4IiwiZmluYWxTdGF0ZSIsInJvb3RQcm9wcyIsInNwbGl0UHJvcHMiLCJ1bmRlZmluZWQiLCJ0YWJsZVByb3BzIiwidEJvZHlQcm9wcyIsImxvYWRpbmdQcm9wcyIsIm5vRGF0YVByb3BzIiwibWFrZUhlYWRlckdyb3VwIiwiY29sdW1uIiwicmVzaXplZFZhbHVlIiwiY29sIiwiZmxleCIsImNvbHVtbnMiLCJtYXhXaWR0aCIsInRoZWFkR3JvdXBUaFByb3BzIiwiY29sdW1uSGVhZGVyUHJvcHMiLCJnZXRIZWFkZXJQcm9wcyIsImNsYXNzZXMiLCJoZWFkZXJDbGFzc05hbWUiLCJzdHlsZXMiLCJoZWFkZXJTdHlsZSIsInJlc3QiLCJmbGV4U3R5bGVzIiwiYXNQeCIsIm5vcm1hbGl6ZUNvbXBvbmVudCIsIkhlYWRlciIsImRhdGEiLCJtYWtlSGVhZGVyR3JvdXBzIiwidGhlYWRHcm91cFByb3BzIiwidGhlYWRHcm91cFRyUHJvcHMiLCJtYWtlSGVhZGVyIiwicmVzaXplZENvbCIsInNvcnQiLCJzaG93IiwidGhlYWRUaFByb3BzIiwiaXNSZXNpemFibGUiLCJyZXNpemVyIiwiZSIsImlzU29ydGFibGUiLCJkZXNjIiwiaW5jbHVkZXMiLCJzaGlmdEtleSIsIm1ha2VIZWFkZXJzIiwidGhlYWRQcm9wcyIsInRoZWFkVHJQcm9wcyIsIm1ha2VGaWx0ZXIiLCJ0aGVhZEZpbHRlclRoUHJvcHMiLCJmaWx0ZXIiLCJSZXNvbHZlZEZpbHRlckNvbXBvbmVudCIsIkZpbHRlciIsImlzRmlsdGVyYWJsZSIsIm9uQ2hhbmdlIiwibWFrZUZpbHRlcnMiLCJ0aGVhZEZpbHRlclByb3BzIiwidGhlYWRGaWx0ZXJUclByb3BzIiwibWFrZVBhZ2VSb3ciLCJyb3dJbmZvIiwib3JpZ2luYWwiLCJ2aWV3SW5kZXgiLCJsZXZlbCIsIm5lc3RpbmdQYXRoIiwiYWdncmVnYXRlZCIsImdyb3VwZWRCeVBpdm90Iiwic3ViUm93cyIsImlzRXhwYW5kZWQiLCJ0ckdyb3VwUHJvcHMiLCJ0clByb3BzIiwiam9pbiIsImkyIiwidGRQcm9wcyIsImNvbHVtblByb3BzIiwiY2VsbEluZm8iLCJwaXZvdGVkIiwiZXhwYW5kZXIiLCJ1c2VPbkV4cGFuZGVyQ2xpY2siLCJpc0JyYW5jaCIsImlzUHJldmlldyIsIm9uRXhwYW5kZXJDbGljayIsIm5ld0V4cGFuZGVkIiwiY2xvbmUiLCJzZXQiLCJzZXRTdGF0ZVdpdGhEYXRhIiwicmVzb2x2ZWRDZWxsIiwiQ2VsbCIsIlJlc29sdmVkQWdncmVnYXRlZENvbXBvbmVudCIsIkFnZ3JlZ2F0ZWQiLCJhZ2dyZWdhdGUiLCJSZXNvbHZlZEV4cGFuZGVyQ29tcG9uZW50IiwiRXhwYW5kZXIiLCJSZXNvbHZlZFBpdm90VmFsdWVDb21wb25lbnQiLCJQaXZvdFZhbHVlIiwiRGVmYXVsdFJlc29sdmVkUGl2b3RDb21wb25lbnQiLCJSZXNvbHZlZFBpdm90Q29tcG9uZW50IiwiUGl2b3QiLCJleHBhbmRhYmxlIiwiaW5kZXhPZiIsInJlc29sdmVkT25FeHBhbmRlckNsaWNrIiwiaW50ZXJhY3Rpb25Qcm9wcyIsIm9uQ2xpY2siLCJtYWtlUGFkQ29sdW1uIiwibWFrZVBhZFJvdyIsIm1ha2VDb2x1bW5Gb290ZXIiLCJ0Rm9vdFRkUHJvcHMiLCJjb2x1bW5Gb290ZXJQcm9wcyIsImdldEZvb3RlclByb3BzIiwibWFrZUNvbHVtbkZvb3RlcnMiLCJ0Rm9vdFByb3BzIiwidEZvb3RUclByb3BzIiwibWFrZVBhZ2luYXRpb24i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OlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbi8vXG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IExpZmVjeWNsZSBmcm9tICcuL2xpZmVjeWNsZSdcbmltcG9ydCBNZXRob2RzIGZyb20gJy4vbWV0aG9kcydcbmltcG9ydCBkZWZhdWx0UHJvcHMgZnJvbSAnLi9kZWZhdWx0UHJvcHMnXG5pbXBvcnQgcHJvcFR5cGVzIGZyb20gJy4vcHJvcFR5cGVzJ1xuXG5leHBvcnQgY29uc3QgUmVhY3RUYWJsZURlZmF1bHRzID0gZGVmYXVsdFByb3BzXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWN0VGFibGUgZXh0ZW5kcyBNZXRob2RzKExpZmVjeWNsZShDb21wb25lbnQpKSB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKVxuXG4gICAgdGhpcy5nZXRSZXNvbHZlZFN0YXRlID0gdGhpcy5nZXRSZXNvbHZlZFN0YXRlLmJpbmQodGhpcylcbiAgICB0aGlzLmdldERhdGFNb2RlbCA9IHRoaXMuZ2V0RGF0YU1vZGVsLmJpbmQodGhpcylcbiAgICB0aGlzLmdldFNvcnRlZERhdGEgPSB0aGlzLmdldFNvcnRlZERhdGEuYmluZCh0aGlzKVxuICAgIHRoaXMuZmlyZUZldGNoRGF0YSA9IHRoaXMuZmlyZUZldGNoRGF0YS5iaW5kKHRoaXMpXG4gICAgdGhpcy5nZXRQcm9wT3JTdGF0ZSA9IHRoaXMuZ2V0UHJvcE9yU3RhdGUuYmluZCh0aGlzKVxuICAgIHRoaXMuZ2V0U3RhdGVPclByb3AgPSB0aGlzLmdldFN0YXRlT3JQcm9wLmJpbmQodGhpcylcbiAgICB0aGlzLmZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckRhdGEuYmluZCh0aGlzKVxuICAgIHRoaXMuc29ydERhdGEgPSB0aGlzLnNvcnREYXRhLmJpbmQodGhpcylcbiAgICB0aGlzLmdldE1pblJvd3MgPSB0aGlzLmdldE1pblJvd3MuYmluZCh0aGlzKVxuICAgIHRoaXMub25QYWdlQ2hhbmdlID0gdGhpcy5vblBhZ2VDaGFuZ2UuYmluZCh0aGlzKVxuICAgIHRoaXMub25QYWdlU2l6ZUNoYW5nZSA9IHRoaXMub25QYWdlU2l6ZUNoYW5nZS5iaW5kKHRoaXMpXG4gICAgdGhpcy5zb3J0Q29sdW1uID0gdGhpcy5zb3J0Q29sdW1uLmJpbmQodGhpcylcbiAgICB0aGlzLmZpbHRlckNvbHVtbiA9IHRoaXMuZmlsdGVyQ29sdW1uLmJpbmQodGhpcylcbiAgICB0aGlzLnJlc2l6ZUNvbHVtblN0YXJ0ID0gdGhpcy5yZXNpemVDb2x1bW5TdGFydC5iaW5kKHRoaXMpXG4gICAgdGhpcy5yZXNpemVDb2x1bW5FbmQgPSB0aGlzLnJlc2l6ZUNvbHVtbkVuZC5iaW5kKHRoaXMpXG4gICAgdGhpcy5yZXNpemVDb2x1bW5Nb3ZpbmcgPSB0aGlzLnJlc2l6ZUNvbHVtbk1vdmluZy5iaW5kKHRoaXMpXG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHJlc29sdmVkU3RhdGUgPSB0aGlzLmdldFJlc29sdmVkU3RhdGUoKVxuICAgIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgc3R5bGUsXG4gICAgICBnZXRQcm9wcyxcbiAgICAgIGdldFRhYmxlUHJvcHMsXG4gICAgICBnZXRUaGVhZEdyb3VwUHJvcHMsXG4gICAgICBnZXRUaGVhZEdyb3VwVHJQcm9wcyxcbiAgICAgIGdldFRoZWFkR3JvdXBUaFByb3BzLFxuICAgICAgZ2V0VGhlYWRQcm9wcyxcbiAgICAgIGdldFRoZWFkVHJQcm9wcyxcbiAgICAgIGdldFRoZWFkVGhQcm9wcyxcbiAgICAgIGdldFRoZWFkRmlsdGVyUHJvcHMsXG4gICAgICBnZXRUaGVhZEZpbHRlclRyUHJvcHMsXG4gICAgICBnZXRUaGVhZEZpbHRlclRoUHJvcHMsXG4gICAgICBnZXRUYm9keVByb3BzLFxuICAgICAgZ2V0VHJHcm91cFByb3BzLFxuICAgICAgZ2V0VHJQcm9wcyxcbiAgICAgIGdldFRkUHJvcHMsXG4gICAgICBnZXRUZm9vdFByb3BzLFxuICAgICAgZ2V0VGZvb3RUclByb3BzLFxuICAgICAgZ2V0VGZvb3RUZFByb3BzLFxuICAgICAgZ2V0UGFnaW5hdGlvblByb3BzLFxuICAgICAgZ2V0TG9hZGluZ1Byb3BzLFxuICAgICAgZ2V0Tm9EYXRhUHJvcHMsXG4gICAgICBnZXRSZXNpemVyUHJvcHMsXG4gICAgICBzaG93UGFnaW5hdGlvbixcbiAgICAgIHNob3dQYWdpbmF0aW9uVG9wLFxuICAgICAgc2hvd1BhZ2luYXRpb25Cb3R0b20sXG4gICAgICBtYW51YWwsXG4gICAgICBsb2FkaW5nVGV4dCxcbiAgICAgIG5vRGF0YVRleHQsXG4gICAgICBzb3J0YWJsZSxcbiAgICAgIG11bHRpU29ydCxcbiAgICAgIHJlc2l6YWJsZSxcbiAgICAgIGZpbHRlcmFibGUsXG4gICAgICAvLyBQaXZvdGluZyBTdGF0ZVxuICAgICAgcGl2b3RJREtleSxcbiAgICAgIHBpdm90VmFsS2V5LFxuICAgICAgcGl2b3RCeSxcbiAgICAgIHN1YlJvd3NLZXksXG4gICAgICBhZ2dyZWdhdGVkS2V5LFxuICAgICAgb3JpZ2luYWxLZXksXG4gICAgICBpbmRleEtleSxcbiAgICAgIGdyb3VwZWRCeVBpdm90S2V5LFxuICAgICAgLy8gU3RhdGVcbiAgICAgIGxvYWRpbmcsXG4gICAgICBwYWdlU2l6ZSxcbiAgICAgIHBhZ2UsXG4gICAgICBzb3J0ZWQsXG4gICAgICBmaWx0ZXJlZCxcbiAgICAgIHJlc2l6ZWQsXG4gICAgICBleHBhbmRlZCxcbiAgICAgIHBhZ2VzLFxuICAgICAgb25FeHBhbmRlZENoYW5nZSxcbiAgICAgIC8vIENvbXBvbmVudHNcbiAgICAgIFRhYmxlQ29tcG9uZW50LFxuICAgICAgVGhlYWRDb21wb25lbnQsXG4gICAgICBUYm9keUNvbXBvbmVudCxcbiAgICAgIFRyR3JvdXBDb21wb25lbnQsXG4gICAgICBUckNvbXBvbmVudCxcbiAgICAgIFRoQ29tcG9uZW50LFxuICAgICAgVGRDb21wb25lbnQsXG4gICAgICBUZm9vdENvbXBvbmVudCxcbiAgICAgIFBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgICBMb2FkaW5nQ29tcG9uZW50LFxuICAgICAgU3ViQ29tcG9uZW50LFxuICAgICAgTm9EYXRhQ29tcG9uZW50LFxuICAgICAgUmVzaXplckNvbXBvbmVudCxcbiAgICAgIEV4cGFuZGVyQ29tcG9uZW50LFxuICAgICAgUGl2b3RWYWx1ZUNvbXBvbmVudCxcbiAgICAgIFBpdm90Q29tcG9uZW50LFxuICAgICAgQWdncmVnYXRlZENvbXBvbmVudCxcbiAgICAgIEZpbHRlckNvbXBvbmVudCxcbiAgICAgIFBhZFJvd0NvbXBvbmVudCxcbiAgICAgIC8vIERhdGEgbW9kZWxcbiAgICAgIHJlc29sdmVkRGF0YSxcbiAgICAgIGFsbFZpc2libGVDb2x1bW5zLFxuICAgICAgaGVhZGVyR3JvdXBzLFxuICAgICAgaGFzSGVhZGVyR3JvdXBzLFxuICAgICAgLy8gU29ydGVkIERhdGFcbiAgICAgIHNvcnRlZERhdGEsXG4gICAgICBjdXJyZW50bHlSZXNpemluZyxcbiAgICB9ID0gcmVzb2x2ZWRTdGF0ZVxuXG4gICAgLy8gUGFnaW5hdGlvblxuICAgIGNvbnN0IHN0YXJ0Um93ID0gcGFnZVNpemUgKiBwYWdlXG4gICAgY29uc3QgZW5kUm93ID0gc3RhcnRSb3cgKyBwYWdlU2l6ZVxuICAgIGxldCBwYWdlUm93cyA9IG1hbnVhbCA/IHJlc29sdmVkRGF0YSA6IHNvcnRlZERhdGEuc2xpY2Uoc3RhcnRSb3csIGVuZFJvdylcbiAgICBjb25zdCBtaW5Sb3dzID0gdGhpcy5nZXRNaW5Sb3dzKClcbiAgICBjb25zdCBwYWRSb3dzID0gXy5yYW5nZShNYXRoLm1heChtaW5Sb3dzIC0gcGFnZVJvd3MubGVuZ3RoLCAwKSlcblxuICAgIGNvbnN0IGhhc0NvbHVtbkZvb3RlciA9IGFsbFZpc2libGVDb2x1bW5zLnNvbWUoZCA9PiBkLkZvb3RlcilcbiAgICBjb25zdCBoYXNGaWx0ZXJzID0gZmlsdGVyYWJsZSB8fCBhbGxWaXNpYmxlQ29sdW1ucy5zb21lKGQgPT4gZC5maWx0ZXJhYmxlKVxuXG4gICAgY29uc3QgcmVjdXJzZVJvd3NWaWV3SW5kZXggPSAocm93cywgcGF0aCA9IFtdLCBpbmRleCA9IC0xKSA9PiBbXG4gICAgICByb3dzLm1hcCgocm93LCBpKSA9PiB7XG4gICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgY29uc3Qgcm93V2l0aFZpZXdJbmRleCA9IHtcbiAgICAgICAgICAuLi5yb3csXG4gICAgICAgICAgX3ZpZXdJbmRleDogaW5kZXgsXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UGF0aCA9IHBhdGguY29uY2F0KFtpXSlcbiAgICAgICAgaWYgKHJvd1dpdGhWaWV3SW5kZXhbc3ViUm93c0tleV0gJiYgXy5nZXQoZXhwYW5kZWQsIG5ld1BhdGgpKSB7XG4gICAgICAgICAgW3Jvd1dpdGhWaWV3SW5kZXhbc3ViUm93c0tleV0sIGluZGV4XSA9IHJlY3Vyc2VSb3dzVmlld0luZGV4KFxuICAgICAgICAgICAgcm93V2l0aFZpZXdJbmRleFtzdWJSb3dzS2V5XSxcbiAgICAgICAgICAgIG5ld1BhdGgsXG4gICAgICAgICAgICBpbmRleFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93V2l0aFZpZXdJbmRleFxuICAgICAgfSksXG4gICAgICBpbmRleCxcbiAgICBdO1xuICAgIFtwYWdlUm93c10gPSByZWN1cnNlUm93c1ZpZXdJbmRleChwYWdlUm93cylcblxuICAgIGNvbnN0IGNhblByZXZpb3VzID0gcGFnZSA+IDBcbiAgICBjb25zdCBjYW5OZXh0ID0gcGFnZSArIDEgPCBwYWdlc1xuXG4gICAgY29uc3Qgcm93TWluV2lkdGggPSBfLnN1bShcbiAgICAgIGFsbFZpc2libGVDb2x1bW5zLm1hcChkID0+IHtcbiAgICAgICAgY29uc3QgcmVzaXplZENvbHVtbiA9IHJlc2l6ZWQuZmluZCh4ID0+IHguaWQgPT09IGQuaWQpIHx8IHt9XG4gICAgICAgIHJldHVybiBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkQ29sdW1uLnZhbHVlLCBkLndpZHRoLCBkLm1pbldpZHRoKVxuICAgICAgfSlcbiAgICApXG5cbiAgICBsZXQgcm93SW5kZXggPSAtMVxuXG4gICAgY29uc3QgZmluYWxTdGF0ZSA9IHtcbiAgICAgIC4uLnJlc29sdmVkU3RhdGUsXG4gICAgICBzdGFydFJvdyxcbiAgICAgIGVuZFJvdyxcbiAgICAgIHBhZ2VSb3dzLFxuICAgICAgbWluUm93cyxcbiAgICAgIHBhZFJvd3MsXG4gICAgICBoYXNDb2x1bW5Gb290ZXIsXG4gICAgICBjYW5QcmV2aW91cyxcbiAgICAgIGNhbk5leHQsXG4gICAgICByb3dNaW5XaWR0aCxcbiAgICB9XG5cbiAgICBjb25zdCByb290UHJvcHMgPSBfLnNwbGl0UHJvcHMoZ2V0UHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpKVxuICAgIGNvbnN0IHRhYmxlUHJvcHMgPSBfLnNwbGl0UHJvcHMoZ2V0VGFibGVQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcykpXG4gICAgY29uc3QgdEJvZHlQcm9wcyA9IF8uc3BsaXRQcm9wcyhnZXRUYm9keVByb3BzKGZpbmFsU3RhdGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzKSlcbiAgICBjb25zdCBsb2FkaW5nUHJvcHMgPSBnZXRMb2FkaW5nUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpXG4gICAgY29uc3Qgbm9EYXRhUHJvcHMgPSBnZXROb0RhdGFQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcylcblxuICAgIC8vIFZpc3VhbCBDb21wb25lbnRzXG5cbiAgICBjb25zdCBtYWtlSGVhZGVyR3JvdXAgPSAoY29sdW1uLCBpKSA9PiB7XG4gICAgICBjb25zdCByZXNpemVkVmFsdWUgPSBjb2wgPT4gKHJlc2l6ZWQuZmluZCh4ID0+IHguaWQgPT09IGNvbC5pZCkgfHwge30pLnZhbHVlXG4gICAgICBjb25zdCBmbGV4ID0gXy5zdW0oXG4gICAgICAgIGNvbHVtbi5jb2x1bW5zLm1hcChjb2wgPT4gKGNvbC53aWR0aCB8fCByZXNpemVkVmFsdWUoY29sKSA/IDAgOiBjb2wubWluV2lkdGgpKVxuICAgICAgKVxuICAgICAgY29uc3Qgd2lkdGggPSBfLnN1bShcbiAgICAgICAgY29sdW1uLmNvbHVtbnMubWFwKGNvbCA9PiBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkVmFsdWUoY29sKSwgY29sLndpZHRoLCBjb2wubWluV2lkdGgpKVxuICAgICAgKVxuICAgICAgY29uc3QgbWF4V2lkdGggPSBfLnN1bShcbiAgICAgICAgY29sdW1uLmNvbHVtbnMubWFwKGNvbCA9PiBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkVmFsdWUoY29sKSwgY29sLndpZHRoLCBjb2wubWF4V2lkdGgpKVxuICAgICAgKVxuXG4gICAgICBjb25zdCB0aGVhZEdyb3VwVGhQcm9wcyA9IF8uc3BsaXRQcm9wcyhcbiAgICAgICAgZ2V0VGhlYWRHcm91cFRoUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCBjb2x1bW4sIHRoaXMpXG4gICAgICApXG4gICAgICBjb25zdCBjb2x1bW5IZWFkZXJQcm9wcyA9IF8uc3BsaXRQcm9wcyhcbiAgICAgICAgY29sdW1uLmdldEhlYWRlclByb3BzKGZpbmFsU3RhdGUsIHVuZGVmaW5lZCwgY29sdW1uLCB0aGlzKVxuICAgICAgKVxuXG4gICAgICBjb25zdCBjbGFzc2VzID0gW1xuICAgICAgICBjb2x1bW4uaGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgICB0aGVhZEdyb3VwVGhQcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGNvbHVtbkhlYWRlclByb3BzLmNsYXNzTmFtZSxcbiAgICAgIF1cblxuICAgICAgY29uc3Qgc3R5bGVzID0ge1xuICAgICAgICAuLi5jb2x1bW4uaGVhZGVyU3R5bGUsXG4gICAgICAgIC4uLnRoZWFkR3JvdXBUaFByb3BzLnN0eWxlLFxuICAgICAgICAuLi5jb2x1bW5IZWFkZXJQcm9wcy5zdHlsZSxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdCA9IHtcbiAgICAgICAgLi4udGhlYWRHcm91cFRoUHJvcHMucmVzdCxcbiAgICAgICAgLi4uY29sdW1uSGVhZGVyUHJvcHMucmVzdCxcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmxleFN0eWxlcyA9IHtcbiAgICAgICAgZmxleDogYCR7ZmxleH0gMCBhdXRvYCxcbiAgICAgICAgd2lkdGg6IF8uYXNQeCh3aWR0aCksXG4gICAgICAgIG1heFdpZHRoOiBfLmFzUHgobWF4V2lkdGgpLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGhDb21wb25lbnRcbiAgICAgICAgICBrZXk9e2Ake2l9LSR7Y29sdW1uLmlkfWB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNsYXNzZXMpfVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAuLi5zdHlsZXMsXG4gICAgICAgICAgICAuLi5mbGV4U3R5bGVzLFxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICB7Xy5ub3JtYWxpemVDb21wb25lbnQoY29sdW1uLkhlYWRlciwge1xuICAgICAgICAgICAgZGF0YTogc29ydGVkRGF0YSxcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9UaENvbXBvbmVudD5cbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBtYWtlSGVhZGVyR3JvdXBzID0gKCkgPT4ge1xuICAgICAgY29uc3QgdGhlYWRHcm91cFByb3BzID0gXy5zcGxpdFByb3BzKFxuICAgICAgICBnZXRUaGVhZEdyb3VwUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpXG4gICAgICApXG4gICAgICBjb25zdCB0aGVhZEdyb3VwVHJQcm9wcyA9IF8uc3BsaXRQcm9wcyhcbiAgICAgICAgZ2V0VGhlYWRHcm91cFRyUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpXG4gICAgICApXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGhlYWRDb21wb25lbnRcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJy1oZWFkZXJHcm91cHMnLCB0aGVhZEdyb3VwUHJvcHMuY2xhc3NOYW1lKX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4udGhlYWRHcm91cFByb3BzLnN0eWxlLFxuICAgICAgICAgICAgbWluV2lkdGg6IGAke3Jvd01pbldpZHRofXB4YCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHsuLi50aGVhZEdyb3VwUHJvcHMucmVzdH1cbiAgICAgICAgPlxuICAgICAgICAgIDxUckNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGVhZEdyb3VwVHJQcm9wcy5jbGFzc05hbWV9XG4gICAgICAgICAgICBzdHlsZT17dGhlYWRHcm91cFRyUHJvcHMuc3R5bGV9XG4gICAgICAgICAgICB7Li4udGhlYWRHcm91cFRyUHJvcHMucmVzdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7aGVhZGVyR3JvdXBzLm1hcChtYWtlSGVhZGVyR3JvdXApfVxuICAgICAgICAgIDwvVHJDb21wb25lbnQ+XG4gICAgICAgIDwvVGhlYWRDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZUhlYWRlciA9IChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGNvbnN0IHJlc2l6ZWRDb2wgPSByZXNpemVkLmZpbmQoeCA9PiB4LmlkID09PSBjb2x1bW4uaWQpIHx8IHt9XG4gICAgICBjb25zdCBzb3J0ID0gc29ydGVkLmZpbmQoZCA9PiBkLmlkID09PSBjb2x1bW4uaWQpXG4gICAgICBjb25zdCBzaG93ID0gdHlwZW9mIGNvbHVtbi5zaG93ID09PSAnZnVuY3Rpb24nID8gY29sdW1uLnNob3coKSA6IGNvbHVtbi5zaG93XG4gICAgICBjb25zdCB3aWR0aCA9IF8uZ2V0Rmlyc3REZWZpbmVkKHJlc2l6ZWRDb2wudmFsdWUsIGNvbHVtbi53aWR0aCwgY29sdW1uLm1pbldpZHRoKVxuICAgICAgY29uc3QgbWF4V2lkdGggPSBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkQ29sLnZhbHVlLCBjb2x1bW4ud2lkdGgsIGNvbHVtbi5tYXhXaWR0aClcbiAgICAgIGNvbnN0IHRoZWFkVGhQcm9wcyA9IF8uc3BsaXRQcm9wcyhnZXRUaGVhZFRoUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCBjb2x1bW4sIHRoaXMpKVxuICAgICAgY29uc3QgY29sdW1uSGVhZGVyUHJvcHMgPSBfLnNwbGl0UHJvcHMoXG4gICAgICAgIGNvbHVtbi5nZXRIZWFkZXJQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIGNvbHVtbiwgdGhpcylcbiAgICAgIClcblxuICAgICAgY29uc3QgY2xhc3NlcyA9IFtjb2x1bW4uaGVhZGVyQ2xhc3NOYW1lLCB0aGVhZFRoUHJvcHMuY2xhc3NOYW1lLCBjb2x1bW5IZWFkZXJQcm9wcy5jbGFzc05hbWVdXG5cbiAgICAgIGNvbnN0IHN0eWxlcyA9IHtcbiAgICAgICAgLi4uY29sdW1uLmhlYWRlclN0eWxlLFxuICAgICAgICAuLi50aGVhZFRoUHJvcHMuc3R5bGUsXG4gICAgICAgIC4uLmNvbHVtbkhlYWRlclByb3BzLnN0eWxlLFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN0ID0ge1xuICAgICAgICAuLi50aGVhZFRoUHJvcHMucmVzdCxcbiAgICAgICAgLi4uY29sdW1uSGVhZGVyUHJvcHMucmVzdCxcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNSZXNpemFibGUgPSBfLmdldEZpcnN0RGVmaW5lZChjb2x1bW4ucmVzaXphYmxlLCByZXNpemFibGUsIGZhbHNlKVxuICAgICAgY29uc3QgcmVzaXplciA9IGlzUmVzaXphYmxlID8gKFxuICAgICAgICA8UmVzaXplckNvbXBvbmVudFxuICAgICAgICAgIG9uTW91c2VEb3duPXtlID0+IHRoaXMucmVzaXplQ29sdW1uU3RhcnQoZSwgY29sdW1uLCBmYWxzZSl9XG4gICAgICAgICAgb25Ub3VjaFN0YXJ0PXtlID0+IHRoaXMucmVzaXplQ29sdW1uU3RhcnQoZSwgY29sdW1uLCB0cnVlKX1cbiAgICAgICAgICB7Li4uZ2V0UmVzaXplclByb3BzKCdmaW5hbFN0YXRlJywgdW5kZWZpbmVkLCBjb2x1bW4sIHRoaXMpfVxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGxcblxuICAgICAgY29uc3QgaXNTb3J0YWJsZSA9IF8uZ2V0Rmlyc3REZWZpbmVkKGNvbHVtbi5zb3J0YWJsZSwgc29ydGFibGUsIGZhbHNlKVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGhDb21wb25lbnRcbiAgICAgICAgICBrZXk9e2Ake2l9LSR7Y29sdW1uLmlkfWB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKFxuICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgIGlzUmVzaXphYmxlICYmICdydC1yZXNpemFibGUtaGVhZGVyJyxcbiAgICAgICAgICAgIHNvcnQgPyAoc29ydC5kZXNjID8gJy1zb3J0LWRlc2MnIDogJy1zb3J0LWFzYycpIDogJycsXG4gICAgICAgICAgICBpc1NvcnRhYmxlICYmICctY3Vyc29yLXBvaW50ZXInLFxuICAgICAgICAgICAgIXNob3cgJiYgJy1oaWRkZW4nLFxuICAgICAgICAgICAgcGl2b3RCeSAmJiBwaXZvdEJ5LnNsaWNlKDAsIC0xKS5pbmNsdWRlcyhjb2x1bW4uaWQpICYmICdydC1oZWFkZXItcGl2b3QnXG4gICAgICAgICAgKX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4uc3R5bGVzLFxuICAgICAgICAgICAgZmxleDogYCR7d2lkdGh9IDAgYXV0b2AsXG4gICAgICAgICAgICB3aWR0aDogXy5hc1B4KHdpZHRoKSxcbiAgICAgICAgICAgIG1heFdpZHRoOiBfLmFzUHgobWF4V2lkdGgpLFxuICAgICAgICAgIH19XG4gICAgICAgICAgdG9nZ2xlU29ydD17ZSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNTb3J0YWJsZSkgdGhpcy5zb3J0Q29sdW1uKGNvbHVtbiwgbXVsdGlTb3J0ID8gZS5zaGlmdEtleSA6IGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhpc1Jlc2l6YWJsZSAmJiAncnQtcmVzaXphYmxlLWhlYWRlci1jb250ZW50Jyl9PlxuICAgICAgICAgICAge18ubm9ybWFsaXplQ29tcG9uZW50KGNvbHVtbi5IZWFkZXIsIHtcbiAgICAgICAgICAgICAgZGF0YTogc29ydGVkRGF0YSxcbiAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3Jlc2l6ZXJ9XG4gICAgICAgIDwvVGhDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZUhlYWRlcnMgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0aGVhZFByb3BzID0gXy5zcGxpdFByb3BzKGdldFRoZWFkUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpKVxuICAgICAgY29uc3QgdGhlYWRUclByb3BzID0gXy5zcGxpdFByb3BzKGdldFRoZWFkVHJQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcykpXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGhlYWRDb21wb25lbnRcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJy1oZWFkZXInLCB0aGVhZFByb3BzLmNsYXNzTmFtZSl9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIC4uLnRoZWFkUHJvcHMuc3R5bGUsXG4gICAgICAgICAgICBtaW5XaWR0aDogYCR7cm93TWluV2lkdGh9cHhgLFxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLnRoZWFkUHJvcHMucmVzdH1cbiAgICAgICAgPlxuICAgICAgICAgIDxUckNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGVhZFRyUHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICAgICAgc3R5bGU9e3RoZWFkVHJQcm9wcy5zdHlsZX1cbiAgICAgICAgICAgIHsuLi50aGVhZFRyUHJvcHMucmVzdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YWxsVmlzaWJsZUNvbHVtbnMubWFwKG1ha2VIZWFkZXIpfVxuICAgICAgICAgIDwvVHJDb21wb25lbnQ+XG4gICAgICAgIDwvVGhlYWRDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZUZpbHRlciA9IChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGNvbnN0IHJlc2l6ZWRDb2wgPSByZXNpemVkLmZpbmQoeCA9PiB4LmlkID09PSBjb2x1bW4uaWQpIHx8IHt9XG4gICAgICBjb25zdCB3aWR0aCA9IF8uZ2V0Rmlyc3REZWZpbmVkKHJlc2l6ZWRDb2wudmFsdWUsIGNvbHVtbi53aWR0aCwgY29sdW1uLm1pbldpZHRoKVxuICAgICAgY29uc3QgbWF4V2lkdGggPSBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkQ29sLnZhbHVlLCBjb2x1bW4ud2lkdGgsIGNvbHVtbi5tYXhXaWR0aClcbiAgICAgIGNvbnN0IHRoZWFkRmlsdGVyVGhQcm9wcyA9IF8uc3BsaXRQcm9wcyhcbiAgICAgICAgZ2V0VGhlYWRGaWx0ZXJUaFByb3BzKGZpbmFsU3RhdGUsIHVuZGVmaW5lZCwgY29sdW1uLCB0aGlzKVxuICAgICAgKVxuICAgICAgY29uc3QgY29sdW1uSGVhZGVyUHJvcHMgPSBfLnNwbGl0UHJvcHMoXG4gICAgICAgIGNvbHVtbi5nZXRIZWFkZXJQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIGNvbHVtbiwgdGhpcylcbiAgICAgIClcblxuICAgICAgY29uc3QgY2xhc3NlcyA9IFtcbiAgICAgICAgY29sdW1uLmhlYWRlckNsYXNzTmFtZSxcbiAgICAgICAgdGhlYWRGaWx0ZXJUaFByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgY29sdW1uSGVhZGVyUHJvcHMuY2xhc3NOYW1lLFxuICAgICAgXVxuXG4gICAgICBjb25zdCBzdHlsZXMgPSB7XG4gICAgICAgIC4uLmNvbHVtbi5oZWFkZXJTdHlsZSxcbiAgICAgICAgLi4udGhlYWRGaWx0ZXJUaFByb3BzLnN0eWxlLFxuICAgICAgICAuLi5jb2x1bW5IZWFkZXJQcm9wcy5zdHlsZSxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdCA9IHtcbiAgICAgICAgLi4udGhlYWRGaWx0ZXJUaFByb3BzLnJlc3QsXG4gICAgICAgIC4uLmNvbHVtbkhlYWRlclByb3BzLnJlc3QsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlciA9IGZpbHRlcmVkLmZpbmQoZmlsdGVyID0+IGZpbHRlci5pZCA9PT0gY29sdW1uLmlkKVxuXG4gICAgICBjb25zdCBSZXNvbHZlZEZpbHRlckNvbXBvbmVudCA9IGNvbHVtbi5GaWx0ZXIgfHwgRmlsdGVyQ29tcG9uZW50XG5cbiAgICAgIGNvbnN0IGlzRmlsdGVyYWJsZSA9IF8uZ2V0Rmlyc3REZWZpbmVkKGNvbHVtbi5maWx0ZXJhYmxlLCBmaWx0ZXJhYmxlLCBmYWxzZSlcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRoQ29tcG9uZW50XG4gICAgICAgICAga2V5PXtgJHtpfS0ke2NvbHVtbi5pZH1gfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhjbGFzc2VzKX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4uc3R5bGVzLFxuICAgICAgICAgICAgZmxleDogYCR7d2lkdGh9IDAgYXV0b2AsXG4gICAgICAgICAgICB3aWR0aDogXy5hc1B4KHdpZHRoKSxcbiAgICAgICAgICAgIG1heFdpZHRoOiBfLmFzUHgobWF4V2lkdGgpLFxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICB7aXNGaWx0ZXJhYmxlXG4gICAgICAgICAgICA/IF8ubm9ybWFsaXplQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgIFJlc29sdmVkRmlsdGVyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiB2YWx1ZSA9PiB0aGlzLmZpbHRlckNvbHVtbihjb2x1bW4sIHZhbHVlKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRQcm9wcy5jb2x1bW4uRmlsdGVyXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgPC9UaENvbXBvbmVudD5cbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBtYWtlRmlsdGVycyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHRoZWFkRmlsdGVyUHJvcHMgPSBfLnNwbGl0UHJvcHMoXG4gICAgICAgIGdldFRoZWFkRmlsdGVyUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpXG4gICAgICApXG4gICAgICBjb25zdCB0aGVhZEZpbHRlclRyUHJvcHMgPSBfLnNwbGl0UHJvcHMoXG4gICAgICAgIGdldFRoZWFkRmlsdGVyVHJQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcylcbiAgICAgIClcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUaGVhZENvbXBvbmVudFxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnLWZpbHRlcnMnLCB0aGVhZEZpbHRlclByb3BzLmNsYXNzTmFtZSl9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIC4uLnRoZWFkRmlsdGVyUHJvcHMuc3R5bGUsXG4gICAgICAgICAgICBtaW5XaWR0aDogYCR7cm93TWluV2lkdGh9cHhgLFxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLnRoZWFkRmlsdGVyUHJvcHMucmVzdH1cbiAgICAgICAgPlxuICAgICAgICAgIDxUckNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGVhZEZpbHRlclRyUHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICAgICAgc3R5bGU9e3RoZWFkRmlsdGVyVHJQcm9wcy5zdHlsZX1cbiAgICAgICAgICAgIHsuLi50aGVhZEZpbHRlclRyUHJvcHMucmVzdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YWxsVmlzaWJsZUNvbHVtbnMubWFwKG1ha2VGaWx0ZXIpfVxuICAgICAgICAgIDwvVHJDb21wb25lbnQ+XG4gICAgICAgIDwvVGhlYWRDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZVBhZ2VSb3cgPSAocm93LCBpLCBwYXRoID0gW10pID0+IHtcbiAgICAgIGNvbnN0IHJvd0luZm8gPSB7XG4gICAgICAgIG9yaWdpbmFsOiByb3dbb3JpZ2luYWxLZXldLFxuICAgICAgICByb3csXG4gICAgICAgIGluZGV4OiByb3dbaW5kZXhLZXldLFxuICAgICAgICB2aWV3SW5kZXg6IChyb3dJbmRleCArPSAxKSxcbiAgICAgICAgcGFnZVNpemUsXG4gICAgICAgIHBhZ2UsXG4gICAgICAgIGxldmVsOiBwYXRoLmxlbmd0aCxcbiAgICAgICAgbmVzdGluZ1BhdGg6IHBhdGguY29uY2F0KFtpXSksXG4gICAgICAgIGFnZ3JlZ2F0ZWQ6IHJvd1thZ2dyZWdhdGVkS2V5XSxcbiAgICAgICAgZ3JvdXBlZEJ5UGl2b3Q6IHJvd1tncm91cGVkQnlQaXZvdEtleV0sXG4gICAgICAgIHN1YlJvd3M6IHJvd1tzdWJSb3dzS2V5XSxcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBfLmdldChleHBhbmRlZCwgcm93SW5mby5uZXN0aW5nUGF0aClcbiAgICAgIGNvbnN0IHRyR3JvdXBQcm9wcyA9IGdldFRyR3JvdXBQcm9wcyhmaW5hbFN0YXRlLCByb3dJbmZvLCB1bmRlZmluZWQsIHRoaXMpXG4gICAgICBjb25zdCB0clByb3BzID0gXy5zcGxpdFByb3BzKGdldFRyUHJvcHMoZmluYWxTdGF0ZSwgcm93SW5mbywgdW5kZWZpbmVkLCB0aGlzKSlcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUckdyb3VwQ29tcG9uZW50IGtleT17cm93SW5mby5uZXN0aW5nUGF0aC5qb2luKCdfJyl9IHsuLi50ckdyb3VwUHJvcHN9PlxuICAgICAgICAgIDxUckNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKHRyUHJvcHMuY2xhc3NOYW1lLCByb3cuX3ZpZXdJbmRleCAlIDIgPyAnLWV2ZW4nIDogJy1vZGQnKX1cbiAgICAgICAgICAgIHN0eWxlPXt0clByb3BzLnN0eWxlfVxuICAgICAgICAgICAgey4uLnRyUHJvcHMucmVzdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YWxsVmlzaWJsZUNvbHVtbnMubWFwKChjb2x1bW4sIGkyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZWRDb2wgPSByZXNpemVkLmZpbmQoeCA9PiB4LmlkID09PSBjb2x1bW4uaWQpIHx8IHt9XG4gICAgICAgICAgICAgIGNvbnN0IHNob3cgPSB0eXBlb2YgY29sdW1uLnNob3cgPT09ICdmdW5jdGlvbicgPyBjb2x1bW4uc2hvdygpIDogY29sdW1uLnNob3dcbiAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkQ29sLnZhbHVlLCBjb2x1bW4ud2lkdGgsIGNvbHVtbi5taW5XaWR0aClcbiAgICAgICAgICAgICAgY29uc3QgbWF4V2lkdGggPSBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkQ29sLnZhbHVlLCBjb2x1bW4ud2lkdGgsIGNvbHVtbi5tYXhXaWR0aClcbiAgICAgICAgICAgICAgY29uc3QgdGRQcm9wcyA9IF8uc3BsaXRQcm9wcyhnZXRUZFByb3BzKGZpbmFsU3RhdGUsIHJvd0luZm8sIGNvbHVtbiwgdGhpcykpXG4gICAgICAgICAgICAgIGNvbnN0IGNvbHVtblByb3BzID0gXy5zcGxpdFByb3BzKGNvbHVtbi5nZXRQcm9wcyhmaW5hbFN0YXRlLCByb3dJbmZvLCBjb2x1bW4sIHRoaXMpKVxuXG4gICAgICAgICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbdGRQcm9wcy5jbGFzc05hbWUsIGNvbHVtbi5jbGFzc05hbWUsIGNvbHVtblByb3BzLmNsYXNzTmFtZV1cblxuICAgICAgICAgICAgICBjb25zdCBzdHlsZXMgPSB7XG4gICAgICAgICAgICAgICAgLi4udGRQcm9wcy5zdHlsZSxcbiAgICAgICAgICAgICAgICAuLi5jb2x1bW4uc3R5bGUsXG4gICAgICAgICAgICAgICAgLi4uY29sdW1uUHJvcHMuc3R5bGUsXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBjZWxsSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAuLi5yb3dJbmZvLFxuICAgICAgICAgICAgICAgIGlzRXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgY29sdW1uOiB7IC4uLmNvbHVtbiB9LFxuICAgICAgICAgICAgICAgIHZhbHVlOiByb3dJbmZvLnJvd1tjb2x1bW4uaWRdLFxuICAgICAgICAgICAgICAgIHBpdm90ZWQ6IGNvbHVtbi5waXZvdGVkLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVyOiBjb2x1bW4uZXhwYW5kZXIsXG4gICAgICAgICAgICAgICAgcmVzaXplZCxcbiAgICAgICAgICAgICAgICBzaG93LFxuICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoLFxuICAgICAgICAgICAgICAgIHRkUHJvcHMsXG4gICAgICAgICAgICAgICAgY29sdW1uUHJvcHMsXG4gICAgICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgICAgICBzdHlsZXMsXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNlbGxJbmZvLnZhbHVlXG5cbiAgICAgICAgICAgICAgbGV0IHVzZU9uRXhwYW5kZXJDbGlja1xuICAgICAgICAgICAgICBsZXQgaXNCcmFuY2hcbiAgICAgICAgICAgICAgbGV0IGlzUHJldmlld1xuXG4gICAgICAgICAgICAgIGNvbnN0IG9uRXhwYW5kZXJDbGljayA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBuZXdFeHBhbmRlZCA9IF8uY2xvbmUoZXhwYW5kZWQpXG4gICAgICAgICAgICAgICAgaWYgKGlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgIG5ld0V4cGFuZGVkID0gXy5zZXQobmV3RXhwYW5kZWQsIGNlbGxJbmZvLm5lc3RpbmdQYXRoLCBmYWxzZSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbmV3RXhwYW5kZWQgPSBfLnNldChuZXdFeHBhbmRlZCwgY2VsbEluZm8ubmVzdGluZ1BhdGgsIHt9KVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFN0YXRlV2l0aERhdGEoXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBuZXdFeHBhbmRlZCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICBvbkV4cGFuZGVkQ2hhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgIG9uRXhwYW5kZWRDaGFuZ2UobmV3RXhwYW5kZWQsIGNlbGxJbmZvLm5lc3RpbmdQYXRoLCBlLCBjZWxsSW5mbylcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGEgc3RhbmRhcmQgY2VsbFxuICAgICAgICAgICAgICBsZXQgcmVzb2x2ZWRDZWxsID0gXy5ub3JtYWxpemVDb21wb25lbnQoY29sdW1uLkNlbGwsIGNlbGxJbmZvLCB2YWx1ZSlcblxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIFJlbmRlcmVyc1xuICAgICAgICAgICAgICBjb25zdCBSZXNvbHZlZEFnZ3JlZ2F0ZWRDb21wb25lbnQgPVxuICAgICAgICAgICAgICAgIGNvbHVtbi5BZ2dyZWdhdGVkIHx8ICghY29sdW1uLmFnZ3JlZ2F0ZSA/IEFnZ3JlZ2F0ZWRDb21wb25lbnQgOiBjb2x1bW4uQ2VsbClcbiAgICAgICAgICAgICAgY29uc3QgUmVzb2x2ZWRFeHBhbmRlckNvbXBvbmVudCA9IGNvbHVtbi5FeHBhbmRlciB8fCBFeHBhbmRlckNvbXBvbmVudFxuICAgICAgICAgICAgICBjb25zdCBSZXNvbHZlZFBpdm90VmFsdWVDb21wb25lbnQgPSBjb2x1bW4uUGl2b3RWYWx1ZSB8fCBQaXZvdFZhbHVlQ29tcG9uZW50XG4gICAgICAgICAgICAgIGNvbnN0IERlZmF1bHRSZXNvbHZlZFBpdm90Q29tcG9uZW50ID1cbiAgICAgICAgICAgICAgICBQaXZvdENvbXBvbmVudCB8fFxuICAgICAgICAgICAgICAgIChwcm9wcyA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8UmVzb2x2ZWRFeHBhbmRlckNvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgICAgICAgICAgIDxSZXNvbHZlZFBpdm90VmFsdWVDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgY29uc3QgUmVzb2x2ZWRQaXZvdENvbXBvbmVudCA9IGNvbHVtbi5QaXZvdCB8fCBEZWZhdWx0UmVzb2x2ZWRQaXZvdENvbXBvbmVudFxuXG4gICAgICAgICAgICAgIC8vIElzIHRoaXMgY2VsbCBleHBhbmRhYmxlP1xuICAgICAgICAgICAgICBpZiAoY2VsbEluZm8ucGl2b3RlZCB8fCBjZWxsSW5mby5leHBhbmRlcikge1xuICAgICAgICAgICAgICAgIC8vIE1ha2UgaXQgZXhwYW5kYWJsZSBieSBkZWZ1YWx0XG4gICAgICAgICAgICAgICAgY2VsbEluZm8uZXhwYW5kYWJsZSA9IHRydWVcbiAgICAgICAgICAgICAgICB1c2VPbkV4cGFuZGVyQ2xpY2sgPSB0cnVlXG4gICAgICAgICAgICAgICAgLy8gSWYgcGl2b3RlZCwgaGFzIG5vIHN1YlJvd3MsIGFuZCBkb2VzIG5vdCBoYXZlIGEgc3ViQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBtYWtlIGV4cGFuZGFibGVcbiAgICAgICAgICAgICAgICBpZiAoY2VsbEluZm8ucGl2b3RlZCAmJiAhY2VsbEluZm8uc3ViUm93cyAmJiAhU3ViQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICBjZWxsSW5mby5leHBhbmRhYmxlID0gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2VsbEluZm8ucGl2b3RlZCkge1xuICAgICAgICAgICAgICAgIC8vIElzIHRoaXMgY29sdW1uIGEgYnJhbmNoP1xuICAgICAgICAgICAgICAgIGlzQnJhbmNoID0gcm93SW5mby5yb3dbcGl2b3RJREtleV0gPT09IGNvbHVtbi5pZCAmJiBjZWxsSW5mby5zdWJSb3dzXG4gICAgICAgICAgICAgICAgLy8gU2hvdWxkIHRoaXMgY29sdW1uIGJlIGJsYW5rP1xuICAgICAgICAgICAgICAgIGlzUHJldmlldyA9XG4gICAgICAgICAgICAgICAgICBwaXZvdEJ5LmluZGV4T2YoY29sdW1uLmlkKSA+IHBpdm90QnkuaW5kZXhPZihyb3dJbmZvLnJvd1twaXZvdElES2V5XSkgJiZcbiAgICAgICAgICAgICAgICAgIGNlbGxJbmZvLnN1YlJvd3NcbiAgICAgICAgICAgICAgICAvLyBQaXZvdCBDZWxsIFJlbmRlciBPdmVycmlkZVxuICAgICAgICAgICAgICAgIGlmIChpc0JyYW5jaCkge1xuICAgICAgICAgICAgICAgICAgLy8gaXNQaXZvdFxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDZWxsID0gXy5ub3JtYWxpemVDb21wb25lbnQoXG4gICAgICAgICAgICAgICAgICAgIFJlc29sdmVkUGl2b3RDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5jZWxsSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcm93W3Bpdm90VmFsS2V5XSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcm93W3Bpdm90VmFsS2V5XVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNQcmV2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAvLyBTaG93IHRoZSBwaXZvdCBwcmV2aWV3XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZENlbGwgPSBfLm5vcm1hbGl6ZUNvbXBvbmVudChSZXNvbHZlZEFnZ3JlZ2F0ZWRDb21wb25lbnQsIGNlbGxJbmZvLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDZWxsID0gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjZWxsSW5mby5hZ2dyZWdhdGVkKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRDZWxsID0gXy5ub3JtYWxpemVDb21wb25lbnQoUmVzb2x2ZWRBZ2dyZWdhdGVkQ29tcG9uZW50LCBjZWxsSW5mbywgdmFsdWUpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2VsbEluZm8uZXhwYW5kZXIpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlZENlbGwgPSBfLm5vcm1hbGl6ZUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgIFJlc29sdmVkRXhwYW5kZXJDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICBjZWxsSW5mbyxcbiAgICAgICAgICAgICAgICAgIHJvd1twaXZvdFZhbEtleV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKHBpdm90QnkpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjZWxsSW5mby5ncm91cGVkQnlQaXZvdCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZENlbGwgPSBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoIWNlbGxJbmZvLnN1YlJvd3MgJiYgIVN1YkNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZENlbGwgPSBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRPbkV4cGFuZGVyQ2xpY2sgPSB1c2VPbkV4cGFuZGVyQ2xpY2sgPyBvbkV4cGFuZGVyQ2xpY2sgOiAoKSA9PiB7fVxuXG4gICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBvbkNsaWNrIGV2ZW50cywgbWFrZSBzdXJlIHRoZXkgZG9uJ3RcbiAgICAgICAgICAgICAgLy8gb3ZlcnJpZGUgZWFjaG90aGVyLiBUaGlzIHNob3VsZCBtYXliZSBiZSBleHBhbmRlZCB0byBoYW5kbGUgYWxsXG4gICAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25Qcm9wcyA9IHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiByZXNvbHZlZE9uRXhwYW5kZXJDbGljayxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0ZFByb3BzLnJlc3Qub25DbGljaykge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uUHJvcHMub25DbGljayA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGRQcm9wcy5yZXN0Lm9uQ2xpY2soZSwgKCkgPT4gcmVzb2x2ZWRPbkV4cGFuZGVyQ2xpY2soZSkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNvbHVtblByb3BzLnJlc3Qub25DbGljaykge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uUHJvcHMub25DbGljayA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgY29sdW1uUHJvcHMucmVzdC5vbkNsaWNrKGUsICgpID0+IHJlc29sdmVkT25FeHBhbmRlckNsaWNrKGUpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgY2VsbFxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxUZENvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuICAgICAgICAgICAgICAgICAga2V5PXtgJHtpMn0tJHtjb2x1bW4uaWR9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgIWNlbGxJbmZvLmV4cGFuZGFibGUgJiYgIXNob3cgJiYgJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgIGNlbGxJbmZvLmV4cGFuZGFibGUgJiYgJ3J0LWV4cGFuZGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAoaXNCcmFuY2ggfHwgaXNQcmV2aWV3KSAmJiAncnQtcGl2b3QnXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgLi4uc3R5bGVzLFxuICAgICAgICAgICAgICAgICAgICBmbGV4OiBgJHt3aWR0aH0gMCBhdXRvYCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF8uYXNQeCh3aWR0aCksXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBfLmFzUHgobWF4V2lkdGgpLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHsuLi50ZFByb3BzLnJlc3R9XG4gICAgICAgICAgICAgICAgICB7Li4uY29sdW1uUHJvcHMucmVzdH1cbiAgICAgICAgICAgICAgICAgIHsuLi5pbnRlcmFjdGlvblByb3BzfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtyZXNvbHZlZENlbGx9XG4gICAgICAgICAgICAgICAgPC9UZENvbXBvbmVudD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9UckNvbXBvbmVudD5cbiAgICAgICAgICB7cm93SW5mby5zdWJSb3dzICYmXG4gICAgICAgICAgICBpc0V4cGFuZGVkICYmXG4gICAgICAgICAgICByb3dJbmZvLnN1YlJvd3MubWFwKChkLCBpKSA9PiBtYWtlUGFnZVJvdyhkLCBpLCByb3dJbmZvLm5lc3RpbmdQYXRoKSl9XG4gICAgICAgICAge1N1YkNvbXBvbmVudCAmJlxuICAgICAgICAgICAgIXJvd0luZm8uc3ViUm93cyAmJlxuICAgICAgICAgICAgaXNFeHBhbmRlZCAmJlxuICAgICAgICAgICAgU3ViQ29tcG9uZW50KHJvd0luZm8sICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3RXhwYW5kZWQgPSBfLmNsb25lKGV4cGFuZGVkKVxuXG4gICAgICAgICAgICAgIF8uc2V0KG5ld0V4cGFuZGVkLCByb3dJbmZvLm5lc3RpbmdQYXRoLCBmYWxzZSlcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L1RyR3JvdXBDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZVBhZENvbHVtbiA9IChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGNvbnN0IHJlc2l6ZWRDb2wgPSByZXNpemVkLmZpbmQoeCA9PiB4LmlkID09PSBjb2x1bW4uaWQpIHx8IHt9XG4gICAgICBjb25zdCBzaG93ID0gdHlwZW9mIGNvbHVtbi5zaG93ID09PSAnZnVuY3Rpb24nID8gY29sdW1uLnNob3coKSA6IGNvbHVtbi5zaG93XG4gICAgICBjb25zdCB3aWR0aCA9IF8uZ2V0Rmlyc3REZWZpbmVkKHJlc2l6ZWRDb2wudmFsdWUsIGNvbHVtbi53aWR0aCwgY29sdW1uLm1pbldpZHRoKVxuICAgICAgY29uc3QgZmxleCA9IHdpZHRoXG4gICAgICBjb25zdCBtYXhXaWR0aCA9IF8uZ2V0Rmlyc3REZWZpbmVkKHJlc2l6ZWRDb2wudmFsdWUsIGNvbHVtbi53aWR0aCwgY29sdW1uLm1heFdpZHRoKVxuICAgICAgY29uc3QgdGRQcm9wcyA9IF8uc3BsaXRQcm9wcyhnZXRUZFByb3BzKGZpbmFsU3RhdGUsIHVuZGVmaW5lZCwgY29sdW1uLCB0aGlzKSlcbiAgICAgIGNvbnN0IGNvbHVtblByb3BzID0gXy5zcGxpdFByb3BzKGNvbHVtbi5nZXRQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIGNvbHVtbiwgdGhpcykpXG5cbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBbdGRQcm9wcy5jbGFzc05hbWUsIGNvbHVtbi5jbGFzc05hbWUsIGNvbHVtblByb3BzLmNsYXNzTmFtZV1cblxuICAgICAgY29uc3Qgc3R5bGVzID0ge1xuICAgICAgICAuLi50ZFByb3BzLnN0eWxlLFxuICAgICAgICAuLi5jb2x1bW4uc3R5bGUsXG4gICAgICAgIC4uLmNvbHVtblByb3BzLnN0eWxlLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGRDb21wb25lbnRcbiAgICAgICAgICBrZXk9e2Ake2l9LSR7Y29sdW1uLmlkfWB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNsYXNzZXMsICFzaG93ICYmICdoaWRkZW4nKX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4uc3R5bGVzLFxuICAgICAgICAgICAgZmxleDogYCR7ZmxleH0gMCBhdXRvYCxcbiAgICAgICAgICAgIHdpZHRoOiBfLmFzUHgod2lkdGgpLFxuICAgICAgICAgICAgbWF4V2lkdGg6IF8uYXNQeChtYXhXaWR0aCksXG4gICAgICAgICAgfX1cbiAgICAgICAgICB7Li4udGRQcm9wcy5yZXN0fVxuICAgICAgICA+XG4gICAgICAgICAge18ubm9ybWFsaXplQ29tcG9uZW50KFBhZFJvd0NvbXBvbmVudCl9XG4gICAgICAgIDwvVGRDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZVBhZFJvdyA9IChyb3csIGkpID0+IHtcbiAgICAgIGNvbnN0IHRyR3JvdXBQcm9wcyA9IGdldFRyR3JvdXBQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcylcbiAgICAgIGNvbnN0IHRyUHJvcHMgPSBfLnNwbGl0UHJvcHMoZ2V0VHJQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcykpXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VHJHcm91cENvbXBvbmVudCBrZXk9e2BwYWQtJHtpfWB9IHsuLi50ckdyb3VwUHJvcHN9PlxuICAgICAgICAgIDxUckNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKFxuICAgICAgICAgICAgICAnLXBhZFJvdycsXG4gICAgICAgICAgICAgIChwYWdlUm93cy5sZW5ndGggKyBpKSAlIDIgPyAnLWV2ZW4nIDogJy1vZGQnLFxuICAgICAgICAgICAgICB0clByb3BzLmNsYXNzTmFtZVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHN0eWxlPXt0clByb3BzLnN0eWxlIHx8IHt9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHthbGxWaXNpYmxlQ29sdW1ucy5tYXAobWFrZVBhZENvbHVtbil9XG4gICAgICAgICAgPC9UckNvbXBvbmVudD5cbiAgICAgICAgPC9Uckdyb3VwQ29tcG9uZW50PlxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IG1ha2VDb2x1bW5Gb290ZXIgPSAoY29sdW1uLCBpKSA9PiB7XG4gICAgICBjb25zdCByZXNpemVkQ29sID0gcmVzaXplZC5maW5kKHggPT4geC5pZCA9PT0gY29sdW1uLmlkKSB8fCB7fVxuICAgICAgY29uc3Qgc2hvdyA9IHR5cGVvZiBjb2x1bW4uc2hvdyA9PT0gJ2Z1bmN0aW9uJyA/IGNvbHVtbi5zaG93KCkgOiBjb2x1bW4uc2hvd1xuICAgICAgY29uc3Qgd2lkdGggPSBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkQ29sLnZhbHVlLCBjb2x1bW4ud2lkdGgsIGNvbHVtbi5taW5XaWR0aClcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gXy5nZXRGaXJzdERlZmluZWQocmVzaXplZENvbC52YWx1ZSwgY29sdW1uLndpZHRoLCBjb2x1bW4ubWF4V2lkdGgpXG4gICAgICBjb25zdCB0Rm9vdFRkUHJvcHMgPSBfLnNwbGl0UHJvcHMoZ2V0VGZvb3RUZFByb3BzKGZpbmFsU3RhdGUsIHVuZGVmaW5lZCwgY29sdW1uLCB0aGlzKSlcbiAgICAgIGNvbnN0IGNvbHVtblByb3BzID0gXy5zcGxpdFByb3BzKGNvbHVtbi5nZXRQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIGNvbHVtbiwgdGhpcykpXG4gICAgICBjb25zdCBjb2x1bW5Gb290ZXJQcm9wcyA9IF8uc3BsaXRQcm9wcyhcbiAgICAgICAgY29sdW1uLmdldEZvb3RlclByb3BzKGZpbmFsU3RhdGUsIHVuZGVmaW5lZCwgY29sdW1uLCB0aGlzKVxuICAgICAgKVxuXG4gICAgICBjb25zdCBjbGFzc2VzID0gW1xuICAgICAgICB0Rm9vdFRkUHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICBjb2x1bW4uY2xhc3NOYW1lLFxuICAgICAgICBjb2x1bW5Qcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGNvbHVtbkZvb3RlclByb3BzLmNsYXNzTmFtZSxcbiAgICAgIF1cblxuICAgICAgY29uc3Qgc3R5bGVzID0ge1xuICAgICAgICAuLi50Rm9vdFRkUHJvcHMuc3R5bGUsXG4gICAgICAgIC4uLmNvbHVtbi5zdHlsZSxcbiAgICAgICAgLi4uY29sdW1uUHJvcHMuc3R5bGUsXG4gICAgICAgIC4uLmNvbHVtbkZvb3RlclByb3BzLnN0eWxlLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGRDb21wb25lbnRcbiAgICAgICAgICBrZXk9e2Ake2l9LSR7Y29sdW1uLmlkfWB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNsYXNzZXMsICFzaG93ICYmICdoaWRkZW4nKX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4uc3R5bGVzLFxuICAgICAgICAgICAgZmxleDogYCR7d2lkdGh9IDAgYXV0b2AsXG4gICAgICAgICAgICB3aWR0aDogXy5hc1B4KHdpZHRoKSxcbiAgICAgICAgICAgIG1heFdpZHRoOiBfLmFzUHgobWF4V2lkdGgpLFxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLmNvbHVtblByb3BzLnJlc3R9XG4gICAgICAgICAgey4uLnRGb290VGRQcm9wcy5yZXN0fVxuICAgICAgICAgIHsuLi5jb2x1bW5Gb290ZXJQcm9wcy5yZXN0fVxuICAgICAgICA+XG4gICAgICAgICAge18ubm9ybWFsaXplQ29tcG9uZW50KGNvbHVtbi5Gb290ZXIsIHtcbiAgICAgICAgICAgIGRhdGE6IHNvcnRlZERhdGEsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvVGRDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZUNvbHVtbkZvb3RlcnMgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0Rm9vdFByb3BzID0gXy5zcGxpdFByb3BzKGdldFRmb290UHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpKVxuICAgICAgY29uc3QgdEZvb3RUclByb3BzID0gXy5zcGxpdFByb3BzKGdldFRmb290VHJQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcykpXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGZvb3RDb21wb25lbnRcbiAgICAgICAgICBjbGFzc05hbWU9e3RGb290UHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAuLi50Rm9vdFByb3BzLnN0eWxlLFxuICAgICAgICAgICAgbWluV2lkdGg6IGAke3Jvd01pbldpZHRofXB4YCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHsuLi50Rm9vdFByb3BzLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICA8VHJDb21wb25lbnRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh0Rm9vdFRyUHJvcHMuY2xhc3NOYW1lKX1cbiAgICAgICAgICAgIHN0eWxlPXt0Rm9vdFRyUHJvcHMuc3R5bGV9XG4gICAgICAgICAgICB7Li4udEZvb3RUclByb3BzLnJlc3R9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2FsbFZpc2libGVDb2x1bW5zLm1hcChtYWtlQ29sdW1uRm9vdGVyKX1cbiAgICAgICAgICA8L1RyQ29tcG9uZW50PlxuICAgICAgICA8L1Rmb290Q29tcG9uZW50PlxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IG1ha2VQYWdpbmF0aW9uID0gaXNUb3AgPT4ge1xuICAgICAgY29uc3QgcGFnaW5hdGlvblByb3BzID0gXy5zcGxpdFByb3BzKFxuICAgICAgICBnZXRQYWdpbmF0aW9uUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpXG4gICAgICApXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UGFnaW5hdGlvbkNvbXBvbmVudFxuICAgICAgICAgIHsuLi5yZXNvbHZlZFN0YXRlfVxuICAgICAgICAgIHBhZ2VzPXtwYWdlc31cbiAgICAgICAgICBjYW5QcmV2aW91cz17Y2FuUHJldmlvdXN9XG4gICAgICAgICAgY2FuTmV4dD17Y2FuTmV4dH1cbiAgICAgICAgICBvblBhZ2VDaGFuZ2U9e3RoaXMub25QYWdlQ2hhbmdlfVxuICAgICAgICAgIG9uUGFnZVNpemVDaGFuZ2U9e3RoaXMub25QYWdlU2l6ZUNoYW5nZX1cbiAgICAgICAgICBjbGFzc05hbWU9e3BhZ2luYXRpb25Qcm9wcy5jbGFzc05hbWV9XG4gICAgICAgICAgc3R5bGU9e3BhZ2luYXRpb25Qcm9wcy5zdHlsZX1cbiAgICAgICAgICBpc1RvcD17aXNUb3B9XG4gICAgICAgICAgey4uLnBhZ2luYXRpb25Qcm9wcy5yZXN0fVxuICAgICAgICAvPlxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IG1ha2VUYWJsZSA9ICgpID0+IChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdSZWFjdFRhYmxlJywgY2xhc3NOYW1lLCByb290UHJvcHMuY2xhc3NOYW1lKX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICAuLi5yb290UHJvcHMuc3R5bGUsXG4gICAgICAgIH19XG4gICAgICAgIHsuLi5yb290UHJvcHMucmVzdH1cbiAgICAgID5cbiAgICAgICAge3Nob3dQYWdpbmF0aW9uICYmIHNob3dQYWdpbmF0aW9uVG9wID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFnaW5hdGlvbi10b3BcIj57bWFrZVBhZ2luYXRpb24odHJ1ZSl9PC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8VGFibGVDb21wb25lbnRcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXModGFibGVQcm9wcy5jbGFzc05hbWUsIGN1cnJlbnRseVJlc2l6aW5nID8gJ3J0LXJlc2l6aW5nJyA6ICcnKX1cbiAgICAgICAgICBzdHlsZT17dGFibGVQcm9wcy5zdHlsZX1cbiAgICAgICAgICB7Li4udGFibGVQcm9wcy5yZXN0fVxuICAgICAgICA+XG4gICAgICAgICAge2hhc0hlYWRlckdyb3VwcyA/IG1ha2VIZWFkZXJHcm91cHMoKSA6IG51bGx9XG4gICAgICAgICAge21ha2VIZWFkZXJzKCl9XG4gICAgICAgICAge2hhc0ZpbHRlcnMgPyBtYWtlRmlsdGVycygpIDogbnVsbH1cbiAgICAgICAgICA8VGJvZHlDb21wb25lbnRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh0Qm9keVByb3BzLmNsYXNzTmFtZSl9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAuLi50Qm9keVByb3BzLnN0eWxlLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogYCR7cm93TWluV2lkdGh9cHhgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHsuLi50Qm9keVByb3BzLnJlc3R9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3BhZ2VSb3dzLm1hcCgoZCwgaSkgPT4gbWFrZVBhZ2VSb3coZCwgaSkpfVxuICAgICAgICAgICAge3BhZFJvd3MubWFwKG1ha2VQYWRSb3cpfVxuICAgICAgICAgIDwvVGJvZHlDb21wb25lbnQ+XG4gICAgICAgICAge2hhc0NvbHVtbkZvb3RlciA/IG1ha2VDb2x1bW5Gb290ZXJzKCkgOiBudWxsfVxuICAgICAgICA8L1RhYmxlQ29tcG9uZW50PlxuICAgICAgICB7c2hvd1BhZ2luYXRpb24gJiYgc2hvd1BhZ2luYXRpb25Cb3R0b20gPyAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYWdpbmF0aW9uLWJvdHRvbVwiPnttYWtlUGFnaW5hdGlvbihmYWxzZSl9PC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7IXBhZ2VSb3dzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPE5vRGF0YUNvbXBvbmVudCB7Li4ubm9EYXRhUHJvcHN9PntfLm5vcm1hbGl6ZUNvbXBvbmVudChub0RhdGFUZXh0KX08L05vRGF0YUNvbXBvbmVudD5cbiAgICAgICAgKX1cbiAgICAgICAgPExvYWRpbmdDb21wb25lbnQgbG9hZGluZz17bG9hZGluZ30gbG9hZGluZ1RleHQ9e2xvYWRpbmdUZXh0fSB7Li4ubG9hZGluZ1Byb3BzfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKVxuXG4gICAgLy8gY2hpbGRQcm9wcyBhcmUgb3B0aW9uYWxseSBwYXNzZWQgdG8gYSBmdW5jdGlvbi1hcy1hLWNoaWxkXG4gICAgcmV0dXJuIGNoaWxkcmVuID8gY2hpbGRyZW4oZmluYWxTdGF0ZSwgbWFrZVRhYmxlLCB0aGlzKSA6IG1ha2VUYWJsZSgpXG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/es/lifecycle.js b/es/lifecycle.js new file mode 100644 index 0000000000..3b71d3f474 --- /dev/null +++ b/es/lifecycle.js @@ -0,0 +1,144 @@ +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +export default (function (Base) { + return function (_Base) { + _inherits(_class, _Base); + + function _class(props) { + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).call(this, props)); + + var defaultState = { + page: props.defaultPage, + pageSize: props.defaultPageSize, + sorted: props.defaultSorted, + expanded: props.defaultExpanded, + filtered: props.defaultFiltered, + resized: props.defaultResized, + currentlyResizing: false, + skipNextSort: false + }; + var resolvedState = _this.getResolvedState(props, defaultState); + var dataModel = _this.getDataModel(resolvedState, true); + + _this.state = _this.calculateNewResolvedState(dataModel); + return _this; + } + + _createClass(_class, [{ + key: 'componentDidMount', + value: function componentDidMount() { + this.fireFetchData(); + } + }, { + key: 'componentDidUpdate', + value: function componentDidUpdate(prevProps, prevState) { + var oldState = this.getResolvedState(prevProps, prevState); + var newState = this.getResolvedState(this.props, this.state); + + // Do a deep compare of new and old `defaultOption` and + // if they are different reset `option = defaultOption` + var defaultableOptions = ['sorted', 'filtered', 'resized', 'expanded']; + defaultableOptions.forEach(function (x) { + var defaultName = 'default' + (x.charAt(0).toUpperCase() + x.slice(1)); + if (JSON.stringify(oldState[defaultName]) !== JSON.stringify(newState[defaultName])) { + newState[x] = newState[defaultName]; + } + }); + + // If they change these table options, we need to reset defaults + // or else we could get into a state where the user has changed the UI + // and then disabled the ability to change it back. + // e.g. If `filterable` has changed, set `filtered = defaultFiltered` + var resettableOptions = ['sortable', 'filterable', 'resizable']; + resettableOptions.forEach(function (x) { + if (oldState[x] !== newState[x]) { + var baseName = x.replace('able', ''); + var optionName = baseName + 'ed'; + var defaultName = 'default' + (optionName.charAt(0).toUpperCase() + optionName.slice(1)); + newState[optionName] = newState[defaultName]; + } + }); + + // Props that trigger a data update + if (oldState.data !== newState.data || oldState.columns !== newState.columns || oldState.pivotBy !== newState.pivotBy || oldState.sorted !== newState.sorted || oldState.filtered !== newState.filtered) { + this.setStateWithData(this.getDataModel(newState, oldState.data !== newState.data)); + } + } + }, { + key: 'calculateNewResolvedState', + value: function calculateNewResolvedState(dataModel) { + var oldState = this.getResolvedState(); + var newResolvedState = this.getResolvedState({}, dataModel); + var freezeWhenExpanded = newResolvedState.freezeWhenExpanded; + + // Default to unfrozen state + + newResolvedState.frozen = false; + + // If freezeWhenExpanded is set, check for frozen conditions + if (freezeWhenExpanded) { + // if any rows are expanded, freeze the existing data and sorting + var keys = Object.keys(newResolvedState.expanded); + for (var i = 0; i < keys.length; i += 1) { + if (newResolvedState.expanded[keys[i]]) { + newResolvedState.frozen = true; + break; + } + } + } + + // If the data isn't frozen and either the data or + // sorting model has changed, update the data + if (oldState.frozen && !newResolvedState.frozen || oldState.sorted !== newResolvedState.sorted || oldState.filtered !== newResolvedState.filtered || oldState.showFilters !== newResolvedState.showFilters || !newResolvedState.frozen && oldState.resolvedData !== newResolvedState.resolvedData) { + // Handle collapseOnsortedChange & collapseOnDataChange + if (oldState.sorted !== newResolvedState.sorted && this.props.collapseOnSortingChange || oldState.filtered !== newResolvedState.filtered || oldState.showFilters !== newResolvedState.showFilters || oldState.sortedData && !newResolvedState.frozen && oldState.resolvedData !== newResolvedState.resolvedData && this.props.collapseOnDataChange) { + newResolvedState.expanded = {}; + } + + Object.assign(newResolvedState, this.getSortedData(newResolvedState)); + } + + // Set page to 0 if filters change + if (oldState.filtered !== newResolvedState.filtered) { + newResolvedState.page = 0; + } + + // Calculate pageSize all the time + if (newResolvedState.sortedData) { + newResolvedState.pages = newResolvedState.manual ? newResolvedState.pages : Math.ceil(newResolvedState.sortedData.length / newResolvedState.pageSize); + newResolvedState.page = newResolvedState.manual ? newResolvedState.page : Math.max(newResolvedState.page >= newResolvedState.pages ? newResolvedState.pages - 1 : newResolvedState.page, 0); + } + + return newResolvedState; + } + }, { + key: 'setStateWithData', + value: function setStateWithData(dataModel, cb) { + var _this2 = this; + + var oldState = this.getResolvedState(); + var newResolvedState = this.calculateNewResolvedState(dataModel); + + return this.setState(newResolvedState, function () { + if (cb) { + cb(); + } + if (oldState.page !== newResolvedState.page || oldState.pageSize !== newResolvedState.pageSize || oldState.sorted !== newResolvedState.sorted || oldState.filtered !== newResolvedState.filtered) { + _this2.fireFetchData(); + } + }); + } + }]); + + return _class; + }(Base); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWZlY3ljbGUuanMiXSwibmFtZXMiOlsicHJvcHMiLCJkZWZhdWx0U3RhdGUiLCJwYWdlIiwiZGVmYXVsdFBhZ2UiLCJwYWdlU2l6ZSIsImRlZmF1bHRQYWdlU2l6ZSIsInNvcnRlZCIsImRlZmF1bHRTb3J0ZWQiLCJleHBhbmRlZCIsImRlZmF1bHRFeHBhbmRlZCIsImZpbHRlcmVkIiwiZGVmYXVsdEZpbHRlcmVkIiwicmVzaXplZCIsImRlZmF1bHRSZXNpemVkIiwiY3VycmVudGx5UmVzaXppbmciLCJza2lwTmV4dFNvcnQiLCJyZXNvbHZlZFN0YXRlIiwiZ2V0UmVzb2x2ZWRTdGF0ZSIsImRhdGFNb2RlbCIsImdldERhdGFNb2RlbCIsInN0YXRlIiwiY2FsY3VsYXRlTmV3UmVzb2x2ZWRTdGF0ZSIsImZpcmVGZXRjaERhdGEiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJvbGRTdGF0ZSIsIm5ld1N0YXRlIiwiZGVmYXVsdGFibGVPcHRpb25zIiwiZm9yRWFjaCIsImRlZmF1bHROYW1lIiwieCIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzZXR0YWJsZU9wdGlvbnMiLCJiYXNlTmFtZSIsInJlcGxhY2UiLCJvcHRpb25OYW1lIiwiZGF0YSIsImNvbHVtbnMiLCJwaXZvdEJ5Iiwic2V0U3RhdGVXaXRoRGF0YSIsIm5ld1Jlc29sdmVkU3RhdGUiLCJmcmVlemVXaGVuRXhwYW5kZWQiLCJmcm96ZW4iLCJrZXlzIiwiT2JqZWN0IiwiaSIsImxlbmd0aCIsInNob3dGaWx0ZXJzIiwicmVzb2x2ZWREYXRhIiwiY29sbGFwc2VPblNvcnRpbmdDaGFuZ2UiLCJzb3J0ZWREYXRhIiwiY29sbGFwc2VPbkRhdGFDaGFuZ2UiLCJhc3NpZ24iLCJnZXRTb3J0ZWREYXRhIiwicGFnZXMiLCJtYW51YWwiLCJNYXRoIiwiY2VpbCIsIm1heCIsImNiIiwic2V0U3RhdGUiLCJCYXNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLGdCQUFlO0FBQUE7QUFBQTs7QUFFWCxvQkFBYUEsS0FBYixFQUFvQjtBQUFBOztBQUFBLGtIQUNaQSxLQURZOztBQUdsQixVQUFNQyxlQUFlO0FBQ25CQyxjQUFNRixNQUFNRyxXQURPO0FBRW5CQyxrQkFBVUosTUFBTUssZUFGRztBQUduQkMsZ0JBQVFOLE1BQU1PLGFBSEs7QUFJbkJDLGtCQUFVUixNQUFNUyxlQUpHO0FBS25CQyxrQkFBVVYsTUFBTVcsZUFMRztBQU1uQkMsaUJBQVNaLE1BQU1hLGNBTkk7QUFPbkJDLDJCQUFtQixLQVBBO0FBUW5CQyxzQkFBYztBQVJLLE9BQXJCO0FBVUEsVUFBTUMsZ0JBQWdCLE1BQUtDLGdCQUFMLENBQXNCakIsS0FBdEIsRUFBNkJDLFlBQTdCLENBQXRCO0FBQ0EsVUFBTWlCLFlBQVksTUFBS0MsWUFBTCxDQUFrQkgsYUFBbEIsRUFBaUMsSUFBakMsQ0FBbEI7O0FBRUEsWUFBS0ksS0FBTCxHQUFhLE1BQUtDLHlCQUFMLENBQStCSCxTQUEvQixDQUFiO0FBaEJrQjtBQWlCbkI7O0FBbkJVO0FBQUE7QUFBQSwwQ0FxQlU7QUFDbkIsYUFBS0ksYUFBTDtBQUNEO0FBdkJVO0FBQUE7QUFBQSx5Q0F5QlNDLFNBekJULEVBeUJvQkMsU0F6QnBCLEVBeUIrQjtBQUN4QyxZQUFNQyxXQUFXLEtBQUtSLGdCQUFMLENBQXNCTSxTQUF0QixFQUFpQ0MsU0FBakMsQ0FBakI7QUFDQSxZQUFNRSxXQUFXLEtBQUtULGdCQUFMLENBQXNCLEtBQUtqQixLQUEzQixFQUFrQyxLQUFLb0IsS0FBdkMsQ0FBakI7O0FBRUE7QUFDQTtBQUNBLFlBQU1PLHFCQUFxQixDQUFDLFFBQUQsRUFBVyxVQUFYLEVBQXVCLFNBQXZCLEVBQWtDLFVBQWxDLENBQTNCO0FBQ0FBLDJCQUFtQkMsT0FBbkIsQ0FBMkIsYUFBSztBQUM5QixjQUFNQywyQkFBd0JDLEVBQUVDLE1BQUYsQ0FBUyxDQUFULEVBQVlDLFdBQVosS0FBNEJGLEVBQUVHLEtBQUYsQ0FBUSxDQUFSLENBQXBELENBQU47QUFDQSxjQUFJQyxLQUFLQyxTQUFMLENBQWVWLFNBQVNJLFdBQVQsQ0FBZixNQUEwQ0ssS0FBS0MsU0FBTCxDQUFlVCxTQUFTRyxXQUFULENBQWYsQ0FBOUMsRUFBcUY7QUFDbkZILHFCQUFTSSxDQUFULElBQWNKLFNBQVNHLFdBQVQsQ0FBZDtBQUNEO0FBQ0YsU0FMRDs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQU1PLG9CQUFvQixDQUFDLFVBQUQsRUFBYSxZQUFiLEVBQTJCLFdBQTNCLENBQTFCO0FBQ0FBLDBCQUFrQlIsT0FBbEIsQ0FBMEIsYUFBSztBQUM3QixjQUFJSCxTQUFTSyxDQUFULE1BQWdCSixTQUFTSSxDQUFULENBQXBCLEVBQWlDO0FBQy9CLGdCQUFNTyxXQUFXUCxFQUFFUSxPQUFGLENBQVUsTUFBVixFQUFrQixFQUFsQixDQUFqQjtBQUNBLGdCQUFNQyxhQUFnQkYsUUFBaEIsT0FBTjtBQUNBLGdCQUFNUiwyQkFBd0JVLFdBQVdSLE1BQVgsQ0FBa0IsQ0FBbEIsRUFBcUJDLFdBQXJCLEtBQXFDTyxXQUFXTixLQUFYLENBQWlCLENBQWpCLENBQTdELENBQU47QUFDQVAscUJBQVNhLFVBQVQsSUFBdUJiLFNBQVNHLFdBQVQsQ0FBdkI7QUFDRDtBQUNGLFNBUEQ7O0FBU0E7QUFDQSxZQUNFSixTQUFTZSxJQUFULEtBQWtCZCxTQUFTYyxJQUEzQixJQUNBZixTQUFTZ0IsT0FBVCxLQUFxQmYsU0FBU2UsT0FEOUIsSUFFQWhCLFNBQVNpQixPQUFULEtBQXFCaEIsU0FBU2dCLE9BRjlCLElBR0FqQixTQUFTbkIsTUFBVCxLQUFvQm9CLFNBQVNwQixNQUg3QixJQUlBbUIsU0FBU2YsUUFBVCxLQUFzQmdCLFNBQVNoQixRQUxqQyxFQU1FO0FBQ0EsZUFBS2lDLGdCQUFMLENBQXNCLEtBQUt4QixZQUFMLENBQWtCTyxRQUFsQixFQUE0QkQsU0FBU2UsSUFBVCxLQUFrQmQsU0FBU2MsSUFBdkQsQ0FBdEI7QUFDRDtBQUNGO0FBL0RVO0FBQUE7QUFBQSxnREFpRWdCdEIsU0FqRWhCLEVBaUUyQjtBQUNwQyxZQUFNTyxXQUFXLEtBQUtSLGdCQUFMLEVBQWpCO0FBQ0EsWUFBTTJCLG1CQUFtQixLQUFLM0IsZ0JBQUwsQ0FBc0IsRUFBdEIsRUFBMEJDLFNBQTFCLENBQXpCO0FBRm9DLFlBRzVCMkIsa0JBSDRCLEdBR0xELGdCQUhLLENBRzVCQyxrQkFINEI7O0FBS3BDOztBQUNBRCx5QkFBaUJFLE1BQWpCLEdBQTBCLEtBQTFCOztBQUVBO0FBQ0EsWUFBSUQsa0JBQUosRUFBd0I7QUFDdEI7QUFDQSxjQUFNRSxPQUFPQyxPQUFPRCxJQUFQLENBQVlILGlCQUFpQnBDLFFBQTdCLENBQWI7QUFDQSxlQUFLLElBQUl5QyxJQUFJLENBQWIsRUFBZ0JBLElBQUlGLEtBQUtHLE1BQXpCLEVBQWlDRCxLQUFLLENBQXRDLEVBQXlDO0FBQ3ZDLGdCQUFJTCxpQkFBaUJwQyxRQUFqQixDQUEwQnVDLEtBQUtFLENBQUwsQ0FBMUIsQ0FBSixFQUF3QztBQUN0Q0wsK0JBQWlCRSxNQUFqQixHQUEwQixJQUExQjtBQUNBO0FBQ0Q7QUFDRjtBQUNGOztBQUVEO0FBQ0E7QUFDQSxZQUNHckIsU0FBU3FCLE1BQVQsSUFBbUIsQ0FBQ0YsaUJBQWlCRSxNQUF0QyxJQUNBckIsU0FBU25CLE1BQVQsS0FBb0JzQyxpQkFBaUJ0QyxNQURyQyxJQUVBbUIsU0FBU2YsUUFBVCxLQUFzQmtDLGlCQUFpQmxDLFFBRnZDLElBR0FlLFNBQVMwQixXQUFULEtBQXlCUCxpQkFBaUJPLFdBSDFDLElBSUMsQ0FBQ1AsaUJBQWlCRSxNQUFsQixJQUE0QnJCLFNBQVMyQixZQUFULEtBQTBCUixpQkFBaUJRLFlBTDFFLEVBTUU7QUFDQTtBQUNBLGNBQ0czQixTQUFTbkIsTUFBVCxLQUFvQnNDLGlCQUFpQnRDLE1BQXJDLElBQStDLEtBQUtOLEtBQUwsQ0FBV3FELHVCQUEzRCxJQUNBNUIsU0FBU2YsUUFBVCxLQUFzQmtDLGlCQUFpQmxDLFFBRHZDLElBRUFlLFNBQVMwQixXQUFULEtBQXlCUCxpQkFBaUJPLFdBRjFDLElBR0MxQixTQUFTNkIsVUFBVCxJQUNDLENBQUNWLGlCQUFpQkUsTUFEbkIsSUFFQ3JCLFNBQVMyQixZQUFULEtBQTBCUixpQkFBaUJRLFlBRjVDLElBR0MsS0FBS3BELEtBQUwsQ0FBV3VELG9CQVBmLEVBUUU7QUFDQVgsNkJBQWlCcEMsUUFBakIsR0FBNEIsRUFBNUI7QUFDRDs7QUFFRHdDLGlCQUFPUSxNQUFQLENBQWNaLGdCQUFkLEVBQWdDLEtBQUthLGFBQUwsQ0FBbUJiLGdCQUFuQixDQUFoQztBQUNEOztBQUVEO0FBQ0EsWUFBSW5CLFNBQVNmLFFBQVQsS0FBc0JrQyxpQkFBaUJsQyxRQUEzQyxFQUFxRDtBQUNuRGtDLDJCQUFpQjFDLElBQWpCLEdBQXdCLENBQXhCO0FBQ0Q7O0FBRUQ7QUFDQSxZQUFJMEMsaUJBQWlCVSxVQUFyQixFQUFpQztBQUMvQlYsMkJBQWlCYyxLQUFqQixHQUF5QmQsaUJBQWlCZSxNQUFqQixHQUNyQmYsaUJBQWlCYyxLQURJLEdBRXJCRSxLQUFLQyxJQUFMLENBQVVqQixpQkFBaUJVLFVBQWpCLENBQTRCSixNQUE1QixHQUFxQ04saUJBQWlCeEMsUUFBaEUsQ0FGSjtBQUdBd0MsMkJBQWlCMUMsSUFBakIsR0FBd0IwQyxpQkFBaUJlLE1BQWpCLEdBQTBCZixpQkFBaUIxQyxJQUEzQyxHQUFrRDBELEtBQUtFLEdBQUwsQ0FDeEVsQixpQkFBaUIxQyxJQUFqQixJQUF5QjBDLGlCQUFpQmMsS0FBMUMsR0FDSWQsaUJBQWlCYyxLQUFqQixHQUF5QixDQUQ3QixHQUVJZCxpQkFBaUIxQyxJQUhtRCxFQUl4RSxDQUp3RSxDQUExRTtBQU1EOztBQUVELGVBQU8wQyxnQkFBUDtBQUNEO0FBaklVO0FBQUE7QUFBQSx1Q0FtSU8xQixTQW5JUCxFQW1Ja0I2QyxFQW5JbEIsRUFtSXNCO0FBQUE7O0FBQy9CLFlBQU10QyxXQUFXLEtBQUtSLGdCQUFMLEVBQWpCO0FBQ0EsWUFBTTJCLG1CQUFtQixLQUFLdkIseUJBQUwsQ0FBK0JILFNBQS9CLENBQXpCOztBQUVBLGVBQU8sS0FBSzhDLFFBQUwsQ0FBY3BCLGdCQUFkLEVBQWdDLFlBQU07QUFDM0MsY0FBSW1CLEVBQUosRUFBUTtBQUNOQTtBQUNEO0FBQ0QsY0FDRXRDLFNBQVN2QixJQUFULEtBQWtCMEMsaUJBQWlCMUMsSUFBbkMsSUFDQXVCLFNBQVNyQixRQUFULEtBQXNCd0MsaUJBQWlCeEMsUUFEdkMsSUFFQXFCLFNBQVNuQixNQUFULEtBQW9Cc0MsaUJBQWlCdEMsTUFGckMsSUFHQW1CLFNBQVNmLFFBQVQsS0FBc0JrQyxpQkFBaUJsQyxRQUp6QyxFQUtFO0FBQ0EsbUJBQUtZLGFBQUw7QUFDRDtBQUNGLFNBWk0sQ0FBUDtBQWFEO0FBcEpVOztBQUFBO0FBQUEsSUFDQzJDLElBREQ7QUFBQSxDQUFmIiwiZmlsZSI6ImxpZmVjeWNsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IEJhc2UgPT5cbiAgY2xhc3MgZXh0ZW5kcyBCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKVxuXG4gICAgICBjb25zdCBkZWZhdWx0U3RhdGUgPSB7XG4gICAgICAgIHBhZ2U6IHByb3BzLmRlZmF1bHRQYWdlLFxuICAgICAgICBwYWdlU2l6ZTogcHJvcHMuZGVmYXVsdFBhZ2VTaXplLFxuICAgICAgICBzb3J0ZWQ6IHByb3BzLmRlZmF1bHRTb3J0ZWQsXG4gICAgICAgIGV4cGFuZGVkOiBwcm9wcy5kZWZhdWx0RXhwYW5kZWQsXG4gICAgICAgIGZpbHRlcmVkOiBwcm9wcy5kZWZhdWx0RmlsdGVyZWQsXG4gICAgICAgIHJlc2l6ZWQ6IHByb3BzLmRlZmF1bHRSZXNpemVkLFxuICAgICAgICBjdXJyZW50bHlSZXNpemluZzogZmFsc2UsXG4gICAgICAgIHNraXBOZXh0U29ydDogZmFsc2UsXG4gICAgICB9XG4gICAgICBjb25zdCByZXNvbHZlZFN0YXRlID0gdGhpcy5nZXRSZXNvbHZlZFN0YXRlKHByb3BzLCBkZWZhdWx0U3RhdGUpXG4gICAgICBjb25zdCBkYXRhTW9kZWwgPSB0aGlzLmdldERhdGFNb2RlbChyZXNvbHZlZFN0YXRlLCB0cnVlKVxuXG4gICAgICB0aGlzLnN0YXRlID0gdGhpcy5jYWxjdWxhdGVOZXdSZXNvbHZlZFN0YXRlKGRhdGFNb2RlbClcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgICB0aGlzLmZpcmVGZXRjaERhdGEoKVxuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSAocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGNvbnN0IG9sZFN0YXRlID0gdGhpcy5nZXRSZXNvbHZlZFN0YXRlKHByZXZQcm9wcywgcHJldlN0YXRlKVxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLmdldFJlc29sdmVkU3RhdGUodGhpcy5wcm9wcywgdGhpcy5zdGF0ZSlcblxuICAgICAgLy8gRG8gYSBkZWVwIGNvbXBhcmUgb2YgbmV3IGFuZCBvbGQgYGRlZmF1bHRPcHRpb25gIGFuZFxuICAgICAgLy8gaWYgdGhleSBhcmUgZGlmZmVyZW50IHJlc2V0IGBvcHRpb24gPSBkZWZhdWx0T3B0aW9uYFxuICAgICAgY29uc3QgZGVmYXVsdGFibGVPcHRpb25zID0gWydzb3J0ZWQnLCAnZmlsdGVyZWQnLCAncmVzaXplZCcsICdleHBhbmRlZCddXG4gICAgICBkZWZhdWx0YWJsZU9wdGlvbnMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgY29uc3QgZGVmYXVsdE5hbWUgPSBgZGVmYXVsdCR7eC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHguc2xpY2UoMSl9YFxuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2xkU3RhdGVbZGVmYXVsdE5hbWVdKSAhPT0gSlNPTi5zdHJpbmdpZnkobmV3U3RhdGVbZGVmYXVsdE5hbWVdKSkge1xuICAgICAgICAgIG5ld1N0YXRlW3hdID0gbmV3U3RhdGVbZGVmYXVsdE5hbWVdXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIElmIHRoZXkgY2hhbmdlIHRoZXNlIHRhYmxlIG9wdGlvbnMsIHdlIG5lZWQgdG8gcmVzZXQgZGVmYXVsdHNcbiAgICAgIC8vIG9yIGVsc2Ugd2UgY291bGQgZ2V0IGludG8gYSBzdGF0ZSB3aGVyZSB0aGUgdXNlciBoYXMgY2hhbmdlZCB0aGUgVUlcbiAgICAgIC8vIGFuZCB0aGVuIGRpc2FibGVkIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSBpdCBiYWNrLlxuICAgICAgLy8gZS5nLiBJZiBgZmlsdGVyYWJsZWAgaGFzIGNoYW5nZWQsIHNldCBgZmlsdGVyZWQgPSBkZWZhdWx0RmlsdGVyZWRgXG4gICAgICBjb25zdCByZXNldHRhYmxlT3B0aW9ucyA9IFsnc29ydGFibGUnLCAnZmlsdGVyYWJsZScsICdyZXNpemFibGUnXVxuICAgICAgcmVzZXR0YWJsZU9wdGlvbnMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgaWYgKG9sZFN0YXRlW3hdICE9PSBuZXdTdGF0ZVt4XSkge1xuICAgICAgICAgIGNvbnN0IGJhc2VOYW1lID0geC5yZXBsYWNlKCdhYmxlJywgJycpXG4gICAgICAgICAgY29uc3Qgb3B0aW9uTmFtZSA9IGAke2Jhc2VOYW1lfWVkYFxuICAgICAgICAgIGNvbnN0IGRlZmF1bHROYW1lID0gYGRlZmF1bHQke29wdGlvbk5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBvcHRpb25OYW1lLnNsaWNlKDEpfWBcbiAgICAgICAgICBuZXdTdGF0ZVtvcHRpb25OYW1lXSA9IG5ld1N0YXRlW2RlZmF1bHROYW1lXVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBQcm9wcyB0aGF0IHRyaWdnZXIgYSBkYXRhIHVwZGF0ZVxuICAgICAgaWYgKFxuICAgICAgICBvbGRTdGF0ZS5kYXRhICE9PSBuZXdTdGF0ZS5kYXRhIHx8XG4gICAgICAgIG9sZFN0YXRlLmNvbHVtbnMgIT09IG5ld1N0YXRlLmNvbHVtbnMgfHxcbiAgICAgICAgb2xkU3RhdGUucGl2b3RCeSAhPT0gbmV3U3RhdGUucGl2b3RCeSB8fFxuICAgICAgICBvbGRTdGF0ZS5zb3J0ZWQgIT09IG5ld1N0YXRlLnNvcnRlZCB8fFxuICAgICAgICBvbGRTdGF0ZS5maWx0ZXJlZCAhPT0gbmV3U3RhdGUuZmlsdGVyZWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNldFN0YXRlV2l0aERhdGEodGhpcy5nZXREYXRhTW9kZWwobmV3U3RhdGUsIG9sZFN0YXRlLmRhdGEgIT09IG5ld1N0YXRlLmRhdGEpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZU5ld1Jlc29sdmVkU3RhdGUgKGRhdGFNb2RlbCkge1xuICAgICAgY29uc3Qgb2xkU3RhdGUgPSB0aGlzLmdldFJlc29sdmVkU3RhdGUoKVxuICAgICAgY29uc3QgbmV3UmVzb2x2ZWRTdGF0ZSA9IHRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZSh7fSwgZGF0YU1vZGVsKVxuICAgICAgY29uc3QgeyBmcmVlemVXaGVuRXhwYW5kZWQgfSA9IG5ld1Jlc29sdmVkU3RhdGVcblxuICAgICAgLy8gRGVmYXVsdCB0byB1bmZyb3plbiBzdGF0ZVxuICAgICAgbmV3UmVzb2x2ZWRTdGF0ZS5mcm96ZW4gPSBmYWxzZVxuXG4gICAgICAvLyBJZiBmcmVlemVXaGVuRXhwYW5kZWQgaXMgc2V0LCBjaGVjayBmb3IgZnJvemVuIGNvbmRpdGlvbnNcbiAgICAgIGlmIChmcmVlemVXaGVuRXhwYW5kZWQpIHtcbiAgICAgICAgLy8gaWYgYW55IHJvd3MgYXJlIGV4cGFuZGVkLCBmcmVlemUgdGhlIGV4aXN0aW5nIGRhdGEgYW5kIHNvcnRpbmdcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5ld1Jlc29sdmVkU3RhdGUuZXhwYW5kZWQpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChuZXdSZXNvbHZlZFN0YXRlLmV4cGFuZGVkW2tleXNbaV1dKSB7XG4gICAgICAgICAgICBuZXdSZXNvbHZlZFN0YXRlLmZyb3plbiA9IHRydWVcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBkYXRhIGlzbid0IGZyb3plbiBhbmQgZWl0aGVyIHRoZSBkYXRhIG9yXG4gICAgICAvLyBzb3J0aW5nIG1vZGVsIGhhcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIGRhdGFcbiAgICAgIGlmIChcbiAgICAgICAgKG9sZFN0YXRlLmZyb3plbiAmJiAhbmV3UmVzb2x2ZWRTdGF0ZS5mcm96ZW4pIHx8XG4gICAgICAgIG9sZFN0YXRlLnNvcnRlZCAhPT0gbmV3UmVzb2x2ZWRTdGF0ZS5zb3J0ZWQgfHxcbiAgICAgICAgb2xkU3RhdGUuZmlsdGVyZWQgIT09IG5ld1Jlc29sdmVkU3RhdGUuZmlsdGVyZWQgfHxcbiAgICAgICAgb2xkU3RhdGUuc2hvd0ZpbHRlcnMgIT09IG5ld1Jlc29sdmVkU3RhdGUuc2hvd0ZpbHRlcnMgfHxcbiAgICAgICAgKCFuZXdSZXNvbHZlZFN0YXRlLmZyb3plbiAmJiBvbGRTdGF0ZS5yZXNvbHZlZERhdGEgIT09IG5ld1Jlc29sdmVkU3RhdGUucmVzb2x2ZWREYXRhKVxuICAgICAgKSB7XG4gICAgICAgIC8vIEhhbmRsZSBjb2xsYXBzZU9uc29ydGVkQ2hhbmdlICYgY29sbGFwc2VPbkRhdGFDaGFuZ2VcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChvbGRTdGF0ZS5zb3J0ZWQgIT09IG5ld1Jlc29sdmVkU3RhdGUuc29ydGVkICYmIHRoaXMucHJvcHMuY29sbGFwc2VPblNvcnRpbmdDaGFuZ2UpIHx8XG4gICAgICAgICAgb2xkU3RhdGUuZmlsdGVyZWQgIT09IG5ld1Jlc29sdmVkU3RhdGUuZmlsdGVyZWQgfHxcbiAgICAgICAgICBvbGRTdGF0ZS5zaG93RmlsdGVycyAhPT0gbmV3UmVzb2x2ZWRTdGF0ZS5zaG93RmlsdGVycyB8fFxuICAgICAgICAgIChvbGRTdGF0ZS5zb3J0ZWREYXRhICYmXG4gICAgICAgICAgICAhbmV3UmVzb2x2ZWRTdGF0ZS5mcm96ZW4gJiZcbiAgICAgICAgICAgIG9sZFN0YXRlLnJlc29sdmVkRGF0YSAhPT0gbmV3UmVzb2x2ZWRTdGF0ZS5yZXNvbHZlZERhdGEgJiZcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY29sbGFwc2VPbkRhdGFDaGFuZ2UpXG4gICAgICAgICkge1xuICAgICAgICAgIG5ld1Jlc29sdmVkU3RhdGUuZXhwYW5kZWQgPSB7fVxuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdSZXNvbHZlZFN0YXRlLCB0aGlzLmdldFNvcnRlZERhdGEobmV3UmVzb2x2ZWRTdGF0ZSkpXG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBwYWdlIHRvIDAgaWYgZmlsdGVycyBjaGFuZ2VcbiAgICAgIGlmIChvbGRTdGF0ZS5maWx0ZXJlZCAhPT0gbmV3UmVzb2x2ZWRTdGF0ZS5maWx0ZXJlZCkge1xuICAgICAgICBuZXdSZXNvbHZlZFN0YXRlLnBhZ2UgPSAwXG4gICAgICB9XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBwYWdlU2l6ZSBhbGwgdGhlIHRpbWVcbiAgICAgIGlmIChuZXdSZXNvbHZlZFN0YXRlLnNvcnRlZERhdGEpIHtcbiAgICAgICAgbmV3UmVzb2x2ZWRTdGF0ZS5wYWdlcyA9IG5ld1Jlc29sdmVkU3RhdGUubWFudWFsXG4gICAgICAgICAgPyBuZXdSZXNvbHZlZFN0YXRlLnBhZ2VzXG4gICAgICAgICAgOiBNYXRoLmNlaWwobmV3UmVzb2x2ZWRTdGF0ZS5zb3J0ZWREYXRhLmxlbmd0aCAvIG5ld1Jlc29sdmVkU3RhdGUucGFnZVNpemUpXG4gICAgICAgIG5ld1Jlc29sdmVkU3RhdGUucGFnZSA9IG5ld1Jlc29sdmVkU3RhdGUubWFudWFsID8gbmV3UmVzb2x2ZWRTdGF0ZS5wYWdlIDogTWF0aC5tYXgoXG4gICAgICAgICAgbmV3UmVzb2x2ZWRTdGF0ZS5wYWdlID49IG5ld1Jlc29sdmVkU3RhdGUucGFnZXNcbiAgICAgICAgICAgID8gbmV3UmVzb2x2ZWRTdGF0ZS5wYWdlcyAtIDFcbiAgICAgICAgICAgIDogbmV3UmVzb2x2ZWRTdGF0ZS5wYWdlLFxuICAgICAgICAgIDBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3UmVzb2x2ZWRTdGF0ZVxuICAgIH1cblxuICAgIHNldFN0YXRlV2l0aERhdGEgKGRhdGFNb2RlbCwgY2IpIHtcbiAgICAgIGNvbnN0IG9sZFN0YXRlID0gdGhpcy5nZXRSZXNvbHZlZFN0YXRlKClcbiAgICAgIGNvbnN0IG5ld1Jlc29sdmVkU3RhdGUgPSB0aGlzLmNhbGN1bGF0ZU5ld1Jlc29sdmVkU3RhdGUoZGF0YU1vZGVsKVxuXG4gICAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZShuZXdSZXNvbHZlZFN0YXRlLCAoKSA9PiB7XG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgIGNiKClcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgb2xkU3RhdGUucGFnZSAhPT0gbmV3UmVzb2x2ZWRTdGF0ZS5wYWdlIHx8XG4gICAgICAgICAgb2xkU3RhdGUucGFnZVNpemUgIT09IG5ld1Jlc29sdmVkU3RhdGUucGFnZVNpemUgfHxcbiAgICAgICAgICBvbGRTdGF0ZS5zb3J0ZWQgIT09IG5ld1Jlc29sdmVkU3RhdGUuc29ydGVkIHx8XG4gICAgICAgICAgb2xkU3RhdGUuZmlsdGVyZWQgIT09IG5ld1Jlc29sdmVkU3RhdGUuZmlsdGVyZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5maXJlRmV0Y2hEYXRhKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiJdfQ== \ No newline at end of file diff --git a/es/methods.js b/es/methods.js new file mode 100644 index 0000000000..4bd0a3bf79 --- /dev/null +++ b/es/methods.js @@ -0,0 +1,749 @@ +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +import React from 'react'; +import _ from './utils'; + +export default (function (Base) { + return function (_Base) { + _inherits(_class, _Base); + + function _class() { + _classCallCheck(this, _class); + + return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments)); + } + + _createClass(_class, [{ + key: 'getResolvedState', + value: function getResolvedState(props, state) { + var resolvedState = _extends({}, _.compactObject(this.state), _.compactObject(this.props), _.compactObject(state), _.compactObject(props)); + return resolvedState; + } + }, { + key: 'getDataModel', + value: function getDataModel(newState, dataChanged) { + var _this2 = this; + + var columns = newState.columns, + _newState$pivotBy = newState.pivotBy, + pivotBy = _newState$pivotBy === undefined ? [] : _newState$pivotBy, + data = newState.data, + resolveData = newState.resolveData, + pivotIDKey = newState.pivotIDKey, + pivotValKey = newState.pivotValKey, + subRowsKey = newState.subRowsKey, + aggregatedKey = newState.aggregatedKey, + nestingLevelKey = newState.nestingLevelKey, + originalKey = newState.originalKey, + indexKey = newState.indexKey, + groupedByPivotKey = newState.groupedByPivotKey, + SubComponent = newState.SubComponent; + + // Determine Header Groups + + var hasHeaderGroups = false; + columns.forEach(function (column) { + if (column.columns) { + hasHeaderGroups = true; + } + }); + + var columnsWithExpander = [].concat(_toConsumableArray(columns)); + + var expanderColumn = columns.find(function (col) { + return col.expander || col.columns && col.columns.some(function (col2) { + return col2.expander; + }); + }); + // The actual expander might be in the columns field of a group column + if (expanderColumn && !expanderColumn.expander) { + expanderColumn = expanderColumn.columns.find(function (col) { + return col.expander; + }); + } + + // If we have SubComponent's we need to make sure we have an expander column + if (SubComponent && !expanderColumn) { + expanderColumn = { expander: true }; + columnsWithExpander = [expanderColumn].concat(_toConsumableArray(columnsWithExpander)); + } + + var makeDecoratedColumn = function makeDecoratedColumn(column, parentColumn) { + var dcol = void 0; + if (column.expander) { + dcol = _extends({}, _this2.props.column, _this2.props.expanderDefaults, column); + } else { + dcol = _extends({}, _this2.props.column, column); + } + + // Ensure minWidth is not greater than maxWidth if set + if (dcol.maxWidth < dcol.minWidth) { + dcol.minWidth = dcol.maxWidth; + } + + if (parentColumn) { + dcol.parentColumn = parentColumn; + } + + // First check for string accessor + if (typeof dcol.accessor === 'string') { + dcol.id = dcol.id || dcol.accessor; + var accessorString = dcol.accessor; + dcol.accessor = function (row) { + return _.get(row, accessorString); + }; + return dcol; + } + + // Fall back to functional accessor (but require an ID) + if (dcol.accessor && !dcol.id) { + console.warn(dcol); + throw new Error('A column id is required if using a non-string accessor for column above.'); + } + + // Fall back to an undefined accessor + if (!dcol.accessor) { + dcol.accessor = function () { + return undefined; + }; + } + + return dcol; + }; + + var allDecoratedColumns = []; + + // Decorate the columns + var decorateAndAddToAll = function decorateAndAddToAll(column, parentColumn) { + var decoratedColumn = makeDecoratedColumn(column, parentColumn); + allDecoratedColumns.push(decoratedColumn); + return decoratedColumn; + }; + + var decoratedColumns = columnsWithExpander.map(function (column) { + if (column.columns) { + return _extends({}, column, { + columns: column.columns.map(function (d) { + return decorateAndAddToAll(d, column); + }) + }); + } + return decorateAndAddToAll(column); + }); + + // Build the visible columns, headers and flat column list + var visibleColumns = decoratedColumns.slice(); + var allVisibleColumns = []; + + visibleColumns = visibleColumns.map(function (column) { + if (column.columns) { + var visibleSubColumns = column.columns.filter(function (d) { + return pivotBy.indexOf(d.id) > -1 ? false : _.getFirstDefined(d.show, true); + }); + return _extends({}, column, { + columns: visibleSubColumns + }); + } + return column; + }); + + visibleColumns = visibleColumns.filter(function (column) { + return column.columns ? column.columns.length : pivotBy.indexOf(column.id) > -1 ? false : _.getFirstDefined(column.show, true); + }); + + // Find any custom pivot location + var pivotIndex = visibleColumns.findIndex(function (col) { + return col.pivot; + }); + + // Handle Pivot Columns + if (pivotBy.length) { + // Retrieve the pivot columns in the correct pivot order + var pivotColumns = []; + pivotBy.forEach(function (pivotID) { + var found = allDecoratedColumns.find(function (d) { + return d.id === pivotID; + }); + if (found) { + pivotColumns.push(found); + } + }); + + var PivotParentColumn = pivotColumns.reduce(function (prev, current) { + return prev && prev === current.parentColumn && current.parentColumn; + }, pivotColumns[0].parentColumn); + + var PivotGroupHeader = hasHeaderGroups && PivotParentColumn.Header; + PivotGroupHeader = PivotGroupHeader || function () { + return React.createElement( + 'strong', + null, + 'Pivoted' + ); + }; + + var pivotColumnGroup = { + Header: PivotGroupHeader, + columns: pivotColumns.map(function (col) { + return _extends({}, _this2.props.pivotDefaults, col, { + pivoted: true + }); + }) + + // Place the pivotColumns back into the visibleColumns + };if (pivotIndex >= 0) { + pivotColumnGroup = _extends({}, visibleColumns[pivotIndex], pivotColumnGroup); + visibleColumns.splice(pivotIndex, 1, pivotColumnGroup); + } else { + visibleColumns.unshift(pivotColumnGroup); + } + } + + // Build Header Groups + var headerGroups = []; + var currentSpan = []; + + // A convenience function to add a header and reset the currentSpan + var addHeader = function addHeader(columns, column) { + headerGroups.push(_extends({}, _this2.props.column, column, { + columns: columns + })); + currentSpan = []; + }; + + // Build flast list of allVisibleColumns and HeaderGroups + visibleColumns.forEach(function (column) { + if (column.columns) { + allVisibleColumns = allVisibleColumns.concat(column.columns); + if (currentSpan.length > 0) { + addHeader(currentSpan); + } + addHeader(column.columns, column); + return; + } + allVisibleColumns.push(column); + currentSpan.push(column); + }); + if (hasHeaderGroups && currentSpan.length > 0) { + addHeader(currentSpan); + } + + // Access the data + var accessRow = function accessRow(d, i) { + var _row; + + var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + var row = (_row = {}, _defineProperty(_row, originalKey, d), _defineProperty(_row, indexKey, i), _defineProperty(_row, subRowsKey, d[subRowsKey]), _defineProperty(_row, nestingLevelKey, level), _row); + allDecoratedColumns.forEach(function (column) { + if (column.expander) return; + row[column.id] = column.accessor(d); + }); + if (row[subRowsKey]) { + row[subRowsKey] = row[subRowsKey].map(function (d, i) { + return accessRow(d, i, level + 1); + }); + } + return row; + }; + + // // If the data hasn't changed, just use the cached data + var resolvedData = this.resolvedData; + // If the data has changed, run the data resolver and cache the result + if (!this.resolvedData || dataChanged) { + resolvedData = resolveData(data); + this.resolvedData = resolvedData; + } + // Use the resolved data + resolvedData = resolvedData.map(function (d, i) { + return accessRow(d, i); + }); + + // TODO: Make it possible to fabricate nested rows without pivoting + var aggregatingColumns = allVisibleColumns.filter(function (d) { + return !d.expander && d.aggregate; + }); + + // If pivoting, recursively group the data + var aggregate = function aggregate(rows) { + var aggregationValues = {}; + aggregatingColumns.forEach(function (column) { + var values = rows.map(function (d) { + return d[column.id]; + }); + aggregationValues[column.id] = column.aggregate(values, rows); + }); + return aggregationValues; + }; + if (pivotBy.length) { + var groupRecursively = function groupRecursively(rows, keys) { + var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + // This is the last level, just return the rows + if (i === keys.length) { + return rows; + } + // Group the rows together for this level + var groupedRows = Object.entries(_.groupBy(rows, keys[i])).map(function (_ref) { + var _ref3; + + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + + return _ref3 = {}, _defineProperty(_ref3, pivotIDKey, keys[i]), _defineProperty(_ref3, pivotValKey, key), _defineProperty(_ref3, keys[i], key), _defineProperty(_ref3, subRowsKey, value), _defineProperty(_ref3, nestingLevelKey, i), _defineProperty(_ref3, groupedByPivotKey, true), _ref3; + }); + // Recurse into the subRows + groupedRows = groupedRows.map(function (rowGroup) { + var _extends2; + + var subRows = groupRecursively(rowGroup[subRowsKey], keys, i + 1); + return _extends({}, rowGroup, (_extends2 = {}, _defineProperty(_extends2, subRowsKey, subRows), _defineProperty(_extends2, aggregatedKey, true), _extends2), aggregate(subRows)); + }); + return groupedRows; + }; + resolvedData = groupRecursively(resolvedData, pivotBy); + } + + return _extends({}, newState, { + resolvedData: resolvedData, + allVisibleColumns: allVisibleColumns, + headerGroups: headerGroups, + allDecoratedColumns: allDecoratedColumns, + hasHeaderGroups: hasHeaderGroups + }); + } + }, { + key: 'getSortedData', + value: function getSortedData(resolvedState) { + var manual = resolvedState.manual, + sorted = resolvedState.sorted, + filtered = resolvedState.filtered, + defaultFilterMethod = resolvedState.defaultFilterMethod, + resolvedData = resolvedState.resolvedData, + allDecoratedColumns = resolvedState.allDecoratedColumns; + + + var sortMethodsByColumnID = {}; + + allDecoratedColumns.filter(function (col) { + return col.sortMethod; + }).forEach(function (col) { + sortMethodsByColumnID[col.id] = col.sortMethod; + }); + + // Resolve the data from either manual data or sorted data + return { + sortedData: manual ? resolvedData : this.sortData(this.filterData(resolvedData, filtered, defaultFilterMethod, allDecoratedColumns), sorted, sortMethodsByColumnID) + }; + } + }, { + key: 'fireFetchData', + value: function fireFetchData() { + // determine the current state, preferring certain state values over props + var currentState = _extends({}, this.getResolvedState(), { + page: this.getStateOrProp('page'), + pageSize: this.getStateOrProp('pageSize'), + filtered: this.getStateOrProp('filtered') + }); + + this.props.onFetchData(currentState, this); + } + }, { + key: 'getPropOrState', + value: function getPropOrState(key) { + return _.getFirstDefined(this.props[key], this.state[key]); + } + }, { + key: 'getStateOrProp', + value: function getStateOrProp(key) { + return _.getFirstDefined(this.state[key], this.props[key]); + } + }, { + key: 'filterData', + value: function filterData(data, filtered, defaultFilterMethod, allVisibleColumns) { + var _this3 = this; + + var filteredData = data; + + if (filtered.length) { + filteredData = filtered.reduce(function (filteredSoFar, nextFilter) { + var column = allVisibleColumns.find(function (x) { + return x.id === nextFilter.id; + }); + + // Don't filter hidden columns or columns that have had their filters disabled + if (!column || column.filterable === false) { + return filteredSoFar; + } + + var filterMethod = column.filterMethod || defaultFilterMethod; + + // If 'filterAll' is set to true, pass the entire dataset to the filter method + if (column.filterAll) { + return filterMethod(nextFilter, filteredSoFar, column); + } + return filteredSoFar.filter(function (row) { + return filterMethod(nextFilter, row, column); + }); + }, filteredData); + + // Apply the filter to the subrows if we are pivoting, and then + // filter any rows without subcolumns because it would be strange to show + filteredData = filteredData.map(function (row) { + if (!row[_this3.props.subRowsKey]) { + return row; + } + return _extends({}, row, _defineProperty({}, _this3.props.subRowsKey, _this3.filterData(row[_this3.props.subRowsKey], filtered, defaultFilterMethod, allVisibleColumns))); + }).filter(function (row) { + if (!row[_this3.props.subRowsKey]) { + return true; + } + return row[_this3.props.subRowsKey].length > 0; + }); + } + + return filteredData; + } + }, { + key: 'sortData', + value: function sortData(data, sorted) { + var _this4 = this; + + var sortMethodsByColumnID = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (!sorted.length) { + return data; + } + + var sortedData = (this.props.orderByMethod || _.orderBy)(data, sorted.map(function (sort) { + // Support custom sorting methods for each column + if (sortMethodsByColumnID[sort.id]) { + return function (a, b) { + return sortMethodsByColumnID[sort.id](a[sort.id], b[sort.id], sort.desc); + }; + } + return function (a, b) { + return _this4.props.defaultSortMethod(a[sort.id], b[sort.id], sort.desc); + }; + }), sorted.map(function (d) { + return !d.desc; + }), this.props.indexKey); + + sortedData.forEach(function (row) { + if (!row[_this4.props.subRowsKey]) { + return; + } + row[_this4.props.subRowsKey] = _this4.sortData(row[_this4.props.subRowsKey], sorted, sortMethodsByColumnID); + }); + + return sortedData; + } + }, { + key: 'getMinRows', + value: function getMinRows() { + return _.getFirstDefined(this.props.minRows, this.getStateOrProp('pageSize')); + } + + // User actions + + }, { + key: 'onPageChange', + value: function onPageChange(page) { + var _props = this.props, + onPageChange = _props.onPageChange, + collapseOnPageChange = _props.collapseOnPageChange; + + + var newState = { page: page }; + if (collapseOnPageChange) { + newState.expanded = {}; + } + this.setStateWithData(newState, function () { + return onPageChange && onPageChange(page); + }); + } + }, { + key: 'onPageSizeChange', + value: function onPageSizeChange(newPageSize) { + var onPageSizeChange = this.props.onPageSizeChange; + + var _getResolvedState = this.getResolvedState(), + pageSize = _getResolvedState.pageSize, + page = _getResolvedState.page; + + // Normalize the page to display + + + var currentRow = pageSize * page; + var newPage = Math.floor(currentRow / newPageSize); + + this.setStateWithData({ + pageSize: newPageSize, + page: newPage + }, function () { + return onPageSizeChange && onPageSizeChange(newPageSize, newPage); + }); + } + }, { + key: 'sortColumn', + value: function sortColumn(column, additive) { + var _getResolvedState2 = this.getResolvedState(), + sorted = _getResolvedState2.sorted, + skipNextSort = _getResolvedState2.skipNextSort, + defaultSortDesc = _getResolvedState2.defaultSortDesc; + + var firstSortDirection = Object.prototype.hasOwnProperty.call(column, 'defaultSortDesc') ? column.defaultSortDesc : defaultSortDesc; + var secondSortDirection = !firstSortDirection; + + // we can't stop event propagation from the column resize move handlers + // attached to the document because of react's synthetic events + // so we have to prevent the sort function from actually sorting + // if we click on the column resize element within a header. + if (skipNextSort) { + this.setStateWithData({ + skipNextSort: false + }); + return; + } + + var onSortedChange = this.props.onSortedChange; + + + var newSorted = _.clone(sorted || []).map(function (d) { + d.desc = _.isSortingDesc(d); + return d; + }); + if (!_.isArray(column)) { + // Single-Sort + var existingIndex = newSorted.findIndex(function (d) { + return d.id === column.id; + }); + if (existingIndex > -1) { + var existing = newSorted[existingIndex]; + if (existing.desc === secondSortDirection) { + if (additive) { + newSorted.splice(existingIndex, 1); + } else { + existing.desc = firstSortDirection; + newSorted = [existing]; + } + } else { + existing.desc = secondSortDirection; + if (!additive) { + newSorted = [existing]; + } + } + } else if (additive) { + newSorted.push({ + id: column.id, + desc: firstSortDirection + }); + } else { + newSorted = [{ + id: column.id, + desc: firstSortDirection + }]; + } + } else { + // Multi-Sort + var _existingIndex = newSorted.findIndex(function (d) { + return d.id === column[0].id; + }); + // Existing Sorted Column + if (_existingIndex > -1) { + var _existing = newSorted[_existingIndex]; + if (_existing.desc === secondSortDirection) { + if (additive) { + newSorted.splice(_existingIndex, column.length); + } else { + column.forEach(function (d, i) { + newSorted[_existingIndex + i].desc = firstSortDirection; + }); + } + } else { + column.forEach(function (d, i) { + newSorted[_existingIndex + i].desc = secondSortDirection; + }); + } + if (!additive) { + newSorted = newSorted.slice(_existingIndex, column.length); + } + // New Sort Column + } else if (additive) { + newSorted = newSorted.concat(column.map(function (d) { + return { + id: d.id, + desc: firstSortDirection + }; + })); + } else { + newSorted = column.map(function (d) { + return { + id: d.id, + desc: firstSortDirection + }; + }); + } + } + + this.setStateWithData({ + page: !sorted.length && newSorted.length || !additive ? 0 : this.state.page, + sorted: newSorted + }, function () { + return onSortedChange && onSortedChange(newSorted, column, additive); + }); + } + }, { + key: 'filterColumn', + value: function filterColumn(column, value) { + var _getResolvedState3 = this.getResolvedState(), + filtered = _getResolvedState3.filtered; + + var onFilteredChange = this.props.onFilteredChange; + + // Remove old filter first if it exists + + var newFiltering = (filtered || []).filter(function (x) { + return x.id !== column.id; + }); + + if (value !== '') { + newFiltering.push({ + id: column.id, + value: value + }); + } + + this.setStateWithData({ + filtered: newFiltering + }, function () { + return onFilteredChange && onFilteredChange(newFiltering, column, value); + }); + } + }, { + key: 'resizeColumnStart', + value: function resizeColumnStart(event, column, isTouch) { + var _this5 = this; + + event.stopPropagation(); + var parentWidth = event.target.parentElement.getBoundingClientRect().width; + + var pageX = void 0; + if (isTouch) { + pageX = event.changedTouches[0].pageX; + } else { + pageX = event.pageX; + } + + this.trapEvents = true; + this.setStateWithData({ + currentlyResizing: { + id: column.id, + startX: pageX, + parentWidth: parentWidth + } + }, function () { + if (isTouch) { + document.addEventListener('touchmove', _this5.resizeColumnMoving); + document.addEventListener('touchcancel', _this5.resizeColumnEnd); + document.addEventListener('touchend', _this5.resizeColumnEnd); + } else { + document.addEventListener('mousemove', _this5.resizeColumnMoving); + document.addEventListener('mouseup', _this5.resizeColumnEnd); + document.addEventListener('mouseleave', _this5.resizeColumnEnd); + } + }); + } + }, { + key: 'resizeColumnMoving', + value: function resizeColumnMoving(event) { + event.stopPropagation(); + var _props2 = this.props, + onResizedChange = _props2.onResizedChange, + column = _props2.column; + + var _getResolvedState4 = this.getResolvedState(), + resized = _getResolvedState4.resized, + currentlyResizing = _getResolvedState4.currentlyResizing, + columns = _getResolvedState4.columns; + + var currentColumn = columns.find(function (c) { + return c.accessor === currentlyResizing.id || c.id === currentlyResizing.id; + }); + var minResizeWidth = currentColumn && currentColumn.minResizeWidth != null ? currentColumn.minResizeWidth : column.minResizeWidth; + + // Delete old value + var newResized = resized.filter(function (x) { + return x.id !== currentlyResizing.id; + }); + + var pageX = void 0; + + if (event.type === 'touchmove') { + pageX = event.changedTouches[0].pageX; + } else if (event.type === 'mousemove') { + pageX = event.pageX; + } + + var newWidth = Math.max(currentlyResizing.parentWidth + pageX - currentlyResizing.startX, minResizeWidth); + + newResized.push({ + id: currentlyResizing.id, + value: newWidth + }); + + this.setStateWithData({ + resized: newResized + }, function () { + return onResizedChange && onResizedChange(newResized, event); + }); + } + }, { + key: 'resizeColumnEnd', + value: function resizeColumnEnd(event) { + event.stopPropagation(); + var isTouch = event.type === 'touchend' || event.type === 'touchcancel'; + + if (isTouch) { + document.removeEventListener('touchmove', this.resizeColumnMoving); + document.removeEventListener('touchcancel', this.resizeColumnEnd); + document.removeEventListener('touchend', this.resizeColumnEnd); + } + + // If its a touch event clear the mouse one's as well because sometimes + // the mouseDown event gets called as well, but the mouseUp event doesn't + document.removeEventListener('mousemove', this.resizeColumnMoving); + document.removeEventListener('mouseup', this.resizeColumnEnd); + document.removeEventListener('mouseleave', this.resizeColumnEnd); + + // The touch events don't propagate up to the sorting's onMouseDown event so + // no need to prevent it from happening or else the first click after a touch + // event resize will not sort the column. + if (!isTouch) { + this.setStateWithData({ + skipNextSort: true, + currentlyResizing: false + }); + } + } + }]); + + return _class; + }(Base); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRob2RzLmpzIl0sIm5hbWVzIjpbIlJlYWN0IiwiXyIsInByb3BzIiwic3RhdGUiLCJyZXNvbHZlZFN0YXRlIiwiY29tcGFjdE9iamVjdCIsIm5ld1N0YXRlIiwiZGF0YUNoYW5nZWQiLCJjb2x1bW5zIiwicGl2b3RCeSIsImRhdGEiLCJyZXNvbHZlRGF0YSIsInBpdm90SURLZXkiLCJwaXZvdFZhbEtleSIsInN1YlJvd3NLZXkiLCJhZ2dyZWdhdGVkS2V5IiwibmVzdGluZ0xldmVsS2V5Iiwib3JpZ2luYWxLZXkiLCJpbmRleEtleSIsImdyb3VwZWRCeVBpdm90S2V5IiwiU3ViQ29tcG9uZW50IiwiaGFzSGVhZGVyR3JvdXBzIiwiZm9yRWFjaCIsImNvbHVtbiIsImNvbHVtbnNXaXRoRXhwYW5kZXIiLCJleHBhbmRlckNvbHVtbiIsImZpbmQiLCJjb2wiLCJleHBhbmRlciIsInNvbWUiLCJjb2wyIiwibWFrZURlY29yYXRlZENvbHVtbiIsInBhcmVudENvbHVtbiIsImRjb2wiLCJleHBhbmRlckRlZmF1bHRzIiwibWF4V2lkdGgiLCJtaW5XaWR0aCIsImFjY2Vzc29yIiwiaWQiLCJhY2Nlc3NvclN0cmluZyIsImdldCIsInJvdyIsImNvbnNvbGUiLCJ3YXJuIiwiRXJyb3IiLCJ1bmRlZmluZWQiLCJhbGxEZWNvcmF0ZWRDb2x1bW5zIiwiZGVjb3JhdGVBbmRBZGRUb0FsbCIsImRlY29yYXRlZENvbHVtbiIsInB1c2giLCJkZWNvcmF0ZWRDb2x1bW5zIiwibWFwIiwiZCIsInZpc2libGVDb2x1bW5zIiwic2xpY2UiLCJhbGxWaXNpYmxlQ29sdW1ucyIsInZpc2libGVTdWJDb2x1bW5zIiwiZmlsdGVyIiwiaW5kZXhPZiIsImdldEZpcnN0RGVmaW5lZCIsInNob3ciLCJsZW5ndGgiLCJwaXZvdEluZGV4IiwiZmluZEluZGV4IiwicGl2b3QiLCJwaXZvdENvbHVtbnMiLCJmb3VuZCIsInBpdm90SUQiLCJQaXZvdFBhcmVudENvbHVtbiIsInJlZHVjZSIsInByZXYiLCJjdXJyZW50IiwiUGl2b3RHcm91cEhlYWRlciIsIkhlYWRlciIsInBpdm90Q29sdW1uR3JvdXAiLCJwaXZvdERlZmF1bHRzIiwicGl2b3RlZCIsInNwbGljZSIsInVuc2hpZnQiLCJoZWFkZXJHcm91cHMiLCJjdXJyZW50U3BhbiIsImFkZEhlYWRlciIsImNvbmNhdCIsImFjY2Vzc1JvdyIsImkiLCJsZXZlbCIsInJlc29sdmVkRGF0YSIsImFnZ3JlZ2F0aW5nQ29sdW1ucyIsImFnZ3JlZ2F0ZSIsImFnZ3JlZ2F0aW9uVmFsdWVzIiwidmFsdWVzIiwicm93cyIsImdyb3VwUmVjdXJzaXZlbHkiLCJrZXlzIiwiZ3JvdXBlZFJvd3MiLCJPYmplY3QiLCJlbnRyaWVzIiwiZ3JvdXBCeSIsImtleSIsInZhbHVlIiwic3ViUm93cyIsInJvd0dyb3VwIiwibWFudWFsIiwic29ydGVkIiwiZmlsdGVyZWQiLCJkZWZhdWx0RmlsdGVyTWV0aG9kIiwic29ydE1ldGhvZHNCeUNvbHVtbklEIiwic29ydE1ldGhvZCIsInNvcnRlZERhdGEiLCJzb3J0RGF0YSIsImZpbHRlckRhdGEiLCJjdXJyZW50U3RhdGUiLCJnZXRSZXNvbHZlZFN0YXRlIiwicGFnZSIsImdldFN0YXRlT3JQcm9wIiwicGFnZVNpemUiLCJvbkZldGNoRGF0YSIsImZpbHRlcmVkRGF0YSIsImZpbHRlcmVkU29GYXIiLCJuZXh0RmlsdGVyIiwieCIsImZpbHRlcmFibGUiLCJmaWx0ZXJNZXRob2QiLCJmaWx0ZXJBbGwiLCJvcmRlckJ5TWV0aG9kIiwib3JkZXJCeSIsInNvcnQiLCJhIiwiYiIsImRlc2MiLCJkZWZhdWx0U29ydE1ldGhvZCIsIm1pblJvd3MiLCJvblBhZ2VDaGFuZ2UiLCJjb2xsYXBzZU9uUGFnZUNoYW5nZSIsImV4cGFuZGVkIiwic2V0U3RhdGVXaXRoRGF0YSIsIm5ld1BhZ2VTaXplIiwib25QYWdlU2l6ZUNoYW5nZSIsImN1cnJlbnRSb3ciLCJuZXdQYWdlIiwiTWF0aCIsImZsb29yIiwiYWRkaXRpdmUiLCJza2lwTmV4dFNvcnQiLCJkZWZhdWx0U29ydERlc2MiLCJmaXJzdFNvcnREaXJlY3Rpb24iLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzZWNvbmRTb3J0RGlyZWN0aW9uIiwib25Tb3J0ZWRDaGFuZ2UiLCJuZXdTb3J0ZWQiLCJjbG9uZSIsImlzU29ydGluZ0Rlc2MiLCJpc0FycmF5IiwiZXhpc3RpbmdJbmRleCIsImV4aXN0aW5nIiwib25GaWx0ZXJlZENoYW5nZSIsIm5ld0ZpbHRlcmluZyIsImV2ZW50IiwiaXNUb3VjaCIsInN0b3BQcm9wYWdhdGlvbiIsInBhcmVudFdpZHRoIiwidGFyZ2V0IiwicGFyZW50RWxlbWVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwicGFnZVgiLCJjaGFuZ2VkVG91Y2hlcyIsInRyYXBFdmVudHMiLCJjdXJyZW50bHlSZXNpemluZyIsInN0YXJ0WCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlc2l6ZUNvbHVtbk1vdmluZyIsInJlc2l6ZUNvbHVtbkVuZCIsIm9uUmVzaXplZENoYW5nZSIsInJlc2l6ZWQiLCJjdXJyZW50Q29sdW1uIiwiYyIsIm1pblJlc2l6ZVdpZHRoIiwibmV3UmVzaXplZCIsInR5cGUiLCJuZXdXaWR0aCIsIm1heCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJCYXNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBUCxNQUFrQixPQUFsQjtBQUNBLE9BQU9DLENBQVAsTUFBYyxTQUFkOztBQUVBLGdCQUFlO0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBLHVDQUVPQyxLQUZQLEVBRWNDLEtBRmQsRUFFcUI7QUFDOUIsWUFBTUMsNkJBQ0RILEVBQUVJLGFBQUYsQ0FBZ0IsS0FBS0YsS0FBckIsQ0FEQyxFQUVERixFQUFFSSxhQUFGLENBQWdCLEtBQUtILEtBQXJCLENBRkMsRUFHREQsRUFBRUksYUFBRixDQUFnQkYs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SUFERDtBQUFBLENBQWYiLCJmaWxlIjoibWV0aG9kcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBfIGZyb20gJy4vdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IEJhc2UgPT5cbiAgY2xhc3MgZXh0ZW5kcyBCYXNlIHtcbiAgICBnZXRSZXNvbHZlZFN0YXRlIChwcm9wcywgc3RhdGUpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkU3RhdGUgPSB7XG4gICAgICAgIC4uLl8uY29tcGFjdE9iamVjdCh0aGlzLnN0YXRlKSxcbiAgICAgICAgLi4uXy5jb21wYWN0T2JqZWN0KHRoaXMucHJvcHMpLFxuICAgICAgICAuLi5fLmNvbXBhY3RPYmplY3Qoc3RhdGUpLFxuICAgICAgICAuLi5fLmNvbXBhY3RPYmplY3QocHJvcHMpLFxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmVkU3RhdGVcbiAgICB9XG5cbiAgICBnZXREYXRhTW9kZWwgKG5ld1N0YXRlLCBkYXRhQ2hhbmdlZCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBwaXZvdEJ5ID0gW10sXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHJlc29sdmVEYXRhLFxuICAgICAgICBwaXZvdElES2V5LFxuICAgICAgICBwaXZvdFZhbEtleSxcbiAgICAgICAgc3ViUm93c0tleSxcbiAgICAgICAgYWdncmVnYXRlZEtleSxcbiAgICAgICAgbmVzdGluZ0xldmVsS2V5LFxuICAgICAgICBvcmlnaW5hbEtleSxcbiAgICAgICAgaW5kZXhLZXksXG4gICAgICAgIGdyb3VwZWRCeVBpdm90S2V5LFxuICAgICAgICBTdWJDb21wb25lbnQsXG4gICAgICB9ID0gbmV3U3RhdGVcblxuICAgICAgLy8gRGV0ZXJtaW5lIEhlYWRlciBHcm91cHNcbiAgICAgIGxldCBoYXNIZWFkZXJHcm91cHMgPSBmYWxzZVxuICAgICAgY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uY29sdW1ucykge1xuICAgICAgICAgIGhhc0hlYWRlckdyb3VwcyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgbGV0IGNvbHVtbnNXaXRoRXhwYW5kZXIgPSBbLi4uY29sdW1uc11cblxuICAgICAgbGV0IGV4cGFuZGVyQ29sdW1uID0gY29sdW1ucy5maW5kKFxuICAgICAgICBjb2wgPT4gY29sLmV4cGFuZGVyIHx8IChjb2wuY29sdW1ucyAmJiBjb2wuY29sdW1ucy5zb21lKGNvbDIgPT4gY29sMi5leHBhbmRlcikpXG4gICAgICApXG4gICAgICAvLyBUaGUgYWN0dWFsIGV4cGFuZGVyIG1pZ2h0IGJlIGluIHRoZSBjb2x1bW5zIGZpZWxkIG9mIGEgZ3JvdXAgY29sdW1uXG4gICAgICBpZiAoZXhwYW5kZXJDb2x1bW4gJiYgIWV4cGFuZGVyQ29sdW1uLmV4cGFuZGVyKSB7XG4gICAgICAgIGV4cGFuZGVyQ29sdW1uID0gZXhwYW5kZXJDb2x1bW4uY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZXhwYW5kZXIpXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIGhhdmUgU3ViQ29tcG9uZW50J3Mgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBleHBhbmRlciBjb2x1bW5cbiAgICAgIGlmIChTdWJDb21wb25lbnQgJiYgIWV4cGFuZGVyQ29sdW1uKSB7XG4gICAgICAgIGV4cGFuZGVyQ29sdW1uID0geyBleHBhbmRlcjogdHJ1ZSB9XG4gICAgICAgIGNvbHVtbnNXaXRoRXhwYW5kZXIgPSBbZXhwYW5kZXJDb2x1bW4sIC4uLmNvbHVtbnNXaXRoRXhwYW5kZXJdXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ha2VEZWNvcmF0ZWRDb2x1bW4gPSAoY29sdW1uLCBwYXJlbnRDb2x1bW4pID0+IHtcbiAgICAgICAgbGV0IGRjb2xcbiAgICAgICAgaWYgKGNvbHVtbi5leHBhbmRlcikge1xuICAgICAgICAgIGRjb2wgPSB7XG4gICAgICAgICAgICAuLi50aGlzLnByb3BzLmNvbHVtbixcbiAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZXhwYW5kZXJEZWZhdWx0cyxcbiAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGNvbCA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuY29sdW1uLFxuICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuc3VyZSBtaW5XaWR0aCBpcyBub3QgZ3JlYXRlciB0aGFuIG1heFdpZHRoIGlmIHNldFxuICAgICAgICBpZiAoZGNvbC5tYXhXaWR0aCA8IGRjb2wubWluV2lkdGgpIHtcbiAgICAgICAgICBkY29sLm1pbldpZHRoID0gZGNvbC5tYXhXaWR0aFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudENvbHVtbikge1xuICAgICAgICAgIGRjb2wucGFyZW50Q29sdW1uID0gcGFyZW50Q29sdW1uXG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJzdCBjaGVjayBmb3Igc3RyaW5nIGFjY2Vzc29yXG4gICAgICAgIGlmICh0eXBlb2YgZGNvbC5hY2Nlc3NvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBkY29sLmlkID0gZGNvbC5pZCB8fCBkY29sLmFjY2Vzc29yXG4gICAgICAgICAgY29uc3QgYWNjZXNzb3JTdHJpbmcgPSBkY29sLmFjY2Vzc29yXG4gICAgICAgICAgZGNvbC5hY2Nlc3NvciA9IHJvdyA9PiBfLmdldChyb3csIGFjY2Vzc29yU3RyaW5nKVxuICAgICAgICAgIHJldHVybiBkY29sXG4gICAgICAgIH1cblxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gZnVuY3Rpb25hbCBhY2Nlc3NvciAoYnV0IHJlcXVpcmUgYW4gSUQpXG4gICAgICAgIGlmIChkY29sLmFjY2Vzc29yICYmICFkY29sLmlkKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGRjb2wpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0EgY29sdW1uIGlkIGlzIHJlcXVpcmVkIGlmIHVzaW5nIGEgbm9uLXN0cmluZyBhY2Nlc3NvciBmb3IgY29sdW1uIGFib3ZlLidcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gYW4gdW5kZWZpbmVkIGFjY2Vzc29yXG4gICAgICAgIGlmICghZGNvbC5hY2Nlc3Nvcikge1xuICAgICAgICAgIGRjb2wuYWNjZXNzb3IgPSAoKSA9PiB1bmRlZmluZWRcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkY29sXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFsbERlY29yYXRlZENvbHVtbnMgPSBbXVxuXG4gICAgICAvLyBEZWNvcmF0ZSB0aGUgY29sdW1uc1xuICAgICAgY29uc3QgZGVjb3JhdGVBbmRBZGRUb0FsbCA9IChjb2x1bW4sIHBhcmVudENvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCBkZWNvcmF0ZWRDb2x1bW4gPSBtYWtlRGVjb3JhdGVkQ29sdW1uKGNvbHVtbiwgcGFyZW50Q29sdW1uKVxuICAgICAgICBhbGxEZWNvcmF0ZWRDb2x1bW5zLnB1c2goZGVjb3JhdGVkQ29sdW1uKVxuICAgICAgICByZXR1cm4gZGVjb3JhdGVkQ29sdW1uXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlY29yYXRlZENvbHVtbnMgPSBjb2x1bW5zV2l0aEV4cGFuZGVyLm1hcChjb2x1bW4gPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmNvbHVtbnMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgY29sdW1uczogY29sdW1uLmNvbHVtbnMubWFwKGQgPT4gZGVjb3JhdGVBbmRBZGRUb0FsbChkLCBjb2x1bW4pKSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY29yYXRlQW5kQWRkVG9BbGwoY29sdW1uKVxuICAgICAgfSlcblxuICAgICAgLy8gQnVpbGQgdGhlIHZpc2libGUgY29sdW1ucywgaGVhZGVycyBhbmQgZmxhdCBjb2x1bW4gbGlzdFxuICAgICAgbGV0IHZpc2libGVDb2x1bW5zID0gZGVjb3JhdGVkQ29sdW1ucy5zbGljZSgpXG4gICAgICBsZXQgYWxsVmlzaWJsZUNvbHVtbnMgPSBbXVxuXG4gICAgICB2aXNpYmxlQ29sdW1ucyA9IHZpc2libGVDb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmNvbHVtbnMpIHtcbiAgICAgICAgICBjb25zdCB2aXNpYmxlU3ViQ29sdW1ucyA9IGNvbHVtbi5jb2x1bW5zLmZpbHRlcihkID0+XG4gICAgICAgICAgICBwaXZvdEJ5LmluZGV4T2YoZC5pZCkgPiAtMSA/IGZhbHNlIDogXy5nZXRGaXJzdERlZmluZWQoZC5zaG93LCB0cnVlKVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgY29sdW1uczogdmlzaWJsZVN1YkNvbHVtbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW5cbiAgICAgIH0pXG5cbiAgICAgIHZpc2libGVDb2x1bW5zID0gdmlzaWJsZUNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PlxuICAgICAgICBjb2x1bW4uY29sdW1uc1xuICAgICAgICAgID8gY29sdW1uLmNvbHVtbnMubGVuZ3RoXG4gICAgICAgICAgOiBwaXZvdEJ5LmluZGV4T2YoY29sdW1uLmlkKSA+IC0xXG4gICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICA6IF8uZ2V0Rmlyc3REZWZpbmVkKGNvbHVtbi5zaG93LCB0cnVlKVxuICAgICAgKVxuXG4gICAgICAvLyBGaW5kIGFueSBjdXN0b20gcGl2b3QgbG9jYXRpb25cbiAgICAgIGNvbnN0IHBpdm90SW5kZXggPSB2aXNpYmxlQ29sdW1ucy5maW5kSW5kZXgoY29sID0+IGNvbC5waXZvdClcblxuICAgICAgLy8gSGFuZGxlIFBpdm90IENvbHVtbnNcbiAgICAgIGlmIChwaXZvdEJ5Lmxlbmd0aCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgcGl2b3QgY29sdW1ucyBpbiB0aGUgY29ycmVjdCBwaXZvdCBvcmRlclxuICAgICAgICBjb25zdCBwaXZvdENvbHVtbnMgPSBbXVxuICAgICAgICBwaXZvdEJ5LmZvckVhY2gocGl2b3RJRCA9PiB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSBhbGxEZWNvcmF0ZWRDb2x1bW5zLmZpbmQoZCA9PiBkLmlkID09PSBwaXZvdElEKVxuICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgcGl2b3RDb2x1bW5zLnB1c2goZm91bmQpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IFBpdm90UGFyZW50Q29sdW1uID0gcGl2b3RDb2x1bW5zLnJlZHVjZShcbiAgICAgICAgICAocHJldiwgY3VycmVudCkgPT4gcHJldiAmJiBwcmV2ID09PSBjdXJyZW50LnBhcmVudENvbHVtbiAmJiBjdXJyZW50LnBhcmVudENvbHVtbixcbiAgICAgICAgICBwaXZvdENvbHVtbnNbMF0ucGFyZW50Q29sdW1uXG4gICAgICAgIClcblxuICAgICAgICBsZXQgUGl2b3RHcm91cEhlYWRlciA9IGhhc0hlYWRlckdyb3VwcyAmJiBQaXZvdFBhcmVudENvbHVtbi5IZWFkZXJcbiAgICAgICAgUGl2b3RHcm91cEhlYWRlciA9IFBpdm90R3JvdXBIZWFkZXIgfHwgKCgpID0+IDxzdHJvbmc+UGl2b3RlZDwvc3Ryb25nPilcblxuICAgICAgICBsZXQgcGl2b3RDb2x1bW5Hcm91cCA9IHtcbiAgICAgICAgICBIZWFkZXI6IFBpdm90R3JvdXBIZWFkZXIsXG4gICAgICAgICAgY29sdW1uczogcGl2b3RDb2x1bW5zLm1hcChjb2wgPT4gKHtcbiAgICAgICAgICAgIC4uLnRoaXMucHJvcHMucGl2b3REZWZhdWx0cyxcbiAgICAgICAgICAgIC4uLmNvbCxcbiAgICAgICAgICAgIHBpdm90ZWQ6IHRydWUsXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGxhY2UgdGhlIHBpdm90Q29sdW1ucyBiYWNrIGludG8gdGhlIHZpc2libGVDb2x1bW5zXG4gICAgICAgIGlmIChwaXZvdEluZGV4ID49IDApIHtcbiAgICAgICAgICBwaXZvdENvbHVtbkdyb3VwID0ge1xuICAgICAgICAgICAgLi4udmlzaWJsZUNvbHVtbnNbcGl2b3RJbmRleF0sXG4gICAgICAgICAgICAuLi5waXZvdENvbHVtbkdyb3VwLFxuICAgICAgICAgIH1cbiAgICAgICAgICB2aXNpYmxlQ29sdW1ucy5zcGxpY2UocGl2b3RJbmRleCwgMSwgcGl2b3RDb2x1bW5Hcm91cClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aXNpYmxlQ29sdW1ucy51bnNoaWZ0KHBpdm90Q29sdW1uR3JvdXApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgSGVhZGVyIEdyb3Vwc1xuICAgICAgY29uc3QgaGVhZGVyR3JvdXBzID0gW11cbiAgICAgIGxldCBjdXJyZW50U3BhbiA9IFtdXG5cbiAgICAgIC8vIEEgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gYWRkIGEgaGVhZGVyIGFuZCByZXNldCB0aGUgY3VycmVudFNwYW5cbiAgICAgIGNvbnN0IGFkZEhlYWRlciA9IChjb2x1bW5zLCBjb2x1bW4pID0+IHtcbiAgICAgICAgaGVhZGVyR3JvdXBzLnB1c2goe1xuICAgICAgICAgIC4uLnRoaXMucHJvcHMuY29sdW1uLFxuICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICB9KVxuICAgICAgICBjdXJyZW50U3BhbiA9IFtdXG4gICAgICB9XG5cbiAgICAgIC8vIEJ1aWxkIGZsYXN0IGxpc3Qgb2YgYWxsVmlzaWJsZUNvbHVtbnMgYW5kIEhlYWRlckdyb3Vwc1xuICAgICAgdmlzaWJsZUNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmNvbHVtbnMpIHtcbiAgICAgICAgICBhbGxWaXNpYmxlQ29sdW1ucyA9IGFsbFZpc2libGVDb2x1bW5zLmNvbmNhdChjb2x1bW4uY29sdW1ucylcbiAgICAgICAgICBpZiAoY3VycmVudFNwYW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYWRkSGVhZGVyKGN1cnJlbnRTcGFuKVxuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRIZWFkZXIoY29sdW1uLmNvbHVtbnMsIGNvbHVtbilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBhbGxWaXNpYmxlQ29sdW1ucy5wdXNoKGNvbHVtbilcbiAgICAgICAgY3VycmVudFNwYW4ucHVzaChjb2x1bW4pXG4gICAgICB9KVxuICAgICAgaWYgKGhhc0hlYWRlckdyb3VwcyAmJiBjdXJyZW50U3Bhbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFkZEhlYWRlcihjdXJyZW50U3BhbilcbiAgICAgIH1cblxuICAgICAgLy8gQWNjZXNzIHRoZSBkYXRhXG4gICAgICBjb25zdCBhY2Nlc3NSb3cgPSAoZCwgaSwgbGV2ZWwgPSAwKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHtcbiAgICAgICAgICBbb3JpZ2luYWxLZXldOiBkLFxuICAgICAgICAgIFtpbmRleEtleV06IGksXG4gICAgICAgICAgW3N1YlJvd3NLZXldOiBkW3N1YlJvd3NLZXldLFxuICAgICAgICAgIFtuZXN0aW5nTGV2ZWxLZXldOiBsZXZlbCxcbiAgICAgICAgfVxuICAgICAgICBhbGxEZWNvcmF0ZWRDb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLmV4cGFuZGVyKSByZXR1cm5cbiAgICAgICAgICByb3dbY29sdW1uLmlkXSA9IGNvbHVtbi5hY2Nlc3NvcihkKVxuICAgICAgICB9KVxuICAgICAgICBpZiAocm93W3N1YlJvd3NLZXldKSB7XG4gICAgICAgICAgcm93W3N1YlJvd3NLZXldID0gcm93W3N1YlJvd3NLZXldLm1hcCgoZCwgaSkgPT4gYWNjZXNzUm93KGQsIGksIGxldmVsICsgMSkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvd1xuICAgICAgfVxuXG4gICAgICAvLyAvLyBJZiB0aGUgZGF0YSBoYXNuJ3QgY2hhbmdlZCwganVzdCB1c2UgdGhlIGNhY2hlZCBkYXRhXG4gICAgICBsZXQgcmVzb2x2ZWREYXRhID0gdGhpcy5yZXNvbHZlZERhdGFcbiAgICAgIC8vIElmIHRoZSBkYXRhIGhhcyBjaGFuZ2VkLCBydW4gdGhlIGRhdGEgcmVzb2x2ZXIgYW5kIGNhY2hlIHRoZSByZXN1bHRcbiAgICAgIGlmICghdGhpcy5yZXNvbHZlZERhdGEgfHwgZGF0YUNoYW5nZWQpIHtcbiAgICAgICAgcmVzb2x2ZWREYXRhID0gcmVzb2x2ZURhdGEoZGF0YSlcbiAgICAgICAgdGhpcy5yZXNvbHZlZERhdGEgPSByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIFVzZSB0aGUgcmVzb2x2ZWQgZGF0YVxuICAgICAgcmVzb2x2ZWREYXRhID0gcmVzb2x2ZWREYXRhLm1hcCgoZCwgaSkgPT4gYWNjZXNzUm93KGQsIGkpKVxuXG4gICAgICAvLyBUT0RPOiBNYWtlIGl0IHBvc3NpYmxlIHRvIGZhYnJpY2F0ZSBuZXN0ZWQgcm93cyB3aXRob3V0IHBpdm90aW5nXG4gICAgICBjb25zdCBhZ2dyZWdhdGluZ0NvbHVtbnMgPSBhbGxWaXNpYmxlQ29sdW1ucy5maWx0ZXIoZCA9PiAhZC5leHBhbmRlciAmJiBkLmFnZ3JlZ2F0ZSlcblxuICAgICAgLy8gSWYgcGl2b3RpbmcsIHJlY3Vyc2l2ZWx5IGdyb3VwIHRoZSBkYXRhXG4gICAgICBjb25zdCBhZ2dyZWdhdGUgPSByb3dzID0+IHtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25WYWx1ZXMgPSB7fVxuICAgICAgICBhZ2dyZWdhdGluZ0NvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHJvd3MubWFwKGQgPT4gZFtjb2x1bW4uaWRdKVxuICAgICAgICAgIGFnZ3JlZ2F0aW9uVmFsdWVzW2NvbHVtbi5pZF0gPSBjb2x1bW4uYWdncmVnYXRlKHZhbHVlcywgcm93cylcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0aW9uVmFsdWVzXG4gICAgICB9XG4gICAgICBpZiAocGl2b3RCeS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBSZWN1cnNpdmVseSA9IChyb3dzLCBrZXlzLCBpID0gMCkgPT4ge1xuICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxhc3QgbGV2ZWwsIGp1c3QgcmV0dXJuIHRoZSByb3dzXG4gICAgICAgICAgaWYgKGkgPT09IGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93c1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBHcm91cCB0aGUgcm93cyB0b2dldGhlciBmb3IgdGhpcyBsZXZlbFxuICAgICAgICAgIGxldCBncm91cGVkUm93cyA9IE9iamVjdC5lbnRyaWVzKF8uZ3JvdXBCeShyb3dzLCBrZXlzW2ldKSkubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICBbcGl2b3RJREtleV06IGtleXNbaV0sXG4gICAgICAgICAgICBbcGl2b3RWYWxLZXldOiBrZXksXG4gICAgICAgICAgICBba2V5c1tpXV06IGtleSxcbiAgICAgICAgICAgIFtzdWJSb3dzS2V5XTogdmFsdWUsXG4gICAgICAgICAgICBbbmVzdGluZ0xldmVsS2V5XTogaSxcbiAgICAgICAgICAgIFtncm91cGVkQnlQaXZvdEtleV06IHRydWUsXG4gICAgICAgICAgfSkpXG4gICAgICAgICAgLy8gUmVjdXJzZSBpbnRvIHRoZSBzdWJSb3dzXG4gICAgICAgICAgZ3JvdXBlZFJvd3MgPSBncm91cGVkUm93cy5tYXAocm93R3JvdXAgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3ViUm93cyA9IGdyb3VwUmVjdXJzaXZlbHkocm93R3JvdXBbc3ViUm93c0tleV0sIGtleXMsIGkgKyAxKVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ucm93R3JvdXAsXG4gICAgICAgICAgICAgIFtzdWJSb3dzS2V5XTogc3ViUm93cyxcbiAgICAgICAgICAgICAgW2FnZ3JlZ2F0ZWRLZXldOiB0cnVlLFxuICAgICAgICAgICAgICAuLi5hZ2dyZWdhdGUoc3ViUm93cyksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm4gZ3JvdXBlZFJvd3NcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlZERhdGEgPSBncm91cFJlY3Vyc2l2ZWx5KHJlc29sdmVkRGF0YSwgcGl2b3RCeSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHJlc29sdmVkRGF0YSxcbiAgICAgICAgYWxsVmlzaWJsZUNvbHVtbnMsXG4gICAgICAgIGhlYWRlckdyb3VwcyxcbiAgICAgICAgYWxsRGVjb3JhdGVkQ29sdW1ucyxcbiAgICAgICAgaGFzSGVhZGVyR3JvdXBzLFxuICAgICAgfVxuICAgIH1cblxuICAgIGdldFNvcnRlZERhdGEgKHJlc29sdmVkU3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFudWFsLFxuICAgICAgICBzb3J0ZWQsXG4gICAgICAgIGZpbHRlcmVkLFxuICAgICAgICBkZWZhdWx0RmlsdGVyTWV0aG9kLFxuICAgICAgICByZXNvbHZlZERhdGEsXG4gICAgICAgIGFsbERlY29yYXRlZENvbHVtbnMsXG4gICAgICB9ID0gcmVzb2x2ZWRTdGF0ZVxuXG4gICAgICBjb25zdCBzb3J0TWV0aG9kc0J5Q29sdW1uSUQgPSB7fVxuXG4gICAgICBhbGxEZWNvcmF0ZWRDb2x1bW5zXG4gICAgICAgIC5maWx0ZXIoY29sID0+IGNvbC5zb3J0TWV0aG9kKVxuICAgICAgICAuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgIHNvcnRNZXRob2RzQnlDb2x1bW5JRFtjb2wuaWRdID0gY29sLnNvcnRNZXRob2RcbiAgICAgICAgfSlcblxuICAgICAgLy8gUmVzb2x2ZSB0aGUgZGF0YSBmcm9tIGVpdGhlciBtYW51YWwgZGF0YSBvciBzb3J0ZWQgZGF0YVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc29ydGVkRGF0YTogbWFudWFsXG4gICAgICAgICAgPyByZXNvbHZlZERhdGFcbiAgICAgICAgICA6IHRoaXMuc29ydERhdGEoXG4gICAgICAgICAgICB0aGlzLmZpbHRlckRhdGEocmVzb2x2ZWREYXRhLCBmaWx0ZXJlZCwgZGVmYXVsdEZpbHRlck1ldGhvZCwgYWxsRGVjb3JhdGVkQ29sdW1ucyksXG4gICAgICAgICAgICBzb3J0ZWQsXG4gICAgICAgICAgICBzb3J0TWV0aG9kc0J5Q29sdW1uSURcbiAgICAgICAgICApLFxuICAgICAgfVxuICAgIH1cblxuICAgIGZpcmVGZXRjaERhdGEgKCkge1xuICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHN0YXRlLCBwcmVmZXJyaW5nIGNlcnRhaW4gc3RhdGUgdmFsdWVzIG92ZXIgcHJvcHNcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHtcbiAgICAgICAgLi4udGhpcy5nZXRSZXNvbHZlZFN0YXRlKCksXG4gICAgICAgIHBhZ2U6IHRoaXMuZ2V0U3RhdGVPclByb3AoJ3BhZ2UnKSxcbiAgICAgICAgcGFnZVNpemU6IHRoaXMuZ2V0U3RhdGVPclByb3AoJ3BhZ2VTaXplJyksXG4gICAgICAgIGZpbHRlcmVkOiB0aGlzLmdldFN0YXRlT3JQcm9wKCdmaWx0ZXJlZCcpLFxuICAgICAgfVxuXG4gICAgICB0aGlzLnByb3BzLm9uRmV0Y2hEYXRhKGN1cnJlbnRTdGF0ZSwgdGhpcylcbiAgICB9XG5cbiAgICBnZXRQcm9wT3JTdGF0ZSAoa2V5KSB7XG4gICAgICByZXR1cm4gXy5nZXRGaXJzdERlZmluZWQodGhpcy5wcm9wc1trZXldLCB0aGlzLnN0YXRlW2tleV0pXG4gICAgfVxuXG4gICAgZ2V0U3RhdGVPclByb3AgKGtleSkge1xuICAgICAgcmV0dXJuIF8uZ2V0Rmlyc3REZWZpbmVkKHRoaXMuc3RhdGVba2V5XSwgdGhpcy5wcm9wc1trZXldKVxuICAgIH1cblxuICAgIGZpbHRlckRhdGEgKGRhdGEsIGZpbHRlcmVkLCBkZWZhdWx0RmlsdGVyTWV0aG9kLCBhbGxWaXNpYmxlQ29sdW1ucykge1xuICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9IGRhdGFcblxuICAgICAgaWYgKGZpbHRlcmVkLmxlbmd0aCkge1xuICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZC5yZWR1Y2UoKGZpbHRlcmVkU29GYXIsIG5leHRGaWx0ZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSBhbGxWaXNpYmxlQ29sdW1ucy5maW5kKHggPT4geC5pZCA9PT0gbmV4dEZpbHRlci5pZClcblxuICAgICAgICAgIC8vIERvbid0IGZpbHRlciBoaWRkZW4gY29sdW1ucyBvciBjb2x1bW5zIHRoYXQgaGF2ZSBoYWQgdGhlaXIgZmlsdGVycyBkaXNhYmxlZFxuICAgICAgICAgIGlmICghY29sdW1uIHx8IGNvbHVtbi5maWx0ZXJhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkU29GYXJcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaWx0ZXJNZXRob2QgPSBjb2x1bW4uZmlsdGVyTWV0aG9kIHx8IGRlZmF1bHRGaWx0ZXJNZXRob2RcblxuICAgICAgICAgIC8vIElmICdmaWx0ZXJBbGwnIGlzIHNldCB0byB0cnVlLCBwYXNzIHRoZSBlbnRpcmUgZGF0YXNldCB0byB0aGUgZmlsdGVyIG1ldGhvZFxuICAgICAgICAgIGlmIChjb2x1bW4uZmlsdGVyQWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyTWV0aG9kKG5leHRGaWx0ZXIsIGZpbHRlcmVkU29GYXIsIGNvbHVtbilcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZpbHRlcmVkU29GYXIuZmlsdGVyKHJvdyA9PiBmaWx0ZXJNZXRob2QobmV4dEZpbHRlciwgcm93LCBjb2x1bW4pKVxuICAgICAgICB9LCBmaWx0ZXJlZERhdGEpXG5cbiAgICAgICAgLy8gQXBwbHkgdGhlIGZpbHRlciB0byB0aGUgc3Vicm93cyBpZiB3ZSBhcmUgcGl2b3RpbmcsIGFuZCB0aGVuXG4gICAgICAgIC8vIGZpbHRlciBhbnkgcm93cyB3aXRob3V0IHN1YmNvbHVtbnMgYmVjYXVzZSBpdCB3b3VsZCBiZSBzdHJhbmdlIHRvIHNob3dcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhXG4gICAgICAgICAgLm1hcChyb3cgPT4ge1xuICAgICAgICAgICAgaWYgKCFyb3dbdGhpcy5wcm9wcy5zdWJSb3dzS2V5XSkge1xuICAgICAgICAgICAgICByZXR1cm4gcm93XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5yb3csXG4gICAgICAgICAgICAgIFt0aGlzLnByb3BzLnN1YlJvd3NLZXldOiB0aGlzLmZpbHRlckRhdGEoXG4gICAgICAgICAgICAgICAgcm93W3RoaXMucHJvcHMuc3ViUm93c0tleV0sXG4gICAgICAgICAgICAgICAgZmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlck1ldGhvZCxcbiAgICAgICAgICAgICAgICBhbGxWaXNpYmxlQ29sdW1uc1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcihyb3cgPT4ge1xuICAgICAgICAgICAgaWYgKCFyb3dbdGhpcy5wcm9wcy5zdWJSb3dzS2V5XSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJvd1t0aGlzLnByb3BzLnN1YlJvd3NLZXldLmxlbmd0aCA+IDBcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlsdGVyZWREYXRhXG4gICAgfVxuXG4gICAgc29ydERhdGEgKGRhdGEsIHNvcnRlZCwgc29ydE1ldGhvZHNCeUNvbHVtbklEID0ge30pIHtcbiAgICAgIGlmICghc29ydGVkLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3J0ZWREYXRhID0gKHRoaXMucHJvcHMub3JkZXJCeU1ldGhvZCB8fCBfLm9yZGVyQnkpKFxuICAgICAgICBkYXRhLFxuICAgICAgICBzb3J0ZWQubWFwKHNvcnQgPT4ge1xuICAgICAgICAgIC8vIFN1cHBvcnQgY3VzdG9tIHNvcnRpbmcgbWV0aG9kcyBmb3IgZWFjaCBjb2x1bW5cbiAgICAgICAgICBpZiAoc29ydE1ldGhvZHNCeUNvbHVtbklEW3NvcnQuaWRdKSB7XG4gICAgICAgICAgICByZXR1cm4gKGEsIGIpID0+IHNvcnRNZXRob2RzQnlDb2x1bW5JRFtzb3J0LmlkXShhW3NvcnQuaWRdLCBiW3NvcnQuaWRdLCBzb3J0LmRlc2MpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAoYSwgYikgPT4gdGhpcy5wcm9wcy5kZWZhdWx0U29ydE1ldGhvZChhW3NvcnQuaWRdLCBiW3NvcnQuaWRdLCBzb3J0LmRlc2MpXG4gICAgICAgIH0pLFxuICAgICAgICBzb3J0ZWQubWFwKGQgPT4gIWQuZGVzYyksXG4gICAgICAgIHRoaXMucHJvcHMuaW5kZXhLZXlcbiAgICAgIClcblxuICAgICAgc29ydGVkRGF0YS5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgIGlmICghcm93W3RoaXMucHJvcHMuc3ViUm93c0tleV0pIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICByb3dbdGhpcy5wcm9wcy5zdWJSb3dzS2V5XSA9IHRoaXMuc29ydERhdGEoXG4gICAgICAgICAgcm93W3RoaXMucHJvcHMuc3ViUm93c0tleV0sXG4gICAgICAgICAgc29ydGVkLFxuICAgICAgICAgIHNvcnRNZXRob2RzQnlDb2x1bW5JRFxuICAgICAgICApXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gc29ydGVkRGF0YVxuICAgIH1cblxuICAgIGdldE1pblJvd3MgKCkge1xuICAgICAgcmV0dXJuIF8uZ2V0Rmlyc3REZWZpbmVkKHRoaXMucHJvcHMubWluUm93cywgdGhpcy5nZXRTdGF0ZU9yUHJvcCgncGFnZVNpemUnKSlcbiAgICB9XG5cbiAgICAvLyBVc2VyIGFjdGlvbnNcbiAgICBvblBhZ2VDaGFuZ2UgKHBhZ2UpIHtcbiAgICAgIGNvbnN0IHsgb25QYWdlQ2hhbmdlLCBjb2xsYXBzZU9uUGFnZUNoYW5nZSB9ID0gdGhpcy5wcm9wc1xuXG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHsgcGFnZSB9XG4gICAgICBpZiAoY29sbGFwc2VPblBhZ2VDaGFuZ2UpIHtcbiAgICAgICAgbmV3U3RhdGUuZXhwYW5kZWQgPSB7fVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZVdpdGhEYXRhKG5ld1N0YXRlLCAoKSA9PiBvblBhZ2VDaGFuZ2UgJiYgb25QYWdlQ2hhbmdlKHBhZ2UpKVxuICAgIH1cblxuICAgIG9uUGFnZVNpemVDaGFuZ2UgKG5ld1BhZ2VTaXplKSB7XG4gICAgICBjb25zdCB7IG9uUGFnZVNpemVDaGFuZ2UgfSA9IHRoaXMucHJvcHNcbiAgICAgIGNvbnN0IHsgcGFnZVNpemUsIHBhZ2UgfSA9IHRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZSgpXG5cbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgcGFnZSB0byBkaXNwbGF5XG4gICAgICBjb25zdCBjdXJyZW50Um93ID0gcGFnZVNpemUgKiBwYWdlXG4gICAgICBjb25zdCBuZXdQYWdlID0gTWF0aC5mbG9vcihjdXJyZW50Um93IC8gbmV3UGFnZVNpemUpXG5cbiAgICAgIHRoaXMuc2V0U3RhdGVXaXRoRGF0YShcbiAgICAgICAge1xuICAgICAgICAgIHBhZ2VTaXplOiBuZXdQYWdlU2l6ZSxcbiAgICAgICAgICBwYWdlOiBuZXdQYWdlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiBvblBhZ2VTaXplQ2hhbmdlICYmIG9uUGFnZVNpemVDaGFuZ2UobmV3UGFnZVNpemUsIG5ld1BhZ2UpXG4gICAgICApXG4gICAgfVxuXG4gICAgc29ydENvbHVtbiAoY29sdW1uLCBhZGRpdGl2ZSkge1xuICAgICAgY29uc3QgeyBzb3J0ZWQsIHNraXBOZXh0U29ydCwgZGVmYXVsdFNvcnREZXNjIH0gPSB0aGlzLmdldFJlc29sdmVkU3RhdGUoKVxuXG4gICAgICBjb25zdCBmaXJzdFNvcnREaXJlY3Rpb24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29sdW1uLCAnZGVmYXVsdFNvcnREZXNjJylcbiAgICAgICAgPyBjb2x1bW4uZGVmYXVsdFNvcnREZXNjXG4gICAgICAgIDogZGVmYXVsdFNvcnREZXNjXG4gICAgICBjb25zdCBzZWNvbmRTb3J0RGlyZWN0aW9uID0gIWZpcnN0U29ydERpcmVjdGlvblxuXG4gICAgICAvLyB3ZSBjYW4ndCBzdG9wIGV2ZW50IHByb3BhZ2F0aW9uIGZyb20gdGhlIGNvbHVtbiByZXNpemUgbW92ZSBoYW5kbGVyc1xuICAgICAgLy8gYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50IGJlY2F1c2Ugb2YgcmVhY3QncyBzeW50aGV0aWMgZXZlbnRzXG4gICAgICAvLyBzbyB3ZSBoYXZlIHRvIHByZXZlbnQgdGhlIHNvcnQgZnVuY3Rpb24gZnJvbSBhY3R1YWxseSBzb3J0aW5nXG4gICAgICAvLyBpZiB3ZSBjbGljayBvbiB0aGUgY29sdW1uIHJlc2l6ZSBlbGVtZW50IHdpdGhpbiBhIGhlYWRlci5cbiAgICAgIGlmIChza2lwTmV4dFNvcnQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZVdpdGhEYXRhKHtcbiAgICAgICAgICBza2lwTmV4dFNvcnQ6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBvblNvcnRlZENoYW5nZSB9ID0gdGhpcy5wcm9wc1xuXG4gICAgICBsZXQgbmV3U29ydGVkID0gXy5jbG9uZShzb3J0ZWQgfHwgW10pLm1hcChkID0+IHtcbiAgICAgICAgZC5kZXNjID0gXy5pc1NvcnRpbmdEZXNjKGQpXG4gICAgICAgIHJldHVybiBkXG4gICAgICB9KVxuICAgICAgaWYgKCFfLmlzQXJyYXkoY29sdW1uKSkge1xuICAgICAgICAvLyBTaW5nbGUtU29ydFxuICAgICAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gbmV3U29ydGVkLmZpbmRJbmRleChkID0+IGQuaWQgPT09IGNvbHVtbi5pZClcbiAgICAgICAgaWYgKGV4aXN0aW5nSW5kZXggPiAtMSkge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gbmV3U29ydGVkW2V4aXN0aW5nSW5kZXhdXG4gICAgICAgICAgaWYgKGV4aXN0aW5nLmRlc2MgPT09IHNlY29uZFNvcnREaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChhZGRpdGl2ZSkge1xuICAgICAgICAgICAgICBuZXdTb3J0ZWQuc3BsaWNlKGV4aXN0aW5nSW5kZXgsIDEpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBleGlzdGluZy5kZXNjID0gZmlyc3RTb3J0RGlyZWN0aW9uXG4gICAgICAgICAgICAgIG5ld1NvcnRlZCA9IFtleGlzdGluZ11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhpc3RpbmcuZGVzYyA9IHNlY29uZFNvcnREaXJlY3Rpb25cbiAgICAgICAgICAgIGlmICghYWRkaXRpdmUpIHtcbiAgICAgICAgICAgICAgbmV3U29ydGVkID0gW2V4aXN0aW5nXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhZGRpdGl2ZSkge1xuICAgICAgICAgIG5ld1NvcnRlZC5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBjb2x1bW4uaWQsXG4gICAgICAgICAgICBkZXNjOiBmaXJzdFNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdTb3J0ZWQgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiBjb2x1bW4uaWQsXG4gICAgICAgICAgICAgIGRlc2M6IGZpcnN0U29ydERpcmVjdGlvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNdWx0aS1Tb3J0XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBuZXdTb3J0ZWQuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gY29sdW1uWzBdLmlkKVxuICAgICAgICAvLyBFeGlzdGluZyBTb3J0ZWQgQ29sdW1uXG4gICAgICAgIGlmIChleGlzdGluZ0luZGV4ID4gLTEpIHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZyA9IG5ld1NvcnRlZFtleGlzdGluZ0luZGV4XVxuICAgICAgICAgIGlmIChleGlzdGluZy5kZXNjID09PSBzZWNvbmRTb3J0RGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoYWRkaXRpdmUpIHtcbiAgICAgICAgICAgICAgbmV3U29ydGVkLnNwbGljZShleGlzdGluZ0luZGV4LCBjb2x1bW4ubGVuZ3RoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29sdW1uLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBuZXdTb3J0ZWRbZXhpc3RpbmdJbmRleCArIGldLmRlc2MgPSBmaXJzdFNvcnREaXJlY3Rpb25cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sdW1uLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgICAgICAgICAgbmV3U29ydGVkW2V4aXN0aW5nSW5kZXggKyBpXS5kZXNjID0gc2Vjb25kU29ydERpcmVjdGlvblxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFhZGRpdGl2ZSkge1xuICAgICAgICAgICAgbmV3U29ydGVkID0gbmV3U29ydGVkLnNsaWNlKGV4aXN0aW5nSW5kZXgsIGNvbHVtbi5sZW5ndGgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIE5ldyBTb3J0IENvbHVtblxuICAgICAgICB9IGVsc2UgaWYgKGFkZGl0aXZlKSB7XG4gICAgICAgICAgbmV3U29ydGVkID0gbmV3U29ydGVkLmNvbmNhdChcbiAgICAgICAgICAgIGNvbHVtbi5tYXAoZCA9PiAoe1xuICAgICAgICAgICAgICBpZDogZC5pZCxcbiAgICAgICAgICAgICAgZGVzYzogZmlyc3RTb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1NvcnRlZCA9IGNvbHVtbi5tYXAoZCA9PiAoe1xuICAgICAgICAgICAgaWQ6IGQuaWQsXG4gICAgICAgICAgICBkZXNjOiBmaXJzdFNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZVdpdGhEYXRhKFxuICAgICAgICB7XG4gICAgICAgICAgcGFnZTogKCFzb3J0ZWQubGVuZ3RoICYmIG5ld1NvcnRlZC5sZW5ndGgpIHx8ICFhZGRpdGl2ZSA/IDAgOiB0aGlzLnN0YXRlLnBhZ2UsXG4gICAgICAgICAgc29ydGVkOiBuZXdTb3J0ZWQsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IG9uU29ydGVkQ2hhbmdlICYmIG9uU29ydGVkQ2hhbmdlKG5ld1NvcnRlZCwgY29sdW1uLCBhZGRpdGl2ZSlcbiAgICAgIClcbiAgICB9XG5cbiAgICBmaWx0ZXJDb2x1bW4gKGNvbHVtbiwgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgZmlsdGVyZWQgfSA9IHRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZSgpXG4gICAgICBjb25zdCB7IG9uRmlsdGVyZWRDaGFuZ2UgfSA9IHRoaXMucHJvcHNcblxuICAgICAgLy8gUmVtb3ZlIG9sZCBmaWx0ZXIgZmlyc3QgaWYgaXQgZXhpc3RzXG4gICAgICBjb25zdCBuZXdGaWx0ZXJpbmcgPSAoZmlsdGVyZWQgfHwgW10pLmZpbHRlcih4ID0+IHguaWQgIT09IGNvbHVtbi5pZClcblxuICAgICAgaWYgKHZhbHVlICE9PSAnJykge1xuICAgICAgICBuZXdGaWx0ZXJpbmcucHVzaCh7XG4gICAgICAgICAgaWQ6IGNvbHVtbi5pZCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZVdpdGhEYXRhKFxuICAgICAgICB7XG4gICAgICAgICAgZmlsdGVyZWQ6IG5ld0ZpbHRlcmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4gb25GaWx0ZXJlZENoYW5nZSAmJiBvbkZpbHRlcmVkQ2hhbmdlKG5ld0ZpbHRlcmluZywgY29sdW1uLCB2YWx1ZSlcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXNpemVDb2x1bW5TdGFydCAoZXZlbnQsIGNvbHVtbiwgaXNUb3VjaCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIGNvbnN0IHBhcmVudFdpZHRoID0gZXZlbnQudGFyZ2V0LnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGhcblxuICAgICAgbGV0IHBhZ2VYXG4gICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICBwYWdlWCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWdlWCA9IGV2ZW50LnBhZ2VYXG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJhcEV2ZW50cyA9IHRydWVcbiAgICAgIHRoaXMuc2V0U3RhdGVXaXRoRGF0YShcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRseVJlc2l6aW5nOiB7XG4gICAgICAgICAgICBpZDogY29sdW1uLmlkLFxuICAgICAgICAgICAgc3RhcnRYOiBwYWdlWCxcbiAgICAgICAgICAgIHBhcmVudFdpZHRoLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5yZXNpemVDb2x1bW5Nb3ZpbmcpXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMucmVzaXplQ29sdW1uRW5kKVxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLnJlc2l6ZUNvbHVtbkVuZClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5yZXNpemVDb2x1bW5Nb3ZpbmcpXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5yZXNpemVDb2x1bW5FbmQpXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5yZXNpemVDb2x1bW5FbmQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuXG4gICAgcmVzaXplQ29sdW1uTW92aW5nIChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIGNvbnN0IHsgb25SZXNpemVkQ2hhbmdlLCBjb2x1bW4gfSA9IHRoaXMucHJvcHNcbiAgICAgIGNvbnN0IHsgcmVzaXplZCwgY3VycmVudGx5UmVzaXppbmcsIGNvbHVtbnMgfSA9IHRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZSgpXG4gICAgICBjb25zdCBjdXJyZW50Q29sdW1uID0gY29sdW1ucy5maW5kKFxuICAgICAgICBjID0+IGMuYWNjZXNzb3IgPT09IGN1cnJlbnRseVJlc2l6aW5nLmlkIHx8IGMuaWQgPT09IGN1cnJlbnRseVJlc2l6aW5nLmlkXG4gICAgICApXG4gICAgICBjb25zdCBtaW5SZXNpemVXaWR0aCA9XG4gICAgICAgIGN1cnJlbnRDb2x1bW4gJiYgY3VycmVudENvbHVtbi5taW5SZXNpemVXaWR0aCAhPSBudWxsXG4gICAgICAgICAgPyBjdXJyZW50Q29sdW1uLm1pblJlc2l6ZVdpZHRoXG4gICAgICAgICAgOiBjb2x1bW4ubWluUmVzaXplV2lkdGhcblxuICAgICAgLy8gRGVsZXRlIG9sZCB2YWx1ZVxuICAgICAgY29uc3QgbmV3UmVzaXplZCA9IHJlc2l6ZWQuZmlsdGVyKHggPT4geC5pZCAhPT0gY3VycmVudGx5UmVzaXppbmcuaWQpXG5cbiAgICAgIGxldCBwYWdlWFxuXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNobW92ZScpIHtcbiAgICAgICAgcGFnZVggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWFxuICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAnbW91c2Vtb3ZlJykge1xuICAgICAgICBwYWdlWCA9IGV2ZW50LnBhZ2VYXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgoXG4gICAgICAgIGN1cnJlbnRseVJlc2l6aW5nLnBhcmVudFdpZHRoICsgcGFnZVggLSBjdXJyZW50bHlSZXNpemluZy5zdGFydFgsXG4gICAgICAgIG1pblJlc2l6ZVdpZHRoXG4gICAgICApXG5cbiAgICAgIG5ld1Jlc2l6ZWQucHVzaCh7XG4gICAgICAgIGlkOiBjdXJyZW50bHlSZXNpemluZy5pZCxcbiAgICAgICAgdmFsdWU6IG5ld1dpZHRoLFxuICAgICAgfSlcblxuICAgICAgdGhpcy5zZXRTdGF0ZVdpdGhEYXRhKFxuICAgICAgICB7XG4gICAgICAgICAgcmVzaXplZDogbmV3UmVzaXplZCxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4gb25SZXNpemVkQ2hhbmdlICYmIG9uUmVzaXplZENoYW5nZShuZXdSZXNpemVkLCBldmVudClcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXNpemVDb2x1bW5FbmQgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgY29uc3QgaXNUb3VjaCA9IGV2ZW50LnR5cGUgPT09ICd0b3VjaGVuZCcgfHwgZXZlbnQudHlwZSA9PT0gJ3RvdWNoY2FuY2VsJ1xuXG4gICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLnJlc2l6ZUNvbHVtbk1vdmluZylcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLnJlc2l6ZUNvbHVtbkVuZClcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLnJlc2l6ZUNvbHVtbkVuZClcbiAgICAgIH1cblxuICAgICAgLy8gSWYgaXRzIGEgdG91Y2ggZXZlbnQgY2xlYXIgdGhlIG1vdXNlIG9uZSdzIGFzIHdlbGwgYmVjYXVzZSBzb21ldGltZXNcbiAgICAgIC8vIHRoZSBtb3VzZURvd24gZXZlbnQgZ2V0cyBjYWxsZWQgYXMgd2VsbCwgYnV0IHRoZSBtb3VzZVVwIGV2ZW50IGRvZXNuJ3RcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMucmVzaXplQ29sdW1uTW92aW5nKVxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMucmVzaXplQ29sdW1uRW5kKVxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMucmVzaXplQ29sdW1uRW5kKVxuXG4gICAgICAvLyBUaGUgdG91Y2ggZXZlbnRzIGRvbid0IHByb3BhZ2F0ZSB1cCB0byB0aGUgc29ydGluZydzIG9uTW91c2VEb3duIGV2ZW50IHNvXG4gICAgICAvLyBubyBuZWVkIHRvIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcgb3IgZWxzZSB0aGUgZmlyc3QgY2xpY2sgYWZ0ZXIgYSB0b3VjaFxuICAgICAgLy8gZXZlbnQgcmVzaXplIHdpbGwgbm90IHNvcnQgdGhlIGNvbHVtbi5cbiAgICAgIGlmICghaXNUb3VjaCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlV2l0aERhdGEoe1xuICAgICAgICAgIHNraXBOZXh0U29ydDogdHJ1ZSxcbiAgICAgICAgICBjdXJyZW50bHlSZXNpemluZzogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG4iXX0= \ No newline at end of file diff --git a/es/pagination.js b/es/pagination.js new file mode 100644 index 0000000000..75b98005f8 --- /dev/null +++ b/es/pagination.js @@ -0,0 +1,267 @@ +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +/* eslint-disable react/no-did-update-set-state */ +import React, { Component } from 'react'; +import classnames from 'classnames'; + +var defaultButton = function defaultButton(props) { + return React.createElement( + 'button', + _extends({ type: 'button' }, props, { className: '-btn' }), + props.children + ); +}; + +var ReactTablePagination = function (_Component) { + _inherits(ReactTablePagination, _Component); + + function ReactTablePagination(props) { + _classCallCheck(this, ReactTablePagination); + + var _this = _possibleConstructorReturn(this, (ReactTablePagination.__proto__ || Object.getPrototypeOf(ReactTablePagination)).call(this, props)); + + _this.getSafePage = _this.getSafePage.bind(_this); + _this.changePage = _this.changePage.bind(_this); + _this.applyPage = _this.applyPage.bind(_this); + + _this.state = { + page: props.page + }; + return _this; + } + + _createClass(ReactTablePagination, [{ + key: 'componentDidUpdate', + value: function componentDidUpdate(prevProps, prevState) { + if (prevProps.page !== this.props.page || prevState.page !== this.state.page) { + // this is probably safe because we only update when old/new props/state.page are different + // eslint-disable-next-line react/no-did-update-set-state + this.setState({ + page: this.props.page + }); + } + /* when the last page from new props is smaller + than the current page in the page box, + the current page needs to be the last page. */ + if (this.props.pages !== prevProps.pages && this.props.pages <= this.state.page) { + this.setState({ + page: this.props.pages - 1 + }); + } + } + }, { + key: 'getSafePage', + value: function getSafePage(page) { + if (Number.isNaN(page)) { + page = this.props.page; + } + return Math.min(Math.max(page, 0), this.props.pages - 1); + } + }, { + key: 'changePage', + value: function changePage(page) { + page = this.getSafePage(page); + this.setState({ page: page }); + if (this.props.page !== page) { + this.props.onPageChange(page); + } + } + }, { + key: 'applyPage', + value: function applyPage(e) { + if (e) { + e.preventDefault(); + } + var page = this.state.page; + this.changePage(page === '' ? this.props.page : page); + } + }, { + key: 'getPageJumpProperties', + value: function getPageJumpProperties() { + var _this2 = this; + + return { + onKeyPress: function onKeyPress(e) { + if (e.which === 13 || e.keyCode === 13) { + _this2.applyPage(); + } + }, + onBlur: this.applyPage, + value: this.state.page === '' ? '' : this.state.page + 1, + onChange: function onChange(e) { + var val = e.target.value; + var page = val - 1; + if (val === '') { + return _this2.setState({ page: val }); + } + _this2.setState({ page: _this2.getSafePage(page) }); + }, + inputType: this.state.page === '' ? 'text' : 'number', + pageJumpText: this.props.pageJumpText + }; + } + }, { + key: 'render', + value: function render() { + var _this3 = this; + + var _props = this.props, + pages = _props.pages, + page = _props.page, + showPageSizeOptions = _props.showPageSizeOptions, + pageSizeOptions = _props.pageSizeOptions, + pageSize = _props.pageSize, + showPageJump = _props.showPageJump, + canPrevious = _props.canPrevious, + canNext = _props.canNext, + onPageSizeChange = _props.onPageSizeChange, + className = _props.className, + PreviousComponent = _props.PreviousComponent, + NextComponent = _props.NextComponent, + renderPageJump = _props.renderPageJump, + renderCurrentPage = _props.renderCurrentPage, + renderTotalPagesCount = _props.renderTotalPagesCount, + renderPageSizeOptions = _props.renderPageSizeOptions; + + + return React.createElement( + 'div', + { className: classnames(className, '-pagination'), style: this.props.style }, + React.createElement( + 'div', + { className: '-previous' }, + React.createElement( + PreviousComponent, + { + onClick: function onClick() { + if (!canPrevious) return; + _this3.changePage(page - 1); + }, + disabled: !canPrevious || this.state.page < 1 + }, + this.props.previousText + ) + ), + React.createElement( + 'div', + { className: '-center' }, + React.createElement( + 'span', + { className: '-pageInfo' }, + this.props.pageText, + ' ', + showPageJump ? renderPageJump(this.getPageJumpProperties()) : renderCurrentPage(page), + ' ', + this.props.ofText, + ' ', + renderTotalPagesCount(pages) + ), + showPageSizeOptions && renderPageSizeOptions({ + pageSize: pageSize, + rowsSelectorText: this.props.rowsSelectorText, + pageSizeOptions: pageSizeOptions, + onPageSizeChange: onPageSizeChange, + rowsText: this.props.rowsText + }) + ), + React.createElement( + 'div', + { className: '-next' }, + React.createElement( + NextComponent, + { + onClick: function onClick() { + if (!canNext) return; + _this3.changePage(page + 1); + }, + disabled: !canNext || this.state.page >= this.props.pages - 1 + }, + this.props.nextText + ) + ) + ); + } + }]); + + return ReactTablePagination; +}(Component); + +ReactTablePagination.defaultProps = { + PreviousComponent: defaultButton, + NextComponent: defaultButton, + renderPageJump: function renderPageJump(_ref) { + var onChange = _ref.onChange, + value = _ref.value, + onBlur = _ref.onBlur, + onKeyPress = _ref.onKeyPress, + inputType = _ref.inputType, + pageJumpText = _ref.pageJumpText; + return React.createElement( + 'div', + { className: '-pageJump' }, + React.createElement('input', { + 'aria-label': pageJumpText, + type: inputType, + onChange: onChange, + value: value, + onBlur: onBlur, + onKeyPress: onKeyPress + }) + ); + }, + renderCurrentPage: function renderCurrentPage(page) { + return React.createElement( + 'span', + { className: '-currentPage' }, + page + 1 + ); + }, + renderTotalPagesCount: function renderTotalPagesCount(pages) { + return React.createElement( + 'span', + { className: '-totalPages' }, + pages || 1 + ); + }, + renderPageSizeOptions: function renderPageSizeOptions(_ref2) { + var pageSize = _ref2.pageSize, + pageSizeOptions = _ref2.pageSizeOptions, + rowsSelectorText = _ref2.rowsSelectorText, + onPageSizeChange = _ref2.onPageSizeChange, + rowsText = _ref2.rowsText; + return React.createElement( + 'span', + { className: 'select-wrap -pageSizeOptions' }, + React.createElement( + 'select', + { + 'aria-label': rowsSelectorText, + onChange: function onChange(e) { + return onPageSizeChange(Number(e.target.value)); + }, + value: pageSize + }, + pageSizeOptions.map(function (option, i) { + return ( + // eslint-disable-next-line react/no-array-index-key + React.createElement( + 'option', + { key: i, value: option }, + option + ' ' + rowsText + ) + ); + }) + ) + ); + } +}; +export default ReactTablePagination; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYWdpbmF0aW9uLmpzIl0sIm5hbWVzIjpbIlJlYWN0IiwiQ29tcG9uZW50IiwiY2xhc3NuYW1lcyIsImRlZmF1bHRCdXR0b24iLCJwcm9wcyIsImNoaWxkcmVuIiwiUmVhY3RUYWJsZVBhZ2luYXRpb24iLCJnZXRTYWZlUGFnZSIsImJpbmQiLCJjaGFuZ2VQYWdlIiwiYXBwbHlQYWdlIiwic3RhdGUiLCJwYWdlIiwicHJldlByb3BzIiwicHJldlN0YXRlIiwic2V0U3RhdGUiLCJwYWdlcyIsIk51bWJlciIsImlzTmFOIiwiTWF0aCIsIm1pbiIsIm1heCIsIm9uUGFnZUNoYW5nZSIsImUiLCJwcmV2ZW50RGVmYXVsdCIsIm9uS2V5UHJlc3MiLCJ3aGljaCIsImtleUNvZGUiLCJvbkJsdXIiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwidmFsIiwidGFyZ2V0IiwiaW5wdXRUeXBlIiwicGFnZUp1bXBUZXh0Iiwic2hvd1BhZ2VTaXplT3B0aW9ucyIsInBhZ2VTaXplT3B0aW9ucyIsInBhZ2VTaXplIiwic2hvd1BhZ2VKdW1wIiwiY2FuUHJldmlvdXMiLCJjYW5OZXh0Iiwib25QYWdlU2l6ZUNoYW5nZSIsImNsYXNzTmFtZSIsIlByZXZpb3VzQ29tcG9uZW50IiwiTmV4dENvbXBvbmVudCIsInJlbmRlclBhZ2VKdW1wIiwicmVuZGVyQ3VycmVudFBhZ2UiLCJyZW5kZXJUb3RhbFBhZ2VzQ291bnQiLCJyZW5kZXJQYWdlU2l6ZU9wdGlvbnMiLCJzdHlsZSIsInByZXZpb3VzVGV4dCIsInBhZ2VUZXh0IiwiZ2V0UGFnZUp1bXBQcm9wZXJ0aWVzIiwib2ZUZXh0Iiwicm93c1NlbGVjdG9yVGV4dCIsInJvd3NUZXh0IiwibmV4dFRleHQiLCJkZWZhdWx0UHJvcHMiLCJtYXAiLCJvcHRpb24iLCJpIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQSxPQUFPQSxLQUFQLElBQWdCQyxTQUFoQixRQUFpQyxPQUFqQztBQUNBLE9BQU9DLFVBQVAsTUFBdUIs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Q0FBU0gsS0FBaEIsQ0FBakIsQ0FBTDtBQUFBLFdBRlo7QUFHRSxpQkFBT1E7QUFIVDtBQUtHRCx3QkFBZ0JzQixHQUFoQixDQUFvQixVQUFDQyxNQUFELEVBQVNDLENBQVQ7QUFBQTtBQUNuQjtBQUNBO0FBQUE7QUFBQSxnQkFBUSxLQUFLQSxDQUFiLEVBQWdCLE9BQU9ELE1BQXZCO0FBQ01BLG9CQUROLFNBQ2dCSjtBQURoQjtBQUZtQjtBQUFBLFNBQXBCO0FBTEg7QUFERixLQVBxQjtBQUFBO0FBbkJILEM7ZUFESGpELG9CIiwiZmlsZSI6InBhZ2luYXRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZSAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcblxuY29uc3QgZGVmYXVsdEJ1dHRvbiA9IHByb3BzID0+IChcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgey4uLnByb3BzfSBjbGFzc05hbWU9XCItYnRuXCI+XG4gICAge3Byb3BzLmNoaWxkcmVufVxuICA8L2J1dHRvbj5cbilcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhY3RUYWJsZVBhZ2luYXRpb24gZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIFByZXZpb3VzQ29tcG9uZW50OiBkZWZhdWx0QnV0dG9uLFxuICAgIE5leHRDb21wb25lbnQ6IGRlZmF1bHRCdXR0b24sXG4gICAgcmVuZGVyUGFnZUp1bXA6ICh7XG4gICAgICBvbkNoYW5nZSwgdmFsdWUsIG9uQmx1ciwgb25LZXlQcmVzcywgaW5wdXRUeXBlLCBwYWdlSnVtcFRleHQsXG4gICAgfSkgPT4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCItcGFnZUp1bXBcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgYXJpYS1sYWJlbD17cGFnZUp1bXBUZXh0fVxuICAgICAgICAgIHR5cGU9e2lucHV0VHlwZX1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgICAgIG9uS2V5UHJlc3M9e29uS2V5UHJlc3N9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApLFxuICAgIHJlbmRlckN1cnJlbnRQYWdlOiBwYWdlID0+IDxzcGFuIGNsYXNzTmFtZT1cIi1jdXJyZW50UGFnZVwiPntwYWdlICsgMX08L3NwYW4+LFxuICAgIHJlbmRlclRvdGFsUGFnZXNDb3VudDogcGFnZXMgPT4gPHNwYW4gY2xhc3NOYW1lPVwiLXRvdGFsUGFnZXNcIj57cGFnZXMgfHwgMX08L3NwYW4+LFxuICAgIHJlbmRlclBhZ2VTaXplT3B0aW9uczogKHtcbiAgICAgIHBhZ2VTaXplLFxuICAgICAgcGFnZVNpemVPcHRpb25zLFxuICAgICAgcm93c1NlbGVjdG9yVGV4dCxcbiAgICAgIG9uUGFnZVNpemVDaGFuZ2UsXG4gICAgICByb3dzVGV4dCxcbiAgICB9KSA9PiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzZWxlY3Qtd3JhcCAtcGFnZVNpemVPcHRpb25zXCI+XG4gICAgICAgIDxzZWxlY3RcbiAgICAgICAgICBhcmlhLWxhYmVsPXtyb3dzU2VsZWN0b3JUZXh0fVxuICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IG9uUGFnZVNpemVDaGFuZ2UoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSl9XG4gICAgICAgICAgdmFsdWU9e3BhZ2VTaXplfVxuICAgICAgICA+XG4gICAgICAgICAge3BhZ2VTaXplT3B0aW9ucy5tYXAoKG9wdGlvbiwgaSkgPT4gKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2l9IHZhbHVlPXtvcHRpb259PlxuICAgICAgICAgICAgICB7YCR7b3B0aW9ufSAke3Jvd3NUZXh0fWB9XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L3NwYW4+XG4gICAgKSxcbiAgfVxuXG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKVxuXG4gICAgdGhpcy5nZXRTYWZlUGFnZSA9IHRoaXMuZ2V0U2FmZVBhZ2UuYmluZCh0aGlzKVxuICAgIHRoaXMuY2hhbmdlUGFnZSA9IHRoaXMuY2hhbmdlUGFnZS5iaW5kKHRoaXMpXG4gICAgdGhpcy5hcHBseVBhZ2UgPSB0aGlzLmFwcGx5UGFnZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgcGFnZTogcHJvcHMucGFnZSxcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUgKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgaWYgKHByZXZQcm9wcy5wYWdlICE9PSB0aGlzLnByb3BzLnBhZ2UgfHwgcHJldlN0YXRlLnBhZ2UgIT09IHRoaXMuc3RhdGUucGFnZSkge1xuICAgICAgLy8gdGhpcyBpcyBwcm9iYWJseSBzYWZlIGJlY2F1c2Ugd2Ugb25seSB1cGRhdGUgd2hlbiBvbGQvbmV3IHByb3BzL3N0YXRlLnBhZ2UgYXJlIGRpZmZlcmVudFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcGFnZTogdGhpcy5wcm9wcy5wYWdlLFxuICAgICAgfSlcbiAgICB9XG4gICAgLyogd2hlbiB0aGUgbGFzdCBwYWdlIGZyb20gbmV3IHByb3BzIGlzIHNtYWxsZXJcbiAgICAgdGhhbiB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBwYWdlIGJveCxcbiAgICAgdGhlIGN1cnJlbnQgcGFnZSBuZWVkcyB0byBiZSB0aGUgbGFzdCBwYWdlLiAqL1xuICAgIGlmICh0aGlzLnByb3BzLnBhZ2VzICE9PSBwcmV2UHJvcHMucGFnZXMgJiYgdGhpcy5wcm9wcy5wYWdlcyA8PSB0aGlzLnN0YXRlLnBhZ2UpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwYWdlOiB0aGlzLnByb3BzLnBhZ2VzIC0gMSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0U2FmZVBhZ2UgKHBhZ2UpIHtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHBhZ2UpKSB7XG4gICAgICBwYWdlID0gdGhpcy5wcm9wcy5wYWdlXG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChwYWdlLCAwKSwgdGhpcy5wcm9wcy5wYWdlcyAtIDEpXG4gIH1cblxuICBjaGFuZ2VQYWdlIChwYWdlKSB7XG4gICAgcGFnZSA9IHRoaXMuZ2V0U2FmZVBhZ2UocGFnZSlcbiAgICB0aGlzLnNldFN0YXRlKHsgcGFnZSB9KVxuICAgIGlmICh0aGlzLnByb3BzLnBhZ2UgIT09IHBhZ2UpIHtcbiAgICAgIHRoaXMucHJvcHMub25QYWdlQ2hhbmdlKHBhZ2UpXG4gICAgfVxuICB9XG5cbiAgYXBwbHlQYWdlIChlKSB7XG4gICAgaWYgKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIH1cbiAgICBjb25zdCBwYWdlID0gdGhpcy5zdGF0ZS5wYWdlXG4gICAgdGhpcy5jaGFuZ2VQYWdlKHBhZ2UgPT09ICcnID8gdGhpcy5wcm9wcy5wYWdlIDogcGFnZSlcbiAgfVxuXG4gIGdldFBhZ2VKdW1wUHJvcGVydGllcyAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9uS2V5UHJlc3M6IGUgPT4ge1xuICAgICAgICBpZiAoZS53aGljaCA9PT0gMTMgfHwgZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgIHRoaXMuYXBwbHlQYWdlKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uQmx1cjogdGhpcy5hcHBseVBhZ2UsXG4gICAgICB2YWx1ZTogdGhpcy5zdGF0ZS5wYWdlID09PSAnJyA/ICcnIDogdGhpcy5zdGF0ZS5wYWdlICsgMSxcbiAgICAgIG9uQ2hhbmdlOiBlID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gZS50YXJnZXQudmFsdWVcbiAgICAgICAgY29uc3QgcGFnZSA9IHZhbCAtIDFcbiAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7IHBhZ2U6IHZhbCB9KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBwYWdlOiB0aGlzLmdldFNhZmVQYWdlKHBhZ2UpIH0pXG4gICAgICB9LFxuICAgICAgaW5wdXRUeXBlOiB0aGlzLnN0YXRlLnBhZ2UgPT09ICcnID8gJ3RleHQnIDogJ251bWJlcicsXG4gICAgICBwYWdlSnVtcFRleHQ6IHRoaXMucHJvcHMucGFnZUp1bXBUZXh0LFxuICAgIH1cbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgLy8gQ29tcHV0ZWRcbiAgICAgIHBhZ2VzLFxuICAgICAgLy8gUHJvcHNcbiAgICAgIHBhZ2UsXG4gICAgICBzaG93UGFnZVNpemVPcHRpb25zLFxuICAgICAgcGFnZVNpemVPcHRpb25zLFxuICAgICAgcGFnZVNpemUsXG4gICAgICBzaG93UGFnZUp1bXAsXG4gICAgICBjYW5QcmV2aW91cyxcbiAgICAgIGNhbk5leHQsXG4gICAgICBvblBhZ2VTaXplQ2hhbmdlLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgUHJldmlvdXNDb21wb25lbnQsXG4gICAgICBOZXh0Q29tcG9uZW50LFxuICAgICAgcmVuZGVyUGFnZUp1bXAsXG4gICAgICByZW5kZXJDdXJyZW50UGFnZSxcbiAgICAgIHJlbmRlclRvdGFsUGFnZXNDb3VudCxcbiAgICAgIHJlbmRlclBhZ2VTaXplT3B0aW9ucyxcbiAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNsYXNzTmFtZSwgJy1wYWdpbmF0aW9uJyl9IHN0eWxlPXt0aGlzLnByb3BzLnN0eWxlfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCItcHJldmlvdXNcIj5cbiAgICAgICAgICA8UHJldmlvdXNDb21wb25lbnRcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjYW5QcmV2aW91cykgcmV0dXJuXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFnZShwYWdlIC0gMSlcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBkaXNhYmxlZD17IWNhblByZXZpb3VzIHx8IHRoaXMuc3RhdGUucGFnZSA8IDF9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMucHJldmlvdXNUZXh0fVxuICAgICAgICAgIDwvUHJldmlvdXNDb21wb25lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1jZW50ZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCItcGFnZUluZm9cIj5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUZXh0fXsnICd9XG4gICAgICAgICAgICB7c2hvd1BhZ2VKdW1wID8gcmVuZGVyUGFnZUp1bXAodGhpcy5nZXRQYWdlSnVtcFByb3BlcnRpZXMoKSkgOiByZW5kZXJDdXJyZW50UGFnZShwYWdlKX17JyAnfVxuICAgICAgICAgICAge3RoaXMucHJvcHMub2ZUZXh0fSB7cmVuZGVyVG90YWxQYWdlc0NvdW50KHBhZ2VzKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge3Nob3dQYWdlU2l6ZU9wdGlvbnMgJiZcbiAgICAgICAgICByZW5kZXJQYWdlU2l6ZU9wdGlvbnMoe1xuICAgICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgICByb3dzU2VsZWN0b3JUZXh0OiB0aGlzLnByb3BzLnJvd3NTZWxlY3RvclRleHQsXG4gICAgICAgICAgICBwYWdlU2l6ZU9wdGlvbnMsXG4gICAgICAgICAgICBvblBhZ2VTaXplQ2hhbmdlLFxuICAgICAgICAgICAgcm93c1RleHQ6IHRoaXMucHJvcHMucm93c1RleHQsXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1uZXh0XCI+XG4gICAgICAgICAgPE5leHRDb21wb25lbnRcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjYW5OZXh0KSByZXR1cm5cbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VQYWdlKHBhZ2UgKyAxKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshY2FuTmV4dCB8fCB0aGlzLnN0YXRlLnBhZ2UgPj0gdGhpcy5wcm9wcy5wYWdlcyAtIDF9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMubmV4dFRleHR9XG4gICAgICAgICAgPC9OZXh0Q29tcG9uZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/es/propTypes.js b/es/propTypes.js new file mode 100644 index 0000000000..906a9b89eb --- /dev/null +++ b/es/propTypes.js @@ -0,0 +1,168 @@ +import PropTypes from 'prop-types'; + +export default { + // General + data: PropTypes.any, + loading: PropTypes.bool, + showPagination: PropTypes.bool, + showPaginationTop: PropTypes.bool, + showPaginationBottom: PropTypes.bool, + showPageSizeOptions: PropTypes.bool, + pageSizeOptions: PropTypes.array, + defaultPageSize: PropTypes.number, + showPageJump: PropTypes.bool, + collapseOnSortingChange: PropTypes.bool, + collapseOnPageChange: PropTypes.bool, + collapseOnDataChange: PropTypes.bool, + freezeWhenExpanded: PropTypes.bool, + sortable: PropTypes.bool, + resizable: PropTypes.bool, + filterable: PropTypes.bool, + defaultSortDesc: PropTypes.bool, + defaultSorted: PropTypes.array, + defaultFiltered: PropTypes.array, + defaultResized: PropTypes.array, + defaultExpanded: PropTypes.object, + defaultFilterMethod: PropTypes.func, + defaultSortMethod: PropTypes.func, + + // Controlled State Callbacks + onPageChange: PropTypes.func, + onPageSizeChange: PropTypes.func, + onSortedChange: PropTypes.func, + onFilteredChange: PropTypes.func, + onResizedChange: PropTypes.func, + onExpandedChange: PropTypes.func, + + // Pivoting + pivotBy: PropTypes.array, + + // Key Constants + pivotValKey: PropTypes.string, + pivotIDKey: PropTypes.string, + subRowsKey: PropTypes.string, + aggregatedKey: PropTypes.string, + nestingLevelKey: PropTypes.string, + originalKey: PropTypes.string, + indexKey: PropTypes.string, + groupedByPivotKey: PropTypes.string, + + // Server-side Callbacks + onFetchData: PropTypes.func, + + // Classes + className: PropTypes.string, + style: PropTypes.object, + + // Component decorators + getProps: PropTypes.func, + getTableProps: PropTypes.func, + getTheadGroupProps: PropTypes.func, + getTheadGroupTrProps: PropTypes.func, + getTheadGroupThProps: PropTypes.func, + getTheadProps: PropTypes.func, + getTheadTrProps: PropTypes.func, + getTheadThProps: PropTypes.func, + getTheadFilterProps: PropTypes.func, + getTheadFilterTrProps: PropTypes.func, + getTheadFilterThProps: PropTypes.func, + getTbodyProps: PropTypes.func, + getTrGroupProps: PropTypes.func, + getTrProps: PropTypes.func, + getTdProps: PropTypes.func, + getTfootProps: PropTypes.func, + getTfootTrProps: PropTypes.func, + getTfootTdProps: PropTypes.func, + getPaginationProps: PropTypes.func, + getLoadingProps: PropTypes.func, + getNoDataProps: PropTypes.func, + getResizerProps: PropTypes.func, + + // Global Column Defaults + columns: PropTypes.arrayOf(PropTypes.shape({ + // Renderers + Cell: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.elementType]), + Header: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.elementType]), + Footer: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.elementType]), + Aggregated: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.elementType]), + Pivot: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.elementType]), + PivotValue: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.elementType]), + Expander: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.elementType]), + Filter: PropTypes.oneOfType([PropTypes.element, PropTypes.elementType]), + + // All Columns + sortable: PropTypes.bool, // use table default + resizable: PropTypes.bool, // use table default + filterable: PropTypes.bool, // use table default + show: PropTypes.bool, + minWidth: PropTypes.number, + minResizeWidth: PropTypes.number, + + // Cells only + className: PropTypes.string, + style: PropTypes.object, + getProps: PropTypes.func, + + // Pivot only + aggregate: PropTypes.func, + + // Headers only + headerClassName: PropTypes.string, + headerStyle: PropTypes.object, + getHeaderProps: PropTypes.func, + + // Footers only + footerClassName: PropTypes.string, + footerStyle: PropTypes.object, + getFooterProps: PropTypes.func, + filterMethod: PropTypes.func, + filterAll: PropTypes.bool, + sortMethod: PropTypes.func + })), + + // Global Expander Column Defaults + expanderDefaults: PropTypes.shape({ + sortable: PropTypes.bool, + resizable: PropTypes.bool, + filterable: PropTypes.bool, + width: PropTypes.number + }), + + pivotDefaults: PropTypes.object, + + // Text + previousText: PropTypes.node, + nextText: PropTypes.node, + loadingText: PropTypes.node, + noDataText: PropTypes.node, + pageText: PropTypes.node, + ofText: PropTypes.node, + rowsText: PropTypes.node, + pageJumpText: PropTypes.node, + rowsSelectorText: PropTypes.node, + + // Components + TableComponent: PropTypes.elementType, + TheadComponent: PropTypes.elementType, + TbodyComponent: PropTypes.elementType, + TrGroupComponent: PropTypes.elementType, + TrComponent: PropTypes.elementType, + ThComponent: PropTypes.elementType, + TdComponent: PropTypes.elementType, + TfootComponent: PropTypes.elementType, + FilterComponent: PropTypes.elementType, + ExpanderComponent: PropTypes.elementType, + PivotValueComponent: PropTypes.elementType, + AggregatedComponent: PropTypes.elementType, + // this is a computed default generated using + PivotComponent: PropTypes.elementType, + // the ExpanderComponent and PivotValueComponent at run-time in methods.js + PaginationComponent: PropTypes.elementType, + PreviousComponent: PropTypes.elementType, + NextComponent: PropTypes.elementType, + LoadingComponent: PropTypes.elementType, + NoDataComponent: PropTypes.elementType, + ResizerComponent: PropTypes.elementType, + PadRowComponent: PropTypes.elementType +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9wVHlwZXMuanMiXSwibmFtZXMiOlsiUHJvcFR5cGVzIiwiZGF0YSIsImFueSIsImxvYWRpbmciLCJib29sIiwic2hvd1BhZ2luYXRpb24iLCJzaG93UGFnaW5hdGlvblRvcCIsInNob3dQYWdpbmF0aW9uQm90dG9tIiwic2hvd1BhZ2VTaXplT3B0aW9ucyIsInBhZ2VTaXplT3B0aW9ucyIsImFycmF5IiwiZGVmYXVsdFBhZ2VTaXplIiwibnVtYmVyIiwic2hvd1BhZ2VKdW1wIiwiY29sbGFwc2VPblNvcnRpbmdDaGFuZ2UiLCJjb2xsYXBzZU9uUGFnZUNoYW5nZSIsImNvbGxhcHNlT25EYXRhQ2hhbmdlIiwiZnJlZXplV2hlbkV4cGFuZGVkIiwic29ydGFibGUiLCJyZXNpemFibGUiLCJmaWx0ZXJhYmxlIiwiZGVmYXVsdFNvcnREZXNjIiwiZGVmYXVsdFNvcnRlZCIsImRlZmF1bHRGaWx0ZXJlZCIsImRlZmF1bHRSZXNpemVkIiwiZGVmYXVsdEV4cGFuZGVkIiwib2JqZWN0IiwiZGVmYXVsdEZpbHRlck1ldGhvZCIsImZ1bmMiLCJkZWZhdWx0U29ydE1ldGhvZCIsIm9uUGFnZUNoYW5nZSIsIm9uUGFnZVNpemVDaGFuZ2UiLCJvblNvcnRlZENoYW5nZSIsIm9uRmlsdGVyZWRDaGFuZ2UiLCJvblJlc2l6ZWRDaGFuZ2UiLCJvbkV4cGFuZGVkQ2hhbmdlIiwicGl2b3RCeSIsInBpdm90VmFsS2V5Iiwic3RyaW5nIiwicGl2b3RJREtleSIsInN1YlJvd3NLZXkiLCJhZ2dyZWdhdGVkS2V5IiwibmVzdGluZ0xldmVsS2V5Iiwib3JpZ2luYWxLZXkiLCJpbmRleEtleSIsImdyb3VwZWRCeVBpdm90S2V5Iiwib25GZXRjaERhdGEiLCJjbGFzc05hbWUiLCJzdHlsZSIsImdldFByb3BzIiwiZ2V0VGFibGVQcm9wcyIsImdldFRoZWFkR3JvdXBQcm9wcyIsImdldFRoZWFkR3JvdXBUclByb3BzIiwiZ2V0VGhlYWRHcm91cFRoUHJvcHMiLCJnZXRUaGVhZFByb3BzIiwiZ2V0VGhlYWRUclByb3BzIiwiZ2V0VGhlYWRUaFByb3BzIiwiZ2V0VGhlYWRGaWx0ZXJQcm9wcyIsImdldFRoZWFkRmlsdGVyVHJQcm9wcyIsImdldFRoZWFkRmlsdGVyVGhQcm9wcyIsImdldFRib2R5UHJvcHMiLCJnZXRUckdyb3VwUHJvcHMiLCJnZXRUclByb3BzIiwiZ2V0VGRQcm9wcyIsImdldFRmb290UHJvcHMiLCJnZXRUZm9vdFRyUHJvcHMiLCJnZXRUZm9vdFRkUHJvcHMiLCJnZXRQYWdpbmF0aW9uUHJvcHMiLCJnZXRMb2FkaW5nUHJvcHMiLCJnZXROb0RhdGFQcm9wcyIsImdldFJlc2l6ZXJQcm9wcyIsImNvbHVtbnMiLCJhcnJheU9mIiwic2hhcGUiLCJDZWxsIiwib25lT2ZUeXBlIiwiZWxlbWVudCIsImVsZW1lbnRUeXBlIiwiSGVhZGVyIiwiRm9vdGVyIiwiQWdncmVnYXRlZCIsIlBpdm90IiwiUGl2b3RWYWx1ZSIsIkV4cGFuZGVyIiwiRmlsdGVyIiwic2hvdyIsIm1pbldpZHRoIiwibWluUmVzaXplV2lkdGgiLCJhZ2dyZWdhdGUiLCJoZWFkZXJDbGFzc05hbWUiLCJoZWFkZXJTdHlsZSIsImdldEhlYWRlclByb3BzIiwiZm9vdGVyQ2xhc3NOYW1lIiwiZm9vdGVyU3R5bGUiLCJnZXRGb290ZXJQcm9wcyIsImZpbHRlck1ldGhvZCIsImZpbHRlckFsbCIsInNvcnRNZXRob2QiLCJleHBhbmRlckRlZmF1bHRzIiwid2lkdGgiLCJwaXZvdERlZmF1bHRzIiwicHJldmlvdXNUZXh0Iiwibm9kZSIsIm5leHRUZXh0IiwibG9hZGluZ1RleHQiLCJub0RhdGFUZXh0IiwicGFnZVRleHQiLCJvZlRleHQiLCJyb3dzVGV4dCIsInBhZ2VKdW1wVGV4dCIsInJvd3NTZWxlY3RvclRleHQiLCJUYWJsZUNvbXBvbmVudCIsIlRoZWFkQ29tcG9uZW50IiwiVGJvZHlDb21wb25lbnQiLCJUckdyb3VwQ29tcG9uZW50IiwiVHJDb21wb25lbnQiLCJUaENvbXBvbmVudCIsIlRkQ29tcG9uZW50IiwiVGZvb3RDb21wb25lbnQiLCJGaWx0ZXJDb21wb25lbnQiLCJFeHBhbmRlckNvbXBvbmVudCIsIlBpdm90VmFsdWVDb21wb25lbnQiLCJBZ2dyZWdhdGVkQ29tcG9uZW50IiwiUGl2b3RDb21wb25lbnQiLCJQYWdpbmF0aW9uQ29tcG9uZW50IiwiUHJldmlvdXNDb21wb25lbnQiLCJOZXh0Q29tcG9uZW50IiwiTG9hZGluZ0NvbXBvbmVudCIsIk5vRGF0YUNvbXBvbmVudCIsIlJlc2l6ZXJDb21wb25lbnQiLCJQYWRSb3dDb21wb25lbnQiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFNBQVAsTUFBc0IsWUFBdEI7O0FBRUEsZUFBZTtBQUNiO0FBQ0FDLFFBQU1ELFVBQVVFLEdBRkg7QUFHYkMsV0FBU0gsVUFBVUksSUFITjtBQUliQyxrQkFBZ0JMLFVBQVVJLElBSmI7QUFLYkUscUJBQW1CTixVQUFVSSxJQUxoQjtBQU1iRyx3QkFBc0JQLFVBQVVJLElBTm5CO0FBT2JJLHVCQUFxQlIsVUFBVUksSUFQbEI7QUFRYkssbUJBQWlCVCxVQUFVVSxLQVJkO0FBU2JDLG1CQUFpQlgsVUFBVVksTUFUZDtBQVViQyxnQkFBY2IsVUFBVUksSUFWWDtBQVdiVSwyQkFBeUJkLFVBQVVJLElBWHRCO0FBWWJXLHdCQUFzQmYsVUFBVUksSUFabkI7QUFhYlksd0JBQXNCaEIsVUFBVUksSUFibkI7QUFjYmEsc0JBQW9CakIsVUFBVUksSUFkakI7QUFlYmMsWUFBVWxCLFVBQVVJLElBZlA7QUFnQmJlLGFBQVduQixVQUFVSSxJQWhCUjtBQWlCYmdCLGNBQVlwQixVQUFVSSxJQWpCVDtBQWtCYmlCLG1CQUFpQnJCLFVBQVVJLElBbEJkO0FBbUJia0IsaUJBQWV0QixVQUFVVSxLQW5CWjtBQW9CYmEsbUJBQWlCdkIsVUFBVVUsS0FwQmQ7QUFxQmJjLGtCQUFnQnhCLFVBQVVVLEtBckJiO0FBc0JiZSxtQkFBaUJ6QixVQUFVMEIsTUF0QmQ7QUF1QmJDLHVCQUFxQjNCLFVBQVU0QixJQXZCbEI7QUF3QmJD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QWU5SCxVQUFVNkUsV0FqS1o7QUFrS2JrRCxvQkFBa0IvSCxVQUFVNkUsV0FsS2Y7QUFtS2JtRCxtQkFBaUJoSSxVQUFVNkUsV0FuS2Q7QUFvS2JvRCxvQkFBa0JqSSxVQUFVNkUsV0FwS2Y7QUFxS2JxRCxtQkFBaUJsSSxVQUFVNkU7QUFyS2QsQ0FBZiIsImZpbGUiOiJwcm9wVHlwZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLy8gR2VuZXJhbFxuICBkYXRhOiBQcm9wVHlwZXMuYW55LFxuICBsb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2hvd1BhZ2luYXRpb246IFByb3BUeXBlcy5ib29sLFxuICBzaG93UGFnaW5hdGlvblRvcDogUHJvcFR5cGVzLmJvb2wsXG4gIHNob3dQYWdpbmF0aW9uQm90dG9tOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2hvd1BhZ2VTaXplT3B0aW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIHBhZ2VTaXplT3B0aW9uczogUHJvcFR5cGVzLmFycmF5LFxuICBkZWZhdWx0UGFnZVNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gIHNob3dQYWdlSnVtcDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbGxhcHNlT25Tb3J0aW5nQ2hhbmdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29sbGFwc2VPblBhZ2VDaGFuZ2U6IFByb3BUeXBlcy5ib29sLFxuICBjb2xsYXBzZU9uRGF0YUNoYW5nZTogUHJvcFR5cGVzLmJvb2wsXG4gIGZyZWV6ZVdoZW5FeHBhbmRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHNvcnRhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgcmVzaXphYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgZmlsdGVyYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIGRlZmF1bHRTb3J0RGVzYzogUHJvcFR5cGVzLmJvb2wsXG4gIGRlZmF1bHRTb3J0ZWQ6IFByb3BUeXBlcy5hcnJheSxcbiAgZGVmYXVsdEZpbHRlcmVkOiBQcm9wVHlwZXMuYXJyYXksXG4gIGRlZmF1bHRSZXNpemVkOiBQcm9wVHlwZXMuYXJyYXksXG4gIGRlZmF1bHRFeHBhbmRlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgZGVmYXVsdEZpbHRlck1ldGhvZDogUHJvcFR5cGVzLmZ1bmMsXG4gIGRlZmF1bHRTb3J0TWV0aG9kOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvLyBDb250cm9sbGVkIFN0YXRlIENhbGxiYWNrc1xuICBvblBhZ2VDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblBhZ2VTaXplQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Tb3J0ZWRDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkZpbHRlcmVkQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25SZXNpemVkQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25FeHBhbmRlZENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLy8gUGl2b3RpbmdcbiAgcGl2b3RCeTogUHJvcFR5cGVzLmFycmF5LFxuXG4gIC8vIEtleSBDb25zdGFudHNcbiAgcGl2b3RWYWxLZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHBpdm90SURLZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHN1YlJvd3NLZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFnZ3JlZ2F0ZWRLZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG5lc3RpbmdMZXZlbEtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb3JpZ2luYWxLZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGluZGV4S2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBncm91cGVkQnlQaXZvdEtleTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvLyBTZXJ2ZXItc2lkZSBDYWxsYmFja3NcbiAgb25GZXRjaERhdGE6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8vIENsYXNzZXNcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvLyBDb21wb25lbnQgZGVjb3JhdG9yc1xuICBnZXRQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gIGdldFRhYmxlUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRUaGVhZEdyb3VwUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRUaGVhZEdyb3VwVHJQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gIGdldFRoZWFkR3JvdXBUaFByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0VGhlYWRQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gIGdldFRoZWFkVHJQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gIGdldFRoZWFkVGhQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gIGdldFRoZWFkRmlsdGVyUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRUaGVhZEZpbHRlclRyUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRUaGVhZEZpbHRlclRoUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRUYm9keVByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0VHJHcm91cFByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0VHJQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gIGdldFRkUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRUZm9vdFByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0VGZvb3RUclByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0VGZvb3RUZFByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0UGFnaW5hdGlvblByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0TG9hZGluZ1Byb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0Tm9EYXRhUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRSZXNpemVyUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8vIEdsb2JhbCBDb2x1bW4gRGVmYXVsdHNcbiAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8vIFJlbmRlcmVyc1xuICAgICAgQ2VsbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQsIFByb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5lbGVtZW50VHlwZV0pLFxuICAgICAgSGVhZGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudCwgUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmVsZW1lbnRUeXBlXSksXG4gICAgICBGb290ZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZWxlbWVudFR5cGVdKSxcbiAgICAgIEFnZ3JlZ2F0ZWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZWxlbWVudFR5cGVdKSxcbiAgICAgIFBpdm90OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudCwgUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmVsZW1lbnRUeXBlXSksXG4gICAgICBQaXZvdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudCwgUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmVsZW1lbnRUeXBlXSksXG4gICAgICBFeHBhbmRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQsIFByb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5lbGVtZW50VHlwZV0pLFxuICAgICAgRmlsdGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlXSksXG5cbiAgICAgIC8vIEFsbCBDb2x1bW5zXG4gICAgICBzb3J0YWJsZTogUHJvcFR5cGVzLmJvb2wsIC8vIHVzZSB0YWJsZSBkZWZhdWx0XG4gICAgICByZXNpemFibGU6IFByb3BUeXBlcy5ib29sLCAvLyB1c2UgdGFibGUgZGVmYXVsdFxuICAgICAgZmlsdGVyYWJsZTogUHJvcFR5cGVzLmJvb2wsIC8vIHVzZSB0YWJsZSBkZWZhdWx0XG4gICAgICBzaG93OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIG1pbldpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgbWluUmVzaXplV2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgICAgIC8vIENlbGxzIG9ubHlcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgZ2V0UHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgICAvLyBQaXZvdCBvbmx5XG4gICAgICBhZ2dyZWdhdGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgICAvLyBIZWFkZXJzIG9ubHlcbiAgICAgIGhlYWRlckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGhlYWRlclN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgZ2V0SGVhZGVyUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgICAvLyBGb290ZXJzIG9ubHlcbiAgICAgIGZvb3RlckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGZvb3RlclN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgZ2V0Rm9vdGVyUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgZmlsdGVyTWV0aG9kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGZpbHRlckFsbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBzb3J0TWV0aG9kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB9KVxuICApLFxuXG4gIC8vIEdsb2JhbCBFeHBhbmRlciBDb2x1bW4gRGVmYXVsdHNcbiAgZXhwYW5kZXJEZWZhdWx0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzb3J0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgcmVzaXphYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBmaWx0ZXJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB3aWR0aDogUHJvcFR5cGVzLm51bWJlcixcbiAgfSksXG5cbiAgcGl2b3REZWZhdWx0czogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvLyBUZXh0XG4gIHByZXZpb3VzVGV4dDogUHJvcFR5cGVzLm5vZGUsXG4gIG5leHRUZXh0OiBQcm9wVHlwZXMubm9kZSxcbiAgbG9hZGluZ1RleHQ6IFByb3BUeXBlcy5ub2RlLFxuICBub0RhdGFUZXh0OiBQcm9wVHlwZXMubm9kZSxcbiAgcGFnZVRleHQ6IFByb3BUeXBlcy5ub2RlLFxuICBvZlRleHQ6IFByb3BUeXBlcy5ub2RlLFxuICByb3dzVGV4dDogUHJvcFR5cGVzLm5vZGUsXG4gIHBhZ2VKdW1wVGV4dDogUHJvcFR5cGVzLm5vZGUsXG4gIHJvd3NTZWxlY3RvclRleHQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8vIENvbXBvbmVudHNcbiAgVGFibGVDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgVGhlYWRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgVGJvZHlDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgVHJHcm91cENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBUckNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBUaENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBUZENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBUZm9vdENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBGaWx0ZXJDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgRXhwYW5kZXJDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgUGl2b3RWYWx1ZUNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBBZ2dyZWdhdGVkQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8vIHRoaXMgaXMgYSBjb21wdXRlZCBkZWZhdWx0IGdlbmVyYXRlZCB1c2luZ1xuICBQaXZvdENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvLyB0aGUgRXhwYW5kZXJDb21wb25lbnQgYW5kIFBpdm90VmFsdWVDb21wb25lbnQgYXQgcnVuLXRpbWUgaW4gbWV0aG9kcy5qc1xuICBQYWdpbmF0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIFByZXZpb3VzQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIE5leHRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgTG9hZGluZ0NvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBOb0RhdGFDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgUmVzaXplckNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBQYWRSb3dDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbn1cbiJdfQ== \ No newline at end of file diff --git a/es/utils.js b/es/utils.js new file mode 100644 index 0000000000..3e372ba3cb --- /dev/null +++ b/es/utils.js @@ -0,0 +1,233 @@ +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +import React from 'react'; +import classnames from 'classnames'; +import * as ReactIs from 'react-is'; + +// +export default { + get: get, + set: set, + takeRight: takeRight, + last: last, + orderBy: orderBy, + range: range, + remove: remove, + clone: clone, + getFirstDefined: getFirstDefined, + sum: sum, + makeTemplateComponent: makeTemplateComponent, + groupBy: groupBy, + isArray: isArray, + splitProps: splitProps, + compactObject: compactObject, + isSortingDesc: isSortingDesc, + normalizeComponent: normalizeComponent, + asPx: asPx +}; + +function get(obj, path, def) { + if (!path) { + return obj; + } + var pathObj = makePathArray(path); + var val = void 0; + try { + val = pathObj.reduce(function (current, pathPart) { + return current[pathPart]; + }, obj); + } catch (e) { + // continue regardless of error + } + return typeof val !== 'undefined' ? val : def; +} + +function set() { + var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var path = arguments[1]; + var value = arguments[2]; + + var keys = makePathArray(path); + var keyPart = void 0; + var cursor = obj; + while ((keyPart = keys.shift()) && keys.length) { + if (!cursor[keyPart]) { + cursor[keyPart] = {}; + } + cursor = cursor[keyPart]; + } + cursor[keyPart] = value; + return obj; +} + +function takeRight(arr, n) { + var start = n > arr.length ? 0 : arr.length - n; + return arr.slice(start); +} + +function last(arr) { + return arr[arr.length - 1]; +} + +function range(n) { + var arr = []; + for (var i = 0; i < n; i += 1) { + arr.push(n); + } + return arr; +} + +function orderBy(arr, funcs, dirs, indexKey) { + return arr.sort(function (rowA, rowB) { + for (var i = 0; i < funcs.length; i += 1) { + var comp = funcs[i]; + var desc = dirs[i] === false || dirs[i] === 'desc'; + var sortInt = comp(rowA, rowB); + if (sortInt) { + return desc ? -sortInt : sortInt; + } + } + // Use the row index for tie breakers + return dirs[0] ? rowA[indexKey] - rowB[indexKey] : rowB[indexKey] - rowA[indexKey]; + }); +} + +function remove(a, b) { + return a.filter(function (o, i) { + var r = b(o); + if (r) { + a.splice(i, 1); + return true; + } + return false; + }); +} + +function clone(a) { + try { + return JSON.parse(JSON.stringify(a, function (key, value) { + if (typeof value === 'function') { + return value.toString(); + } + return value; + })); + } catch (e) { + return a; + } +} + +function getFirstDefined() { + for (var i = 0; i < arguments.length; i += 1) { + if (typeof (arguments.length <= i ? undefined : arguments[i]) !== 'undefined') { + return arguments.length <= i ? undefined : arguments[i]; + } + } +} + +function sum(arr) { + return arr.reduce(function (a, b) { + return a + b; + }, 0); +} + +function makeTemplateComponent(compClass, displayName) { + if (!displayName) { + throw new Error('No displayName found for template component:', compClass); + } + var cmp = function cmp(_ref) { + var children = _ref.children, + className = _ref.className, + rest = _objectWithoutProperties(_ref, ['children', 'className']); + + return React.createElement( + 'div', + _extends({ className: classnames(compClass, className) }, rest), + children + ); + }; + cmp.displayName = displayName; + return cmp; +} + +function groupBy(xs, key) { + return xs.reduce(function (rv, x, i) { + var resKey = typeof key === 'function' ? key(x, i) : x[key]; + rv[resKey] = isArray(rv[resKey]) ? rv[resKey] : []; + rv[resKey].push(x); + return rv; + }, {}); +} + +function asPx(value) { + value = Number(value); + return Number.isNaN(value) ? null : value + 'px'; +} + +function isArray(a) { + return Array.isArray(a); +} + +// ######################################################################## +// Non-exported Helpers +// ######################################################################## + +function makePathArray(obj) { + return flattenDeep(obj).join('.').replace(/\[/g, '.').replace(/\]/g, '').split('.'); +} + +function flattenDeep(arr) { + var newArr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + if (!isArray(arr)) { + newArr.push(arr); + } else { + for (var i = 0; i < arr.length; i += 1) { + flattenDeep(arr[i], newArr); + } + } + return newArr; +} + +function splitProps(_ref2) { + var className = _ref2.className, + style = _ref2.style, + rest = _objectWithoutProperties(_ref2, ['className', 'style']); + + return { + className: className, + style: style, + rest: rest || {} + }; +} + +function compactObject(obj) { + var newObj = {}; + if (obj) { + Object.keys(obj).map(function (key) { + if (Object.prototype.hasOwnProperty.call(obj, key) && obj[key] !== undefined && typeof obj[key] !== 'undefined') { + newObj[key] = obj[key]; + } + return true; + }); + } + return newObj; +} + +function isSortingDesc(d) { + return !!(d.sort === 'desc' || d.desc === true || d.asc === false); +} + +function normalizeComponent(Comp, props) { + var fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Comp; + + if (ReactIs.isElement(Comp) || typeof Comp === 'string') { + return Comp; + } else if (ReactIs.isValidElementType(Comp)) { + return React.createElement(Comp, props); + } + + return fallback; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy5qcyJdLCJuYW1lcyI6WyJSZWFjdCIsImNsYXNzbmFtZXMiLCJSZWFjdElzIiwiZ2V0Iiwic2V0IiwidGFrZVJpZ2h0IiwibGFzdCIsIm9yZGVyQnkiLCJyYW5nZSIsInJlbW92ZSIsImNsb25lIiwiZ2V0Rmlyc3REZWZpbmVkIiwic3VtIiwibWFrZVRlbXBsYXRlQ29tcG9uZW50IiwiZ3JvdXBCeSIsImlzQXJyYXkiLCJzcGxpdFByb3BzIiwiY29tcGFjdE9iamVjdCIsImlzU29ydGluZ0Rlc2MiLCJub3JtYWxpemVDb21wb25lbnQiLCJhc1B4Iiwib2JqIiwicGF0aCIsImRlZiIsInBhdGhPYmoiLCJtYWtlUGF0aEFycmF5IiwidmFsIiwicmVkdWNlIiwiY3VycmVudCIsInBhdGhQYXJ0IiwiZSIsInZhbHVlIiwia2V5cyIsImtleVBhcnQiLCJjdXJzb3IiLCJzaGlmdCIsImxlbmd0aCIsImFyciIsIm4iLCJzdGFydCIsInNsaWNlIiwiaSIsInB1c2giLCJmdW5jcyIsImRpcnMiLCJpbmRleEtleSIsInNvcnQiLCJyb3dBIiwicm93QiIsImNvbXAiLCJkZXNjIiwic29ydEludCIsImEiLCJiIiwiZmlsdGVyIiwibyIsInIiLCJzcGxpY2UiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJrZXkiLCJ0b1N0cmluZyIsImNvbXBDbGFzcyIsImRpc3BsYXlOYW1lIiwiRXJyb3IiLCJjbXAiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsInJlc3QiLCJ4cyIsInJ2IiwieCIsInJlc0tleSIsIk51bWJlciIsImlzTmFOIiwiQXJyYXkiLCJmbGF0dGVuRGVlcCIsImpvaW4iLCJyZXBsYWNlIiwic3BsaXQiLCJuZXdBcnIiLCJzdHlsZSIsIm5ld09iaiIsIk9iamVjdCIsIm1hcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInVuZGVmaW5lZCIsImQiLCJhc2MiLCJDb21wIiwicHJvcHMiLCJmYWxsYmFjayIsImlzRWxl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Q3ZELFdBQU9BLElBQVA7QUFDRCxHQUZELE1BRU8sSUFBSTFGLFFBQVE4RixrQkFBUixDQUEyQkosSUFBM0IsQ0FBSixFQUFzQztBQUMzQyxXQUFPLG9CQUFDLElBQUQsRUFBVUMsS0FBVixDQUFQO0FBQ0Q7O0FBRUQsU0FBT0MsUUFBUDtBQUNEIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCAqIGFzIFJlYWN0SXMgZnJvbSAncmVhY3QtaXMnXG5cbi8vXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCxcbiAgc2V0LFxuICB0YWtlUmlnaHQsXG4gIGxhc3QsXG4gIG9yZGVyQnksXG4gIHJhbmdlLFxuICByZW1vdmUsXG4gIGNsb25lLFxuICBnZXRGaXJzdERlZmluZWQsXG4gIHN1bSxcbiAgbWFrZVRlbXBsYXRlQ29tcG9uZW50LFxuICBncm91cEJ5LFxuICBpc0FycmF5LFxuICBzcGxpdFByb3BzLFxuICBjb21wYWN0T2JqZWN0LFxuICBpc1NvcnRpbmdEZXNjLFxuICBub3JtYWxpemVDb21wb25lbnQsXG4gIGFzUHgsXG59XG5cbmZ1bmN0aW9uIGdldCAob2JqLCBwYXRoLCBkZWYpIHtcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuIG9ialxuICB9XG4gIGNvbnN0IHBhdGhPYmogPSBtYWtlUGF0aEFycmF5KHBhdGgpXG4gIGxldCB2YWxcbiAgdHJ5IHtcbiAgICB2YWwgPSBwYXRoT2JqLnJlZHVjZSgoY3VycmVudCwgcGF0aFBhcnQpID0+IGN1cnJlbnRbcGF0aFBhcnRdLCBvYmopXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIG9mIGVycm9yXG4gIH1cbiAgcmV0dXJuIHR5cGVvZiB2YWwgIT09ICd1bmRlZmluZWQnID8gdmFsIDogZGVmXG59XG5cbmZ1bmN0aW9uIHNldCAob2JqID0ge30sIHBhdGgsIHZhbHVlKSB7XG4gIGNvbnN0IGtleXMgPSBtYWtlUGF0aEFycmF5KHBhdGgpXG4gIGxldCBrZXlQYXJ0XG4gIGxldCBjdXJzb3IgPSBvYmpcbiAgd2hpbGUgKChrZXlQYXJ0ID0ga2V5cy5zaGlmdCgpKSAmJiBrZXlzLmxlbmd0aCkge1xuICAgIGlmICghY3Vyc29yW2tleVBhcnRdKSB7XG4gICAgICBjdXJzb3Jba2V5UGFydF0gPSB7fVxuICAgIH1cbiAgICBjdXJzb3IgPSBjdXJzb3Jba2V5UGFydF1cbiAgfVxuICBjdXJzb3Jba2V5UGFydF0gPSB2YWx1ZVxuICByZXR1cm4gb2JqXG59XG5cbmZ1bmN0aW9uIHRha2VSaWdodCAoYXJyLCBuKSB7XG4gIGNvbnN0IHN0YXJ0ID0gbiA+IGFyci5sZW5ndGggPyAwIDogYXJyLmxlbmd0aCAtIG5cbiAgcmV0dXJuIGFyci5zbGljZShzdGFydClcbn1cblxuZnVuY3Rpb24gbGFzdCAoYXJyKSB7XG4gIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdXG59XG5cbmZ1bmN0aW9uIHJhbmdlIChuKSB7XG4gIGNvbnN0IGFyciA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSArPSAxKSB7XG4gICAgYXJyLnB1c2gobilcbiAgfVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIG9yZGVyQnkgKGFyciwgZnVuY3MsIGRpcnMsIGluZGV4S2V5KSB7XG4gIHJldHVybiBhcnIuc29ydCgocm93QSwgcm93QikgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IGNvbXAgPSBmdW5jc1tpXVxuICAgICAgY29uc3QgZGVzYyA9IGRpcnNbaV0gPT09IGZhbHNlIHx8IGRpcnNbaV0gPT09ICdkZXNjJ1xuICAgICAgY29uc3Qgc29ydEludCA9IGNvbXAocm93QSwgcm93QilcbiAgICAgIGlmIChzb3J0SW50KSB7XG4gICAgICAgIHJldHVybiBkZXNjID8gLXNvcnRJbnQgOiBzb3J0SW50XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFVzZSB0aGUgcm93IGluZGV4IGZvciB0aWUgYnJlYWtlcnNcbiAgICByZXR1cm4gZGlyc1swXSA/IHJvd0FbaW5kZXhLZXldIC0gcm93QltpbmRleEtleV0gOiByb3dCW2luZGV4S2V5XSAtIHJvd0FbaW5kZXhLZXldXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlbW92ZSAoYSwgYikge1xuICByZXR1cm4gYS5maWx0ZXIoKG8sIGkpID0+IHtcbiAgICBjb25zdCByID0gYihvKVxuICAgIGlmIChyKSB7XG4gICAgICBhLnNwbGljZShpLCAxKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNsb25lIChhKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICBKU09OLnN0cmluZ2lmeShhLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0pXG4gICAgKVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGFcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRGaXJzdERlZmluZWQgKC4uLmFyZ3MpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGFyZ3NbaV1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3VtIChhcnIpIHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKVxufVxuXG5mdW5jdGlvbiBtYWtlVGVtcGxhdGVDb21wb25lbnQgKGNvbXBDbGFzcywgZGlzcGxheU5hbWUpIHtcbiAgaWYgKCFkaXNwbGF5TmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gZGlzcGxheU5hbWUgZm91bmQgZm9yIHRlbXBsYXRlIGNvbXBvbmVudDonLCBjb21wQ2xhc3MpXG4gIH1cbiAgY29uc3QgY21wID0gKHsgY2hpbGRyZW4sIGNsYXNzTmFtZSwgLi4ucmVzdCB9KSA9PiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoY29tcENsYXNzLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbiAgY21wLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWVcbiAgcmV0dXJuIGNtcFxufVxuXG5mdW5jdGlvbiBncm91cEJ5ICh4cywga2V5KSB7XG4gIHJldHVybiB4cy5yZWR1Y2UoKHJ2LCB4LCBpKSA9PiB7XG4gICAgY29uc3QgcmVzS2V5ID0gdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJyA/IGtleSh4LCBpKSA6IHhba2V5XVxuICAgIHJ2W3Jlc0tleV0gPSBpc0FycmF5KHJ2W3Jlc0tleV0pID8gcnZbcmVzS2V5XSA6IFtdXG4gICAgcnZbcmVzS2V5XS5wdXNoKHgpXG4gICAgcmV0dXJuIHJ2XG4gIH0sIHt9KVxufVxuXG5mdW5jdGlvbiBhc1B4ICh2YWx1ZSkge1xuICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcbiAgcmV0dXJuIE51bWJlci5pc05hTih2YWx1ZSkgPyBudWxsIDogYCR7dmFsdWV9cHhgXG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkgKGEpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYSlcbn1cblxuLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBOb24tZXhwb3J0ZWQgSGVscGVyc1xuLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbmZ1bmN0aW9uIG1ha2VQYXRoQXJyYXkgKG9iaikge1xuICByZXR1cm4gZmxhdHRlbkRlZXAob2JqKVxuICAgIC5qb2luKCcuJylcbiAgICAucmVwbGFjZSgvXFxbL2csICcuJylcbiAgICAucmVwbGFjZSgvXFxdL2csICcnKVxuICAgIC5zcGxpdCgnLicpXG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW5EZWVwIChhcnIsIG5ld0FyciA9IFtdKSB7XG4gIGlmICghaXNBcnJheShhcnIpKSB7XG4gICAgbmV3QXJyLnB1c2goYXJyKVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBmbGF0dGVuRGVlcChhcnJbaV0sIG5ld0FycilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld0FyclxufVxuXG5mdW5jdGlvbiBzcGxpdFByb3BzICh7IGNsYXNzTmFtZSwgc3R5bGUsIC4uLnJlc3QgfSkge1xuICByZXR1cm4ge1xuICAgIGNsYXNzTmFtZSxcbiAgICBzdHlsZSxcbiAgICByZXN0OiByZXN0IHx8IHt9LFxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBhY3RPYmplY3QgKG9iaikge1xuICBjb25zdCBuZXdPYmogPSB7fVxuICBpZiAob2JqKSB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5tYXAoa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSAmJlxuICAgICAgICBvYmpba2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHR5cGVvZiBvYmpba2V5XSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICkge1xuICAgICAgICBuZXdPYmpba2V5XSA9IG9ialtrZXldXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIG5ld09ialxufVxuXG5mdW5jdGlvbiBpc1NvcnRpbmdEZXNjIChkKSB7XG4gIHJldHVybiAhIShkLnNvcnQgPT09ICdkZXNjJyB8fCBkLmRlc2MgPT09IHRydWUgfHwgZC5hc2MgPT09IGZhbHNlKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKENvbXAsIHByb3BzLCBmYWxsYmFjayA9IENvbXApIHtcbiAgaWYgKFJlYWN0SXMuaXNFbGVtZW50KENvbXApIHx8IHR5cGVvZiBDb21wID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBDb21wXG4gIH0gZWxzZSBpZiAoUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUoQ29tcCkpIHtcbiAgICByZXR1cm4gPENvbXAgey4uLnByb3BzfSAvPlxuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrXG59XG5cbiJdfQ== \ No newline at end of file diff --git a/lib/defaultProps.js b/lib/defaultProps.js new file mode 100644 index 0000000000..15c9f95b36 --- /dev/null +++ b/lib/defaultProps.js @@ -0,0 +1,375 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +var _classnames = require('classnames'); + +var _classnames2 = _interopRequireDefault(_classnames); + +var _utils = require('./utils'); + +var _utils2 = _interopRequireDefault(_utils); + +var _pagination = require('./pagination'); + +var _pagination2 = _interopRequireDefault(_pagination); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } +// + + +var emptyObj = function emptyObj() { + return {}; +}; + +exports.default = { + // General + data: [], + resolveData: function resolveData(data) { + return data; + }, + loading: false, + showPagination: true, + showPaginationTop: false, + showPaginationBottom: true, + showPageSizeOptions: true, + pageSizeOptions: [5, 10, 20, 25, 50, 100], + defaultPage: 0, + defaultPageSize: 20, + showPageJump: true, + collapseOnSortingChange: true, + collapseOnPageChange: true, + collapseOnDataChange: true, + freezeWhenExpanded: false, + sortable: true, + multiSort: true, + resizable: true, + filterable: false, + defaultSortDesc: false, + defaultSorted: [], + defaultFiltered: [], + defaultResized: [], + defaultExpanded: {}, + // eslint-disable-next-line no-unused-vars + defaultFilterMethod: function defaultFilterMethod(filter, row, column) { + var id = filter.pivotId || filter.id; + return row[id] !== undefined ? String(row[id]).startsWith(filter.value) : true; + }, + // eslint-disable-next-line no-unused-vars + defaultSortMethod: function defaultSortMethod(a, b, desc) { + // force null and undefined to the bottom + a = a === null || a === undefined ? '' : a; + b = b === null || b === undefined ? '' : b; + // force any string values to lowercase + a = typeof a === 'string' ? a.toLowerCase() : a; + b = typeof b === 'string' ? b.toLowerCase() : b; + // Return either 1 or -1 to indicate a sort priority + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + // returning 0, undefined or any falsey value will use subsequent sorts or + // the index as a tiebreaker + return 0; + }, + + // Controlled State Props + // page: undefined, + // pageSize: undefined, + // sorted: [], + // filtered: [], + // resized: [], + // expanded: {}, + + // Controlled State Callbacks + onPageChange: undefined, + onPageSizeChange: undefined, + onSortedChange: undefined, + onFilteredChange: undefined, + onResizedChange: undefined, + onExpandedChange: undefined, + + // Pivoting + pivotBy: undefined, + + // Key Constants + pivotValKey: '_pivotVal', + pivotIDKey: '_pivotID', + subRowsKey: '_subRows', + aggregatedKey: '_aggregated', + nestingLevelKey: '_nestingLevel', + originalKey: '_original', + indexKey: '_index', + groupedByPivotKey: '_groupedByPivot', + + // Server-side Callbacks + onFetchData: function onFetchData() { + return null; + }, + + // Classes + className: '', + style: {}, + + // Component decorators + getProps: emptyObj, + getTableProps: emptyObj, + getTheadGroupProps: emptyObj, + getTheadGroupTrProps: emptyObj, + getTheadGroupThProps: emptyObj, + getTheadProps: emptyObj, + getTheadTrProps: emptyObj, + getTheadThProps: emptyObj, + getTheadFilterProps: emptyObj, + getTheadFilterTrProps: emptyObj, + getTheadFilterThProps: emptyObj, + getTbodyProps: emptyObj, + getTrGroupProps: emptyObj, + getTrProps: emptyObj, + getTdProps: emptyObj, + getTfootProps: emptyObj, + getTfootTrProps: emptyObj, + getTfootTdProps: emptyObj, + getPaginationProps: emptyObj, + getLoadingProps: emptyObj, + getNoDataProps: emptyObj, + getResizerProps: emptyObj, + + // Global Column Defaults + column: { + // Renderers + Cell: undefined, + Header: undefined, + Footer: undefined, + Aggregated: undefined, + Pivot: undefined, + PivotValue: undefined, + Expander: undefined, + Filter: undefined, + Placeholder: undefined, + // All Columns + sortable: undefined, // use table default + resizable: undefined, // use table default + filterable: undefined, // use table default + show: true, + minWidth: 100, + minResizeWidth: 11, + // Cells only + className: '', + style: {}, + getProps: emptyObj, + // Pivot only + aggregate: undefined, + // Headers only + headerClassName: '', + headerStyle: {}, + getHeaderProps: emptyObj, + // Footers only + footerClassName: '', + footerStyle: {}, + getFooterProps: emptyObj, + filterMethod: undefined, + filterAll: false, + sortMethod: undefined + }, + + // Global Expander Column Defaults + expanderDefaults: { + sortable: false, + resizable: false, + filterable: false, + width: 35 + }, + + pivotDefaults: { + // extend the defaults for pivoted columns here + }, + + // Text + previousText: 'Previous', + nextText: 'Next', + loadingText: 'Loading...', + noDataText: 'No rows found', + pageText: 'Page', + ofText: 'of', + rowsText: 'rows', + pageJumpText: 'jump to page', + rowsSelectorText: 'rows per page', + + // Components + TableComponent: function TableComponent(_ref) { + var children = _ref.children, + className = _ref.className, + rest = _objectWithoutProperties(_ref, ['children', 'className']); + + return _react2.default.createElement( + 'div', + _extends({ + className: (0, _classnames2.default)('rt-table', className), + role: 'grid' + // tabIndex='0' + }, rest), + children + ); + }, + TheadComponent: _utils2.default.makeTemplateComponent('rt-thead', 'Thead'), + TbodyComponent: _utils2.default.makeTemplateComponent('rt-tbody', 'Tbody'), + TrGroupComponent: function TrGroupComponent(_ref2) { + var children = _ref2.children, + className = _ref2.className, + rest = _objectWithoutProperties(_ref2, ['children', 'className']); + + return _react2.default.createElement( + 'div', + _extends({ className: (0, _classnames2.default)('rt-tr-group', className), role: 'rowgroup' }, rest), + children + ); + }, + TrComponent: function TrComponent(_ref3) { + var children = _ref3.children, + className = _ref3.className, + rest = _objectWithoutProperties(_ref3, ['children', 'className']); + + return _react2.default.createElement( + 'div', + _extends({ className: (0, _classnames2.default)('rt-tr', className), role: 'row' }, rest), + children + ); + }, + ThComponent: function ThComponent(_ref4) { + var toggleSort = _ref4.toggleSort, + className = _ref4.className, + children = _ref4.children, + rest = _objectWithoutProperties(_ref4, ['toggleSort', 'className', 'children']); + + return ( + // eslint-disable-next-line jsx-a11y/click-events-have-key-events + _react2.default.createElement( + 'div', + _extends({ + className: (0, _classnames2.default)('rt-th', className), + onClick: function onClick(e) { + return toggleSort && toggleSort(e); + }, + role: 'columnheader', + tabIndex: '-1' // Resolves eslint issues without implementing keyboard navigation incorrectly + }, rest), + children + ) + ); + }, + TdComponent: function TdComponent(_ref5) { + var toggleSort = _ref5.toggleSort, + className = _ref5.className, + children = _ref5.children, + rest = _objectWithoutProperties(_ref5, ['toggleSort', 'className', 'children']); + + return _react2.default.createElement( + 'div', + _extends({ className: (0, _classnames2.default)('rt-td', className), role: 'gridcell' }, rest), + children + ); + }, + TfootComponent: _utils2.default.makeTemplateComponent('rt-tfoot', 'Tfoot'), + FilterComponent: function FilterComponent(_ref6) { + var filter = _ref6.filter, + _onChange = _ref6.onChange, + column = _ref6.column; + return _react2.default.createElement('input', { + type: 'text', + style: { + width: '100%' + }, + placeholder: column.Placeholder, + value: filter ? filter.value : '', + onChange: function onChange(event) { + return _onChange(event.target.value); + } + }); + }, + ExpanderComponent: function ExpanderComponent(_ref7) { + var isExpanded = _ref7.isExpanded; + return _react2.default.createElement( + 'div', + { className: (0, _classnames2.default)('rt-expander', isExpanded && '-open') }, + '\u2022' + ); + }, + PivotValueComponent: function PivotValueComponent(_ref8) { + var subRows = _ref8.subRows, + value = _ref8.value; + return _react2.default.createElement( + 'span', + null, + value, + ' ', + subRows && '(' + subRows.length + ')' + ); + }, + AggregatedComponent: function AggregatedComponent(_ref9) { + var subRows = _ref9.subRows, + column = _ref9.column; + + var previewValues = subRows.filter(function (d) { + return typeof d[column.id] !== 'undefined'; + }).map(function (row, i) { + return ( + // eslint-disable-next-line react/no-array-index-key + _react2.default.createElement( + 'span', + { key: i }, + row[column.id], + i < subRows.length - 1 ? ', ' : '' + ) + ); + }); + return _react2.default.createElement( + 'span', + null, + previewValues + ); + }, + PivotComponent: undefined, // this is a computed default generated using + // the ExpanderComponent and PivotValueComponent at run-time in methods.js + PaginationComponent: _pagination2.default, + PreviousComponent: undefined, + NextComponent: undefined, + LoadingComponent: function LoadingComponent(_ref10) { + var className = _ref10.className, + loading = _ref10.loading, + loadingText = _ref10.loadingText, + rest = _objectWithoutProperties(_ref10, ['className', 'loading', 'loadingText']); + + return _react2.default.createElement( + 'div', + _extends({ className: (0, _classnames2.default)('-loading', { '-active': loading }, className) }, rest), + _react2.default.createElement( + 'div', + { className: '-loading-inner' }, + loadingText + ) + ); + }, + NoDataComponent: _utils2.default.makeTemplateComponent('rt-noData', 'NoData'), + ResizerComponent: _utils2.default.makeTemplateComponent('rt-resizer', 'Resizer'), + PadRowComponent: function PadRowComponent() { + return _react2.default.createElement( + 'span', + null, + '\xA0' + ); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWZhdWx0UHJvcHMuanMiXSwibmFtZXMiOlsiZW1wdHlPYmoiLCJkYXRhIiwicmVzb2x2ZURhdGEiLCJsb2FkaW5nIiwic2hvd1BhZ2luYXRpb24iLCJzaG93UGFnaW5hdGlvblRvcCIsInNob3dQYWdpbmF0aW9uQm90dG9tIiwic2hvd1BhZ2VTaXplT3B0aW9ucyIsInBhZ2VTaXplT3B0aW9ucyIsImRlZmF1bHRQYWdlIiwiZGVmYXVsdFBhZ2VTaXplIiwic2hvd1BhZ2VKdW1wIiwiY29sbGFwc2VPblNvcnRpbmdDaGFuZ2UiLCJjb2xsYXBzZU9uUGFnZUNoYW5nZSIsImNvbGxhcHNlT25EYXRhQ2hhbmdlIiwiZnJlZXplV2hlbkV4cGFuZGVkIiwic29ydGFibGUiLCJtdWx0aVNvcnQiLCJyZXNpemFibGUiLCJmaWx0ZXJhYmxlIiwiZGVmYXVsdFNvcnREZXNjIiwiZGVmYXVsdFNvcnRlZCIsImRlZmF1bHRGaWx0ZXJlZCIsImRlZmF1bHRSZXNpemVkIiwiZGVmYXVsdEV4cGFuZGVkIiwiZGVmYXVsdEZpbHRlck1ldGhvZCIsImZpbHRlciIsInJvdyIsImNvbHVtbiIsImlkIiwicGl2b3RJZCIsInVuZGVmaW5lZCIsIlN0cmluZyIsInN0YXJ0c1dpdGgiLCJ2YWx1ZSIsImRlZmF1bHRTb3J0TWV0aG9kIiwiYSIsImIiLCJkZXNjIiwidG9Mb3dlckNhc2UiLCJvblBhZ2VDaGFuZ2UiLCJvblBhZ2VTaXplQ2hhbmdlIiwib25Tb3J0ZWRDaGFuZ2UiLCJvbkZpbHRlcmVkQ2hhbmdlIiwib25SZXNpemVkQ2hhbmdlIiwib25FeHBhbmRlZENoYW5nZSIsInBpdm90QnkiLCJwaXZvdFZhbEtleSIsInBpdm90SURLZXkiLCJzdWJSb3dzS2V5IiwiYWdncmVnYXRlZEtleSIsIm5lc3RpbmdMZXZlbEtleSIsIm9yaWdpbmFsS2V5IiwiaW5kZXhLZXkiLCJncm91cGVkQnlQaXZvdEtleSIsIm9uRmV0Y2hEYXRhIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJnZXRQcm9wcyIsImdldFRhYmxlUHJvcHMiLCJnZXRUaGVhZEdyb3VwUHJvcHMiLCJnZXRUaGVhZEdyb3VwVHJQcm9wcyIsImdldFRoZWFkR3JvdXBUaFByb3BzIiwiZ2V0VGhlYWRQcm9wcyIsImdldFRoZWFkVHJQcm9wcyIsImdldFRoZWFkVGhQcm9wcyIsImdldFRoZWFkRmlsdGVyUHJvcHMiLCJnZXRUaGVhZEZpbHRlclRyUHJvcHMiLCJnZXRUaGVhZEZpbHRlclRoUHJvcHMiLCJnZXRUYm9keVByb3BzIiwiZ2V0VHJHcm91cFByb3BzIiwiZ2V0VHJQcm9wcyIsImdldFRkUHJvcHMiLCJnZXRUZm9vdFByb3BzIiwiZ2V0VGZvb3RUclByb3BzIiwiZ2V0VGZvb3RUZFByb3BzIiwiZ2V0UGFnaW5hdGlvblByb3BzIiwiZ2V0TG9hZGluZ1Byb3BzIiwiZ2V0Tm9EYXRhUHJvcHMiLCJnZXRSZXNpemVyUHJvcHMiLCJDZWxsIiwiSGVhZGVyIiwiRm9vdGVyIiwiQWdncmVnYXRlZCIsIlBpdm90IiwiUGl2b3RWYWx1ZSIsIkV4cGFuZGVyIiwiRmlsdGVyIiwiUGxhY2Vob2xkZXIiLCJzaG93IiwibWluV2lkdGgiLCJtaW5SZXNpemVXaWR0aCIsImFnZ3JlZ2F0ZSIsImhlYWRlckNsYXNzTmFtZSIsImhlYWRlclN0eWxlIiwiZ2V0SGVhZGVyUHJvcHMiLCJmb290ZXJDbGFzc05hbWUiLCJmb290ZXJTdHlsZSIsImdldEZvb3RlclByb3BzIiwiZmlsdGVyTWV0aG9kIiwiZmlsdGVyQWxsIiwic29ydE1ldGhvZCIsImV4cGFuZGVyRGVmYXVsdHMiLCJ3aWR0aCIsInBpdm90RGVmYXVsdHMiLCJwcmV2aW91c1RleHQiLCJuZXh0VGV4dCIsImxvYWRpbmdUZXh0Iiwibm9EYXRhVGV4dCIsInBhZ2VUZXh0Iiwib2ZUZXh0Iiwicm93c1RleHQiLCJwYWdlSnVtcFRleHQiLCJyb3dzU2VsZWN0b3JUZXh0IiwiVGFibGVDb21wb25lbnQiLCJjaGlsZHJlbiIsInJlc3QiLCJUaGVhZENvbXBvbmVudCIsIl8iLCJtYWtlVGVtcGxhdGVDb21wb25lbnQiLCJUYm9keUNvbXBvbmVudCIsIlRyR3JvdXBDb21wb25lbnQiLCJUckNvbXBvbmVudCIsIlRoQ29tcG9uZW50IiwidG9nZ2xlU29ydCIsImUiLCJUZENvbXBvbmVudCIsIlRmb290Q29tcG9uZW50IiwiRmlsdGVyQ29tcG9uZW50Iiwib25DaGFuZ2UiLCJldmVudCIsInRhcmdldCIsIkV4cGFuZGVyQ29tcG9uZW50IiwiaXNFeHBhbmRlZCIsIlBpdm90VmFsdWVDb21wb25lbnQiLCJzdWJSb3dzIiwibGVuZ3RoIiwiQWdncmVnYXRlZENvbXBvbmVudCIsInByZXZpZXdWYWx1ZXMiLCJkIiwibWFwIiwiaSIsIlBpdm90Q29tcG9uZW50IiwiUGFnaW5hdGlvbkNvbXBvbmVudCIsIlBhZ2luYXRpb24iLCJQcmV2aW91c0NvbXBvbmVudCIsIk5leHRDb21wb25lbnQiLCJMb2FkaW5nQ29tcG9uZW50IiwiTm9EYXRhQ29tcG9uZW50IiwiUmVzaXplckNvbXBvbmVudCIsIlBhZFJvd0NvbXBvbmVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBRUE7Ozs7QUFDQTs7Ozs7OztBQUZBOzs7QUFJQSxJQUFNQSxXQUFXLFNBQVhBLFFBQVc7QUFBQSxTQUFPLEVBQVA7QUFBQSxDQUFqQjs7a0JBRWU7QUFDYjtBQUNBQyxRQUFNLEVBRk87QUFHYkMsZUFBYTtBQUFBLFdBQVFELElBQVI7QUFBQSxHQUhBO0FBSWJFLFdBQVMsS0FKSTtBQUtiQyxrQkFBZ0IsSUFMSDtBQU1iQyxxQkFBbUIsS0FOTjtBQU9iQyx3QkFBc0IsSUFQVDtBQVFiQyx1QkFBcUIsSUFSUjtBQVNiQyxtQkFBaUIsQ0FBQyxDQUFELEVBQUksRUFBSixFQUFRLEVBQVIsRUFBWSxFQUFaLEVBQWdCLEVBQWhCLEVBQW9CLEdBQXBCLENBVEo7QUFVYkMsZUFBYSxDQVZBO0FBV2JDLG1CQUFpQixFQVhKO0FBWWJDLGdCQUFjLElBWkQ7QUFhYkMsMkJBQXlCLElBYlo7QUFjYkMsd0JBQXNCLElB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QUFBQSxpQkFBSyxXQUFXLDBCQUFXLFVBQVgsRUFBdUIsRUFBRSxXQUFXakgsT0FBYixFQUF2QixFQUErQ3FELFNBQS9DLENBQWhCLElBQStFNEQsSUFBL0U7QUFDRTtBQUFBO0FBQUEsVUFBSyxXQUFVLGdCQUFmO0FBQWlDVDtBQUFqQztBQURGLEtBSGdCO0FBQUEsR0EzUEw7QUFrUWJ5QyxtQkFBaUI5QixnQkFBRUMscUJBQUYsQ0FBd0IsV0FBeEIsRUFBcUMsUUFBckMsQ0FsUUo7QUFtUWI4QixvQkFBa0IvQixnQkFBRUMscUJBQUYsQ0FBd0IsWUFBeEIsRUFBc0MsU0FBdEMsQ0FuUUw7QUFvUWIrQixtQkFBaUI7QUFBQSxXQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FBTjtBQUFBO0FBcFFKLEMiLCJmaWxlIjoiZGVmYXVsdFByb3BzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbi8vXG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IFBhZ2luYXRpb24gZnJvbSAnLi9wYWdpbmF0aW9uJ1xuXG5jb25zdCBlbXB0eU9iaiA9ICgpID0+ICh7fSlcblxuZXhwb3J0IGRlZmF1bHQge1xuICAvLyBHZW5lcmFsXG4gIGRhdGE6IFtdLFxuICByZXNvbHZlRGF0YTogZGF0YSA9PiBkYXRhLFxuICBsb2FkaW5nOiBmYWxzZSxcbiAgc2hvd1BhZ2luYXRpb246IHRydWUsXG4gIHNob3dQYWdpbmF0aW9uVG9wOiBmYWxzZSxcbiAgc2hvd1BhZ2luYXRpb25Cb3R0b206IHRydWUsXG4gIHNob3dQYWdlU2l6ZU9wdGlvbnM6IHRydWUsXG4gIHBhZ2VTaXplT3B0aW9uczogWzUsIDEwLCAyMCwgMjUsIDUwLCAxMDBdLFxuICBkZWZhdWx0UGFnZTogMCxcbiAgZGVmYXVsdFBhZ2VTaXplOiAyMCxcbiAgc2hvd1BhZ2VKdW1wOiB0cnVlLFxuICBjb2xsYXBzZU9uU29ydGluZ0NoYW5nZTogdHJ1ZSxcbiAgY29sbGFwc2VPblBhZ2VDaGFuZ2U6IHRydWUsXG4gIGNvbGxhcHNlT25EYXRhQ2hhbmdlOiB0cnVlLFxuICBmcmVlemVXaGVuRXhwYW5kZWQ6IGZhbHNlLFxuICBzb3J0YWJsZTogdHJ1ZSxcbiAgbXVsdGlTb3J0OiB0cnVlLFxuICByZXNpemFibGU6IHRydWUsXG4gIGZpbHRlcmFibGU6IGZhbHNlLFxuICBkZWZhdWx0U29ydERlc2M6IGZhbHNlLFxuICBkZWZhdWx0U29ydGVkOiBbXSxcbiAgZGVmYXVsdEZpbHRlcmVkOiBbXSxcbiAgZGVmYXVsdFJlc2l6ZWQ6IFtdLFxuICBkZWZhdWx0RXhwYW5kZWQ6IHt9LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZGVmYXVsdEZpbHRlck1ldGhvZDogKGZpbHRlciwgcm93LCBjb2x1bW4pID0+IHtcbiAgICBjb25zdCBpZCA9IGZpbHRlci5waXZvdElkIHx8IGZpbHRlci5pZFxuICAgIHJldHVybiByb3dbaWRdICE9PSB1bmRlZmluZWQgPyBTdHJpbmcocm93W2lkXSkuc3RhcnRzV2l0aChmaWx0ZXIudmFsdWUpIDogdHJ1ZVxuICB9LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZGVmYXVsdFNvcnRNZXRob2Q6IChhLCBiLCBkZXNjKSA9PiB7XG4gICAgLy8gZm9yY2UgbnVsbCBhbmQgdW5kZWZpbmVkIHRvIHRoZSBib3R0b21cbiAgICBhID0gYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQgPyAnJyA6IGFcbiAgICBiID0gYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQgPyAnJyA6IGJcbiAgICAvLyBmb3JjZSBhbnkgc3RyaW5nIHZhbHVlcyB0byBsb3dlcmNhc2VcbiAgICBhID0gdHlwZW9mIGEgPT09ICdzdHJpbmcnID8gYS50b0xvd2VyQ2FzZSgpIDogYVxuICAgIGIgPSB0eXBlb2YgYiA9PT0gJ3N0cmluZycgPyBiLnRvTG93ZXJDYXNlKCkgOiBiXG4gICAgLy8gUmV0dXJuIGVpdGhlciAxIG9yIC0xIHRvIGluZGljYXRlIGEgc29ydCBwcmlvcml0eVxuICAgIGlmIChhID4gYikge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgaWYgKGEgPCBiKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgLy8gcmV0dXJuaW5nIDAsIHVuZGVmaW5lZCBvciBhbnkgZmFsc2V5IHZhbHVlIHdpbGwgdXNlIHN1YnNlcXVlbnQgc29ydHMgb3JcbiAgICAvLyB0aGUgaW5kZXggYXMgYSB0aWVicmVha2VyXG4gICAgcmV0dXJuIDBcbiAgfSxcblxuICAvLyBDb250cm9sbGVkIFN0YXRlIFByb3BzXG4gIC8vIHBhZ2U6IHVuZGVmaW5lZCxcbiAgLy8gcGFnZVNpemU6IHVuZGVmaW5lZCxcbiAgLy8gc29ydGVkOiBbXSxcbiAgLy8gZmlsdGVyZWQ6IFtdLFxuICAvLyByZXNpemVkOiBbXSxcbiAgLy8gZXhwYW5kZWQ6IHt9LFxuXG4gIC8vIENvbnRyb2xsZWQgU3RhdGUgQ2FsbGJhY2tzXG4gIG9uUGFnZUNoYW5nZTogdW5kZWZpbmVkLFxuICBvblBhZ2VTaXplQ2hhbmdlOiB1bmRlZmluZWQsXG4gIG9uU29ydGVkQ2hhbmdlOiB1bmRlZmluZWQsXG4gIG9uRmlsdGVyZWRDaGFuZ2U6IHVuZGVmaW5lZCxcbiAgb25SZXNpemVkQ2hhbmdlOiB1bmRlZmluZWQsXG4gIG9uRXhwYW5kZWRDaGFuZ2U6IHVuZGVmaW5lZCxcblxuICAvLyBQaXZvdGluZ1xuICBwaXZvdEJ5OiB1bmRlZmluZWQsXG5cbiAgLy8gS2V5IENvbnN0YW50c1xuICBwaXZvdFZhbEtleTogJ19waXZvdFZhbCcsXG4gIHBpdm90SURLZXk6ICdfcGl2b3RJRCcsXG4gIHN1YlJvd3NLZXk6ICdfc3ViUm93cycsXG4gIGFnZ3JlZ2F0ZWRLZXk6ICdfYWdncmVnYXRlZCcsXG4gIG5lc3RpbmdMZXZlbEtleTogJ19uZXN0aW5nTGV2ZWwnLFxuICBvcmlnaW5hbEtleTogJ19vcmlnaW5hbCcsXG4gIGluZGV4S2V5OiAnX2luZGV4JyxcbiAgZ3JvdXBlZEJ5UGl2b3RLZXk6ICdfZ3JvdXBlZEJ5UGl2b3QnLFxuXG4gIC8vIFNlcnZlci1zaWRlIENhbGxiYWNrc1xuICBvbkZldGNoRGF0YTogKCkgPT4gbnVsbCxcblxuICAvLyBDbGFzc2VzXG4gIGNsYXNzTmFtZTogJycsXG4gIHN0eWxlOiB7fSxcblxuICAvLyBDb21wb25lbnQgZGVjb3JhdG9yc1xuICBnZXRQcm9wczogZW1wdHlPYmosXG4gIGdldFRhYmxlUHJvcHM6IGVtcHR5T2JqLFxuICBnZXRUaGVhZEdyb3VwUHJvcHM6IGVtcHR5T2JqLFxuICBnZXRUaGVhZEdyb3VwVHJQcm9wczogZW1wdHlPYmosXG4gIGdldFRoZWFkR3JvdXBUaFByb3BzOiBlbXB0eU9iaixcbiAgZ2V0VGhlYWRQcm9wczogZW1wdHlPYmosXG4gIGdldFRoZWFkVHJQcm9wczogZW1wdHlPYmosXG4gIGdldFRoZWFkVGhQcm9wczogZW1wdHlPYmosXG4gIGdldFRoZWFkRmlsdGVyUHJvcHM6IGVtcHR5T2JqLFxuICBnZXRUaGVhZEZpbHRlclRyUHJvcHM6IGVtcHR5T2JqLFxuICBnZXRUaGVhZEZpbHRlclRoUHJvcHM6IGVtcHR5T2JqLFxuICBnZXRUYm9keVByb3BzOiBlbXB0eU9iaixcbiAgZ2V0VHJHcm91cFByb3BzOiBlbXB0eU9iaixcbiAgZ2V0VHJQcm9wczogZW1wdHlPYmosXG4gIGdldFRkUHJvcHM6IGVtcHR5T2JqLFxuICBnZXRUZm9vdFByb3BzOiBlbXB0eU9iaixcbiAgZ2V0VGZvb3RUclByb3BzOiBlbXB0eU9iaixcbiAgZ2V0VGZvb3RUZFByb3BzOiBlbXB0eU9iaixcbiAgZ2V0UGFnaW5hdGlvblByb3BzOiBlbXB0eU9iaixcbiAgZ2V0TG9hZGluZ1Byb3BzOiBlbXB0eU9iaixcbiAgZ2V0Tm9EYXRhUHJvcHM6IGVtcHR5T2JqLFxuICBnZXRSZXNpemVyUHJvcHM6IGVtcHR5T2JqLFxuXG4gIC8vIEdsb2JhbCBDb2x1bW4gRGVmYXVsdHNcbiAgY29sdW1uOiB7XG4gICAgLy8gUmVuZGVyZXJzXG4gICAgQ2VsbDogdW5kZWZpbmVkLFxuICAgIEhlYWRlcjogdW5kZWZpbmVkLFxuICAgIEZvb3RlcjogdW5kZWZpbmVkLFxuICAgIEFnZ3JlZ2F0ZWQ6IHVuZGVmaW5lZCxcbiAgICBQaXZvdDogdW5kZWZpbmVkLFxuICAgIFBpdm90VmFsdWU6IHVuZGVmaW5lZCxcbiAgICBFeHBhbmRlcjogdW5kZWZpbmVkLFxuICAgIEZpbHRlcjogdW5kZWZpbmVkLFxuICAgIFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gICAgLy8gQWxsIENvbHVtbnNcbiAgICBzb3J0YWJsZTogdW5kZWZpbmVkLCAvLyB1c2UgdGFibGUgZGVmYXVsdFxuICAgIHJlc2l6YWJsZTogdW5kZWZpbmVkLCAvLyB1c2UgdGFibGUgZGVmYXVsdFxuICAgIGZpbHRlcmFibGU6IHVuZGVmaW5lZCwgLy8gdXNlIHRhYmxlIGRlZmF1bHRcbiAgICBzaG93OiB0cnVlLFxuICAgIG1pbldpZHRoOiAxMDAsXG4gICAgbWluUmVzaXplV2lkdGg6IDExLFxuICAgIC8vIENlbGxzIG9ubHlcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIHN0eWxlOiB7fSxcbiAgICBnZXRQcm9wczogZW1wdHlPYmosXG4gICAgLy8gUGl2b3Qgb25seVxuICAgIGFnZ3JlZ2F0ZTogdW5kZWZpbmVkLFxuICAgIC8vIEhlYWRlcnMgb25seVxuICAgIGhlYWRlckNsYXNzTmFtZTogJycsXG4gICAgaGVhZGVyU3R5bGU6IHt9LFxuICAgIGdldEhlYWRlclByb3BzOiBlbXB0eU9iaixcbiAgICAvLyBGb290ZXJzIG9ubHlcbiAgICBmb290ZXJDbGFzc05hbWU6ICcnLFxuICAgIGZvb3RlclN0eWxlOiB7fSxcbiAgICBnZXRGb290ZXJQcm9wczogZW1wdHlPYmosXG4gICAgZmlsdGVyTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgZmlsdGVyQWxsOiBmYWxzZSxcbiAgICBzb3J0TWV0aG9kOiB1bmRlZmluZWQsXG4gIH0sXG5cbiAgLy8gR2xvYmFsIEV4cGFuZGVyIENvbHVtbiBEZWZhdWx0c1xuICBleHBhbmRlckRlZmF1bHRzOiB7XG4gICAgc29ydGFibGU6IGZhbHNlLFxuICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgd2lkdGg6IDM1LFxuICB9LFxuXG4gIHBpdm90RGVmYXVsdHM6IHtcbiAgICAvLyBleHRlbmQgdGhlIGRlZmF1bHRzIGZvciBwaXZvdGVkIGNvbHVtbnMgaGVyZVxuICB9LFxuXG4gIC8vIFRleHRcbiAgcHJldmlvdXNUZXh0OiAnUHJldmlvdXMnLFxuICBuZXh0VGV4dDogJ05leHQnLFxuICBsb2FkaW5nVGV4dDogJ0xvYWRpbmcuLi4nLFxuICBub0RhdGFUZXh0OiAnTm8gcm93cyBmb3VuZCcsXG4gIHBhZ2VUZXh0OiAnUGFnZScsXG4gIG9mVGV4dDogJ29mJyxcbiAgcm93c1RleHQ6ICdyb3dzJyxcbiAgcGFnZUp1bXBUZXh0OiAnanVtcCB0byBwYWdlJyxcbiAgcm93c1NlbGVjdG9yVGV4dDogJ3Jvd3MgcGVyIHBhZ2UnLFxuXG4gIC8vIENvbXBvbmVudHNcbiAgVGFibGVDb21wb25lbnQ6ICh7IGNoaWxkcmVuLCBjbGFzc05hbWUsIC4uLnJlc3QgfSkgPT4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygncnQtdGFibGUnLCBjbGFzc05hbWUpfVxuICAgICAgcm9sZT1cImdyaWRcIlxuICAgICAgLy8gdGFiSW5kZXg9JzAnXG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICksXG4gIFRoZWFkQ29tcG9uZW50OiBfLm1ha2VUZW1wbGF0ZUNvbXBvbmVudCgncnQtdGhlYWQnLCAnVGhlYWQnKSxcbiAgVGJvZHlDb21wb25lbnQ6IF8ubWFrZVRlbXBsYXRlQ29tcG9uZW50KCdydC10Ym9keScsICdUYm9keScpLFxuICBUckdyb3VwQ29tcG9uZW50OiAoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCAuLi5yZXN0IH0pID0+IChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NuYW1lcygncnQtdHItZ3JvdXAnLCBjbGFzc05hbWUpfSByb2xlPVwicm93Z3JvdXBcIiB7Li4ucmVzdH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICksXG4gIFRyQ29tcG9uZW50OiAoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCAuLi5yZXN0IH0pID0+IChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NuYW1lcygncnQtdHInLCBjbGFzc05hbWUpfSByb2xlPVwicm93XCIgey4uLnJlc3R9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApLFxuICBUaENvbXBvbmVudDogKHtcbiAgICB0b2dnbGVTb3J0LCBjbGFzc05hbWUsIGNoaWxkcmVuLCAuLi5yZXN0XG4gIH0pID0+IChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50c1xuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygncnQtdGgnLCBjbGFzc05hbWUpfVxuICAgICAgb25DbGljaz17ZSA9PiB0b2dnbGVTb3J0ICYmIHRvZ2dsZVNvcnQoZSl9XG4gICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgIHRhYkluZGV4PVwiLTFcIiAvLyBSZXNvbHZlcyBlc2xpbnQgaXNzdWVzIHdpdGhvdXQgaW1wbGVtZW50aW5nIGtleWJvYXJkIG5hdmlnYXRpb24gaW5jb3JyZWN0bHlcbiAgICAgIHsuLi5yZXN0fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKSxcbiAgVGRDb21wb25lbnQ6ICh7XG4gICAgdG9nZ2xlU29ydCwgY2xhc3NOYW1lLCBjaGlsZHJlbiwgLi4ucmVzdFxuICB9KSA9PiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ3J0LXRkJywgY2xhc3NOYW1lKX0gcm9sZT1cImdyaWRjZWxsXCIgey4uLnJlc3R9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApLFxuICBUZm9vdENvbXBvbmVudDogXy5tYWtlVGVtcGxhdGVDb21wb25lbnQoJ3J0LXRmb290JywgJ1Rmb290JyksXG4gIEZpbHRlckNvbXBvbmVudDogKHsgZmlsdGVyLCBvbkNoYW5nZSwgY29sdW1uIH0pID0+IChcbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9fVxuICAgICAgcGxhY2Vob2xkZXI9e2NvbHVtbi5QbGFjZWhvbGRlcn1cbiAgICAgIHZhbHVlPXtmaWx0ZXIgPyBmaWx0ZXIudmFsdWUgOiAnJ31cbiAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUpfVxuICAgIC8+XG4gICksXG4gIEV4cGFuZGVyQ29tcG9uZW50OiAoeyBpc0V4cGFuZGVkIH0pID0+IChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NuYW1lcygncnQtZXhwYW5kZXInLCBpc0V4cGFuZGVkICYmICctb3BlbicpfT4mYnVsbDs8L2Rpdj5cbiAgKSxcbiAgUGl2b3RWYWx1ZUNvbXBvbmVudDogKHsgc3ViUm93cywgdmFsdWUgfSkgPT4gKFxuICAgIDxzcGFuPlxuICAgICAge3ZhbHVlfSB7c3ViUm93cyAmJiBgKCR7c3ViUm93cy5sZW5ndGh9KWB9XG4gICAgPC9zcGFuPlxuICApLFxuICBBZ2dyZWdhdGVkQ29tcG9uZW50OiAoeyBzdWJSb3dzLCBjb2x1bW4gfSkgPT4ge1xuICAgIGNvbnN0IHByZXZpZXdWYWx1ZXMgPSBzdWJSb3dzLmZpbHRlcihkID0+IHR5cGVvZiBkW2NvbHVtbi5pZF0gIT09ICd1bmRlZmluZWQnKS5tYXAoKHJvdywgaSkgPT4gKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuICAgICAgPHNwYW4ga2V5PXtpfT5cbiAgICAgICAge3Jvd1tjb2x1bW4uaWRdfVxuICAgICAgICB7aSA8IHN1YlJvd3MubGVuZ3RoIC0gMSA/ICcsICcgOiAnJ31cbiAgICAgIDwvc3Bhbj5cbiAgICApKVxuICAgIHJldHVybiA8c3Bhbj57cHJldmlld1ZhbHVlc308L3NwYW4+XG4gIH0sXG4gIFBpdm90Q29tcG9uZW50OiB1bmRlZmluZWQsIC8vIHRoaXMgaXMgYSBjb21wdXRlZCBkZWZhdWx0IGdlbmVyYXRlZCB1c2luZ1xuICAvLyB0aGUgRXhwYW5kZXJDb21wb25lbnQgYW5kIFBpdm90VmFsdWVDb21wb25lbnQgYXQgcnVuLXRpbWUgaW4gbWV0aG9kcy5qc1xuICBQYWdpbmF0aW9uQ29tcG9uZW50OiBQYWdpbmF0aW9uLFxuICBQcmV2aW91c0NvbXBvbmVudDogdW5kZWZpbmVkLFxuICBOZXh0Q29tcG9uZW50OiB1bmRlZmluZWQsXG4gIExvYWRpbmdDb21wb25lbnQ6ICh7XG4gICAgY2xhc3NOYW1lLCBsb2FkaW5nLCBsb2FkaW5nVGV4dCwgLi4ucmVzdFxuICB9KSA9PiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJy1sb2FkaW5nJywgeyAnLWFjdGl2ZSc6IGxvYWRpbmcgfSwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCItbG9hZGluZy1pbm5lclwiPntsb2FkaW5nVGV4dH08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKSxcbiAgTm9EYXRhQ29tcG9uZW50OiBfLm1ha2VUZW1wbGF0ZUNvbXBvbmVudCgncnQtbm9EYXRhJywgJ05vRGF0YScpLFxuICBSZXNpemVyQ29tcG9uZW50OiBfLm1ha2VUZW1wbGF0ZUNvbXBvbmVudCgncnQtcmVzaXplcicsICdSZXNpemVyJyksXG4gIFBhZFJvd0NvbXBvbmVudDogKCkgPT4gPHNwYW4+Jm5ic3A7PC9zcGFuPixcbn1cbiJdfQ== \ No newline at end of file diff --git a/lib/hoc/README.md b/lib/hoc/README.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/hoc/advancedExpandTable/index.js b/lib/hoc/advancedExpandTable/index.js new file mode 100644 index 0000000000..181fed4301 --- /dev/null +++ b/lib/hoc/advancedExpandTable/index.js @@ -0,0 +1,255 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.advancedExpandTableHOC = exports.columnsWithToggle = exports.subComponentWithToggle = undefined; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = require('prop-types'); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _lodash = require('lodash.set'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _lodash3 = require('lodash.get'); + +var _lodash4 = _interopRequireDefault(_lodash3); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +/* + AdvancedExpandTableHOC for ReactTable + + HOC which allows any Cell in the row to toggle the row's + SubComponent. Also allows the SubComponent to toggle itself. + + Expand functions available to any SubComponent or Column Cell: + toggleRowSubComponent + showRowSubComponent + hideRowSubComponent + + Each Column Renderer (E.g. Cell ) gets the expand functions in its props + And Each SubComponent gets the expand functions in its props + + Expand functions takes the `rowInfo` given to each + Column Renderer and SubComponent already by ReactTable. +*/ + +var subComponentWithToggle = exports.subComponentWithToggle = function subComponentWithToggle(SubComponent, expandFuncs) { + return function (props) { + return _react2.default.createElement(SubComponent, _extends({}, props, expandFuncs)); + }; +}; + +// each cell in the column gets passed the function to toggle a sub component +var columnsWithToggle = exports.columnsWithToggle = function columnsWithToggle(columns, expandFuncs) { + return columns.map(function (column) { + if (column.columns) { + return _extends({}, column, { + columns: columnsWithToggle(column.columns, expandFuncs) + }); + } + return _extends({}, column, { + getProps: function getProps() { + return _extends({}, expandFuncs); + } + }); + }); +}; + +var advancedExpandTableHOC = function advancedExpandTableHOC(TableComponent) { + var _class, _temp; + + return _temp = _class = function (_Component) { + _inherits(AdvancedExpandTable, _Component); + + _createClass(AdvancedExpandTable, null, [{ + key: 'getDerivedStateFromProps', + + // after initial render if we get new + // data, columns, page changes, etc. + // we reset expanded state. + value: function getDerivedStateFromProps() { + return { + expanded: {} + }; + } + }]); + + function AdvancedExpandTable(props) { + _classCallCheck(this, AdvancedExpandTable); + + var _this = _possibleConstructorReturn(this, (AdvancedExpandTable.__proto__ || Object.getPrototypeOf(AdvancedExpandTable)).call(this, props)); + + _this.state = { + expanded: {} + }; + _this.toggleRowSubComponent = _this.toggleRowSubComponent.bind(_this); + _this.showRowSubComponent = _this.showRowSubComponent.bind(_this); + _this.hideRowSubComponent = _this.hideRowSubComponent.bind(_this); + _this.getTdProps = _this.getTdProps.bind(_this); + _this.fireOnExpandedChange = _this.fireOnExpandedChange.bind(_this); + _this.expandFuncs = { + toggleRowSubComponent: _this.toggleRowSubComponent, + showRowSubComponent: _this.showRowSubComponent, + hideRowSubComponent: _this.hideRowSubComponent + }; + return _this; + } + + _createClass(AdvancedExpandTable, [{ + key: 'fireOnExpandedChange', + value: function fireOnExpandedChange(rowInfo, e) { + // fire callback once state has changed. + if (this.props.onExpandedChange) { + this.props.onExpandedChange(rowInfo, e); + } + } + }, { + key: 'resolveNewTableState', + value: function resolveNewTableState(rowInfoOrNestingPath, e, expandType) { + var _this2 = this; + + // derive nestingPath if only rowInfo is passed + var nestingPath = rowInfoOrNestingPath; + + if (rowInfoOrNestingPath.nestingPath) { + nestingPath = rowInfoOrNestingPath.nestingPath; + } + + this.setState(function (prevState) { + var isExpanded = (0, _lodash4.default)(prevState.expanded, nestingPath); + // since we do not support nested rows, a shallow clone is okay. + var newExpanded = _extends({}, prevState.expanded); + + switch (expandType) { + case 'show': + (0, _lodash2.default)(newExpanded, nestingPath, {}); + break; + case 'hide': + (0, _lodash2.default)(newExpanded, nestingPath, false); + break; + default: + // toggle + (0, _lodash2.default)(newExpanded, nestingPath, isExpanded ? false : {}); + } + return _extends({}, prevState, { + expanded: newExpanded + }); + }, function () { + return _this2.fireOnExpandedChange(rowInfoOrNestingPath, e); + }); + } + }, { + key: 'toggleRowSubComponent', + value: function toggleRowSubComponent(rowInfo, e) { + this.resolveNewTableState(rowInfo, e); + } + }, { + key: 'showRowSubComponent', + value: function showRowSubComponent(rowInfo, e) { + this.resolveNewTableState(rowInfo, e, 'show'); + } + }, { + key: 'hideRowSubComponent', + value: function hideRowSubComponent(rowInfo, e) { + this.resolveNewTableState(rowInfo, e, 'hide'); + } + }, { + key: 'getTdProps', + value: function getTdProps(tableState, rowInfo, column) { + var _this3 = this; + + var expander = column.expander; + + + if (!expander) { + // no overrides + return {}; + } + + return { + // only override onClick for column Td + onClick: function onClick(e) { + _this3.toggleRowSubComponent(rowInfo, e); + } + }; + } + }, { + key: 'getWrappedInstance', + value: function getWrappedInstance() { + if (!this.wrappedInstance) { + console.warn('AdvancedExpandTable - No wrapped instance'); + } + if (this.wrappedInstance.getWrappedInstance) { + return this.wrappedInstance.getWrappedInstance(); + } + return this.wrappedInstance; + } + }, { + key: 'render', + value: function render() { + var _props = this.props, + columns = _props.columns, + SubComponent = _props.SubComponent, + onExpandedChange = _props.onExpandedChange, + rest = _objectWithoutProperties(_props, ['columns', 'SubComponent', 'onExpandedChange']); + + var wrappedColumns = columnsWithToggle(columns, this.expandFuncs); + var WrappedSubComponent = subComponentWithToggle(SubComponent, this.expandFuncs); + + return _react2.default.createElement(TableComponent, _extends({}, rest, { + columns: wrappedColumns, + expanded: this.state.expanded, + getTdProps: this.getTdProps, + SubComponent: WrappedSubComponent, + TdComponent: AdvancedExpandTable.TdComponent + })); + } + }], [{ + key: 'TdComponent', + + + // since we pass the expand functions to each Cell, + // we need to filter it out from being passed as an + // actual DOM attribute. See getProps in columnsWithToggle above. + value: function TdComponent(_ref) { + var toggleRowSubComponent = _ref.toggleRowSubComponent, + showRowSubComponent = _ref.showRowSubComponent, + hideRowSubComponent = _ref.hideRowSubComponent, + rest = _objectWithoutProperties(_ref, ['toggleRowSubComponent', 'showRowSubComponent', 'hideRowSubComponent']); + + // eslint-disable-next-line react/jsx-pascal-case + return _react2.default.createElement(TableComponent.defaultProps.TdComponent, rest); + } + }]); + + return AdvancedExpandTable; + }(_react.Component), _class.propTypes = { + columns: _propTypes2.default.array.isRequired, + SubComponent: _propTypes2.default.oneOfType([_propTypes2.default.func, _propTypes2.default.element]).isRequired, + onExpandedChange: _propTypes2.default.func + }, _class.defaultProps = { + onExpandedChange: null + }, _class.DisplayName = 'AdvancedExpandTable', _temp; +}; +exports.advancedExpandTableHOC = advancedExpandTableHOC; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob2MvYWR2YW5jZWRFeHBhbmRUYWJsZS9pbmRleC5qcyJdLCJuYW1lcyI6WyJzdWJDb21wb25lbnRXaXRoVG9nZ2xlIiwiU3ViQ29tcG9uZW50IiwiZXhwYW5kRnVuY3MiLCJwcm9wcyIsImNvbHVtbnNXaXRoVG9nZ2xlIiwiY29sdW1ucyIsIm1hcCIsImNvbHVtbiIsImdldFByb3BzIiwiYWR2YW5jZWRFeHBhbmRUYWJsZUhPQyIsImV4cGFuZGVkIiwic3RhdGUiLCJ0b2dnbGVSb3dTdWJDb21wb25lbnQiLCJiaW5kIiwic2hvd1Jvd1N1YkNvbXBvbmVudCIsImhpZGVSb3dTdWJDb21wb25lbnQiLCJnZXRUZFByb3BzIiwiZmlyZU9uRXhwYW5kZWRDaGFuZ2UiLCJyb3dJbmZvIiwiZSIsIm9uRXhwYW5kZWRDaGFuZ2UiLCJyb3dJbmZvT3JOZXN0aW5nUGF0aCIsImV4cGFuZFR5cGUiLCJuZXN0aW5nUGF0aCIsInNldFN0YXRlIiwiaXNFeHBhbmRlZCIsInByZXZTdGF0ZSIsIm5ld0V4cGFuZGVkIiwicmVzb2x2ZU5ld1RhYmxlU3RhdGUiLCJ0YWJsZVN0YXRlIiwiZXhwYW5kZXIiLCJvbkNsaWNrIiwid3JhcHBlZEluc3RhbmNlIiwiY29uc29sZSIsIndhcm4iLCJnZXRXcmFwcGVkSW5zdGFuY2UiLCJyZXN0Iiwid3JhcHBlZENvbHVtbnMiLCJXcmFwcGVkU3ViQ29tcG9uZW50IiwiQWR2YW5jZWRFeHBhbmRUYWJsZSIsIlRkQ29tcG9uZW50IiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiYXJyYXkiLCJpc1JlcXVpcmVkIiwib25lT2ZUeXBlIiwiZnVuYyIsImVsZW1lbnQiLCJkZWZhdWx0UHJvcHMiLCJEaXNwbGF5TmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JPLElBQU1BLDBE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ZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgc2V0IGZyb20gJ2xvZGFzaC5zZXQnXG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC5nZXQnXG5cbi8qXG4gIEFkdmFuY2VkRXhwYW5kVGFibGVIT0MgZm9yIFJlYWN0VGFibGVcblxuICBIT0Mgd2hpY2ggYWxsb3dzIGFueSBDZWxsIGluIHRoZSByb3cgdG8gdG9nZ2xlIHRoZSByb3cnc1xuICBTdWJDb21wb25lbnQuIEFsc28gYWxsb3dzIHRoZSBTdWJDb21wb25lbnQgdG8gdG9nZ2xlIGl0c2VsZi5cblxuICBFeHBhbmQgZnVuY3Rpb25zIGF2YWlsYWJsZSB0byBhbnkgU3ViQ29tcG9uZW50IG9yIENvbHVtbiBDZWxsOlxuICAgIHRvZ2dsZVJvd1N1YkNvbXBvbmVudFxuICAgIHNob3dSb3dTdWJDb21wb25lbnRcbiAgICBoaWRlUm93U3ViQ29tcG9uZW50XG5cbiAgRWFjaCBDb2x1bW4gUmVuZGVyZXIgKEUuZy4gQ2VsbCApIGdldHMgdGhlIGV4cGFuZCBmdW5jdGlvbnMgaW4gaXRzIHByb3BzXG4gIEFuZCBFYWNoIFN1YkNvbXBvbmVudCBnZXRzIHRoZSBleHBhbmQgZnVuY3Rpb25zIGluIGl0cyBwcm9wc1xuXG4gIEV4cGFuZCBmdW5jdGlvbnMgdGFrZXMgdGhlIGByb3dJbmZvYCBnaXZlbiB0byBlYWNoXG4gIENvbHVtbiBSZW5kZXJlciBhbmQgU3ViQ29tcG9uZW50IGFscmVhZHkgYnkgUmVhY3RUYWJsZS5cbiovXG5cbmV4cG9ydCBjb25zdCBzdWJDb21wb25lbnRXaXRoVG9nZ2xlID0gKFN1YkNvbXBvbmVudCwgZXhwYW5kRnVuY3MpID0+IHByb3BzID0+IChcbiAgPFN1YkNvbXBvbmVudCB7Li4ucHJvcHN9IHsuLi5leHBhbmRGdW5jc30gLz5cbilcblxuLy8gZWFjaCBjZWxsIGluIHRoZSBjb2x1bW4gZ2V0cyBwYXNzZWQgdGhlIGZ1bmN0aW9uIHRvIHRvZ2dsZSBhIHN1YiBjb21wb25lbnRcbmV4cG9ydCBjb25zdCBjb2x1bW5zV2l0aFRvZ2dsZSA9IChjb2x1bW5zLCBleHBhbmRGdW5jcykgPT5cbiAgY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICBpZiAoY29sdW1uLmNvbHVtbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgY29sdW1uczogY29sdW1uc1dpdGhUb2dnbGUoY29sdW1uLmNvbHVtbnMsIGV4cGFuZEZ1bmNzKSxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbHVtbixcbiAgICAgIGdldFByb3BzICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5leHBhbmRGdW5jcyxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9XG4gIH0pXG5cbmV4cG9ydCBjb25zdCBhZHZhbmNlZEV4cGFuZFRhYmxlSE9DID0gVGFibGVDb21wb25lbnQgPT5cbiAgY2xhc3MgQWR2YW5jZWRFeHBhbmRUYWJsZSBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgLy8gYWZ0ZXIgaW5pdGlhbCByZW5kZXIgaWYgd2UgZ2V0IG5ld1xuICAgIC8vIGRhdGEsIGNvbHVtbnMsIHBhZ2UgY2hhbmdlcywgZXRjLlxuICAgIC8vIHdlIHJlc2V0IGV4cGFuZGVkIHN0YXRlLlxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhwYW5kZWQ6IHt9LFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpXG4gICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICBleHBhbmRlZDoge30sXG4gICAgICB9XG4gICAgICB0aGlzLnRvZ2dsZVJvd1N1YkNvbXBvbmVudCA9IHRoaXMudG9nZ2xlUm93U3ViQ29tcG9uZW50LmJpbmQodGhpcylcbiAgICAgIHRoaXMuc2hvd1Jvd1N1YkNvbXBvbmVudCA9IHRoaXMuc2hvd1Jvd1N1YkNvbXBvbmVudC5iaW5kKHRoaXMpXG4gICAgICB0aGlzLmhpZGVSb3dTdWJDb21wb25lbnQgPSB0aGlzLmhpZGVSb3dTdWJDb21wb25lbnQuYmluZCh0aGlzKVxuICAgICAgdGhpcy5nZXRUZFByb3BzID0gdGhpcy5nZXRUZFByb3BzLmJpbmQodGhpcylcbiAgICAgIHRoaXMuZmlyZU9uRXhwYW5kZWRDaGFuZ2UgPSB0aGlzLmZpcmVPbkV4cGFuZGVkQ2hhbmdlLmJpbmQodGhpcylcbiAgICAgIHRoaXMuZXhwYW5kRnVuY3MgPSB7XG4gICAgICAgIHRvZ2dsZVJvd1N1YkNvbXBvbmVudDogdGhpcy50b2dnbGVSb3dTdWJDb21wb25lbnQsXG4gICAgICAgIHNob3dSb3dTdWJDb21wb25lbnQ6IHRoaXMuc2hvd1Jvd1N1YkNvbXBvbmVudCxcbiAgICAgICAgaGlkZVJvd1N1YkNvbXBvbmVudDogdGhpcy5oaWRlUm93U3ViQ29tcG9uZW50LFxuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICAgIFN1YkNvbXBvbmVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5lbGVtZW50XSlcbiAgICAgICAgLmlzUmVxdWlyZWQsXG4gICAgICBvbkV4cGFuZGVkQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB9O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIG9uRXhwYW5kZWRDaGFuZ2U6IG51bGwsXG4gICAgfTtcblxuICAgIHN0YXRpYyBEaXNwbGF5TmFtZSA9ICdBZHZhbmNlZEV4cGFuZFRhYmxlJztcblxuICAgIC8vIHNpbmNlIHdlIHBhc3MgdGhlIGV4cGFuZCBmdW5jdGlvbnMgdG8gZWFjaCBDZWxsLFxuICAgIC8vIHdlIG5lZWQgdG8gZmlsdGVyIGl0IG91dCBmcm9tIGJlaW5nIHBhc3NlZCBhcyBhblxuICAgIC8vIGFjdHVhbCBET00gYXR0cmlidXRlLiBTZWUgZ2V0UHJvcHMgaW4gY29sdW1uc1dpdGhUb2dnbGUgYWJvdmUuXG4gICAgc3RhdGljIFRkQ29tcG9uZW50ICh7XG4gICAgICB0b2dnbGVSb3dTdWJDb21wb25lbnQsXG4gICAgICBzaG93Um93U3ViQ29tcG9uZW50LFxuICAgICAgaGlkZVJvd1N1YkNvbXBvbmVudCxcbiAgICAgIC4uLnJlc3RcbiAgICB9KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXBhc2NhbC1jYXNlXG4gICAgICByZXR1cm4gPFRhYmxlQ29tcG9uZW50LmRlZmF1bHRQcm9wcy5UZENvbXBvbmVudCB7Li4ucmVzdH0gLz5cbiAgICB9XG5cbiAgICBmaXJlT25FeHBhbmRlZENoYW5nZSAocm93SW5mbywgZSkge1xuICAgICAgLy8gZmlyZSBjYWxsYmFjayBvbmNlIHN0YXRlIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMucHJvcHMub25FeHBhbmRlZENoYW5nZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9uRXhwYW5kZWRDaGFuZ2Uocm93SW5mbywgZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXNvbHZlTmV3VGFibGVTdGF0ZSAocm93SW5mb09yTmVzdGluZ1BhdGgsIGUsIGV4cGFuZFR5cGUpIHtcbiAgICAgIC8vIGRlcml2ZSBuZXN0aW5nUGF0aCBpZiBvbmx5IHJvd0luZm8gaXMgcGFzc2VkXG4gICAgICBsZXQgbmVzdGluZ1BhdGggPSByb3dJbmZvT3JOZXN0aW5nUGF0aFxuXG4gICAgICBpZiAocm93SW5mb09yTmVzdGluZ1BhdGgubmVzdGluZ1BhdGgpIHtcbiAgICAgICAgbmVzdGluZ1BhdGggPSByb3dJbmZvT3JOZXN0aW5nUGF0aC5uZXN0aW5nUGF0aFxuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICBwcmV2U3RhdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBnZXQocHJldlN0YXRlLmV4cGFuZGVkLCBuZXN0aW5nUGF0aClcbiAgICAgICAgICAvLyBzaW5jZSB3ZSBkbyBub3Qgc3VwcG9ydCBuZXN0ZWQgcm93cywgYSBzaGFsbG93IGNsb25lIGlzIG9rYXkuXG4gICAgICAgICAgY29uc3QgbmV3RXhwYW5kZWQgPSB7IC4uLnByZXZTdGF0ZS5leHBhbmRlZCB9XG5cbiAgICAgICAgICBzd2l0Y2ggKGV4cGFuZFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3Nob3cnOlxuICAgICAgICAgICAgICBzZXQobmV3RXhwYW5kZWQsIG5lc3RpbmdQYXRoLCB7fSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIGNhc2UgJ2hpZGUnOlxuICAgICAgICAgICAgICBzZXQobmV3RXhwYW5kZWQsIG5lc3RpbmdQYXRoLCBmYWxzZSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIC8vIHRvZ2dsZVxuICAgICAgICAgICAgICBzZXQobmV3RXhwYW5kZWQsIG5lc3RpbmdQYXRoLCBpc0V4cGFuZGVkID8gZmFsc2UgOiB7fSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgIGV4cGFuZGVkOiBuZXdFeHBhbmRlZCxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHRoaXMuZmlyZU9uRXhwYW5kZWRDaGFuZ2Uocm93SW5mb09yTmVzdGluZ1BhdGgsIGUpXG4gICAgICApXG4gICAgfVxuXG4gICAgdG9nZ2xlUm93U3ViQ29tcG9uZW50IChyb3dJbmZvLCBlKSB7XG4gICAgICB0aGlzLnJlc29sdmVOZXdUYWJsZVN0YXRlKHJvd0luZm8sIGUpXG4gICAgfVxuXG4gICAgc2hvd1Jvd1N1YkNvbXBvbmVudCAocm93SW5mbywgZSkge1xuICAgICAgdGhpcy5yZXNvbHZlTmV3VGFibGVTdGF0ZShyb3dJbmZvLCBlLCAnc2hvdycpXG4gICAgfVxuXG4gICAgaGlkZVJvd1N1YkNvbXBvbmVudCAocm93SW5mbywgZSkge1xuICAgICAgdGhpcy5yZXNvbHZlTmV3VGFibGVTdGF0ZShyb3dJbmZvLCBlLCAnaGlkZScpXG4gICAgfVxuXG4gICAgZ2V0VGRQcm9wcyAodGFibGVTdGF0ZSwgcm93SW5mbywgY29sdW1uKSB7XG4gICAgICBjb25zdCB7IGV4cGFuZGVyIH0gPSBjb2x1bW5cblxuICAgICAgaWYgKCFleHBhbmRlcikge1xuICAgICAgICAvLyBubyBvdmVycmlkZXNcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIG9ubHkgb3ZlcnJpZGUgb25DbGljayBmb3IgY29sdW1uIFRkXG4gICAgICAgIG9uQ2xpY2s6IGUgPT4ge1xuICAgICAgICAgIHRoaXMudG9nZ2xlUm93U3ViQ29tcG9uZW50KHJvd0luZm8sIGUpXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0V3JhcHBlZEluc3RhbmNlICgpIHtcbiAgICAgIGlmICghdGhpcy53cmFwcGVkSW5zdGFuY2UpIHsgY29uc29sZS53YXJuKCdBZHZhbmNlZEV4cGFuZFRhYmxlIC0gTm8gd3JhcHBlZCBpbnN0YW5jZScpIH1cbiAgICAgIGlmICh0aGlzLndyYXBwZWRJbnN0YW5jZS5nZXRXcmFwcGVkSW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZEluc3RhbmNlLmdldFdyYXBwZWRJbnN0YW5jZSgpXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy53cmFwcGVkSW5zdGFuY2VcbiAgICB9XG5cbiAgICByZW5kZXIgKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb2x1bW5zLCBTdWJDb21wb25lbnQsIG9uRXhwYW5kZWRDaGFuZ2UsIC4uLnJlc3RcbiAgICAgIH0gPSB0aGlzLnByb3BzXG5cbiAgICAgIGNvbnN0IHdyYXBwZWRDb2x1bW5zID0gY29sdW1uc1dpdGhUb2dnbGUoY29sdW1ucywgdGhpcy5leHBhbmRGdW5jcylcbiAgICAgIGNvbnN0IFdyYXBwZWRTdWJDb21wb25lbnQgPSBzdWJDb21wb25lbnRXaXRoVG9nZ2xlKFxuICAgICAgICBTdWJDb21wb25lbnQsXG4gICAgICAgIHRoaXMuZXhwYW5kRnVuY3NcbiAgICAgIClcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlQ29tcG9uZW50XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgY29sdW1ucz17d3JhcHBlZENvbHVtbnN9XG4gICAgICAgICAgZXhwYW5kZWQ9e3RoaXMuc3RhdGUuZXhwYW5kZWR9XG4gICAgICAgICAgZ2V0VGRQcm9wcz17dGhpcy5nZXRUZFByb3BzfVxuICAgICAgICAgIFN1YkNvbXBvbmVudD17V3JhcHBlZFN1YkNvbXBvbmVudH1cbiAgICAgICAgICBUZENvbXBvbmVudD17QWR2YW5jZWRFeHBhbmRUYWJsZS5UZENvbXBvbmVudH1cbiAgICAgICAgLz5cbiAgICAgIClcbiAgICB9XG4gIH1cbiJdfQ== \ No newline at end of file diff --git a/lib/hoc/foldableTable/index.js b/lib/hoc/foldableTable/index.js new file mode 100644 index 0000000000..bc202ad958 --- /dev/null +++ b/lib/hoc/foldableTable/index.js @@ -0,0 +1,322 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +var _left = require('./left.svg'); + +var _left2 = _interopRequireDefault(_left); + +var _right = require('./right.svg'); + +var _right2 = _interopRequireDefault(_right); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint-disable */ + +var defaultFoldIconComponent = function defaultFoldIconComponent(_ref) { + var collapsed = _ref.collapsed; + + var style = { width: 25 }; + + if (collapsed) return _react2.default.createElement('img', { src: _right2.default, style: style, alt: 'right' }); + return _react2.default.createElement('img', { src: _left2.default, style: style, alt: 'left' }); +}; + +var defaultFoldButtonComponent = function defaultFoldButtonComponent(_ref2) { + var header = _ref2.header, + collapsed = _ref2.collapsed, + icon = _ref2.icon, + onClick = _ref2.onClick; + + var style = { + marginLeft: '0px', + marginTop: '-5px', + marginBottom: '-8px', + float: 'left', + cursor: 'pointer' + }; + + return _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + 'div', + { style: style, onClick: onClick }, + icon + ), + !collapsed && _react2.default.createElement( + 'div', + null, + header + ) + ); +}; + +exports.default = function (ReactTable) { + var wrapper = function (_React$Component) { + _inherits(RTFoldableTable, _React$Component); + + _createClass(RTFoldableTable, null, [{ + key: 'getDerivedStateFromProps', + value: function getDerivedStateFromProps(props, state) { + if (state.resized !== props.resized) { + return { + resized: props.resized || [] + }; + } + + return null; + } + }]); + + function RTFoldableTable(props, context) { + _classCallCheck(this, RTFoldableTable); + + var _this = _possibleConstructorReturn(this, (RTFoldableTable.__proto__ || Object.getPrototypeOf(RTFoldableTable)).call(this, props, context)); + + _this.onResizedChange = function (resized) { + var onResizedChange = _this.props.onResizedChange; + + if (onResizedChange) onResizedChange(resized);else { + _this.setState(function (p) { + return { resized: resized }; + }); + } + }; + + _this.removeResized = function (column) { + var id = column.id; + + if (!id) return; + + var resized = _this.state.resized; + + if (!resized) return; + + var rs = resized.find(function (r) { + return r.id === id; + }); + if (!rs) return; + + var newResized = resized.filter(function (r) { + return r !== rs; + }); + _this.onResizedChange(newResized); + }; + + _this.getWrappedInstance = function () { + if (!_this.wrappedInstance) console.warn('RTFoldableTable - No wrapped instance'); + if (_this.wrappedInstance.getWrappedInstance) return _this.wrappedInstance.getWrappedInstance(); + return _this.wrappedInstance; + }; + + _this.getCopiedKey = function (key) { + var foldableOriginalKey = _this.props.foldableOriginalKey; + + return '' + foldableOriginalKey + key; + }; + + _this.copyOriginals = function (column) { + var FoldedColumn = _this.props.FoldedColumn; + + // Stop copy if the column already copied + + if (column.original_Header) return; + + Object.keys(FoldedColumn).forEach(function (k) { + var copiedKey = _this.getCopiedKey(k); + + if (k === 'Cell') column[copiedKey] = column[k] ? column[k] : function (c) { + return c.value; + };else column[copiedKey] = column[k]; + }); + + // Copy sub Columns + if (column.columns && !column.original_Columns) column.original_Columns = column.columns; + + // Copy Header + if (!column.original_Header) column.original_Header = column.Header; + }; + + _this.restoreToOriginal = function (column) { + var FoldedColumn = _this.props.FoldedColumn; + + + Object.keys(FoldedColumn).forEach(function (k) { + // ignore header as handling by foldableHeaderRender + if (k === 'Header') return; + + var copiedKey = _this.getCopiedKey(k); + column[k] = column[copiedKey]; + }); + + if (column.columns && column.original_Columns) column.columns = column.original_Columns; + }; + + _this.getState = function () { + return _this.props.onFoldChange ? _this.props.folded : _this.state.folded; + }; + + _this.isFolded = function (col) { + var folded = _this.getState(); + return folded[col.id] === true; + }; + + _this.foldingHandler = function (col) { + if (!col || !col.id) return; + + var onFoldChange = _this.props.onFoldChange; + + var folded = _this.getState(); + var id = col.id; + + + var newFold = Object.assign({}, folded); + newFold[id] = !newFold[id]; + + // Remove the Resized if have + _this.removeResized(col); + + if (onFoldChange) onFoldChange(newFold);else { + _this.setState(function (previous) { + return { folded: newFold }; + }); + } + }; + + _this.foldableHeaderRender = function (cell) { + var _this$props = _this.props, + FoldButtonComponent = _this$props.FoldButtonComponent, + FoldIconComponent = _this$props.FoldIconComponent; + var column = cell.column; + + var collapsed = _this.isFolded(column); + var icon = _react2.default.createElement(FoldIconComponent, { collapsed: collapsed }); + var onClick = function onClick() { + return _this.foldingHandler(column); + }; + + return _react2.default.createElement(FoldButtonComponent, { + header: column.original_Header, + collapsed: collapsed, + icon: icon, + onClick: onClick + }); + }; + + _this.applyFoldableForColumn = function (column) { + var collapsed = _this.isFolded(column); + var FoldedColumn = _this.props.FoldedColumn; + + // Handle Column Header + + if (column.columns) { + if (collapsed) { + column.columns = [FoldedColumn]; + column.width = FoldedColumn.width; + column.style = FoldedColumn.style; + } else _this.restoreToOriginal(column); + } + // Handle Normal Column. + else if (collapsed) column = Object.assign(column, FoldedColumn);else { + _this.restoreToOriginal(column); + } + }; + + _this.applyFoldableForColumns = function (columns) { + return columns.map(function (col, index) { + if (!col.foldable) return col; + + // If col don't have id then generate id based on index + if (!col.id) col.id = 'col_' + index; + + _this.copyOriginals(col); + // Replace current header with internal header render. + col.Header = function (c) { + return _this.foldableHeaderRender(c); + }; + // apply foldable + _this.applyFoldableForColumn(col); + + // return the new column out + return col; + }); + }; + + _this.state = { + folded: props.onFoldChange ? undefined : {}, + resized: props.resized || [] + }; + return _this; + } + + // this is so we can expose the underlying ReactTable. + + + _createClass(RTFoldableTable, [{ + key: 'render', + value: function render() { + var _this2 = this; + + var _props = this.props, + originalCols = _props.columns, + FoldButtonComponent = _props.FoldButtonComponent, + FoldIconComponent = _props.FoldIconComponent, + FoldedColumn = _props.FoldedColumn, + rest = _objectWithoutProperties(_props, ['columns', 'FoldButtonComponent', 'FoldIconComponent', 'FoldedColumn']); + + var columns = this.applyFoldableForColumns([].concat(_toConsumableArray(originalCols))); + + var extra = { + columns: columns, + onResizedChange: this.onResizedChange, + resized: this.state.resized + }; + + return _react2.default.createElement(ReactTable, _extends({}, rest, extra, { ref: function ref(r) { + return _this2.wrappedInstance = r; + } })); + } + }]); + + return RTFoldableTable; + }(_react2.default.Component); + + wrapper.displayName = 'RTFoldableTable'; + wrapper.defaultProps = { + FoldIconComponent: defaultFoldIconComponent, + FoldButtonComponent: defaultFoldButtonComponent, + foldableOriginalKey: 'original_', + FoldedColumn: { + Cell: function Cell(c) { + return ''; + }, + width: 30, + sortable: false, + resizable: false, + filterable: false + } + }; + + return wrapper; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob2MvZm9sZGFibGVUYWJsZS9pbmRleC5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0Rm9sZEljb25Db21wb25lbnQiLCJjb2xsYXBzZWQiLCJzdHlsZSIsIndpZHRoIiwicmlnaHQiLCJsZWZ0IiwiZGVmYXVsdEZvbGRCdXR0b25Db21wb25lbnQiLCJoZWFkZXIiLCJpY29uIiwib25DbGljayIsIm1hcmdpbkxlZnQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJmbG9hdCIsImN1cnNvciIsIndyYXBwZXIiLCJwcm9wcyIsInN0YXRlIiwicmVzaXplZCIsImNvbnRleHQiLCJvblJlc2l6ZWRDaGFuZ2UiLCJzZXRTdGF0ZSIsInJlbW92ZVJlc2l6ZWQiLCJpZCIsImNvbHVtbiIsInJzIiwiZmluZCIsInIiLCJuZXdSZXNpemVkIiwiZmlsdGVyIiwiZ2V0V3JhcHBlZEluc3RhbmNlIiwid3JhcHBlZEluc3RhbmNlIiwiY29uc29sZSIsIndhcm4iLCJnZXRDb3BpZWRLZXkiLCJmb2xkYWJsZU9yaWdpbmFsS2V5Iiwia2V5IiwiY29weU9yaWdpbmFscyIsIkZvbGRlZENvbHVtbiIsIm9yaWdpbmFsX0hlYWRlciIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiY29waWVkS2V5IiwiayIsImMiLCJ2YWx1ZSIsImNvbHVtbnMiLCJvcmlnaW5hbF9Db2x1bW5zIiwiSGVhZGVyIiwicmVzdG9yZVRvT3JpZ2luYWwiLCJnZXRTdGF0ZSIsIm9uRm9sZENoYW5nZSIsImZvbGRlZCIsImlzRm9sZGVkIiwiY29sIiwiZm9sZGluZ0hhbmRsZXIiLCJuZXdGb2xkIiwiYXNzaWduIiwiZm9sZGFibGVIZWFkZXJSZW5kZXIiLCJGb2xkQnV0dG9uQ29tcG9uZW50IiwiRm9sZEljb25Db21wb25lbnQiLCJjZWxsIiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiYXBwbHlGb2xkYWJsZUZvckNvbHVtbiIsImFwcGx5Rm9sZGFibGVGb3JDb2x1bW5zIiwibWFwIiwiaW5kZXgiLCJmb2xkYWJsZSIsInVuZGVmaW5lZCIsIm9yaWdpbmFsQ29scyIsInJlc3QiLCJleHRyYSIsIkNvbXBvbmVudCIsImRpc3BsYXlOYW1lIiwiZGVmYXVsdFByb3BzIiwiQ2VsbCIsInNvcnRhYmxlIiwicmVzaXphYmxlIiwiZmlsdGVyYWJsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7K2VBSkE7O0FBTUEsSUFBTUEsMkJBQTJCLFNBQTNCQSx3QkFBMkIsT0FBbUI7QUFBQSxNQUFoQkMsU0FBZ0IsUUFBaEJBLFNBQWdCOztBQUNsRCxNQUFNQyxRQUFRLEVBQUVDLE9BQU8sRUFBVCxFQUFkOztBQUVBLE1BQUlGLFNBQUosRUFBZSxPQUFPLHVDQUFLLEtBQUtHLGVBQVYsRUFBaUIsT0FBT0YsS0FBeEIsRUFBK0IsS0FBSSxPQUFuQyxHQUFQO0FBQ2YsU0FBTyx1Q0FBSyxLQUFLRyxjQUFWLEVBQWdCLE9BQU9ILEtBQXZCLEVBQThCLEtBQUksTUFBbEMsR0FBUDtBQUNELENBTEQ7O0FBT0EsSUFBTUksNkJBQTZCLFNBQTdCQSwwQkFBNkIsUUFBMEM7QUFBQSxNQUF2Q0MsTUFBdUMsU0FBdkNBLE1BQXVDO0FBQUEsTUFBL0JOLFNBQStCLFNBQS9CQSxTQUErQjtBQUFBLE1BQXBCTyxJQUFvQixTQUFwQkEsSUFBb0I7QUFBQSxNQUFkQyxPQUFjLFNBQWRBLE9BQWM7O0FBQzNFLE1BQU1QLFFBQVE7QUFDWlEsZ0JBQVksS0FEQTtBQUVaQyxlQUFXLE1BRkM7QUFHWkMsa0JBQWMsTUFIRjtBQUlaQyxXQUFPLE1BSks7QUFLWkMsWUFBUTtBQUxJLEdBQWQ7O0FBUUEsU0FDRTtBQUFBO0FBQUE7QUFDRTtBQUFBO0FBQUEsUUFBSyxPQUFPWixLQUFaLEVBQW1CLFNBQVNPLE9BQTVCO0FBQ0dEO0FBREgsS0FERjtBQUlHLEtBQUNQLFNBQUQsSUFBYztBQUFBO0FBQUE7QUFBTU07QUFBTjtBQUpqQixHQURGO0FBUUQsQ0FqQkQ7O2tCQW1CZSxzQkFBYztBQUMzQixNQUFNUTtBQUFBOztBQUFBO0FBQUE7QUFBQSwrQ0FDNEJDLEtBRDVCLEVBQ21DQyxLQURuQyxFQUMwQztBQUM1QyxZQUFJQSxNQUFNQyxPQUFOLEtBQWtCRixNQUFNRSxPQUE1QixFQUFxQztBQUNuQyxpQkFBTztBQUNMQSxxQkFBU0YsTUFBTUUsT0FBTixJQUFpQjtBQURyQixXQUFQO0FBR0Q7O0FBRUQsZUFBTyxJQUFQO0FBQ0Q7QUFURzs7QUFXSiw2QkFBWUYsS0FBWixFQUFtQkcsT0FBbkIsRUFBNEI7QUFBQTs7QUFBQSxvSUFDcEJILEtBRG9CLEVBQ2JHLE9BRGE7O0FBQUEsWUFTNUJDLGVBVDRCLEdBU1YsbUJBQVc7QUFBQSxZQUNuQkEsZUFEbUIsR0FDQyxNQUFLSixLQUROLENBQ25CSSxlQURtQjs7QUFFM0IsWUFBSUEsZUFBSixFQUFxQkEsZ0JBQWdCRixPQUFoQixFQUFyQixLQUNLO0FBQ0gsZ0JBQUtHLFFBQUwsQ0FBYztBQUFBLG1CQUFNLEVBQUVILGdCQUFGLEVBQU47QUFBQSxXQUFkO0FBQ0Q7QUFDRixPQWYyQjs7QUFBQSxZQWlCNUJJLGFBakI0QixHQWlCWixrQkFBVTtBQUFBLFlBQ2hCQyxFQURnQixHQUNUQyxNQURTLENBQ2hCRCxFQURnQjs7QUFFeEIsWUFBSSxDQUFDQSxFQUFMLEVBQVM7O0FBRmUsWUFJaEJMLE9BSmdCLEdBSUosTUFBS0QsS0FKRCxDQUloQkMsT0FKZ0I7O0FBS3hCLFlBQUksQ0FBQ0EsT0FBTCxFQUFjOztBQUVkLFlBQU1PLEtBQUtQLFFBQVFRLElBQVIsQ0FBYTtBQUFBLGlCQUFLQyxFQUFFSixFQUFGLEtBQVNBLEVBQWQ7QUFBQSxTQUFiLENBQVg7QUFDQSxZQUFJLENBQUNFLEVBQUwsRUFBUzs7QUFFVCxZQUFNRyxhQUFhVixRQUFRVyxNQUFSLENBQWU7QUFBQSxpQkFBS0YsTUFBTUYsRUFBWDtBQUFBLFNBQWYsQ0FBbkI7QUFDQSxjQUFLTCxlQUFMLENBQXFCUSxVQUFyQjtBQUNELE9BN0IyQjs7QUFBQSxZQWdDNUJFLGtCQWhDNEIsR0FnQ1AsWUFBTTtBQUN6QixZQUFJLENBQUMsTUFBS0MsZUFBVixFQUEyQkMsUUFBUUMsSUFBUixDQUFhLHVDQUFiO0FBQzNCLFlBQUksTUFBS0YsZUFBTCxDQUFxQkQsa0JBQXpCLEVBQTZDLE9BQU8sTUFBS0MsZUFBTCxDQUFxQkQsa0JBQXJCLEVBQVA7QUFDN0MsZUFBTyxNQUFLQyxlQUFaO0FBQ0QsT0FwQzJCOztBQUFBLFlBc0M1QkcsWUF0QzRCLEdBc0NiLGVBQU87QUFBQSxZQUNaQyxtQkFEWSxHQUNZLE1BQUtuQixLQURqQixDQUNabUIsbUJBRFk7O0FBRXBCLG9CQUFVQSxtQkFBVixHQUFnQ0MsR0FBaEM7QUFDRCxPQXpDMkI7O0FBQUEsWUEyQzVCQyxhQTNDNEIsR0EyQ1osa0JBQVU7QUFBQSxZQUNoQkMsWUFEZ0IsR0FDQyxNQUFLdEIsS0FETixDQUNoQnNCLFlBRGdCOztBQUd4Qjs7QUFDQSxZQUFJZCxPQUFPZSxlQUFYLEVBQTRCOztBQUU1QkMsZUFBT0MsSUFBUCxDQUFZSCxZQUFaLEVBQTBCSSxPQUExQixDQUFrQyxhQUFLO0FBQ3JDLGNBQU1DLFlBQVksTUFBS1QsWUFBTCxDQUFrQlUsQ0FBbEIsQ0FBbEI7O0FBRUEsY0FBSUEsTUFBTSxNQUFWLEVBQWtCcEIsT0FBT21CLFNBQVAsSUFBb0JuQixPQUFPb0IsQ0FBUCxJQUFZcEIsT0FBT29CLENBQVAsQ0FBWixHQUF3QjtBQUFBLG1CQUFLQyxFQUFFQyxLQUFQO0FBQUEsV0FBNUMsQ0FBbEIsS0FDS3RCLE9BQU9tQixTQUFQLElBQW9CbkIsT0FBT29CLENBQVAsQ0FBcEI7QUFDTixTQUxEOztBQU9BO0FBQ0EsWUFBSXBCLE9BQU91QixPQUFQLElBQWtCLENBQUN2QixPQUFPd0IsZ0JBQTlCLEVBQWdEeEIsT0FBT3dCLGdCQUFQLEdBQTBCeEIsT0FBT3VCLE9BQWpDOztBQUVoRDtBQUNBLFlBQUksQ0FBQ3ZCLE9BQU9lLGVBQVosRUFBNkJmLE9BQU9lLGVBQVAsR0FBeUJmLE9BQU95QixNQUFoQztBQUM5QixPQTdEMkI7O0FBQUEsWUErRDVCQyxpQkEvRDRCLEdBK0RSLGtCQUFVO0FBQUEsWUFDcEJaLFlBRG9CLEdBQ0gsTUFBS3RCLEtBREYsQ0FDcEJzQixZQURvQjs7O0FBRzVCRSxlQUFPQyxJQUFQLENBQVlILFlBQVosRUFBMEJJLE9BQTFCLENBQWtDLGFBQUs7QUFDckM7QUFDQSxjQUFJRSxNQUFNLFFBQVYsRUFBb0I7O0FBRXBCLGNBQU1ELFlBQVksTUFBS1QsWUFBTCxDQUFrQlUsQ0FBbEIsQ0FBbEI7QUFDQXBCLGlCQUFPb0IsQ0FBUCxJQUFZcEIsT0FBT21CLFNBQVAsQ0FBWjtBQUNELFNBTkQ7O0FBUUEsWUFBSW5CLE9BQU91QixPQUFQLElBQWtCdkIsT0FBT3dCLGdCQUE3QixFQUErQ3hCLE9BQU91QixPQUFQLEdBQWlCdkIsT0FBT3dCLGdCQUF4QjtBQUNoRCxPQTNFMkI7O0FBQUEsWUE2RTVCRyxRQTdFNEIsR0E2RWpCO0FBQUEsZUFBTyxNQUFLbkMsS0FBTCxDQUFXb0MsWUFBWCxHQUEwQixNQUFLcEMsS0FBTCxDQUFXcUMsTUFBckMsR0FBOEMsTUFBS3BDLEtBQUwsQ0FBV29DLE1BQWhFO0FBQUEsT0E3RWlCOztBQUFBLFlBK0U1QkMsUUEvRTRCLEdBK0VqQixlQUFPO0FBQ2hCLFlBQU1ELFNBQVMsTUFBS0YsUUFBTCxFQUFmO0FBQ0EsZUFBT0UsT0FBT0UsSUFBSWhDLEVBQVgsTUFBbUIsSUFBMUI7QUFDRCxPQWxGMkI7O0FBQUEsWUFvRjVCaUMsY0FwRjRCLEdBb0ZYLGVBQU87QUFDdEIsWUFBSSxDQUFDRCxHQUFELElBQVEsQ0FBQ0EsSUFBSWhDLEVBQWpCLEVBQXFCOztBQURDLFlBR2Q2QixZQUhjLEdBR0csTUFBS3BDLEtBSFIsQ0FHZG9DLFlBSGM7O0FBSXRCLFlBQU1DLFNBQVMsTUFBS0YsUUFBTCxFQUFmO0FBSnNCLFlBS2Q1QixFQUxjLEdBS1BnQyxHQUxPLENBS2RoQyxFQUxjOzs7QUFPdEIsWUFBTWtDLFVBQVVqQixPQUFPa0IsTUFBUCxDQUFjLEVBQWQsRUFBa0JMLE1BQWxCLENBQWhCO0FBQ0FJLGdCQUFRbEMsRUFBUixJQUFjLENBQUNrQyxRQUFRbEMsRUFBUixDQUFmOztBQUVBO0FBQ0EsY0FBS0QsYUFBTCxDQUFtQmlDLEdBQW5COztBQUVBLFlBQUlILFlBQUosRUFBa0JBLGFBQWFLLE9BQWIsRUFBbEIsS0FDSztBQUNILGdCQUFLcEMsUUFBTCxDQUFjO0FBQUEsbUJBQWEsRUFBRWdDLFFBQVFJLE9BQVYsRUFBYjtBQUFBLFdBQWQ7QUFDRDtBQUNGLE9BckcyQjs7QUFBQSxZQXVHNUJFLG9CQXZHNEIsR0F1R0wsZ0JBQVE7QUFBQSwwQkFDc0IsTUFBSzNDLEtBRDNCO0FBQUEsWUFDckI0QyxtQkFEcUIsZUFDckJBLG1CQURxQjtBQUFBLFlBQ0FDLGlCQURBLGVBQ0FBLGlCQURBO0FBQUEsWUFFckJyQyxNQUZxQixHQUVWc0MsSUFGVSxDQUVyQnRDLE1BRnFCOztBQUc3QixZQUFNdkIsWUFBWSxNQUFLcUQsUUFBTCxDQUFjOUIsTUFBZCxDQUFsQjtBQUNBLFlBQU1oQixPQUFPdUQsZ0JBQU1DLGFBQU4sQ0FBb0JILGlCQUFwQixFQUF1QyxFQUFFNUQsb0JBQUYsRUFBdkMsQ0FBYjtBQUNBLFlBQU1RLFVBQVUsU0FBVkEsT0FBVTtBQUFBLGlCQUFNLE1BQUsrQyxjQUFMLENBQW9CaEMsTUFBcEIsQ0FBTjtBQUFBLFNBQWhCOztBQUVBLGVBQU91QyxnQkFBTUMsYUFBTixDQUFvQkosbUJBQXBCLEVBQXlDO0FBQzlDckQsa0JBQVFpQixPQUFPZSxlQUQrQjtBQUU5Q3RDLDhCQUY4QztBQUc5Q08sb0JBSDhDO0FBSTlDQztBQUo4QyxTQUF6QyxDQUFQO0FBTUQsT0FwSDJCOztBQUFBLFlBc0g1QndELHNCQXRINEIsR0FzSEgsa0JBQVU7QUFDakMsWUFBTWhFLFlBQVksTUFBS3FELFFBQUwsQ0FBYzlCLE1BQWQsQ0FBbEI7QUFEaUMsWUFFekJjLFlBRnlCLEdBRVIsTUFBS3RCLEtBRkcsQ0FFekJzQixZQUZ5Qjs7QUFJakM7O0FBQ0EsWUFBSWQsT0FBT3VCLE9BQVgsRUFBb0I7QUFDbEIsY0FBSTlDLFNBQUosRUFBZTtBQUNidUIsbUJBQU91QixPQUFQLEdBQWlCLENBQUNULFlBQUQsQ0FBakI7QUFDQWQsbUJBQU9yQixLQUFQLEdBQWVtQyxhQUFhbkMsS0FBNUI7QUFDQXFCLG1CQUFPdEIsS0FBUCxHQUFlb0MsYUFBYXBDLEtBQTVCO0FBQ0QsV0FKRCxNQUlPLE1BQUtnRCxpQkFBTCxDQUF1QjFCLE1BQXZCO0FBQ1I7QUFDRDtBQVBBLGFBUUssSUFBSXZCLFNBQUosRUFBZXVCLFNBQVNnQixPQUFPa0IsTUFBUCxDQUFjbEMsTUFBZCxFQUFzQmMsWUFBdEIsQ0FBVCxDQUFmLEtBQ0E7QUFDSCxrQkFBS1ksaUJBQUwsQ0FBdUIxQixNQUF2QjtBQUNEO0FBQ0YsT0F2STJCOztBQUFBLFlBeUk1QjBDLHVCQXpJNEIsR0F5SUY7QUFBQSxlQUN4Qm5CLFFBQVFvQixHQUFSLENBQVksVUFBQ1osR0FBRCxFQUFNYSxLQUFOLEVBQWdCO0FBQzFCLGNBQUksQ0FBQ2IsSUFBSWMsUUFBVCxFQUFtQixPQUFPZCxHQUFQOztBQUVuQjtBQUNBLGNBQUksQ0FBQ0EsSUFBSWhDLEVBQVQsRUFBYWdDLElBQUloQyxFQUFKLFlBQWdCNkMsS0FBaEI7O0FBRWIsZ0JBQUsvQixhQUFMLENBQW1Ca0IsR0FBbkI7QUFDQTtBQUNBQSxjQUFJTixNQUFKLEdBQWE7QUFBQSxtQkFBSyxNQUFLVSxvQkFBTCxDQUEwQmQsQ0FBMUIsQ0FBTDtBQUFBLFdBQWI7QUFDQTtBQUNBLGdCQUFLb0Isc0JBQUwsQ0FBNEJWLEdBQTVCOztBQUVBO0FBQ0EsaUJBQU9BLEdBQVA7QUFDRCxTQWRELENBRHdCO0FBQUEsT0F6SUU7O0FBRzFCLFlBQUt0QyxLQUFMLEdBQWE7QUFDWG9DLGdCQUFRckMsTUFBTW9DLFlBQU4sR0FBcUJrQixTQUFyQixHQUFpQyxFQUQ5QjtBQUVYcEQsaUJBQVNGLE1BQU1FLE9BQU4sSUFBaUI7QUFGZixPQUFiO0FBSDBCO0FBTzNCOztBQXdCRDs7O0FBMUNJO0FBQUE7QUFBQSwrQkFxS0s7QUFBQTs7QUFBQSxxQkFPSCxLQUFLRixLQVBGO0FBQUEsWUFFSXVELFlBRkosVUFFTHhCLE9BRks7QUFBQSxZQUdMYSxtQkFISyxVQUdMQSxtQkFISztBQUFBLFlBSUxDLGlCQUpLLFVBSUxBLGlCQUpLO0FBQUEsWUFLTHZCLFlBTEssVUFLTEEsWUFMSztBQUFBLFlBTUZrQyxJQU5FOztBQVFQLFlBQU16QixVQUFVLEtBQUttQix1QkFBTCw4QkFBaUNLLFlBQWpDLEdBQWhCOztBQUVBLFlBQU1FLFFBQVE7QUFDWjFCLDBCQURZO0FBRVozQiwyQkFBaUIsS0FBS0EsZUFGVjtBQUdaRixtQkFBUyxLQUFLRCxLQUFMLENBQVdDO0FBSFIsU0FBZDs7QUFNQSxlQUFPLDhCQUFDLFVBQUQsZUFBZ0JzRCxJQUFoQixFQUEwQkMsS0FBMUIsSUFBaUMsS0FBSztBQUFBLG1CQUFNLE9BQUsxQyxlQUFMLEdBQXVCSixDQUE3QjtBQUFBLFdBQXRDLElBQVA7QUFDRDtBQXRMRzs7QUFBQTtBQUFBLElBQXdDb0MsZ0JBQU1XLFNBQTlDLENBQU47O0FBeUxBM0QsVUFBUTRELFdBQVIsR0FBc0IsaUJBQXRCO0FBQ0E1RCxVQUFRNkQsWUFBUixHQUF1QjtBQUNyQmYsdUJBQW1CN0Qsd0JBREU7QUFFckI0RCx5QkFBcUJ0RCwwQkFGQTtBQUdyQjZCLHlCQUFxQixXQUhBO0FBSXJCRyxrQkFBYztBQUNadUMsWUFBTTtBQUFBLGVBQUssRUFBTDtBQUFBLE9BRE07QUFFWjFFLGFBQU8sRUFGSztBQUdaMkUsZ0JBQVUsS0FIRTtBQUlaQyxpQkFBVyxLQUpDO0FBS1pDLGtCQUFZO0FBTEE7QUFKTyxHQUF2Qjs7QUFhQSxTQUFPakUsT0FBUDtBQUNELEMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgbGVmdCBmcm9tICcuL2xlZnQuc3ZnJ1xuaW1wb3J0IHJpZ2h0IGZyb20gJy4vcmlnaHQuc3ZnJ1xuXG5jb25zdCBkZWZhdWx0Rm9sZEljb25Db21wb25lbnQgPSAoeyBjb2xsYXBzZWQgfSkgPT4ge1xuICBjb25zdCBzdHlsZSA9IHsgd2lkdGg6IDI1IH1cblxuICBpZiAoY29sbGFwc2VkKSByZXR1cm4gPGltZyBzcmM9e3JpZ2h0fSBzdHlsZT17c3R5bGV9IGFsdD1cInJpZ2h0XCIgLz5cbiAgcmV0dXJuIDxpbWcgc3JjPXtsZWZ0fSBzdHlsZT17c3R5bGV9IGFsdD1cImxlZnRcIiAvPlxufVxuXG5jb25zdCBkZWZhdWx0Rm9sZEJ1dHRvbkNvbXBvbmVudCA9ICh7IGhlYWRlciwgY29sbGFwc2VkLCBpY29uLCBvbkNsaWNrIH0pID0+IHtcbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgbWFyZ2luTGVmdDogJzBweCcsXG4gICAgbWFyZ2luVG9wOiAnLTVweCcsXG4gICAgbWFyZ2luQm90dG9tOiAnLThweCcsXG4gICAgZmxvYXQ6ICdsZWZ0JyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxkaXYgc3R5bGU9e3N0eWxlfSBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICAgICAge2ljb259XG4gICAgICA8L2Rpdj5cbiAgICAgIHshY29sbGFwc2VkICYmIDxkaXY+e2hlYWRlcn08L2Rpdj59XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVhY3RUYWJsZSA9PiB7XG4gIGNvbnN0IHdyYXBwZXIgPSBjbGFzcyBSVEZvbGRhYmxlVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgICBpZiAoc3RhdGUucmVzaXplZCAhPT0gcHJvcHMucmVzaXplZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2l6ZWQ6IHByb3BzLnJlc2l6ZWQgfHwgW10sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KSB7XG4gICAgICBzdXBlcihwcm9wcywgY29udGV4dClcblxuICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgZm9sZGVkOiBwcm9wcy5vbkZvbGRDaGFuZ2UgPyB1bmRlZmluZWQgOiB7fSxcbiAgICAgICAgcmVzaXplZDogcHJvcHMucmVzaXplZCB8fCBbXSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvblJlc2l6ZWRDaGFuZ2UgPSByZXNpemVkID0+IHtcbiAgICAgIGNvbnN0IHsgb25SZXNpemVkQ2hhbmdlIH0gPSB0aGlzLnByb3BzXG4gICAgICBpZiAob25SZXNpemVkQ2hhbmdlKSBvblJlc2l6ZWRDaGFuZ2UocmVzaXplZClcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHAgPT4gKHsgcmVzaXplZCB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVSZXNpemVkID0gY29sdW1uID0+IHtcbiAgICAgIGNvbnN0IHsgaWQgfSA9IGNvbHVtblxuICAgICAgaWYgKCFpZCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgcmVzaXplZCB9ID0gdGhpcy5zdGF0ZVxuICAgICAgaWYgKCFyZXNpemVkKSByZXR1cm5cblxuICAgICAgY29uc3QgcnMgPSByZXNpemVkLmZpbmQociA9PiByLmlkID09PSBpZClcbiAgICAgIGlmICghcnMpIHJldHVyblxuXG4gICAgICBjb25zdCBuZXdSZXNpemVkID0gcmVzaXplZC5maWx0ZXIociA9PiByICE9PSBycylcbiAgICAgIHRoaXMub25SZXNpemVkQ2hhbmdlKG5ld1Jlc2l6ZWQpXG4gICAgfVxuXG4gICAgLy8gdGhpcyBpcyBzbyB3ZSBjYW4gZXhwb3NlIHRoZSB1bmRlcmx5aW5nIFJlYWN0VGFibGUuXG4gICAgZ2V0V3JhcHBlZEluc3RhbmNlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLndyYXBwZWRJbnN0YW5jZSkgY29uc29sZS53YXJuKCdSVEZvbGRhYmxlVGFibGUgLSBObyB3cmFwcGVkIGluc3RhbmNlJylcbiAgICAgIGlmICh0aGlzLndyYXBwZWRJbnN0YW5jZS5nZXRXcmFwcGVkSW5zdGFuY2UpIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZS5nZXRXcmFwcGVkSW5zdGFuY2UoKVxuICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZEluc3RhbmNlXG4gICAgfVxuXG4gICAgZ2V0Q29waWVkS2V5ID0ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHsgZm9sZGFibGVPcmlnaW5hbEtleSB9ID0gdGhpcy5wcm9wc1xuICAgICAgcmV0dXJuIGAke2ZvbGRhYmxlT3JpZ2luYWxLZXl9JHtrZXl9YFxuICAgIH1cblxuICAgIGNvcHlPcmlnaW5hbHMgPSBjb2x1bW4gPT4ge1xuICAgICAgY29uc3QgeyBGb2xkZWRDb2x1bW4gfSA9IHRoaXMucHJvcHNcblxuICAgICAgLy8gU3RvcCBjb3B5IGlmIHRoZSBjb2x1bW4gYWxyZWFkeSBjb3BpZWRcbiAgICAgIGlmIChjb2x1bW4ub3JpZ2luYWxfSGVhZGVyKSByZXR1cm5cblxuICAgICAgT2JqZWN0LmtleXMoRm9sZGVkQ29sdW1uKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICBjb25zdCBjb3BpZWRLZXkgPSB0aGlzLmdldENvcGllZEtleShrKVxuXG4gICAgICAgIGlmIChrID09PSAnQ2VsbCcpIGNvbHVtbltjb3BpZWRLZXldID0gY29sdW1uW2tdID8gY29sdW1uW2tdIDogYyA9PiBjLnZhbHVlXG4gICAgICAgIGVsc2UgY29sdW1uW2NvcGllZEtleV0gPSBjb2x1bW5ba11cbiAgICAgIH0pXG5cbiAgICAgIC8vIENvcHkgc3ViIENvbHVtbnNcbiAgICAgIGlmIChjb2x1bW4uY29sdW1ucyAmJiAhY29sdW1uLm9yaWdpbmFsX0NvbHVtbnMpIGNvbHVtbi5vcmlnaW5hbF9Db2x1bW5zID0gY29sdW1uLmNvbHVtbnNcblxuICAgICAgLy8gQ29weSBIZWFkZXJcbiAgICAgIGlmICghY29sdW1uLm9yaWdpbmFsX0hlYWRlcikgY29sdW1uLm9yaWdpbmFsX0hlYWRlciA9IGNvbHVtbi5IZWFkZXJcbiAgICB9XG5cbiAgICByZXN0b3JlVG9PcmlnaW5hbCA9IGNvbHVtbiA9PiB7XG4gICAgICBjb25zdCB7IEZvbGRlZENvbHVtbiB9ID0gdGhpcy5wcm9wc1xuXG4gICAgICBPYmplY3Qua2V5cyhGb2xkZWRDb2x1bW4pLmZvckVhY2goayA9PiB7XG4gICAgICAgIC8vIGlnbm9yZSBoZWFkZXIgYXMgaGFuZGxpbmcgYnkgZm9sZGFibGVIZWFkZXJSZW5kZXJcbiAgICAgICAgaWYgKGsgPT09ICdIZWFkZXInKSByZXR1cm5cblxuICAgICAgICBjb25zdCBjb3BpZWRLZXkgPSB0aGlzLmdldENvcGllZEtleShrKVxuICAgICAgICBjb2x1bW5ba10gPSBjb2x1bW5bY29waWVkS2V5XVxuICAgICAgfSlcblxuICAgICAgaWYgKGNvbHVtbi5jb2x1bW5zICYmIGNvbHVtbi5vcmlnaW5hbF9Db2x1bW5zKSBjb2x1bW4uY29sdW1ucyA9IGNvbHVtbi5vcmlnaW5hbF9Db2x1bW5zXG4gICAgfVxuXG4gICAgZ2V0U3RhdGUgPSAoKSA9PiAodGhpcy5wcm9wcy5vbkZvbGRDaGFuZ2UgPyB0aGlzLnByb3BzLmZvbGRlZCA6IHRoaXMuc3RhdGUuZm9sZGVkKVxuXG4gICAgaXNGb2xkZWQgPSBjb2wgPT4ge1xuICAgICAgY29uc3QgZm9sZGVkID0gdGhpcy5nZXRTdGF0ZSgpXG4gICAgICByZXR1cm4gZm9sZGVkW2NvbC5pZF0gPT09IHRydWVcbiAgICB9XG5cbiAgICBmb2xkaW5nSGFuZGxlciA9IGNvbCA9PiB7XG4gICAgICBpZiAoIWNvbCB8fCAhY29sLmlkKSByZXR1cm5cblxuICAgICAgY29uc3QgeyBvbkZvbGRDaGFuZ2UgfSA9IHRoaXMucHJvcHNcbiAgICAgIGNvbnN0IGZvbGRlZCA9IHRoaXMuZ2V0U3RhdGUoKVxuICAgICAgY29uc3QgeyBpZCB9ID0gY29sXG5cbiAgICAgIGNvbnN0IG5ld0ZvbGQgPSBPYmplY3QuYXNzaWduKHt9LCBmb2xkZWQpXG4gICAgICBuZXdGb2xkW2lkXSA9ICFuZXdGb2xkW2lkXVxuXG4gICAgICAvLyBSZW1vdmUgdGhlIFJlc2l6ZWQgaWYgaGF2ZVxuICAgICAgdGhpcy5yZW1vdmVSZXNpemVkKGNvbClcblxuICAgICAgaWYgKG9uRm9sZENoYW5nZSkgb25Gb2xkQ2hhbmdlKG5ld0ZvbGQpXG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2aW91cyA9PiAoeyBmb2xkZWQ6IG5ld0ZvbGQgfSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9sZGFibGVIZWFkZXJSZW5kZXIgPSBjZWxsID0+IHtcbiAgICAgIGNvbnN0IHsgRm9sZEJ1dHRvbkNvbXBvbmVudCwgRm9sZEljb25Db21wb25lbnQgfSA9IHRoaXMucHJvcHNcbiAgICAgIGNvbnN0IHsgY29sdW1uIH0gPSBjZWxsXG4gICAgICBjb25zdCBjb2xsYXBzZWQgPSB0aGlzLmlzRm9sZGVkKGNvbHVtbilcbiAgICAgIGNvbnN0IGljb24gPSBSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRJY29uQ29tcG9uZW50LCB7IGNvbGxhcHNlZCB9KVxuICAgICAgY29uc3Qgb25DbGljayA9ICgpID0+IHRoaXMuZm9sZGluZ0hhbmRsZXIoY29sdW1uKVxuXG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGb2xkQnV0dG9uQ29tcG9uZW50LCB7XG4gICAgICAgIGhlYWRlcjogY29sdW1uLm9yaWdpbmFsX0hlYWRlcixcbiAgICAgICAgY29sbGFwc2VkLFxuICAgICAgICBpY29uLFxuICAgICAgICBvbkNsaWNrLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhcHBseUZvbGRhYmxlRm9yQ29sdW1uID0gY29sdW1uID0+IHtcbiAgICAgIGNvbnN0IGNvbGxhcHNlZCA9IHRoaXMuaXNGb2xkZWQoY29sdW1uKVxuICAgICAgY29uc3QgeyBGb2xkZWRDb2x1bW4gfSA9IHRoaXMucHJvcHNcblxuICAgICAgLy8gSGFuZGxlIENvbHVtbiBIZWFkZXJcbiAgICAgIGlmIChjb2x1bW4uY29sdW1ucykge1xuICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgY29sdW1uLmNvbHVtbnMgPSBbRm9sZGVkQ29sdW1uXVxuICAgICAgICAgIGNvbHVtbi53aWR0aCA9IEZvbGRlZENvbHVtbi53aWR0aFxuICAgICAgICAgIGNvbHVtbi5zdHlsZSA9IEZvbGRlZENvbHVtbi5zdHlsZVxuICAgICAgICB9IGVsc2UgdGhpcy5yZXN0b3JlVG9PcmlnaW5hbChjb2x1bW4pXG4gICAgICB9XG4gICAgICAvLyBIYW5kbGUgTm9ybWFsIENvbHVtbi5cbiAgICAgIGVsc2UgaWYgKGNvbGxhcHNlZCkgY29sdW1uID0gT2JqZWN0LmFzc2lnbihjb2x1bW4sIEZvbGRlZENvbHVtbilcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnJlc3RvcmVUb09yaWdpbmFsKGNvbHVtbilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBseUZvbGRhYmxlRm9yQ29sdW1ucyA9IGNvbHVtbnMgPT5cbiAgICAgIGNvbHVtbnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghY29sLmZvbGRhYmxlKSByZXR1cm4gY29sXG5cbiAgICAgICAgLy8gSWYgY29sIGRvbid0IGhhdmUgaWQgdGhlbiBnZW5lcmF0ZSBpZCBiYXNlZCBvbiBpbmRleFxuICAgICAgICBpZiAoIWNvbC5pZCkgY29sLmlkID0gYGNvbF8ke2luZGV4fWBcblxuICAgICAgICB0aGlzLmNvcHlPcmlnaW5hbHMoY29sKVxuICAgICAgICAvLyBSZXBsYWNlIGN1cnJlbnQgaGVhZGVyIHdpdGggaW50ZXJuYWwgaGVhZGVyIHJlbmRlci5cbiAgICAgICAgY29sLkhlYWRlciA9IGMgPT4gdGhpcy5mb2xkYWJsZUhlYWRlclJlbmRlcihjKVxuICAgICAgICAvLyBhcHBseSBmb2xkYWJsZVxuICAgICAgICB0aGlzLmFwcGx5Rm9sZGFibGVGb3JDb2x1bW4oY29sKVxuXG4gICAgICAgIC8vIHJldHVybiB0aGUgbmV3IGNvbHVtbiBvdXRcbiAgICAgICAgcmV0dXJuIGNvbFxuICAgICAgfSlcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sdW1uczogb3JpZ2luYWxDb2xzLFxuICAgICAgICBGb2xkQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBGb2xkSWNvbkNvbXBvbmVudCxcbiAgICAgICAgRm9sZGVkQ29sdW1uLFxuICAgICAgICAuLi5yZXN0XG4gICAgICB9ID0gdGhpcy5wcm9wc1xuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuYXBwbHlGb2xkYWJsZUZvckNvbHVtbnMoWy4uLm9yaWdpbmFsQ29sc10pXG5cbiAgICAgIGNvbnN0IGV4dHJhID0ge1xuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBvblJlc2l6ZWRDaGFuZ2U6IHRoaXMub25SZXNpemVkQ2hhbmdlLFxuICAgICAgICByZXNpemVkOiB0aGlzLnN0YXRlLnJlc2l6ZWQsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiA8UmVhY3RUYWJsZSB7Li4ucmVzdH0gey4uLmV4dHJhfSByZWY9e3IgPT4gKHRoaXMud3JhcHBlZEluc3RhbmNlID0gcil9IC8+XG4gICAgfVxuICB9XG5cbiAgd3JhcHBlci5kaXNwbGF5TmFtZSA9ICdSVEZvbGRhYmxlVGFibGUnXG4gIHdyYXBwZXIuZGVmYXVsdFByb3BzID0ge1xuICAgIEZvbGRJY29uQ29tcG9uZW50OiBkZWZhdWx0Rm9sZEljb25Db21wb25lbnQsXG4gICAgRm9sZEJ1dHRvbkNvbXBvbmVudDogZGVmYXVsdEZvbGRCdXR0b25Db21wb25lbnQsXG4gICAgZm9sZGFibGVPcmlnaW5hbEtleTogJ29yaWdpbmFsXycsXG4gICAgRm9sZGVkQ29sdW1uOiB7XG4gICAgICBDZWxsOiBjID0+ICcnLFxuICAgICAgd2lkdGg6IDMwLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgIH0sXG4gIH1cblxuICByZXR1cm4gd3JhcHBlclxufVxuIl19 \ No newline at end of file diff --git a/lib/hoc/foldableTable/left.svg b/lib/hoc/foldableTable/left.svg new file mode 100644 index 0000000000..f0383f7577 --- /dev/null +++ b/lib/hoc/foldableTable/left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lib/hoc/foldableTable/right.svg b/lib/hoc/foldableTable/right.svg new file mode 100644 index 0000000000..5088e25d14 --- /dev/null +++ b/lib/hoc/foldableTable/right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lib/hoc/selectTable/index.js b/lib/hoc/selectTable/index.js new file mode 100644 index 0000000000..7a7c1fa98f --- /dev/null +++ b/lib/hoc/selectTable/index.js @@ -0,0 +1,169 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint-disable */ + +var defaultSelectInputComponent = function defaultSelectInputComponent(props) { + return _react2.default.createElement('input', { + type: props.selectType || 'checkbox', + 'aria-label': (props.checked ? 'Un-select' : 'Select') + ' row with id:' + props.id, + checked: props.checked, + id: props.id, + onClick: function onClick(e) { + var shiftKey = e.shiftKey; + + e.stopPropagation(); + props.onClick(props.id, shiftKey, props.row); + }, + onChange: function onChange() {} + }); +}; + +exports.default = function (Component, options) { + var wrapper = function (_React$Component) { + _inherits(RTSelectTable, _React$Component); + + function RTSelectTable(props) { + _classCallCheck(this, RTSelectTable); + + return _possibleConstructorReturn(this, (RTSelectTable.__proto__ || Object.getPrototypeOf(RTSelectTable)).call(this, props)); + } + + _createClass(RTSelectTable, [{ + key: 'rowSelector', + value: function rowSelector(row) { + if (!row || !row.hasOwnProperty(this.props.keyField)) return null; + var _props = this.props, + toggleSelection = _props.toggleSelection, + selectType = _props.selectType, + keyField = _props.keyField; + + var checked = this.props.isSelected(row[this.props.keyField]); + var inputProps = { + checked: checked, + onClick: toggleSelection, + selectType: selectType, + row: row, + id: 'select-' + row[keyField] + }; + return _react2.default.createElement(this.props.SelectInputComponent, inputProps); + } + }, { + key: 'headSelector', + value: function headSelector(row) { + var selectType = this.props.selectType; + + if (selectType === 'radio') return null; + + var _props2 = this.props, + toggleAll = _props2.toggleAll, + checked = _props2.selectAll, + SelectAllInputComponent = _props2.SelectAllInputComponent; + + var inputProps = { + checked: checked, + onClick: toggleAll, + selectType: selectType, + id: 'select-all' + }; + + return _react2.default.createElement(SelectAllInputComponent, inputProps); + } + + // this is so we can expose the underlying ReactTable to get at the sortedData for selectAll + + }, { + key: 'getWrappedInstance', + value: function getWrappedInstance() { + if (!this.wrappedInstance) console.warn('RTSelectTable - No wrapped instance'); + if (this.wrappedInstance.getWrappedInstance) return this.wrappedInstance.getWrappedInstance();else return this.wrappedInstance; + } + }, { + key: 'render', + value: function render() { + var _this2 = this; + + var _props3 = this.props, + originalCols = _props3.columns, + isSelected = _props3.isSelected, + toggleSelection = _props3.toggleSelection, + toggleAll = _props3.toggleAll, + keyField = _props3.keyField, + selectAll = _props3.selectAll, + selectType = _props3.selectType, + selectWidth = _props3.selectWidth, + SelectAllInputComponent = _props3.SelectAllInputComponent, + SelectInputComponent = _props3.SelectInputComponent, + rest = _objectWithoutProperties(_props3, ['columns', 'isSelected', 'toggleSelection', 'toggleAll', 'keyField', 'selectAll', 'selectType', 'selectWidth', 'SelectAllInputComponent', 'SelectInputComponent']); + + var select = { + id: '_selector', + accessor: function accessor() { + return 'x'; + }, // this value is not important + Header: this.headSelector.bind(this), + Cell: function Cell(ci) { + return _this2.rowSelector.bind(_this2)(ci.original); + }, + width: selectWidth || 30, + filterable: false, + sortable: false, + resizable: false, + style: { textAlign: 'center' } + }; + + var columns = options !== undefined && options.floatingLeft === true ? [].concat(_toConsumableArray(originalCols), [select]) : [select].concat(_toConsumableArray(originalCols)); + var extra = { + columns: columns + }; + return _react2.default.createElement(Component, _extends({}, rest, extra, { ref: function ref(r) { + return _this2.wrappedInstance = r; + } })); + } + }]); + + return RTSelectTable; + }(_react2.default.Component); + + wrapper.displayName = 'RTSelectTable'; + wrapper.defaultProps = { + keyField: '_id', + isSelected: function isSelected(key) { + console.log('No isSelected handler provided:', { key: key }); + }, + selectAll: false, + toggleSelection: function toggleSelection(key, shift, row) { + console.log('No toggleSelection handler provided:', { key: key, shift: shift, row: row }); + }, + toggleAll: function toggleAll() { + console.log('No toggleAll handler provided.'); + }, + selectType: 'checkbox', + SelectInputComponent: defaultSelectInputComponent, + SelectAllInputComponent: defaultSelectInputComponent + }; + + return wrapper; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob2Mvc2VsZWN0VGFibGUvaW5kZXguanMiXSwibmFtZXMiOlsiZGVmYXVsdFNlbGVjdElucHV0Q29tcG9uZW50IiwicHJvcHMiLCJzZWxlY3RUeXBlIiwiY2hlY2tlZCIsImlkIiwic2hpZnRLZXkiLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwib25DbGljayIsInJvdyIsIkNvbXBvbmVudCIsIm9wdGlvbnMiLCJ3cmFwcGVyIiwiaGFzT3duUHJvcGVydHkiLCJrZXlGaWVsZCIsInRvZ2dsZVNlbGVjdGlvbiIsImlzU2VsZWN0ZWQiLCJpbnB1dFByb3BzIiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiU2VsZWN0SW5wdXRDb21wb25lbnQiLCJ0b2dnbGVBbGwiLCJzZWxlY3RBbGwiLCJTZWxlY3RBbGxJbnB1dENvbXBvbmVudCIsIndyYXBwZWRJbnN0YW5jZSIsImNvbnNvbGUiLCJ3YXJuIiwiZ2V0V3JhcHBlZEluc3RhbmNlIiwib3JpZ2luYWxDb2xzIiwiY29sdW1ucyIsInNlbGVjdFdpZHRoIiwicmVzdCIsInNlbGVjdCIsImFjY2Vzc29yIiwiSGVhZGVyIiwiaGVhZFNlbGVjdG9yIiwiYmluZCIsIkNlbGwiLCJyb3dTZWxlY3RvciIsImNpIiwib3JpZ2luYWwiLCJ3aWR0aCIsImZpbHRlcmFibGUiLCJzb3J0YWJsZSIsInJlc2l6YWJsZSIsInN0eWxlIiwidGV4dEFsaWduIiwidW5kZWZpbmVkIiwiZmxvYXRpbmdMZWZ0IiwiZXh0cmEiLCJyIiwiZGlzcGxheU5hbWUiLCJkZWZhdWx0UHJvcHMiLCJsb2ciLCJrZXkiLCJzaGlmdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUVBOzs7Ozs7Ozs7Ozs7OzsrZUFGQTs7QUFJQSxJQUFNQSw4QkFBOEIsU0FBOUJBLDJCQUE4QixRQUFTO0FBQzNDLFNBQ0U7QUFDRSxVQUFNQyxNQUFNQyxVQUFOLElBQW9CLFVBRDVCO0FBRUUsbUJBQWVELE1BQU1FLE9BQU4sR0FBZ0IsV0FBaEIsR0FBNEIsUUFBM0Msc0JBQW1FRixNQUFNRyxFQUYzRTtBQUdFLGFBQVNILE1BQU1FLE9BSGpCO0FBSUUsUUFBSUYsTUFBTUcsRUFKWjtBQUtFLGFBQVMsb0JBQUs7QUFBQSxVQUNKQyxRQURJLEdBQ1NDLENBRFQsQ0FDSkQsUUFESTs7QUFFWkMsUUFBRUMsZUFBRjtBQUNBTixZQUFNTyxPQUFOLENBQWNQLE1BQU1HLEVBQXBCLEVBQXdCQyxRQUF4QixFQUFrQ0osTUFBTVEsR0FBeEM7QUFDRCxLQVRIO0FBVUUsY0FBVSxvQkFBTSxDQUFFO0FBVnBCLElBREY7QUFjRCxDQWZEOztrQkFpQmUsVUFBQ0MsU0FBRCxFQUFZQyxPQUFaLEVBQXdCO0FBQ3JDLE1BQU1DO0FBQUE7O0FBQ0osMkJBQVlYLEtBQVosRUFBbUI7QUFBQTs7QUFBQSwySEFDWEEsS0FEVztBQUVsQjs7QUFIRztBQUFBO0FBQUEsa0NBS1FRLEdBTFIsRUFLYTtBQUNmLFlBQUksQ0FBQ0EsR0FBRCxJQUFRLENBQUNBLElBQUlJLGNBQUosQ0FBbUIsS0FBS1osS0FBTCxDQUFXYSxRQUE5QixDQUFiLEVBQXNELE9BQU8sSUFBUDtBQUR2QyxxQkFFbUMsS0FBS2IsS0FGeEM7QUFBQSxZQUVQYyxlQUZPLFVBRVBBLGVBRk87QUFBQSxZQUVVYixVQUZWLFVBRVVBLFVBRlY7QUFBQSxZQUVzQlksUUFGdEIsVUFFc0JBLFFBRnRCOztBQUdmLFlBQU1YLFVBQVUsS0FBS0YsS0FBTCxDQUFXZSxVQUFYLENBQXNCUCxJQUFJLEtBQUtSLEtBQUwsQ0FBV2EsUUFBZixDQUF0QixDQUFoQjtBQUNBLFlBQU1HLGFBQWE7QUFDakJkLDBCQURpQjtBQUVqQkssbUJBQVNPLGVBRlE7QUFHakJiLGdDQUhpQjtBQUlqQk8sa0JBSmlCO0FBS2pCTCwwQkFBY0ssSUFBSUssUUFBSjtBQUxHLFNBQW5CO0FBT0EsZUFBT0ksZ0JBQU1DLGFBQU4sQ0FBb0IsS0FBS2xCLEtBQUwsQ0FBV21CLG9CQUEvQixFQUFxREgsVUFBckQsQ0FBUDtBQUNEO0FBakJHO0FBQUE7QUFBQSxtQ0FtQlNSLEdBbkJULEVBbUJjO0FBQUEsWUFDUlAsVUFEUSxHQUNPLEtBQUtELEtBRFosQ0FDUkMsVUFEUTs7QUFFaEIsWUFBSUEsZUFBZSxPQUFuQixFQUE0QixPQUFPLElBQVA7O0FBRlosc0JBSW1ELEtBQUtELEtBSnhEO0FBQUEsWUFJUm9CLFNBSlEsV0FJUkEsU0FKUTtBQUFBLFlBSWNsQixPQUpkLFdBSUdtQixTQUpIO0FBQUEsWUFJdUJDLHVCQUp2QixXQUl1QkEsdUJBSnZCOztBQUtoQixZQUFNTixhQUFhO0FBQ2pCZCwwQkFEaUI7QUFFakJLLG1CQUFTYSxTQUZRO0FBR2pCbkIsZ0NBSGlCO0FBSWpCRSxjQUFJO0FBSmEsU0FBbkI7O0FBT0EsZUFBT2MsZ0JBQU1DLGFBQU4sQ0FBb0JJLHVCQUFwQixFQUE2Q04sVUFBN0MsQ0FBUDtBQUNEOztBQUVEOztBQWxDSTtBQUFBO0FBQUEsMkNBbUNpQjtBQUNuQixZQUFJLENBQUMsS0FBS08sZUFBVixFQUEyQkMsUUFBUUMsSUFBUixDQUFhLHFDQUFiO0FBQzNCLFlBQUksS0FBS0YsZUFBTCxDQUFxQkcsa0JBQXpCLEVBQTZDLE9BQU8sS0FBS0gsZUFBTCxDQUFxQkcsa0JBQXJCLEVBQVAsQ0FBN0MsS0FDSyxPQUFPLEtBQUtILGVBQVo7QUFDTjtBQXZDRztBQUFBO0FBQUEsK0JBeUNLO0FBQUE7O0FBQUEsc0JBYUgsS0FBS3ZCLEtBYkY7QUFBQSxZQUVJMkIsWUFGSixXQUVMQyxPQUZLO0FBQUEsWUFHTGIsVUFISyxXQUdMQSxVQUhLO0FBQUEsWUFJTEQsZUFKSyxXQUlMQSxlQUpLO0FBQUEsWUFLTE0sU0FMSyxXQUtMQSxTQUxLO0FBQUEsWUFNTFAsUUFOSyxXQU1MQSxRQU5LO0FBQUEsWUFPTFEsU0FQSyxXQU9MQSxTQVBLO0FBQUEsWUFRTHBCLFVBUkssV0FRTEEsVUFSSztBQUFBLFlBU0w0QixXQVRLLFdBU0xBLFdBVEs7QUFBQSxZQVVMUCx1QkFWSyxXQVVMQSx1QkFWSztBQUFBLFlBV0xILG9CQVhLLFdBV0xBLG9CQVhLO0FBQUEsWUFZRlcsSUFaRTs7QUFjUCxZQUFNQyxTQUFTO0FBQ2I1QixjQUFJLFdBRFM7QUFFYjZCLG9CQUFVO0FBQUEsbUJBQU0sR0FBTjtBQUFBLFdBRkcsRUFFUTtBQUNyQkMsa0JBQVEsS0FBS0MsWUFBTCxDQUFrQkMsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FISztBQUliQyxnQkFBTSxrQkFBTTtBQUNWLG1CQUFPLE9BQUtDLFdBQUwsQ0FBaUJGLElBQWpCLFNBQTRCRyxHQUFHQyxRQUEvQixDQUFQO0FBQ0QsV0FOWTtBQU9iQyxpQkFBT1gsZUFBZSxFQVBUO0FBUWJZLHNCQUFZLEtBUkM7QUFTYkMsb0JBQVUsS0FURztBQVViQyxxQkFBVyxLQVZFO0FBV2JDLGlCQUFPLEVBQUVDLFdBQVcsUUFBYjtBQVhNLFNBQWY7O0FBY0EsWUFBTWpCLFVBQVdsQixZQUFZb0MsU0FBWixJQUF5QnBDLFFBQVFxQyxZQUFSLEtBQXlCLElBQW5ELGdDQUErRHBCLFlBQS9ELElBQTZFSSxNQUE3RSxNQUF3RkEsTUFBeEYsNEJBQW1HSixZQUFuRyxFQUFoQjtBQUNBLFlBQU1xQixRQUFRO0FBQ1pwQjtBQURZLFNBQWQ7QUFHQSxlQUFPLDhCQUFDLFNBQUQsZUFBZUUsSUFBZixFQUF5QmtCLEtBQXpCLElBQWdDLEtBQUs7QUFBQSxtQkFBTSxPQUFLekIsZUFBTCxHQUF1QjBCLENBQTdCO0FBQUEsV0FBckMsSUFBUDtBQUNEO0FBMUVHOztBQUFBO0FBQUEsSUFBc0NoQyxnQkFBTVIsU0FBNUMsQ0FBTjs7QUE2RUFFLFVBQVF1QyxXQUFSLEdBQXNCLGVBQXRCO0FBQ0F2QyxVQUFRd0MsWUFBUixHQUF1QjtBQUNyQnRDLGNBQVUsS0FEVztBQUVyQkUsZ0JBQVkseUJBQU87QUFDakJTLGNBQVE0QixHQUFSLENBQVksaUNBQVosRUFBK0MsRUFBRUMsUUFBRixFQUEvQztBQUNELEtBSm9CO0FBS3JCaEMsZUFBVyxLQUxVO0FBTXJCUCxxQkFBaUIseUJBQUN1QyxHQUFELEVBQU1DLEtBQU4sRUFBYTlDLEdBQWIsRUFBcUI7QUFDcENnQixjQUFRNEIsR0FBUixDQUFZLHNDQUFaLEVBQW9ELEVBQUVDLFFBQUYsRUFBT0MsWUFBUCxFQUFjOUMsUUFBZCxFQUFwRDtBQUNELEtBUm9CO0FBU3JCWSxlQUFXLHFCQUFNO0FBQ2ZJLGNBQVE0QixHQUFSLENBQVksZ0NBQVo7QUFDRCxLQVhvQjtBQVlyQm5ELGdCQUFZLFVBWlM7QUFhckJrQiwwQkFBc0JwQiwyQkFiRDtBQWNyQnVCLDZCQUF5QnZCO0FBZEosR0FBdkI7O0FBaUJBLFNBQU9ZLE9BQVA7QUFDRCxDIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5jb25zdCBkZWZhdWx0U2VsZWN0SW5wdXRDb21wb25lbnQgPSBwcm9wcyA9PiB7XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICB0eXBlPXtwcm9wcy5zZWxlY3RUeXBlIHx8ICdjaGVja2JveCd9XG4gICAgICBhcmlhLWxhYmVsPXtgJHtwcm9wcy5jaGVja2VkID8gJ1VuLXNlbGVjdCc6J1NlbGVjdCd9IHJvdyB3aXRoIGlkOiR7cHJvcHMuaWR9YCB9XG4gICAgICBjaGVja2VkPXtwcm9wcy5jaGVja2VkfVxuICAgICAgaWQ9e3Byb3BzLmlkfVxuICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2hpZnRLZXkgfSA9IGVcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBwcm9wcy5vbkNsaWNrKHByb3BzLmlkLCBzaGlmdEtleSwgcHJvcHMucm93KVxuICAgICAgfX1cbiAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7fX1cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IChDb21wb25lbnQsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgd3JhcHBlciA9IGNsYXNzIFJUU2VsZWN0VGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcylcbiAgICB9XG5cbiAgICByb3dTZWxlY3Rvcihyb3cpIHtcbiAgICAgIGlmICghcm93IHx8ICFyb3cuaGFzT3duUHJvcGVydHkodGhpcy5wcm9wcy5rZXlGaWVsZCkpIHJldHVybiBudWxsXG4gICAgICBjb25zdCB7IHRvZ2dsZVNlbGVjdGlvbiwgc2VsZWN0VHlwZSwga2V5RmllbGQgfSA9IHRoaXMucHJvcHNcbiAgICAgIGNvbnN0IGNoZWNrZWQgPSB0aGlzLnByb3BzLmlzU2VsZWN0ZWQocm93W3RoaXMucHJvcHMua2V5RmllbGRdKVxuICAgICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgb25DbGljazogdG9nZ2xlU2VsZWN0aW9uLFxuICAgICAgICBzZWxlY3RUeXBlLFxuICAgICAgICByb3csXG4gICAgICAgIGlkOiBgc2VsZWN0LSR7cm93W2tleUZpZWxkXX1gXG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh0aGlzLnByb3BzLlNlbGVjdElucHV0Q29tcG9uZW50LCBpbnB1dFByb3BzKVxuICAgIH1cblxuICAgIGhlYWRTZWxlY3Rvcihyb3cpIHtcbiAgICAgIGNvbnN0IHsgc2VsZWN0VHlwZSB9ID0gdGhpcy5wcm9wc1xuICAgICAgaWYgKHNlbGVjdFR5cGUgPT09ICdyYWRpbycpIHJldHVybiBudWxsXG5cbiAgICAgIGNvbnN0IHsgdG9nZ2xlQWxsLCBzZWxlY3RBbGw6IGNoZWNrZWQsIFNlbGVjdEFsbElucHV0Q29tcG9uZW50IH0gPSB0aGlzLnByb3BzXG4gICAgICBjb25zdCBpbnB1dFByb3BzID0ge1xuICAgICAgICBjaGVja2VkLFxuICAgICAgICBvbkNsaWNrOiB0b2dnbGVBbGwsXG4gICAgICAgIHNlbGVjdFR5cGUsXG4gICAgICAgIGlkOiAnc2VsZWN0LWFsbCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0QWxsSW5wdXRDb21wb25lbnQsIGlucHV0UHJvcHMpXG4gICAgfVxuXG4gICAgLy8gdGhpcyBpcyBzbyB3ZSBjYW4gZXhwb3NlIHRoZSB1bmRlcmx5aW5nIFJlYWN0VGFibGUgdG8gZ2V0IGF0IHRoZSBzb3J0ZWREYXRhIGZvciBzZWxlY3RBbGxcbiAgICBnZXRXcmFwcGVkSW5zdGFuY2UoKSB7XG4gICAgICBpZiAoIXRoaXMud3JhcHBlZEluc3RhbmNlKSBjb25zb2xlLndhcm4oJ1JUU2VsZWN0VGFibGUgLSBObyB3cmFwcGVkIGluc3RhbmNlJylcbiAgICAgIGlmICh0aGlzLndyYXBwZWRJbnN0YW5jZS5nZXRXcmFwcGVkSW5zdGFuY2UpIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZS5nZXRXcmFwcGVkSW5zdGFuY2UoKVxuICAgICAgZWxzZSByZXR1cm4gdGhpcy53cmFwcGVkSW5zdGFuY2VcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbnM6IG9yaWdpbmFsQ29scyxcbiAgICAgICAgaXNTZWxlY3RlZCxcbiAgICAgICAgdG9nZ2xlU2VsZWN0aW9uLFxuICAgICAgICB0b2dnbGVBbGwsXG4gICAgICAgIGtleUZpZWxkLFxuICAgICAgICBzZWxlY3RBbGwsXG4gICAgICAgIHNlbGVjdFR5cGUsXG4gICAgICAgIHNlbGVjdFdpZHRoLFxuICAgICAgICBTZWxlY3RBbGxJbnB1dENvbXBvbmVudCxcbiAgICAgICAgU2VsZWN0SW5wdXRDb21wb25lbnQsXG4gICAgICAgIC4uLnJlc3RcbiAgICAgIH0gPSB0aGlzLnByb3BzXG4gICAgICBjb25zdCBzZWxlY3QgPSB7XG4gICAgICAgIGlkOiAnX3NlbGVjdG9yJyxcbiAgICAgICAgYWNjZXNzb3I6ICgpID0+ICd4JywgLy8gdGhpcyB2YWx1ZSBpcyBub3QgaW1wb3J0YW50XG4gICAgICAgIEhlYWRlcjogdGhpcy5oZWFkU2VsZWN0b3IuYmluZCh0aGlzKSxcbiAgICAgICAgQ2VsbDogY2kgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdG9yLmJpbmQodGhpcykoY2kub3JpZ2luYWwpXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiBzZWxlY3RXaWR0aCB8fCAzMCxcbiAgICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgc3R5bGU6IHsgdGV4dEFsaWduOiAnY2VudGVyJyB9LFxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2x1bW5zID0gKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmZsb2F0aW5nTGVmdCA9PT0gdHJ1ZSkgPyBbLi4ub3JpZ2luYWxDb2xzLCBzZWxlY3RdIDogW3NlbGVjdCwgLi4ub3JpZ2luYWxDb2xzXVxuICAgICAgY29uc3QgZXh0cmEgPSB7XG4gICAgICAgIGNvbHVtbnMsXG4gICAgICB9XG4gICAgICByZXR1cm4gPENvbXBvbmVudCB7Li4ucmVzdH0gey4uLmV4dHJhfSByZWY9e3IgPT4gKHRoaXMud3JhcHBlZEluc3RhbmNlID0gcil9IC8+XG4gICAgfVxuICB9XG5cbiAgd3JhcHBlci5kaXNwbGF5TmFtZSA9ICdSVFNlbGVjdFRhYmxlJ1xuICB3cmFwcGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBrZXlGaWVsZDogJ19pZCcsXG4gICAgaXNTZWxlY3RlZDoga2V5ID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdObyBpc1NlbGVjdGVkIGhhbmRsZXIgcHJvdmlkZWQ6JywgeyBrZXkgfSlcbiAgICB9LFxuICAgIHNlbGVjdEFsbDogZmFsc2UsXG4gICAgdG9nZ2xlU2VsZWN0aW9uOiAoa2V5LCBzaGlmdCwgcm93KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnTm8gdG9nZ2xlU2VsZWN0aW9uIGhhbmRsZXIgcHJvdmlkZWQ6JywgeyBrZXksIHNoaWZ0LCByb3cgfSlcbiAgICB9LFxuICAgIHRvZ2dsZUFsbDogKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ05vIHRvZ2dsZUFsbCBoYW5kbGVyIHByb3ZpZGVkLicpXG4gICAgfSxcbiAgICBzZWxlY3RUeXBlOiAnY2hlY2tib3gnLFxuICAgIFNlbGVjdElucHV0Q29tcG9uZW50OiBkZWZhdWx0U2VsZWN0SW5wdXRDb21wb25lbnQsXG4gICAgU2VsZWN0QWxsSW5wdXRDb21wb25lbnQ6IGRlZmF1bHRTZWxlY3RJbnB1dENvbXBvbmVudCxcbiAgfVxuXG4gIHJldHVybiB3cmFwcGVyXG59XG4iXX0= \ No newline at end of file diff --git a/lib/hoc/treeTable/index.js b/lib/hoc/treeTable/index.js new file mode 100644 index 0000000000..99b48518d4 --- /dev/null +++ b/lib/hoc/treeTable/index.js @@ -0,0 +1,130 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint-disable */ + +exports.default = function (Component) { + var _class, _temp, _initialiseProps; + + var wrapper = (_temp = _class = function (_React$Component) { + _inherits(RTTreeTable, _React$Component); + + function RTTreeTable(props) { + _classCallCheck(this, RTTreeTable); + + var _this = _possibleConstructorReturn(this, (RTTreeTable.__proto__ || Object.getPrototypeOf(RTTreeTable)).call(this, props)); + + _initialiseProps.call(_this); + + _this.getWrappedInstance.bind(_this); + _this.TrComponent.bind(_this); + _this.getTrProps.bind(_this); + return _this; + } + + // this is so we can expose the underlying ReactTable to get at the sortedData for selectAll + + + _createClass(RTTreeTable, [{ + key: 'render', + value: function render() { + var _this2 = this; + + var _props = this.props, + columns = _props.columns, + treeTableIndent = _props.treeTableIndent, + rest = _objectWithoutProperties(_props, ['columns', 'treeTableIndent']); + + var TrComponent = this.TrComponent, + getTrProps = this.getTrProps; + + var extra = { + columns: columns.map(function (col) { + var column = col; + if (rest.pivotBy && (rest.pivotBy.includes(col.accessor) || rest.pivotBy.includes(col.id))) { + column = { + id: col.id, + accessor: col.accessor, + width: treeTableIndent + 'px', + show: false, + Header: '', + Expander: col.Expander, + PivotValue: col.PivotValue, + Pivot: col.Pivot + }; + } + return column; + }), + TrComponent: TrComponent, + getTrProps: getTrProps + }; + + return _react2.default.createElement(Component, _extends({}, rest, extra, { ref: function ref(r) { + return _this2.wrappedInstance = r; + } })); + } + }]); + + return RTTreeTable; + }(_react2.default.Component), _initialiseProps = function _initialiseProps() { + var _this3 = this; + + this.getWrappedInstance = function () { + if (!_this3.wrappedInstance) console.warn('RTTreeTable - No wrapped instance'); + if (_this3.wrappedInstance.getWrappedInstance) return _this3.wrappedInstance.getWrappedInstance();else return _this3.wrappedInstance; + }; + + this.TrComponent = function (props) { + var ri = props.ri, + rest = _objectWithoutProperties(props, ['ri']); + + if (ri && ri.groupedByPivot) { + var cell = _extends({}, props.children[ri.level]); + + cell.props.style.flex = 'unset'; + cell.props.style.width = '100%'; + cell.props.style.maxWidth = 'unset'; + cell.props.style.paddingLeft = _this3.props.treeTableIndent * ri.level + 'px'; + // cell.props.style.backgroundColor = '#DDD'; + cell.props.style.borderBottom = '1px solid rgba(128,128,128,0.2)'; + + return _react2.default.createElement( + 'div', + { className: 'rt-tr ' + rest.className, role: 'row', style: rest.style }, + cell + ); + } + return _react2.default.createElement(Component.defaultProps.TrComponent, rest); + }; + + this.getTrProps = function (state, ri, ci, instance) { + return { ri: ri }; + }; + }, _temp); + wrapper.displayName = 'RTTreeTable'; + wrapper.defaultProps = { + treeTableIndent: 10 + }; + + return wrapper; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob2MvdHJlZVRhYmxlL2luZGV4LmpzIl0sIm5hbWVzIjpbIndyYXBwZXIiLCJwcm9wcyIsImdldFdyYXBwZWRJbnN0YW5jZSIsImJpbmQiLCJUckNvbXBvbmVudCIsImdldFRyUHJvcHMiLCJjb2x1bW5zIiwidHJlZVRhYmxlSW5kZW50IiwicmVzdCIsImV4dHJhIiwibWFwIiwiY29sdW1uIiwiY29sIiwicGl2b3RCeSIsImluY2x1ZGVzIiwiYWNjZXNzb3IiLCJpZCIsIndpZHRoIiwic2hvdyIsIkhlYWRlciIsIkV4cGFuZGVyIiwiUGl2b3RWYWx1ZSIsIlBpdm90Iiwid3JhcHBlZEluc3RhbmNlIiwiciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc29sZSIsIndhcm4iLCJyaSIsImdyb3VwZWRCeVBpdm90IiwiY2VsbCIsImNoaWxkcmVuIiwibGV2ZWwiLCJzdHlsZSIsImZsZXgiLCJtYXhXaWR0aCIsInBhZGRpbmdMZWZ0IiwiYm9yZGVyQm90dG9tIiwiY2xhc3NOYW1lIiwic3RhdGUiLCJjaSIsImluc3RhbmNlIiwiZGlzcGxheU5hbWUiLCJkZWZhdWx0UHJvcHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFQTs7Ozs7Ozs7Ozs7OytlQUZBOztrQkFJZSxxQkFBYTtBQUFBOztBQUMxQixNQUFNQTtBQUFBOztBQUNKLHlCQUFZQyxLQUFaLEVBQW1CO0FBQUE7O0FBQUEsNEhBQ1hBLEtBRFc7O0FBQUE7O0FBRWpCLFlBQUtDLGtCQUFMLENBQXdCQyxJQUF4QjtBQUNBLFlBQUtDLFdBQUwsQ0FBaUJELElBQWpCO0FBQ0EsWUFBS0UsVUFBTCxDQUFnQkYsSUFBaEI7QUFKaUI7QUFLbEI7O0FBRUQ7OztBQVJJO0FBQUE7QUFBQSwrQkF3Q0s7QUFBQTs7QUFBQSxxQkFDdUMsS0FBS0YsS0FENUM7QUFBQSxZQUNDSyxPQURELFVBQ0NBLE9BREQ7QUFBQSxZQUNVQyxlQURWLFVBQ1VBLGVBRFY7QUFBQSxZQUM4QkMsSUFEOUI7O0FB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QnJDLHFCQUFpQjtBQURJLEdBQXZCOztBQUlBLFNBQU9QLE9BQVA7QUFDRCxDIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQgPT4ge1xuICBjb25zdCB3cmFwcGVyID0gY2xhc3MgUlRUcmVlVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcylcbiAgICAgIHRoaXMuZ2V0V3JhcHBlZEluc3RhbmNlLmJpbmQodGhpcylcbiAgICAgIHRoaXMuVHJDb21wb25lbnQuYmluZCh0aGlzKVxuICAgICAgdGhpcy5nZXRUclByb3BzLmJpbmQodGhpcylcbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIHNvIHdlIGNhbiBleHBvc2UgdGhlIHVuZGVybHlpbmcgUmVhY3RUYWJsZSB0byBnZXQgYXQgdGhlIHNvcnRlZERhdGEgZm9yIHNlbGVjdEFsbFxuICAgIGdldFdyYXBwZWRJbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy53cmFwcGVkSW5zdGFuY2UpIGNvbnNvbGUud2FybignUlRUcmVlVGFibGUgLSBObyB3cmFwcGVkIGluc3RhbmNlJylcbiAgICAgIGlmICh0aGlzLndyYXBwZWRJbnN0YW5jZS5nZXRXcmFwcGVkSW5zdGFuY2UpIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZS5nZXRXcmFwcGVkSW5zdGFuY2UoKVxuICAgICAgZWxzZSByZXR1cm4gdGhpcy53cmFwcGVkSW5zdGFuY2VcbiAgICB9XG5cbiAgICBUckNvbXBvbmVudCA9IHByb3BzID0+IHtcbiAgICAgIGNvbnN0IHsgcmksIC4uLnJlc3QgfSA9IHByb3BzXG4gICAgICBpZiAocmkgJiYgcmkuZ3JvdXBlZEJ5UGl2b3QpIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHsgLi4ucHJvcHMuY2hpbGRyZW5bcmkubGV2ZWxdIH1cblxuICAgICAgICBjZWxsLnByb3BzLnN0eWxlLmZsZXggPSAndW5zZXQnXG4gICAgICAgIGNlbGwucHJvcHMuc3R5bGUud2lkdGggPSAnMTAwJSdcbiAgICAgICAgY2VsbC5wcm9wcy5zdHlsZS5tYXhXaWR0aCA9ICd1bnNldCdcbiAgICAgICAgY2VsbC5wcm9wcy5zdHlsZS5wYWRkaW5nTGVmdCA9IGAke3RoaXMucHJvcHMudHJlZVRhYmxlSW5kZW50ICogcmkubGV2ZWx9cHhgXG4gICAgICAgIC8vIGNlbGwucHJvcHMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNEREQnO1xuICAgICAgICBjZWxsLnByb3BzLnN0eWxlLmJvcmRlckJvdHRvbSA9ICcxcHggc29saWQgcmdiYSgxMjgsMTI4LDEyOCwwLjIpJ1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BydC10ciAke3Jlc3QuY2xhc3NOYW1lfWB9IHJvbGU9XCJyb3dcIiBzdHlsZT17cmVzdC5zdHlsZX0+XG4gICAgICAgICAgICB7Y2VsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIDxDb21wb25lbnQuZGVmYXVsdFByb3BzLlRyQ29tcG9uZW50IHsuLi5yZXN0fSAvPlxuICAgIH1cblxuICAgIGdldFRyUHJvcHMgPSAoc3RhdGUsIHJpLCBjaSwgaW5zdGFuY2UpID0+IHtcbiAgICAgIHJldHVybiB7IHJpIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIHRyZWVUYWJsZUluZGVudCwgLi4ucmVzdCB9ID0gdGhpcy5wcm9wc1xuICAgICAgY29uc3QgeyBUckNvbXBvbmVudCwgZ2V0VHJQcm9wcyB9ID0gdGhpc1xuICAgICAgY29uc3QgZXh0cmEgPSB7XG4gICAgICAgIGNvbHVtbnM6IGNvbHVtbnMubWFwKGNvbCA9PiB7XG4gICAgICAgICAgbGV0IGNvbHVtbiA9IGNvbFxuICAgICAgICAgIGlmIChyZXN0LnBpdm90QnkgJiYgKHJlc3QucGl2b3RCeS5pbmNsdWRlcyhjb2wuYWNjZXNzb3IpIHx8IHJlc3QucGl2b3RCeS5pbmNsdWRlcyhjb2wuaWQpKSkge1xuICAgICAgICAgICAgY29sdW1uID0ge1xuICAgICAgICAgICAgICBpZDogY29sLmlkLFxuICAgICAgICAgICAgICBhY2Nlc3NvcjogY29sLmFjY2Vzc29yLFxuICAgICAgICAgICAgICB3aWR0aDogYCR7dHJlZVRhYmxlSW5kZW50fXB4YCxcbiAgICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICAgIEhlYWRlcjogJycsXG4gICAgICAgICAgICAgIEV4cGFuZGVyOiBjb2wuRXhwYW5kZXIsXG4gICAgICAgICAgICAgIFBpdm90VmFsdWU6IGNvbC5QaXZvdFZhbHVlLFxuICAgICAgICAgICAgICBQaXZvdDogY29sLlBpdm90LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29sdW1uXG4gICAgICAgIH0pLFxuICAgICAgICBUckNvbXBvbmVudCxcbiAgICAgICAgZ2V0VHJQcm9wcyxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIDxDb21wb25lbnQgey4uLnJlc3R9IHsuLi5leHRyYX0gcmVmPXtyID0+ICh0aGlzLndyYXBwZWRJbnN0YW5jZSA9IHIpfSAvPlxuICAgIH1cbiAgfVxuICB3cmFwcGVyLmRpc3BsYXlOYW1lID0gJ1JUVHJlZVRhYmxlJ1xuICB3cmFwcGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgICB0cmVlVGFibGVJbmRlbnQ6IDEwLFxuICB9XG5cbiAgcmV0dXJuIHdyYXBwZXJcbn1cbiJdfQ== \ No newline at end of file diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000000..5f8355c9dc --- /dev/null +++ b/lib/index.js @@ -0,0 +1,823 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ReactTableDefaults = undefined; + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +var _classnames = require('classnames'); + +var _classnames2 = _interopRequireDefault(_classnames); + +var _utils = require('./utils'); + +var _utils2 = _interopRequireDefault(_utils); + +var _lifecycle = require('./lifecycle'); + +var _lifecycle2 = _interopRequireDefault(_lifecycle); + +var _methods = require('./methods'); + +var _methods2 = _interopRequireDefault(_methods); + +var _defaultProps = require('./defaultProps'); + +var _defaultProps2 = _interopRequireDefault(_defaultProps); + +var _propTypes = require('./propTypes'); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } +// + + +var ReactTableDefaults = exports.ReactTableDefaults = _defaultProps2.default; + +var ReactTable = function (_Methods) { + _inherits(ReactTable, _Methods); + + function ReactTable(props) { + _classCallCheck(this, ReactTable); + + var _this = _possibleConstructorReturn(this, (ReactTable.__proto__ || Object.getPrototypeOf(ReactTable)).call(this, props)); + + _this.getResolvedState = _this.getResolvedState.bind(_this); + _this.getDataModel = _this.getDataModel.bind(_this); + _this.getSortedData = _this.getSortedData.bind(_this); + _this.fireFetchData = _this.fireFetchData.bind(_this); + _this.getPropOrState = _this.getPropOrState.bind(_this); + _this.getStateOrProp = _this.getStateOrProp.bind(_this); + _this.filterData = _this.filterData.bind(_this); + _this.sortData = _this.sortData.bind(_this); + _this.getMinRows = _this.getMinRows.bind(_this); + _this.onPageChange = _this.onPageChange.bind(_this); + _this.onPageSizeChange = _this.onPageSizeChange.bind(_this); + _this.sortColumn = _this.sortColumn.bind(_this); + _this.filterColumn = _this.filterColumn.bind(_this); + _this.resizeColumnStart = _this.resizeColumnStart.bind(_this); + _this.resizeColumnEnd = _this.resizeColumnEnd.bind(_this); + _this.resizeColumnMoving = _this.resizeColumnMoving.bind(_this); + return _this; + } + + _createClass(ReactTable, [{ + key: 'render', + value: function render() { + var _this2 = this; + + var resolvedState = this.getResolvedState(); + var children = resolvedState.children, + className = resolvedState.className, + style = resolvedState.style, + getProps = resolvedState.getProps, + getTableProps = resolvedState.getTableProps, + getTheadGroupProps = resolvedState.getTheadGroupProps, + getTheadGroupTrProps = resolvedState.getTheadGroupTrProps, + getTheadGroupThProps = resolvedState.getTheadGroupThProps, + getTheadProps = resolvedState.getTheadProps, + getTheadTrProps = resolvedState.getTheadTrProps, + getTheadThProps = resolvedState.getTheadThProps, + getTheadFilterProps = resolvedState.getTheadFilterProps, + getTheadFilterTrProps = resolvedState.getTheadFilterTrProps, + getTheadFilterThProps = resolvedState.getTheadFilterThProps, + getTbodyProps = resolvedState.getTbodyProps, + getTrGroupProps = resolvedState.getTrGroupProps, + getTrProps = resolvedState.getTrProps, + getTdProps = resolvedState.getTdProps, + getTfootProps = resolvedState.getTfootProps, + getTfootTrProps = resolvedState.getTfootTrProps, + getTfootTdProps = resolvedState.getTfootTdProps, + getPaginationProps = resolvedState.getPaginationProps, + getLoadingProps = resolvedState.getLoadingProps, + getNoDataProps = resolvedState.getNoDataProps, + getResizerProps = resolvedState.getResizerProps, + showPagination = resolvedState.showPagination, + showPaginationTop = resolvedState.showPaginationTop, + showPaginationBottom = resolvedState.showPaginationBottom, + manual = resolvedState.manual, + loadingText = resolvedState.loadingText, + noDataText = resolvedState.noDataText, + sortable = resolvedState.sortable, + multiSort = resolvedState.multiSort, + resizable = resolvedState.resizable, + filterable = resolvedState.filterable, + pivotIDKey = resolvedState.pivotIDKey, + pivotValKey = resolvedState.pivotValKey, + pivotBy = resolvedState.pivotBy, + subRowsKey = resolvedState.subRowsKey, + aggregatedKey = resolvedState.aggregatedKey, + originalKey = resolvedState.originalKey, + indexKey = resolvedState.indexKey, + groupedByPivotKey = resolvedState.groupedByPivotKey, + loading = resolvedState.loading, + pageSize = resolvedState.pageSize, + page = resolvedState.page, + sorted = resolvedState.sorted, + filtered = resolvedState.filtered, + resized = resolvedState.resized, + expanded = resolvedState.expanded, + pages = resolvedState.pages, + onExpandedChange = resolvedState.onExpandedChange, + TableComponent = resolvedState.TableComponent, + TheadComponent = resolvedState.TheadComponent, + TbodyComponent = resolvedState.TbodyComponent, + TrGroupComponent = resolvedState.TrGroupComponent, + TrComponent = resolvedState.TrComponent, + ThComponent = resolvedState.ThComponent, + TdComponent = resolvedState.TdComponent, + TfootComponent = resolvedState.TfootComponent, + PaginationComponent = resolvedState.PaginationComponent, + LoadingComponent = resolvedState.LoadingComponent, + SubComponent = resolvedState.SubComponent, + NoDataComponent = resolvedState.NoDataComponent, + ResizerComponent = resolvedState.ResizerComponent, + ExpanderComponent = resolvedState.ExpanderComponent, + PivotValueComponent = resolvedState.PivotValueComponent, + PivotComponent = resolvedState.PivotComponent, + AggregatedComponent = resolvedState.AggregatedComponent, + FilterComponent = resolvedState.FilterComponent, + PadRowComponent = resolvedState.PadRowComponent, + resolvedData = resolvedState.resolvedData, + allVisibleColumns = resolvedState.allVisibleColumns, + headerGroups = resolvedState.headerGroups, + hasHeaderGroups = resolvedState.hasHeaderGroups, + sortedData = resolvedState.sortedData, + currentlyResizing = resolvedState.currentlyResizing; + + // Pagination + + var startRow = pageSize * page; + var endRow = startRow + pageSize; + var pageRows = manual ? resolvedData : sortedData.slice(startRow, endRow); + var minRows = this.getMinRows(); + var padRows = _utils2.default.range(Math.max(minRows - pageRows.length, 0)); + + var hasColumnFooter = allVisibleColumns.some(function (d) { + return d.Footer; + }); + var hasFilters = filterable || allVisibleColumns.some(function (d) { + return d.filterable; + }); + + var recurseRowsViewIndex = function recurseRowsViewIndex(rows) { + var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1; + return [rows.map(function (row, i) { + index += 1; + var rowWithViewIndex = _extends({}, row, { + _viewIndex: index + }); + var newPath = path.concat([i]); + if (rowWithViewIndex[subRowsKey] && _utils2.default.get(expanded, newPath)) { + var _recurseRowsViewIndex = recurseRowsViewIndex(rowWithViewIndex[subRowsKey], newPath, index); + + var _recurseRowsViewIndex2 = _slicedToArray(_recurseRowsViewIndex, 2); + + rowWithViewIndex[subRowsKey] = _recurseRowsViewIndex2[0]; + index = _recurseRowsViewIndex2[1]; + } + return rowWithViewIndex; + }), index]; + }; + + var _recurseRowsViewIndex3 = recurseRowsViewIndex(pageRows); + + var _recurseRowsViewIndex4 = _slicedToArray(_recurseRowsViewIndex3, 1); + + pageRows = _recurseRowsViewIndex4[0]; + + + var canPrevious = page > 0; + var canNext = page + 1 < pages; + + var rowMinWidth = _utils2.default.sum(allVisibleColumns.map(function (d) { + var resizedColumn = resized.find(function (x) { + return x.id === d.id; + }) || {}; + return _utils2.default.getFirstDefined(resizedColumn.value, d.width, d.minWidth); + })); + + var rowIndex = -1; + + var finalState = _extends({}, resolvedState, { + startRow: startRow, + endRow: endRow, + pageRows: pageRows, + minRows: minRows, + padRows: padRows, + hasColumnFooter: hasColumnFooter, + canPrevious: canPrevious, + canNext: canNext, + rowMinWidth: rowMinWidth + }); + + var rootProps = _utils2.default.splitProps(getProps(finalState, undefined, undefined, this)); + var tableProps = _utils2.default.splitProps(getTableProps(finalState, undefined, undefined, this)); + var tBodyProps = _utils2.default.splitProps(getTbodyProps(finalState, undefined, undefined, this)); + var loadingProps = getLoadingProps(finalState, undefined, undefined, this); + var noDataProps = getNoDataProps(finalState, undefined, undefined, this); + + // Visual Components + + var makeHeaderGroup = function makeHeaderGroup(column, i) { + var resizedValue = function resizedValue(col) { + return (resized.find(function (x) { + return x.id === col.id; + }) || {}).value; + }; + var flex = _utils2.default.sum(column.columns.map(function (col) { + return col.width || resizedValue(col) ? 0 : col.minWidth; + })); + var width = _utils2.default.sum(column.columns.map(function (col) { + return _utils2.default.getFirstDefined(resizedValue(col), col.width, col.minWidth); + })); + var maxWidth = _utils2.default.sum(column.columns.map(function (col) { + return _utils2.default.getFirstDefined(resizedValue(col), col.width, col.maxWidth); + })); + + var theadGroupThProps = _utils2.default.splitProps(getTheadGroupThProps(finalState, undefined, column, _this2)); + var columnHeaderProps = _utils2.default.splitProps(column.getHeaderProps(finalState, undefined, column, _this2)); + + var classes = [column.headerClassName, theadGroupThProps.className, columnHeaderProps.className]; + + var styles = _extends({}, column.headerStyle, theadGroupThProps.style, columnHeaderProps.style); + + var rest = _extends({}, theadGroupThProps.rest, columnHeaderProps.rest); + + var flexStyles = { + flex: flex + ' 0 auto', + width: _utils2.default.asPx(width), + maxWidth: _utils2.default.asPx(maxWidth) + }; + + return _react2.default.createElement( + ThComponent, + _extends({ + key: i + '-' + column.id, + className: (0, _classnames2.default)(classes), + style: _extends({}, styles, flexStyles) + }, rest), + _utils2.default.normalizeComponent(column.Header, { + data: sortedData, + column: column + }) + ); + }; + + var makeHeaderGroups = function makeHeaderGroups() { + var theadGroupProps = _utils2.default.splitProps(getTheadGroupProps(finalState, undefined, undefined, _this2)); + var theadGroupTrProps = _utils2.default.splitProps(getTheadGroupTrProps(finalState, undefined, undefined, _this2)); + return _react2.default.createElement( + TheadComponent, + _extends({ + className: (0, _classnames2.default)('-headerGroups', theadGroupProps.className), + style: _extends({}, theadGroupProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, theadGroupProps.rest), + _react2.default.createElement( + TrComponent, + _extends({ + className: theadGroupTrProps.className, + style: theadGroupTrProps.style + }, theadGroupTrProps.rest), + headerGroups.map(makeHeaderGroup) + ) + ); + }; + + var makeHeader = function makeHeader(column, i) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var sort = sorted.find(function (d) { + return d.id === column.id; + }); + var show = typeof column.show === 'function' ? column.show() : column.show; + var width = _utils2.default.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var maxWidth = _utils2.default.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var theadThProps = _utils2.default.splitProps(getTheadThProps(finalState, undefined, column, _this2)); + var columnHeaderProps = _utils2.default.splitProps(column.getHeaderProps(finalState, undefined, column, _this2)); + + var classes = [column.headerClassName, theadThProps.className, columnHeaderProps.className]; + + var styles = _extends({}, column.headerStyle, theadThProps.style, columnHeaderProps.style); + + var rest = _extends({}, theadThProps.rest, columnHeaderProps.rest); + + var isResizable = _utils2.default.getFirstDefined(column.resizable, resizable, false); + var resizer = isResizable ? _react2.default.createElement(ResizerComponent, _extends({ + onMouseDown: function onMouseDown(e) { + return _this2.resizeColumnStart(e, column, false); + }, + onTouchStart: function onTouchStart(e) { + return _this2.resizeColumnStart(e, column, true); + } + }, getResizerProps('finalState', undefined, column, _this2))) : null; + + var isSortable = _utils2.default.getFirstDefined(column.sortable, sortable, false); + + return _react2.default.createElement( + ThComponent, + _extends({ + key: i + '-' + column.id, + className: (0, _classnames2.default)(classes, isResizable && 'rt-resizable-header', sort ? sort.desc ? '-sort-desc' : '-sort-asc' : '', isSortable && '-cursor-pointer', !show && '-hidden', pivotBy && pivotBy.slice(0, -1).includes(column.id) && 'rt-header-pivot'), + style: _extends({}, styles, { + flex: width + ' 0 auto', + width: _utils2.default.asPx(width), + maxWidth: _utils2.default.asPx(maxWidth) + }), + toggleSort: function toggleSort(e) { + if (isSortable) _this2.sortColumn(column, multiSort ? e.shiftKey : false); + } + }, rest), + _react2.default.createElement( + 'div', + { className: (0, _classnames2.default)(isResizable && 'rt-resizable-header-content') }, + _utils2.default.normalizeComponent(column.Header, { + data: sortedData, + column: column + }) + ), + resizer + ); + }; + + var makeHeaders = function makeHeaders() { + var theadProps = _utils2.default.splitProps(getTheadProps(finalState, undefined, undefined, _this2)); + var theadTrProps = _utils2.default.splitProps(getTheadTrProps(finalState, undefined, undefined, _this2)); + return _react2.default.createElement( + TheadComponent, + _extends({ + className: (0, _classnames2.default)('-header', theadProps.className), + style: _extends({}, theadProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, theadProps.rest), + _react2.default.createElement( + TrComponent, + _extends({ + className: theadTrProps.className, + style: theadTrProps.style + }, theadTrProps.rest), + allVisibleColumns.map(makeHeader) + ) + ); + }; + + var makeFilter = function makeFilter(column, i) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var width = _utils2.default.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var maxWidth = _utils2.default.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var theadFilterThProps = _utils2.default.splitProps(getTheadFilterThProps(finalState, undefined, column, _this2)); + var columnHeaderProps = _utils2.default.splitProps(column.getHeaderProps(finalState, undefined, column, _this2)); + + var classes = [column.headerClassName, theadFilterThProps.className, columnHeaderProps.className]; + + var styles = _extends({}, column.headerStyle, theadFilterThProps.style, columnHeaderProps.style); + + var rest = _extends({}, theadFilterThProps.rest, columnHeaderProps.rest); + + var filter = filtered.find(function (filter) { + return filter.id === column.id; + }); + + var ResolvedFilterComponent = column.Filter || FilterComponent; + + var isFilterable = _utils2.default.getFirstDefined(column.filterable, filterable, false); + + return _react2.default.createElement( + ThComponent, + _extends({ + key: i + '-' + column.id, + className: (0, _classnames2.default)(classes), + style: _extends({}, styles, { + flex: width + ' 0 auto', + width: _utils2.default.asPx(width), + maxWidth: _utils2.default.asPx(maxWidth) + }) + }, rest), + isFilterable ? _utils2.default.normalizeComponent(ResolvedFilterComponent, { + column: column, + filter: filter, + onChange: function onChange(value) { + return _this2.filterColumn(column, value); + } + }, _defaultProps2.default.column.Filter) : null + ); + }; + + var makeFilters = function makeFilters() { + var theadFilterProps = _utils2.default.splitProps(getTheadFilterProps(finalState, undefined, undefined, _this2)); + var theadFilterTrProps = _utils2.default.splitProps(getTheadFilterTrProps(finalState, undefined, undefined, _this2)); + return _react2.default.createElement( + TheadComponent, + _extends({ + className: (0, _classnames2.default)('-filters', theadFilterProps.className), + style: _extends({}, theadFilterProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, theadFilterProps.rest), + _react2.default.createElement( + TrComponent, + _extends({ + className: theadFilterTrProps.className, + style: theadFilterTrProps.style + }, theadFilterTrProps.rest), + allVisibleColumns.map(makeFilter) + ) + ); + }; + + var makePageRow = function makePageRow(row, i) { + var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + + var rowInfo = { + original: row[originalKey], + row: row, + index: row[indexKey], + viewIndex: rowIndex += 1, + pageSize: pageSize, + page: page, + level: path.length, + nestingPath: path.concat([i]), + aggregated: row[aggregatedKey], + groupedByPivot: row[groupedByPivotKey], + subRows: row[subRowsKey] + }; + var isExpanded = _utils2.default.get(expanded, rowInfo.nestingPath); + var trGroupProps = getTrGroupProps(finalState, rowInfo, undefined, _this2); + var trProps = _utils2.default.splitProps(getTrProps(finalState, rowInfo, undefined, _this2)); + return _react2.default.createElement( + TrGroupComponent, + _extends({ key: rowInfo.nestingPath.join('_') }, trGroupProps), + _react2.default.createElement( + TrComponent, + _extends({ + className: (0, _classnames2.default)(trProps.className, row._viewIndex % 2 ? '-even' : '-odd'), + style: trProps.style + }, trProps.rest), + allVisibleColumns.map(function (column, i2) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var show = typeof column.show === 'function' ? column.show() : column.show; + var width = _utils2.default.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var maxWidth = _utils2.default.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var tdProps = _utils2.default.splitProps(getTdProps(finalState, rowInfo, column, _this2)); + var columnProps = _utils2.default.splitProps(column.getProps(finalState, rowInfo, column, _this2)); + + var classes = [tdProps.className, column.className, columnProps.className]; + + var styles = _extends({}, tdProps.style, column.style, columnProps.style); + + var cellInfo = _extends({}, rowInfo, { + isExpanded: isExpanded, + column: _extends({}, column), + value: rowInfo.row[column.id], + pivoted: column.pivoted, + expander: column.expander, + resized: resized, + show: show, + width: width, + maxWidth: maxWidth, + tdProps: tdProps, + columnProps: columnProps, + classes: classes, + styles: styles + }); + + var value = cellInfo.value; + + var useOnExpanderClick = void 0; + var isBranch = void 0; + var isPreview = void 0; + + var onExpanderClick = function onExpanderClick(e) { + var newExpanded = _utils2.default.clone(expanded); + if (isExpanded) { + newExpanded = _utils2.default.set(newExpanded, cellInfo.nestingPath, false); + } else { + newExpanded = _utils2.default.set(newExpanded, cellInfo.nestingPath, {}); + } + + return _this2.setStateWithData({ + expanded: newExpanded + }, function () { + return onExpandedChange && onExpandedChange(newExpanded, cellInfo.nestingPath, e, cellInfo); + }); + }; + + // Default to a standard cell + var resolvedCell = _utils2.default.normalizeComponent(column.Cell, cellInfo, value); + + // Resolve Renderers + var ResolvedAggregatedComponent = column.Aggregated || (!column.aggregate ? AggregatedComponent : column.Cell); + var ResolvedExpanderComponent = column.Expander || ExpanderComponent; + var ResolvedPivotValueComponent = column.PivotValue || PivotValueComponent; + var DefaultResolvedPivotComponent = PivotComponent || function (props) { + return _react2.default.createElement( + 'div', + null, + _react2.default.createElement(ResolvedExpanderComponent, props), + _react2.default.createElement(ResolvedPivotValueComponent, props) + ); + }; + var ResolvedPivotComponent = column.Pivot || DefaultResolvedPivotComponent; + + // Is this cell expandable? + if (cellInfo.pivoted || cellInfo.expander) { + // Make it expandable by defualt + cellInfo.expandable = true; + useOnExpanderClick = true; + // If pivoted, has no subRows, and does not have a subComponent, + // do not make expandable + if (cellInfo.pivoted && !cellInfo.subRows && !SubComponent) { + cellInfo.expandable = false; + } + } + + if (cellInfo.pivoted) { + // Is this column a branch? + isBranch = rowInfo.row[pivotIDKey] === column.id && cellInfo.subRows; + // Should this column be blank? + isPreview = pivotBy.indexOf(column.id) > pivotBy.indexOf(rowInfo.row[pivotIDKey]) && cellInfo.subRows; + // Pivot Cell Render Override + if (isBranch) { + // isPivot + resolvedCell = _utils2.default.normalizeComponent(ResolvedPivotComponent, _extends({}, cellInfo, { + value: row[pivotValKey] + }), row[pivotValKey]); + } else if (isPreview) { + // Show the pivot preview + resolvedCell = _utils2.default.normalizeComponent(ResolvedAggregatedComponent, cellInfo, value); + } else { + resolvedCell = null; + } + } else if (cellInfo.aggregated) { + resolvedCell = _utils2.default.normalizeComponent(ResolvedAggregatedComponent, cellInfo, value); + } + + if (cellInfo.expander) { + resolvedCell = _utils2.default.normalizeComponent(ResolvedExpanderComponent, cellInfo, row[pivotValKey]); + if (pivotBy) { + if (cellInfo.groupedByPivot) { + resolvedCell = null; + } + if (!cellInfo.subRows && !SubComponent) { + resolvedCell = null; + } + } + } + + var resolvedOnExpanderClick = useOnExpanderClick ? onExpanderClick : function () {}; + + // If there are multiple onClick events, make sure they don't + // override eachother. This should maybe be expanded to handle all + // function attributes + var interactionProps = { + onClick: resolvedOnExpanderClick + }; + + if (tdProps.rest.onClick) { + interactionProps.onClick = function (e) { + tdProps.rest.onClick(e, function () { + return resolvedOnExpanderClick(e); + }); + }; + } + + if (columnProps.rest.onClick) { + interactionProps.onClick = function (e) { + columnProps.rest.onClick(e, function () { + return resolvedOnExpanderClick(e); + }); + }; + } + + // Return the cell + return _react2.default.createElement( + TdComponent + // eslint-disable-next-line react/no-array-index-key + , + _extends({ key: i2 + '-' + column.id, + className: (0, _classnames2.default)(classes, !cellInfo.expandable && !show && 'hidden', cellInfo.expandable && 'rt-expandable', (isBranch || isPreview) && 'rt-pivot'), + style: _extends({}, styles, { + flex: width + ' 0 auto', + width: _utils2.default.asPx(width), + maxWidth: _utils2.default.asPx(maxWidth) + }) + }, tdProps.rest, columnProps.rest, interactionProps), + resolvedCell + ); + }) + ), + rowInfo.subRows && isExpanded && rowInfo.subRows.map(function (d, i) { + return makePageRow(d, i, rowInfo.nestingPath); + }), + SubComponent && !rowInfo.subRows && isExpanded && SubComponent(rowInfo, function () { + var newExpanded = _utils2.default.clone(expanded); + + _utils2.default.set(newExpanded, rowInfo.nestingPath, false); + }) + ); + }; + + var makePadColumn = function makePadColumn(column, i) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var show = typeof column.show === 'function' ? column.show() : column.show; + var width = _utils2.default.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var flex = width; + var maxWidth = _utils2.default.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var tdProps = _utils2.default.splitProps(getTdProps(finalState, undefined, column, _this2)); + var columnProps = _utils2.default.splitProps(column.getProps(finalState, undefined, column, _this2)); + + var classes = [tdProps.className, column.className, columnProps.className]; + + var styles = _extends({}, tdProps.style, column.style, columnProps.style); + + return _react2.default.createElement( + TdComponent, + _extends({ + key: i + '-' + column.id, + className: (0, _classnames2.default)(classes, !show && 'hidden'), + style: _extends({}, styles, { + flex: flex + ' 0 auto', + width: _utils2.default.asPx(width), + maxWidth: _utils2.default.asPx(maxWidth) + }) + }, tdProps.rest), + _utils2.default.normalizeComponent(PadRowComponent) + ); + }; + + var makePadRow = function makePadRow(row, i) { + var trGroupProps = getTrGroupProps(finalState, undefined, undefined, _this2); + var trProps = _utils2.default.splitProps(getTrProps(finalState, undefined, undefined, _this2)); + return _react2.default.createElement( + TrGroupComponent, + _extends({ key: 'pad-' + i }, trGroupProps), + _react2.default.createElement( + TrComponent, + { + className: (0, _classnames2.default)('-padRow', (pageRows.length + i) % 2 ? '-even' : '-odd', trProps.className), + style: trProps.style || {} + }, + allVisibleColumns.map(makePadColumn) + ) + ); + }; + + var makeColumnFooter = function makeColumnFooter(column, i) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var show = typeof column.show === 'function' ? column.show() : column.show; + var width = _utils2.default.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var maxWidth = _utils2.default.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var tFootTdProps = _utils2.default.splitProps(getTfootTdProps(finalState, undefined, column, _this2)); + var columnProps = _utils2.default.splitProps(column.getProps(finalState, undefined, column, _this2)); + var columnFooterProps = _utils2.default.splitProps(column.getFooterProps(finalState, undefined, column, _this2)); + + var classes = [tFootTdProps.className, column.className, columnProps.className, columnFooterProps.className]; + + var styles = _extends({}, tFootTdProps.style, column.style, columnProps.style, columnFooterProps.style); + + return _react2.default.createElement( + TdComponent, + _extends({ + key: i + '-' + column.id, + className: (0, _classnames2.default)(classes, !show && 'hidden'), + style: _extends({}, styles, { + flex: width + ' 0 auto', + width: _utils2.default.asPx(width), + maxWidth: _utils2.default.asPx(maxWidth) + }) + }, columnProps.rest, tFootTdProps.rest, columnFooterProps.rest), + _utils2.default.normalizeComponent(column.Footer, { + data: sortedData, + column: column + }) + ); + }; + + var makeColumnFooters = function makeColumnFooters() { + var tFootProps = _utils2.default.splitProps(getTfootProps(finalState, undefined, undefined, _this2)); + var tFootTrProps = _utils2.default.splitProps(getTfootTrProps(finalState, undefined, undefined, _this2)); + return _react2.default.createElement( + TfootComponent, + _extends({ + className: tFootProps.className, + style: _extends({}, tFootProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, tFootProps.rest), + _react2.default.createElement( + TrComponent, + _extends({ + className: (0, _classnames2.default)(tFootTrProps.className), + style: tFootTrProps.style + }, tFootTrProps.rest), + allVisibleColumns.map(makeColumnFooter) + ) + ); + }; + + var makePagination = function makePagination(isTop) { + var paginationProps = _utils2.default.splitProps(getPaginationProps(finalState, undefined, undefined, _this2)); + return _react2.default.createElement(PaginationComponent, _extends({}, resolvedState, { + pages: pages, + canPrevious: canPrevious, + canNext: canNext, + onPageChange: _this2.onPageChange, + onPageSizeChange: _this2.onPageSizeChange, + className: paginationProps.className, + style: paginationProps.style, + isTop: isTop + }, paginationProps.rest)); + }; + + var makeTable = function makeTable() { + return _react2.default.createElement( + 'div', + _extends({ + className: (0, _classnames2.default)('ReactTable', className, rootProps.className), + style: _extends({}, style, rootProps.style) + }, rootProps.rest), + showPagination && showPaginationTop ? _react2.default.createElement( + 'div', + { className: 'pagination-top' }, + makePagination(true) + ) : null, + _react2.default.createElement( + TableComponent, + _extends({ + className: (0, _classnames2.default)(tableProps.className, currentlyResizing ? 'rt-resizing' : ''), + style: tableProps.style + }, tableProps.rest), + hasHeaderGroups ? makeHeaderGroups() : null, + makeHeaders(), + hasFilters ? makeFilters() : null, + _react2.default.createElement( + TbodyComponent, + _extends({ + className: (0, _classnames2.default)(tBodyProps.className), + style: _extends({}, tBodyProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, tBodyProps.rest), + pageRows.map(function (d, i) { + return makePageRow(d, i); + }), + padRows.map(makePadRow) + ), + hasColumnFooter ? makeColumnFooters() : null + ), + showPagination && showPaginationBottom ? _react2.default.createElement( + 'div', + { className: 'pagination-bottom' }, + makePagination(false) + ) : null, + !pageRows.length && _react2.default.createElement( + NoDataComponent, + noDataProps, + _utils2.default.normalizeComponent(noDataText) + ), + _react2.default.createElement(LoadingComponent, _extends({ loading: loading, loadingText: loadingText }, loadingProps)) + ); + }; + + // childProps are optionally passed to a function-as-a-child + return children ? children(finalState, makeTable, this) : makeTable(); + } + }]); + + return ReactTable; +}((0, _methods2.default)((0, _lifecycle2.default)(_react.Component))); + +ReactTable.propTypes = _propTypes2.default; +ReactTable.defaultProps = _defaultProps2.default; +exports.default = ReactTable; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJSZWFjdFRhYmxlRGVmYXVsdHMiLCJkZWZhdWx0UHJvcHMiLCJSZWFjdFRhYmxlIiwicHJvcHMiLCJnZXRSZXNvbHZlZFN0YXRlIiwiYmluZCIsImdldERhdGFNb2RlbCIsImdldFNvcnRlZERhdGEiLCJmaXJlRmV0Y2hEYXRhIiwiZ2V0UHJvcE9yU3RhdGUiLCJnZXRTdGF0ZU9yUHJvcCIsImZpbHRlckRhdGEiLCJzb3J0RGF0YSIsImdldE1pblJvd3MiLCJvblBhZ2VDaGFuZ2UiLCJvblBhZ2VTaXplQ2hhbmdlIiwic29ydENvbHVtbiIsImZpbHRlckNvbHVtbiIsInJlc2l6ZUNvbHVtblN0YXJ0IiwicmVzaXplQ29sdW1uRW5kIiwicmVzaXplQ29sdW1uTW92aW5nIiwicmVzb2x2ZWRTdGF0ZSIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJnZXRQcm9wcyIsImdldFRhYmxlUHJvcHMiLCJnZXRUaGVhZEdyb3VwUHJvcHMiLCJnZXRUaGVhZEdyb3VwVHJQcm9wcyIsImdldFRoZWFkR3JvdXBUaFByb3BzIiwiZ2V0VGhlYWRQcm9wcyIsImdldFRoZWFkVHJQcm9wcyIsImdldFRoZWFkVGhQcm9wcyIsImdldFRoZWFkRmlsdGVyUHJvcHMiLCJnZXRUaGVhZEZpbHRlclRyUHJvcHMiLCJnZXRUaGVhZEZpbHRlclRoUHJvcHMiLCJnZXRUYm9keVByb3BzIiwiZ2V0VHJHcm91cFByb3BzIiwiZ2V0VHJQcm9wcyIsImdldFRkUHJvcHMiLCJnZXRUZm9vdFByb3BzIiwiZ2V0VGZvb3RUclByb3BzIiwiZ2V0VGZvb3RUZFByb3BzIiwiZ2V0UGFnaW5hdGlvblByb3BzIiwiZ2V0TG9hZGluZ1Byb3BzIiwiZ2V0Tm9EYXRhUHJvcHMiLCJnZXRSZXNpemVyUHJvcHMiLCJzaG93UGFnaW5hdGlvbiIsInNob3dQYWdpbmF0aW9uVG9wIiwic2hvd1BhZ2luYXRpb25Cb3R0b20iLCJtYW51YWwiLCJsb2FkaW5nVGV4dCIsIm5vRGF0YVRleHQiLCJzb3J0YWJsZSIsIm11bHRpU29ydCIsInJlc2l6YWJsZSIsImZpbHRlcmFibGUiLCJwaXZvdElES2V5IiwicGl2b3RWYWxLZXkiLCJwaXZvdEJ5Iiwic3ViUm93c0tleSIsImFnZ3JlZ2F0ZWRLZXkiLCJvcmlnaW5hbEtleSIsImluZGV4S2V5IiwiZ3JvdXBlZEJ5UGl2b3RLZXkiLCJsb2FkaW5nIiwicGFnZVNpemUiLCJwYWdlIiwic29ydGVkIiwiZmlsdGVyZWQiLCJyZXNpemVkIiwiZXhwYW5kZWQiLCJwYWdlcyIsIm9uRXhwYW5kZWRDaGFuZ2UiLCJUYWJsZUNvbXBvbmVudCIsIlRoZWFkQ29tcG9uZW50IiwiVGJvZHlDb21wb25lbnQiLCJUckdyb3VwQ29tcG9uZW50IiwiVHJDb21wb25lbnQiLCJUaENvbXBvbmVudCIsIlRkQ29tcG9uZW50IiwiVGZvb3RDb21wb25lbnQiLCJQYWdpbmF0aW9uQ29tcG9uZW50IiwiTG9hZGluZ0NvbXBvbmVudCIsIlN1YkNvbXBvbmVudCIsIk5vRGF0YUNvbXBvbmVudCIsIlJlc2l6ZXJDb21wb25lbnQiLCJFeHBhbmRlckNvbXBvbmVudCIsIlBpdm90VmFsdWVDb21wb25lbnQiLCJQaXZvdENvbXBvbmVudCIsIkFnZ3JlZ2F0ZWRDb21wb25lbnQiLCJGaWx0ZXJDb21wb25lbnQiLCJQYWRSb3dDb21wb25lbnQiLCJyZXNvbHZlZERhdGEiLCJhbGxWaXNpYmxlQ29sdW1ucyIsImhlYWRlckdyb3VwcyIsImhhc0hlYWRlckdyb3VwcyIsInNvcnRlZERhdGEiLCJjdXJyZW50bHlSZXNpemluZyIsInN0YXJ0Um93IiwiZW5kUm93IiwicGFnZVJvd3MiLCJzbGljZSIsIm1pblJvd3MiLCJwYWRSb3dzIiwiXyIsInJhbmdlIiwiTWF0aCIsIm1heCIsImxlbmd0aCIsImhhc0NvbHVtbkZvb3RlciIsInNvbWUiLCJkIiwiRm9vdGVyIiwiaGFzRmlsdGVycyIsInJlY3Vyc2VSb3dzVmlld0luZGV4Iiwicm93cyIsInBhdGgiLCJpbmRleCIsIm1hcCIsInJvdyIsImkiLCJyb3dXaXRoVmlld0luZGV4IiwiX3ZpZXdJbmRleCIsIm5ld1BhdGgiLCJjb25jYXQiLCJnZXQiLCJjYW5QcmV2aW91cyIsImNhbk5leHQiLCJyb3dNaW5XaWR0aCIsInN1bSIsInJlc2l6ZWRDb2x1bW4iLCJmaW5kIiwieCIsImlkIiwiZ2V0Rmlyc3REZWZpbmVkIiwidmFsdWUiLCJ3aWR0aCIsIm1pbldpZHRoIiwicm93SW5kZXgiLCJmaW5hbFN0YXRlIiwicm9vdFByb3BzIiwic3BsaXRQcm9wcyIsInVuZGVmaW5lZCIsInRhYmxlUHJvcHMiLCJ0Qm9keVByb3BzIiwibG9hZGluZ1Byb3BzIiwibm9EYXRhUHJvcHMiLCJtYWtlSGVhZGVyR3JvdXAiLCJjb2x1bW4iLCJyZXNpemVkVmFsdWUiLCJjb2wiLCJmbGV4IiwiY29sdW1ucyIsIm1heFdpZHRoIiwidGhlYWRHcm91cFRoUHJvcHMiLCJjb2x1bW5IZWFkZXJQcm9wcyIsImdldEhlYWRlclByb3BzIiwiY2xhc3NlcyIsImhlYWRlckNsYXNzTmFtZSIsInN0eWxlcyIsImhlYWRlclN0eWxlIiwicmVzdCIsImZsZXhTdHlsZXMiLCJhc1B4Iiwibm9ybWFsaXplQ29tcG9uZW50IiwiSGVhZGVyIiwiZGF0YSIsIm1ha2VIZWFkZXJHcm91cHMiLCJ0aGVhZEdyb3VwUHJvcHMiLCJ0aGVhZEdyb3VwVHJQcm9wcyIsIm1ha2VIZWFkZXIiLCJyZXNpemVkQ29sIiwic29ydCIsInNob3ciLCJ0aGVhZFRoUHJvcHMiLCJpc1Jlc2l6YWJsZSIsInJlc2l6ZXIiLCJlIiwiaXNTb3J0YWJsZSIsImRlc2MiLCJpbmNsdWRlcyIsInNoaWZ0S2V5IiwibWFrZUhlYWRlcnMiLCJ0aGVhZFByb3BzIiwidGhlYWRUclByb3BzIiwibWFrZUZpbHRlciIsInRoZWFkRmlsdGVyVGhQcm9wcyIsImZpbHRlciIsIlJlc29sdmVkRmlsdGVyQ29tcG9uZW50IiwiRmlsdGVyIiwiaXNGaWx0ZXJhYmxlIiwib25DaGFuZ2UiLCJtYWtlRmlsdGVycyIsInRoZWFkRmlsdGVyUHJvcHMiLCJ0aGVhZEZpbHRlclRyUHJvcHMiLCJtYWtlUGFnZVJvdyIsInJvd0luZm8iLCJvcmlnaW5hbCIsInZpZXdJbmRleCIsImxldmVsIiwibmVzdGluZ1BhdGgiLCJhZ2dyZWdhdGVkIiwiZ3JvdXBlZEJ5UGl2b3QiLCJzdWJSb3dzIiwiaXNFeHBhbmRlZCIsInRyR3JvdXBQcm9wcyIsInRyUHJvcHMiLCJqb2luIiwiaTIiLCJ0ZFByb3BzIiwiY29sdW1uUHJvcHMiLCJjZWxsSW5mbyIsInBpdm90ZWQiLCJleHBhbmRlciIsInVzZU9uRXhwYW5kZXJDbGljayIsImlzQnJhbmNoIiwiaXNQcmV2aWV3Iiwib25FeHBhbmRlckNsaWNrIiwibmV3RXhwYW5kZWQiLCJjbG9uZSIsInNldCIsInNldFN0YXRlV2l0aERhdGEiLCJyZXNvbHZlZENlbGwiLCJDZWxsIiwiUmVzb2x2ZWRBZ2dyZWdhdGVkQ29tcG9uZW50IiwiQWdncmVnYXRlZCIsImFnZ3JlZ2F0ZSIsIlJlc29sdmVkRXhwYW5kZXJDb21wb25lbnQiLCJFeHBhbmRlciIsIlJlc29sdmVkUGl2b3RWYWx1ZUNvbXBvbmVudCIsIlBpdm90VmFsdWUiLCJEZWZhdWx0UmVzb2x2ZWRQaXZvdENvbXBvbmVudCIsIlJlc29sdmVkUGl2b3RDb21wb25lbnQiLCJQaXZvdCIsImV4cGFuZGFibGUiLCJpbmRleE9mIiwicmVzb2x2ZWRPbkV4cGFuZGVyQ2xpY2siLCJpbnRlcmFjdGlvblByb3BzIiwib25DbGljayIsIm1ha2VQYWRDb2x1bW4iLCJtYWtlUGFkUm93IiwibWFrZUNvbHVtbkZvb3RlciIsInRGb290VGRQcm9wcyIsImNvbHVtbkZvb3RlclByb3BzIiwiZ2V0Rm9vdGVyUHJvcHMiLCJtYWtlQ29sdW1uRm9vdGVycyIsInRGb290UHJvcHMiLCJ0Rm9vdFRyUHJvcHMiLCJtYWtlUGFnaW5hdGlvbiIsInBhZ2luYXRpb25Qcm9wcyIsImlzVG9wIiwibWFrZVRhYmxlIiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIl0sIm1h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O0FBRUUsb0NBQ0swSCxXQUFXekgsS0FEaEI7QUFFRWtILDRCQUFhVCxXQUFiO0FBRkY7QUFGRixpQkFNTWdCLFdBQVdpQixJQU5qQjtBQVFHN0QsdUJBQVNrQixHQUFULENBQWEsVUFBQ1AsQ0FBRCxFQUFJUyxDQUFKO0FBQUEsdUJBQVUyRSxZQUFZcEYsQ0FBWixFQUFlUyxDQUFmLENBQVY7QUFBQSxlQUFiLENBUkg7QUFTR2pCLHNCQUFRZSxHQUFSLENBQVkwSCxVQUFaO0FBVEgsYUFSRjtBQW1CR25JLDhCQUFrQndJLG1CQUFsQixHQUF3QztBQW5CM0MsV0FYRjtBQWdDR3ZNLDRCQUFrQkUsb0JBQWxCLEdBQ0M7QUFBQTtBQUFBLGNBQUssV0FBVSxtQkFBZjtBQUFvQ3dNLDJCQUFlLEtBQWY7QUFBcEMsV0FERCxHQUVHLElBbENOO0FBbUNHLFdBQUNwSixTQUFTUSxNQUFWLElBQ0M7QUFBQywyQkFBRDtBQUFxQnNDLHVCQUFyQjtBQUFtQzFDLDRCQUFFNEQsa0JBQUYsQ0FBcUJqSCxVQUFyQjtBQUFuQyxXQXBDSjtBQXNDRSx3Q0FBQyxnQkFBRCxhQUFrQixTQUFTYSxPQUEzQixFQUFvQyxhQUFhZCxXQUFqRCxJQUFrRStGLFlBQWxFO0FBdENGLFNBRGdCO0FBQUEsT0FBbEI7O0FBMkNBO0FBQ0EsYUFBTzVILFdBQVdBLFNBQVNzSCxVQUFULEVBQXFCZ0gsU0FBckIsRUFBZ0MsSUFBaEMsQ0FBWCxHQUFtREEsV0FBMUQ7QUFDRDs7OztFQS8wQnFDLHVCQUFRLHlCQUFVQyxnQkFBVixDQUFSLEM7O0FBQW5CM1AsVSxDQUNaNFAsUyxHQUFZQSxtQjtBQURBNVAsVSxDQUVaRCxZLEdBQWVBLHNCO2tCQUZIQyxVIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbi8vXG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IExpZmVjeWNsZSBmcm9tICcuL2xpZmVjeWNsZSdcbmltcG9ydCBNZXRob2RzIGZyb20gJy4vbWV0aG9kcydcbmltcG9ydCBkZWZhdWx0UHJvcHMgZnJvbSAnLi9kZWZhdWx0UHJvcHMnXG5pbXBvcnQgcHJvcFR5cGVzIGZyb20gJy4vcHJvcFR5cGVzJ1xuXG5leHBvcnQgY29uc3QgUmVhY3RUYWJsZURlZmF1bHRzID0gZGVmYXVsdFByb3BzXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWN0VGFibGUgZXh0ZW5kcyBNZXRob2RzKExpZmVjeWNsZShDb21wb25lbnQpKSB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKVxuXG4gICAgdGhpcy5nZXRSZXNvbHZlZFN0YXRlID0gdGhpcy5nZXRSZXNvbHZlZFN0YXRlLmJpbmQodGhpcylcbiAgICB0aGlzLmdldERhdGFNb2RlbCA9IHRoaXMuZ2V0RGF0YU1vZGVsLmJpbmQodGhpcylcbiAgICB0aGlzLmdldFNvcnRlZERhdGEgPSB0aGlzLmdldFNvcnRlZERhdGEuYmluZCh0aGlzKVxuICAgIHRoaXMuZmlyZUZldGNoRGF0YSA9IHRoaXMuZmlyZUZldGNoRGF0YS5iaW5kKHRoaXMpXG4gICAgdGhpcy5nZXRQcm9wT3JTdGF0ZSA9IHRoaXMuZ2V0UHJvcE9yU3RhdGUuYmluZCh0aGlzKVxuICAgIHRoaXMuZ2V0U3RhdGVPclByb3AgPSB0aGlzLmdldFN0YXRlT3JQcm9wLmJpbmQodGhpcylcbiAgICB0aGlzLmZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckRhdGEuYmluZCh0aGlzKVxuICAgIHRoaXMuc29ydERhdGEgPSB0aGlzLnNvcnREYXRhLmJpbmQodGhpcylcbiAgICB0aGlzLmdldE1pblJvd3MgPSB0aGlzLmdldE1pblJvd3MuYmluZCh0aGlzKVxuICAgIHRoaXMub25QYWdlQ2hhbmdlID0gdGhpcy5vblBhZ2VDaGFuZ2UuYmluZCh0aGlzKVxuICAgIHRoaXMub25QYWdlU2l6ZUNoYW5nZSA9IHRoaXMub25QYWdlU2l6ZUNoYW5nZS5iaW5kKHRoaXMpXG4gICAgdGhpcy5zb3J0Q29sdW1uID0gdGhpcy5zb3J0Q29sdW1uLmJpbmQodGhpcylcbiAgICB0aGlzLmZpbHRlckNvbHVtbiA9IHRoaXMuZmlsdGVyQ29sdW1uLmJpbmQodGhpcylcbiAgICB0aGlzLnJlc2l6ZUNvbHVtblN0YXJ0ID0gdGhpcy5yZXNpemVDb2x1bW5TdGFydC5iaW5kKHRoaXMpXG4gICAgdGhpcy5yZXNpemVDb2x1bW5FbmQgPSB0aGlzLnJlc2l6ZUNvbHVtbkVuZC5iaW5kKHRoaXMpXG4gICAgdGhpcy5yZXNpemVDb2x1bW5Nb3ZpbmcgPSB0aGlzLnJlc2l6ZUNvbHVtbk1vdmluZy5iaW5kKHRoaXMpXG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHJlc29sdmVkU3RhdGUgPSB0aGlzLmdldFJlc29sdmVkU3RhdGUoKVxuICAgIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgc3R5bGUsXG4gICAgICBnZXRQcm9wcyxcbiAgICAgIGdldFRhYmxlUHJvcHMsXG4gICAgICBnZXRUaGVhZEdyb3VwUHJvcHMsXG4gICAgICBnZXRUaGVhZEdyb3VwVHJQcm9wcyxcbiAgICAgIGdldFRoZWFkR3JvdXBUaFByb3BzLFxuICAgICAgZ2V0VGhlYWRQcm9wcyxcbiAgICAgIGdldFRoZWFkVHJQcm9wcyxcbiAgICAgIGdldFRoZWFkVGhQcm9wcyxcbiAgICAgIGdldFRoZWFkRmlsdGVyUHJvcHMsXG4gICAgICBnZXRUaGVhZEZpbHRlclRyUHJvcHMsXG4gICAgICBnZXRUaGVhZEZpbHRlclRoUHJvcHMsXG4gICAgICBnZXRUYm9keVByb3BzLFxuICAgICAgZ2V0VHJHcm91cFByb3BzLFxuICAgICAgZ2V0VHJQcm9wcyxcbiAgICAgIGdldFRkUHJvcHMsXG4gICAgICBnZXRUZm9vdFByb3BzLFxuICAgICAgZ2V0VGZvb3RUclByb3BzLFxuICAgICAgZ2V0VGZvb3RUZFByb3BzLFxuICAgICAgZ2V0UGFnaW5hdGlvblByb3BzLFxuICAgICAgZ2V0TG9hZGluZ1Byb3BzLFxuICAgICAgZ2V0Tm9EYXRhUHJvcHMsXG4gICAgICBnZXRSZXNpemVyUHJvcHMsXG4gICAgICBzaG93UGFnaW5hdGlvbixcbiAgICAgIHNob3dQYWdpbmF0aW9uVG9wLFxuICAgICAgc2hvd1BhZ2luYXRpb25Cb3R0b20sXG4gICAgICBtYW51YWwsXG4gICAgICBsb2FkaW5nVGV4dCxcbiAgICAgIG5vRGF0YVRleHQsXG4gICAgICBzb3J0YWJsZSxcbiAgICAgIG11bHRpU29ydCxcbiAgICAgIHJlc2l6YWJsZSxcbiAgICAgIGZpbHRlcmFibGUsXG4gICAgICAvLyBQaXZvdGluZyBTdGF0ZVxuICAgICAgcGl2b3RJREtleSxcbiAgICAgIHBpdm90VmFsS2V5LFxuICAgICAgcGl2b3RCeSxcbiAgICAgIHN1YlJvd3NLZXksXG4gICAgICBhZ2dyZWdhdGVkS2V5LFxuICAgICAgb3JpZ2luYWxLZXksXG4gICAgICBpbmRleEtleSxcbiAgICAgIGdyb3VwZWRCeVBpdm90S2V5LFxuICAgICAgLy8gU3RhdGVcbiAgICAgIGxvYWRpbmcsXG4gICAgICBwYWdlU2l6ZSxcbiAgICAgIHBhZ2UsXG4gICAgICBzb3J0ZWQsXG4gICAgICBmaWx0ZXJlZCxcbiAgICAgIHJlc2l6ZWQsXG4gICAgICBleHBhbmRlZCxcbiAgICAgIHBhZ2VzLFxuICAgICAgb25FeHBhbmRlZENoYW5nZSxcbiAgICAgIC8vIENvbXBvbmVudHNcbiAgICAgIFRhYmxlQ29tcG9uZW50LFxuICAgICAgVGhlYWRDb21wb25lbnQsXG4gICAgICBUYm9keUNvbXBvbmVudCxcbiAgICAgIFRyR3JvdXBDb21wb25lbnQsXG4gICAgICBUckNvbXBvbmVudCxcbiAgICAgIFRoQ29tcG9uZW50LFxuICAgICAgVGRDb21wb25lbnQsXG4gICAgICBUZm9vdENvbXBvbmVudCxcbiAgICAgIFBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgICBMb2FkaW5nQ29tcG9uZW50LFxuICAgICAgU3ViQ29tcG9uZW50LFxuICAgICAgTm9EYXRhQ29tcG9uZW50LFxuICAgICAgUmVzaXplckNvbXBvbmVudCxcbiAgICAgIEV4cGFuZGVyQ29tcG9uZW50LFxuICAgICAgUGl2b3RWYWx1ZUNvbXBvbmVudCxcbiAgICAgIFBpdm90Q29tcG9uZW50LFxuICAgICAgQWdncmVnYXRlZENvbXBvbmVudCxcbiAgICAgIEZpbHRlckNvbXBvbmVudCxcbiAgICAgIFBhZFJvd0NvbXBvbmVudCxcbiAgICAgIC8vIERhdGEgbW9kZWxcbiAgICAgIHJlc29sdmVkRGF0YSxcbiAgICAgIGFsbFZpc2libGVDb2x1bW5zLFxuICAgICAgaGVhZGVyR3JvdXBzLFxuICAgICAgaGFzSGVhZGVyR3JvdXBzLFxuICAgICAgLy8gU29ydGVkIERhdGFcbiAgICAgIHNvcnRlZERhdGEsXG4gICAgICBjdXJyZW50bHlSZXNpemluZyxcbiAgICB9ID0gcmVzb2x2ZWRTdGF0ZVxuXG4gICAgLy8gUGFnaW5hdGlvblxuICAgIGNvbnN0IHN0YXJ0Um93ID0gcGFnZVNpemUgKiBwYWdlXG4gICAgY29uc3QgZW5kUm93ID0gc3RhcnRSb3cgKyBwYWdlU2l6ZVxuICAgIGxldCBwYWdlUm93cyA9IG1hbnVhbCA/IHJlc29sdmVkRGF0YSA6IHNvcnRlZERhdGEuc2xpY2Uoc3RhcnRSb3csIGVuZFJvdylcbiAgICBjb25zdCBtaW5Sb3dzID0gdGhpcy5nZXRNaW5Sb3dzKClcbiAgICBjb25zdCBwYWRSb3dzID0gXy5yYW5nZShNYXRoLm1heChtaW5Sb3dzIC0gcGFnZVJvd3MubGVuZ3RoLCAwKSlcblxuICAgIGNvbnN0IGhhc0NvbHVtbkZvb3RlciA9IGFsbFZpc2libGVDb2x1bW5zLnNvbWUoZCA9PiBkLkZvb3RlcilcbiAgICBjb25zdCBoYXNGaWx0ZXJzID0gZmlsdGVyYWJsZSB8fCBhbGxWaXNpYmxlQ29sdW1ucy5zb21lKGQgPT4gZC5maWx0ZXJhYmxlKVxuXG4gICAgY29uc3QgcmVjdXJzZVJvd3NWaWV3SW5kZXggPSAocm93cywgcGF0aCA9IFtdLCBpbmRleCA9IC0xKSA9PiBbXG4gICAgICByb3dzLm1hcCgocm93LCBpKSA9PiB7XG4gICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgY29uc3Qgcm93V2l0aFZpZXdJbmRleCA9IHtcbiAgICAgICAgICAuLi5yb3csXG4gICAgICAgICAgX3ZpZXdJbmRleDogaW5kZXgsXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UGF0aCA9IHBhdGguY29uY2F0KFtpXSlcbiAgICAgICAgaWYgKHJvd1dpdGhWaWV3SW5kZXhbc3ViUm93c0tleV0gJiYgXy5nZXQoZXhwYW5kZWQsIG5ld1BhdGgpKSB7XG4gICAgICAgICAgW3Jvd1dpdGhWaWV3SW5kZXhbc3ViUm93c0tleV0sIGluZGV4XSA9IHJlY3Vyc2VSb3dzVmlld0luZGV4KFxuICAgICAgICAgICAgcm93V2l0aFZpZXdJbmRleFtzdWJSb3dzS2V5XSxcbiAgICAgICAgICAgIG5ld1BhdGgsXG4gICAgICAgICAgICBpbmRleFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93V2l0aFZpZXdJbmRleFxuICAgICAgfSksXG4gICAgICBpbmRleCxcbiAgICBdO1xuICAgIFtwYWdlUm93c10gPSByZWN1cnNlUm93c1ZpZXdJbmRleChwYWdlUm93cylcblxuICAgIGNvbnN0IGNhblByZXZpb3VzID0gcGFnZSA+IDBcbiAgICBjb25zdCBjYW5OZXh0ID0gcGFnZSArIDEgPCBwYWdlc1xuXG4gICAgY29uc3Qgcm93TWluV2lkdGggPSBfLnN1bShcbiAgICAgIGFsbFZpc2libGVDb2x1bW5zLm1hcChkID0+IHtcbiAgICAgICAgY29uc3QgcmVzaXplZENvbHVtbiA9IHJlc2l6ZWQuZmluZCh4ID0+IHguaWQgPT09IGQuaWQpIHx8IHt9XG4gICAgICAgIHJldHVybiBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkQ29sdW1uLnZhbHVlLCBkLndpZHRoLCBkLm1pbldpZHRoKVxuICAgICAgfSlcbiAgICApXG5cbiAgICBsZXQgcm93SW5kZXggPSAtMVxuXG4gICAgY29uc3QgZmluYWxTdGF0ZSA9IHtcbiAgICAgIC4uLnJlc29sdmVkU3RhdGUsXG4gICAgICBzdGFydFJvdyxcbiAgICAgIGVuZFJvdyxcbiAgICAgIHBhZ2VSb3dzLFxuICAgICAgbWluUm93cyxcbiAgICAgIHBhZFJvd3MsXG4gICAgICBoYXNDb2x1bW5Gb290ZXIsXG4gICAgICBjYW5QcmV2aW91cyxcbiAgICAgIGNhbk5leHQsXG4gICAgICByb3dNaW5XaWR0aCxcbiAgICB9XG5cbiAgICBjb25zdCByb290UHJvcHMgPSBfLnNwbGl0UHJvcHMoZ2V0UHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpKVxuICAgIGNvbnN0IHRhYmxlUHJvcHMgPSBfLnNwbGl0UHJvcHMoZ2V0VGFibGVQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcykpXG4gICAgY29uc3QgdEJvZHlQcm9wcyA9IF8uc3BsaXRQcm9wcyhnZXRUYm9keVByb3BzKGZpbmFsU3RhdGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzKSlcbiAgICBjb25zdCBsb2FkaW5nUHJvcHMgPSBnZXRMb2FkaW5nUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpXG4gICAgY29uc3Qgbm9EYXRhUHJvcHMgPSBnZXROb0RhdGFQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcylcblxuICAgIC8vIFZpc3VhbCBDb21wb25lbnRzXG5cbiAgICBjb25zdCBtYWtlSGVhZGVyR3JvdXAgPSAoY29sdW1uLCBpKSA9PiB7XG4gICAgICBjb25zdCByZXNpemVkVmFsdWUgPSBjb2wgPT4gKHJlc2l6ZWQuZmluZCh4ID0+IHguaWQgPT09IGNvbC5pZCkgfHwge30pLnZhbHVlXG4gICAgICBjb25zdCBmbGV4ID0gXy5zdW0oXG4gICAgICAgIGNvbHVtbi5jb2x1bW5zLm1hcChjb2wgPT4gKGNvbC53aWR0aCB8fCByZXNpemVkVmFsdWUoY29sKSA/IDAgOiBjb2wubWluV2lkdGgpKVxuICAgICAgKVxuICAgICAgY29uc3Qgd2lkdGggPSBfLnN1bShcbiAgICAgICAgY29sdW1uLmNvbHVtbnMubWFwKGNvbCA9PiBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkVmFsdWUoY29sKSwgY29sLndpZHRoLCBjb2wubWluV2lkdGgpKVxuICAgICAgKVxuICAgICAgY29uc3QgbWF4V2lkdGggPSBfLnN1bShcbiAgICAgICAgY29sdW1uLmNvbHVtbnMubWFwKGNvbCA9PiBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkVmFsdWUoY29sKSwgY29sLndpZHRoLCBjb2wubWF4V2lkdGgpKVxuICAgICAgKVxuXG4gICAgICBjb25zdCB0aGVhZEdyb3VwVGhQcm9wcyA9IF8uc3BsaXRQcm9wcyhcbiAgICAgICAgZ2V0VGhlYWRHcm91cFRoUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCBjb2x1bW4sIHRoaXMpXG4gICAgICApXG4gICAgICBjb25zdCBjb2x1bW5IZWFkZXJQcm9wcyA9IF8uc3BsaXRQcm9wcyhcbiAgICAgICAgY29sdW1uLmdldEhlYWRlclByb3BzKGZpbmFsU3RhdGUsIHVuZGVmaW5lZCwgY29sdW1uLCB0aGlzKVxuICAgICAgKVxuXG4gICAgICBjb25zdCBjbGFzc2VzID0gW1xuICAgICAgICBjb2x1bW4uaGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgICB0aGVhZEdyb3VwVGhQcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGNvbHVtbkhlYWRlclByb3BzLmNsYXNzTmFtZSxcbiAgICAgIF1cblxuICAgICAgY29uc3Qgc3R5bGVzID0ge1xuICAgICAgICAuLi5jb2x1bW4uaGVhZGVyU3R5bGUsXG4gICAgICAgIC4uLnRoZWFkR3JvdXBUaFByb3BzLnN0eWxlLFxuICAgICAgICAuLi5jb2x1bW5IZWFkZXJQcm9wcy5zdHlsZSxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdCA9IHtcbiAgICAgICAgLi4udGhlYWRHcm91cFRoUHJvcHMucmVzdCxcbiAgICAgICAgLi4uY29sdW1uSGVhZGVyUHJvcHMucmVzdCxcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmxleFN0eWxlcyA9IHtcbiAgICAgICAgZmxleDogYCR7ZmxleH0gMCBhdXRvYCxcbiAgICAgICAgd2lkdGg6IF8uYXNQeCh3aWR0aCksXG4gICAgICAgIG1heFdpZHRoOiBfLmFzUHgobWF4V2lkdGgpLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGhDb21wb25lbnRcbiAgICAgICAgICBrZXk9e2Ake2l9LSR7Y29sdW1uLmlkfWB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNsYXNzZXMpfVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAuLi5zdHlsZXMsXG4gICAgICAgICAgICAuLi5mbGV4U3R5bGVzLFxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICB7Xy5ub3JtYWxpemVDb21wb25lbnQoY29sdW1uLkhlYWRlciwge1xuICAgICAgICAgICAgZGF0YTogc29ydGVkRGF0YSxcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9UaENvbXBvbmVudD5cbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBtYWtlSGVhZGVyR3JvdXBzID0gKCkgPT4ge1xuICAgICAgY29uc3QgdGhlYWRHcm91cFByb3BzID0gXy5zcGxpdFByb3BzKFxuICAgICAgICBnZXRUaGVhZEdyb3VwUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpXG4gICAgICApXG4gICAgICBjb25zdCB0aGVhZEdyb3VwVHJQcm9wcyA9IF8uc3BsaXRQcm9wcyhcbiAgICAgICAgZ2V0VGhlYWRHcm91cFRyUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpXG4gICAgICApXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGhlYWRDb21wb25lbnRcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJy1oZWFkZXJHcm91cHMnLCB0aGVhZEdyb3VwUHJvcHMuY2xhc3NOYW1lKX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4udGhlYWRHcm91cFByb3BzLnN0eWxlLFxuICAgICAgICAgICAgbWluV2lkdGg6IGAke3Jvd01pbldpZHRofXB4YCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHsuLi50aGVhZEdyb3VwUHJvcHMucmVzdH1cbiAgICAgICAgPlxuICAgICAgICAgIDxUckNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGVhZEdyb3VwVHJQcm9wcy5jbGFzc05hbWV9XG4gICAgICAgICAgICBzdHlsZT17dGhlYWRHcm91cFRyUHJvcHMuc3R5bGV9XG4gICAgICAgICAgICB7Li4udGhlYWRHcm91cFRyUHJvcHMucmVzdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7aGVhZGVyR3JvdXBzLm1hcChtYWtlSGVhZGVyR3JvdXApfVxuICAgICAgICAgIDwvVHJDb21wb25lbnQ+XG4gICAgICAgIDwvVGhlYWRDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZUhlYWRlciA9IChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGNvbnN0IHJlc2l6ZWRDb2wgPSByZXNpemVkLmZpbmQoeCA9PiB4LmlkID09PSBjb2x1bW4uaWQpIHx8IHt9XG4gICAgICBjb25zdCBzb3J0ID0gc29ydGVkLmZpbmQoZCA9PiBkLmlkID09PSBjb2x1bW4uaWQpXG4gICAgICBjb25zdCBzaG93ID0gdHlwZW9mIGNvbHVtbi5zaG93ID09PSAnZnVuY3Rpb24nID8gY29sdW1uLnNob3coKSA6IGNvbHVtbi5zaG93XG4gICAgICBjb25zdCB3aWR0aCA9IF8uZ2V0Rmlyc3REZWZpbmVkKHJlc2l6ZWRDb2wudmFsdWUsIGNvbHVtbi53aWR0aCwgY29sdW1uLm1pbldpZHRoKVxuICAgICAgY29uc3QgbWF4V2lkdGggPSBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkQ29sLnZhbHVlLCBjb2x1bW4ud2lkdGgsIGNvbHVtbi5tYXhXaWR0aClcbiAgICAgIGNvbnN0IHRoZWFkVGhQcm9wcyA9IF8uc3BsaXRQcm9wcyhnZXRUaGVhZFRoUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCBjb2x1bW4sIHRoaXMpKVxuICAgICAgY29uc3QgY29sdW1uSGVhZGVyUHJvcHMgPSBfLnNwbGl0UHJvcHMoXG4gICAgICAgIGNvbHVtbi5nZXRIZWFkZXJQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIGNvbHVtbiwgdGhpcylcbiAgICAgIClcblxuICAgICAgY29uc3QgY2xhc3NlcyA9IFtjb2x1bW4uaGVhZGVyQ2xhc3NOYW1lLCB0aGVhZFRoUHJvcHMuY2xhc3NOYW1lLCBjb2x1bW5IZWFkZXJQcm9wcy5jbGFzc05hbWVdXG5cbiAgICAgIGNvbnN0IHN0eWxlcyA9IHtcbiAgICAgICAgLi4uY29sdW1uLmhlYWRlclN0eWxlLFxuICAgICAgICAuLi50aGVhZFRoUHJvcHMuc3R5bGUsXG4gICAgICAgIC4uLmNvbHVtbkhlYWRlclByb3BzLnN0eWxlLFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN0ID0ge1xuICAgICAgICAuLi50aGVhZFRoUHJvcHMucmVzdCxcbiAgICAgICAgLi4uY29sdW1uSGVhZGVyUHJvcHMucmVzdCxcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNSZXNpemFibGUgPSBfLmdldEZpcnN0RGVmaW5lZChjb2x1bW4ucmVzaXphYmxlLCByZXNpemFibGUsIGZhbHNlKVxuICAgICAgY29uc3QgcmVzaXplciA9IGlzUmVzaXphYmxlID8gKFxuICAgICAgICA8UmVzaXplckNvbXBvbmVudFxuICAgICAgICAgIG9uTW91c2VEb3duPXtlID0+IHRoaXMucmVzaXplQ29sdW1uU3RhcnQoZSwgY29sdW1uLCBmYWxzZSl9XG4gICAgICAgICAgb25Ub3VjaFN0YXJ0PXtlID0+IHRoaXMucmVzaXplQ29sdW1uU3RhcnQoZSwgY29sdW1uLCB0cnVlKX1cbiAgICAgICAgICB7Li4uZ2V0UmVzaXplclByb3BzKCdmaW5hbFN0YXRlJywgdW5kZWZpbmVkLCBjb2x1bW4sIHRoaXMpfVxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGxcblxuICAgICAgY29uc3QgaXNTb3J0YWJsZSA9IF8uZ2V0Rmlyc3REZWZpbmVkKGNvbHVtbi5zb3J0YWJsZSwgc29ydGFibGUsIGZhbHNlKVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGhDb21wb25lbnRcbiAgICAgICAgICBrZXk9e2Ake2l9LSR7Y29sdW1uLmlkfWB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKFxuICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgIGlzUmVzaXphYmxlICYmICdydC1yZXNpemFibGUtaGVhZGVyJyxcbiAgICAgICAgICAgIHNvcnQgPyAoc29ydC5kZXNjID8gJy1zb3J0LWRlc2MnIDogJy1zb3J0LWFzYycpIDogJycsXG4gICAgICAgICAgICBpc1NvcnRhYmxlICYmICctY3Vyc29yLXBvaW50ZXInLFxuICAgICAgICAgICAgIXNob3cgJiYgJy1oaWRkZW4nLFxuICAgICAgICAgICAgcGl2b3RCeSAmJiBwaXZvdEJ5LnNsaWNlKDAsIC0xKS5pbmNsdWRlcyhjb2x1bW4uaWQpICYmICdydC1oZWFkZXItcGl2b3QnXG4gICAgICAgICAgKX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4uc3R5bGVzLFxuICAgICAgICAgICAgZmxleDogYCR7d2lkdGh9IDAgYXV0b2AsXG4gICAgICAgICAgICB3aWR0aDogXy5hc1B4KHdpZHRoKSxcbiAgICAgICAgICAgIG1heFdpZHRoOiBfLmFzUHgobWF4V2lkdGgpLFxuICAgICAgICAgIH19XG4gICAgICAgICAgdG9nZ2xlU29ydD17ZSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNTb3J0YWJsZSkgdGhpcy5zb3J0Q29sdW1uKGNvbHVtbiwgbXVsdGlTb3J0ID8gZS5zaGlmdEtleSA6IGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhpc1Jlc2l6YWJsZSAmJiAncnQtcmVzaXphYmxlLWhlYWRlci1jb250ZW50Jyl9PlxuICAgICAgICAgICAge18ubm9ybWFsaXplQ29tcG9uZW50KGNvbHVtbi5IZWFkZXIsIHtcbiAgICAgICAgICAgICAgZGF0YTogc29ydGVkRGF0YSxcbiAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3Jlc2l6ZXJ9XG4gICAgICAgIDwvVGhDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZUhlYWRlcnMgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0aGVhZFByb3BzID0gXy5zcGxpdFByb3BzKGdldFRoZWFkUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpKVxuICAgICAgY29uc3QgdGhlYWRUclByb3BzID0gXy5zcGxpdFByb3BzKGdldFRoZWFkVHJQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcykpXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGhlYWRDb21wb25lbnRcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJy1oZWFkZXInLCB0aGVhZFByb3BzLmNsYXNzTmFtZSl9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIC4uLnRoZWFkUHJvcHMuc3R5bGUsXG4gICAgICAgICAgICBtaW5XaWR0aDogYCR7cm93TWluV2lkdGh9cHhgLFxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLnRoZWFkUHJvcHMucmVzdH1cbiAgICAgICAgPlxuICAgICAgICAgIDxUckNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGVhZFRyUHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICAgICAgc3R5bGU9e3RoZWFkVHJQcm9wcy5zdHlsZX1cbiAgICAgICAgICAgIHsuLi50aGVhZFRyUHJvcHMucmVzdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YWxsVmlzaWJsZUNvbHVtbnMubWFwKG1ha2VIZWFkZXIpfVxuICAgICAgICAgIDwvVHJDb21wb25lbnQ+XG4gICAgICAgIDwvVGhlYWRDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZUZpbHRlciA9IChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGNvbnN0IHJlc2l6ZWRDb2wgPSByZXNpemVkLmZpbmQoeCA9PiB4LmlkID09PSBjb2x1bW4uaWQpIHx8IHt9XG4gICAgICBjb25zdCB3aWR0aCA9IF8uZ2V0Rmlyc3REZWZpbmVkKHJlc2l6ZWRDb2wudmFsdWUsIGNvbHVtbi53aWR0aCwgY29sdW1uLm1pbldpZHRoKVxuICAgICAgY29uc3QgbWF4V2lkdGggPSBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkQ29sLnZhbHVlLCBjb2x1bW4ud2lkdGgsIGNvbHVtbi5tYXhXaWR0aClcbiAgICAgIGNvbnN0IHRoZWFkRmlsdGVyVGhQcm9wcyA9IF8uc3BsaXRQcm9wcyhcbiAgICAgICAgZ2V0VGhlYWRGaWx0ZXJUaFByb3BzKGZpbmFsU3RhdGUsIHVuZGVmaW5lZCwgY29sdW1uLCB0aGlzKVxuICAgICAgKVxuICAgICAgY29uc3QgY29sdW1uSGVhZGVyUHJvcHMgPSBfLnNwbGl0UHJvcHMoXG4gICAgICAgIGNvbHVtbi5nZXRIZWFkZXJQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIGNvbHVtbiwgdGhpcylcbiAgICAgIClcblxuICAgICAgY29uc3QgY2xhc3NlcyA9IFtcbiAgICAgICAgY29sdW1uLmhlYWRlckNsYXNzTmFtZSxcbiAgICAgICAgdGhlYWRGaWx0ZXJUaFByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgY29sdW1uSGVhZGVyUHJvcHMuY2xhc3NOYW1lLFxuICAgICAgXVxuXG4gICAgICBjb25zdCBzdHlsZXMgPSB7XG4gICAgICAgIC4uLmNvbHVtbi5oZWFkZXJTdHlsZSxcbiAgICAgICAgLi4udGhlYWRGaWx0ZXJUaFByb3BzLnN0eWxlLFxuICAgICAgICAuLi5jb2x1bW5IZWFkZXJQcm9wcy5zdHlsZSxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdCA9IHtcbiAgICAgICAgLi4udGhlYWRGaWx0ZXJUaFByb3BzLnJlc3QsXG4gICAgICAgIC4uLmNvbHVtbkhlYWRlclByb3BzLnJlc3QsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlciA9IGZpbHRlcmVkLmZpbmQoZmlsdGVyID0+IGZpbHRlci5pZCA9PT0gY29sdW1uLmlkKVxuXG4gICAgICBjb25zdCBSZXNvbHZlZEZpbHRlckNvbXBvbmVudCA9IGNvbHVtbi5GaWx0ZXIgfHwgRmlsdGVyQ29tcG9uZW50XG5cbiAgICAgIGNvbnN0IGlzRmlsdGVyYWJsZSA9IF8uZ2V0Rmlyc3REZWZpbmVkKGNvbHVtbi5maWx0ZXJhYmxlLCBmaWx0ZXJhYmxlLCBmYWxzZSlcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRoQ29tcG9uZW50XG4gICAgICAgICAga2V5PXtgJHtpfS0ke2NvbHVtbi5pZH1gfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhjbGFzc2VzKX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4uc3R5bGVzLFxuICAgICAgICAgICAgZmxleDogYCR7d2lkdGh9IDAgYXV0b2AsXG4gICAgICAgICAgICB3aWR0aDogXy5hc1B4KHdpZHRoKSxcbiAgICAgICAgICAgIG1heFdpZHRoOiBfLmFzUHgobWF4V2lkdGgpLFxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICB7aXNGaWx0ZXJhYmxlXG4gICAgICAgICAgICA/IF8ubm9ybWFsaXplQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgIFJlc29sdmVkRmlsdGVyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiB2YWx1ZSA9PiB0aGlzLmZpbHRlckNvbHVtbihjb2x1bW4sIHZhbHVlKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRQcm9wcy5jb2x1bW4uRmlsdGVyXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgPC9UaENvbXBvbmVudD5cbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBtYWtlRmlsdGVycyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHRoZWFkRmlsdGVyUHJvcHMgPSBfLnNwbGl0UHJvcHMoXG4gICAgICAgIGdldFRoZWFkRmlsdGVyUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpXG4gICAgICApXG4gICAgICBjb25zdCB0aGVhZEZpbHRlclRyUHJvcHMgPSBfLnNwbGl0UHJvcHMoXG4gICAgICAgIGdldFRoZWFkRmlsdGVyVHJQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcylcbiAgICAgIClcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUaGVhZENvbXBvbmVudFxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnLWZpbHRlcnMnLCB0aGVhZEZpbHRlclByb3BzLmNsYXNzTmFtZSl9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIC4uLnRoZWFkRmlsdGVyUHJvcHMuc3R5bGUsXG4gICAgICAgICAgICBtaW5XaWR0aDogYCR7cm93TWluV2lkdGh9cHhgLFxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLnRoZWFkRmlsdGVyUHJvcHMucmVzdH1cbiAgICAgICAgPlxuICAgICAgICAgIDxUckNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGVhZEZpbHRlclRyUHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICAgICAgc3R5bGU9e3RoZWFkRmlsdGVyVHJQcm9wcy5zdHlsZX1cbiAgICAgICAgICAgIHsuLi50aGVhZEZpbHRlclRyUHJvcHMucmVzdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YWxsVmlzaWJsZUNvbHVtbnMubWFwKG1ha2VGaWx0ZXIpfVxuICAgICAgICAgIDwvVHJDb21wb25lbnQ+XG4gICAgICAgIDwvVGhlYWRDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZVBhZ2VSb3cgPSAocm93LCBpLCBwYXRoID0gW10pID0+IHtcbiAgICAgIGNvbnN0IHJvd0luZm8gPSB7XG4gICAgICAgIG9yaWdpbmFsOiByb3dbb3JpZ2luYWxLZXldLFxuICAgICAgICByb3csXG4gICAgICAgIGluZGV4OiByb3dbaW5kZXhLZXldLFxuICAgICAgICB2aWV3SW5kZXg6IChyb3dJbmRleCArPSAxKSxcbiAgICAgICAgcGFnZVNpemUsXG4gICAgICAgIHBhZ2UsXG4gICAgICAgIGxldmVsOiBwYXRoLmxlbmd0aCxcbiAgICAgICAgbmVzdGluZ1BhdGg6IHBhdGguY29uY2F0KFtpXSksXG4gICAgICAgIGFnZ3JlZ2F0ZWQ6IHJvd1thZ2dyZWdhdGVkS2V5XSxcbiAgICAgICAgZ3JvdXBlZEJ5UGl2b3Q6IHJvd1tncm91cGVkQnlQaXZvdEtleV0sXG4gICAgICAgIHN1YlJvd3M6IHJvd1tzdWJSb3dzS2V5XSxcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBfLmdldChleHBhbmRlZCwgcm93SW5mby5uZXN0aW5nUGF0aClcbiAgICAgIGNvbnN0IHRyR3JvdXBQcm9wcyA9IGdldFRyR3JvdXBQcm9wcyhmaW5hbFN0YXRlLCByb3dJbmZvLCB1bmRlZmluZWQsIHRoaXMpXG4gICAgICBjb25zdCB0clByb3BzID0gXy5zcGxpdFByb3BzKGdldFRyUHJvcHMoZmluYWxTdGF0ZSwgcm93SW5mbywgdW5kZWZpbmVkLCB0aGlzKSlcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUckdyb3VwQ29tcG9uZW50IGtleT17cm93SW5mby5uZXN0aW5nUGF0aC5qb2luKCdfJyl9IHsuLi50ckdyb3VwUHJvcHN9PlxuICAgICAgICAgIDxUckNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKHRyUHJvcHMuY2xhc3NOYW1lLCByb3cuX3ZpZXdJbmRleCAlIDIgPyAnLWV2ZW4nIDogJy1vZGQnKX1cbiAgICAgICAgICAgIHN0eWxlPXt0clByb3BzLnN0eWxlfVxuICAgICAgICAgICAgey4uLnRyUHJvcHMucmVzdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YWxsVmlzaWJsZUNvbHVtbnMubWFwKChjb2x1bW4sIGkyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZWRDb2wgPSByZXNpemVkLmZpbmQoeCA9PiB4LmlkID09PSBjb2x1bW4uaWQpIHx8IHt9XG4gICAgICAgICAgICAgIGNvbnN0IHNob3cgPSB0eXBlb2YgY29sdW1uLnNob3cgPT09ICdmdW5jdGlvbicgPyBjb2x1bW4uc2hvdygpIDogY29sdW1uLnNob3dcbiAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkQ29sLnZhbHVlLCBjb2x1bW4ud2lkdGgsIGNvbHVtbi5taW5XaWR0aClcbiAgICAgICAgICAgICAgY29uc3QgbWF4V2lkdGggPSBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkQ29sLnZhbHVlLCBjb2x1bW4ud2lkdGgsIGNvbHVtbi5tYXhXaWR0aClcbiAgICAgICAgICAgICAgY29uc3QgdGRQcm9wcyA9IF8uc3BsaXRQcm9wcyhnZXRUZFByb3BzKGZpbmFsU3RhdGUsIHJvd0luZm8sIGNvbHVtbiwgdGhpcykpXG4gICAgICAgICAgICAgIGNvbnN0IGNvbHVtblByb3BzID0gXy5zcGxpdFByb3BzKGNvbHVtbi5nZXRQcm9wcyhmaW5hbFN0YXRlLCByb3dJbmZvLCBjb2x1bW4sIHRoaXMpKVxuXG4gICAgICAgICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbdGRQcm9wcy5jbGFzc05hbWUsIGNvbHVtbi5jbGFzc05hbWUsIGNvbHVtblByb3BzLmNsYXNzTmFtZV1cblxuICAgICAgICAgICAgICBjb25zdCBzdHlsZXMgPSB7XG4gICAgICAgICAgICAgICAgLi4udGRQcm9wcy5zdHlsZSxcbiAgICAgICAgICAgICAgICAuLi5jb2x1bW4uc3R5bGUsXG4gICAgICAgICAgICAgICAgLi4uY29sdW1uUHJvcHMuc3R5bGUsXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBjZWxsSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAuLi5yb3dJbmZvLFxuICAgICAgICAgICAgICAgIGlzRXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgY29sdW1uOiB7IC4uLmNvbHVtbiB9LFxuICAgICAgICAgICAgICAgIHZhbHVlOiByb3dJbmZvLnJvd1tjb2x1bW4uaWRdLFxuICAgICAgICAgICAgICAgIHBpdm90ZWQ6IGNvbHVtbi5waXZvdGVkLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVyOiBjb2x1bW4uZXhwYW5kZXIsXG4gICAgICAgICAgICAgICAgcmVzaXplZCxcbiAgICAgICAgICAgICAgICBzaG93LFxuICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoLFxuICAgICAgICAgICAgICAgIHRkUHJvcHMsXG4gICAgICAgICAgICAgICAgY29sdW1uUHJvcHMsXG4gICAgICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgICAgICBzdHlsZXMsXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNlbGxJbmZvLnZhbHVlXG5cbiAgICAgICAgICAgICAgbGV0IHVzZU9uRXhwYW5kZXJDbGlja1xuICAgICAgICAgICAgICBsZXQgaXNCcmFuY2hcbiAgICAgICAgICAgICAgbGV0IGlzUHJldmlld1xuXG4gICAgICAgICAgICAgIGNvbnN0IG9uRXhwYW5kZXJDbGljayA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBuZXdFeHBhbmRlZCA9IF8uY2xvbmUoZXhwYW5kZWQpXG4gICAgICAgICAgICAgICAgaWYgKGlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgIG5ld0V4cGFuZGVkID0gXy5zZXQobmV3RXhwYW5kZWQsIGNlbGxJbmZvLm5lc3RpbmdQYXRoLCBmYWxzZSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbmV3RXhwYW5kZWQgPSBfLnNldChuZXdFeHBhbmRlZCwgY2VsbEluZm8ubmVzdGluZ1BhdGgsIHt9KVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFN0YXRlV2l0aERhdGEoXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBuZXdFeHBhbmRlZCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICBvbkV4cGFuZGVkQ2hhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgIG9uRXhwYW5kZWRDaGFuZ2UobmV3RXhwYW5kZWQsIGNlbGxJbmZvLm5lc3RpbmdQYXRoLCBlLCBjZWxsSW5mbylcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGEgc3RhbmRhcmQgY2VsbFxuICAgICAgICAgICAgICBsZXQgcmVzb2x2ZWRDZWxsID0gXy5ub3JtYWxpemVDb21wb25lbnQoY29sdW1uLkNlbGwsIGNlbGxJbmZvLCB2YWx1ZSlcblxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIFJlbmRlcmVyc1xuICAgICAgICAgICAgICBjb25zdCBSZXNvbHZlZEFnZ3JlZ2F0ZWRDb21wb25lbnQgPVxuICAgICAgICAgICAgICAgIGNvbHVtbi5BZ2dyZWdhdGVkIHx8ICghY29sdW1uLmFnZ3JlZ2F0ZSA/IEFnZ3JlZ2F0ZWRDb21wb25lbnQgOiBjb2x1bW4uQ2VsbClcbiAgICAgICAgICAgICAgY29uc3QgUmVzb2x2ZWRFeHBhbmRlckNvbXBvbmVudCA9IGNvbHVtbi5FeHBhbmRlciB8fCBFeHBhbmRlckNvbXBvbmVudFxuICAgICAgICAgICAgICBjb25zdCBSZXNvbHZlZFBpdm90VmFsdWVDb21wb25lbnQgPSBjb2x1bW4uUGl2b3RWYWx1ZSB8fCBQaXZvdFZhbHVlQ29tcG9uZW50XG4gICAgICAgICAgICAgIGNvbnN0IERlZmF1bHRSZXNvbHZlZFBpdm90Q29tcG9uZW50ID1cbiAgICAgICAgICAgICAgICBQaXZvdENvbXBvbmVudCB8fFxuICAgICAgICAgICAgICAgIChwcm9wcyA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8UmVzb2x2ZWRFeHBhbmRlckNvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgICAgICAgICAgIDxSZXNvbHZlZFBpdm90VmFsdWVDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgY29uc3QgUmVzb2x2ZWRQaXZvdENvbXBvbmVudCA9IGNvbHVtbi5QaXZvdCB8fCBEZWZhdWx0UmVzb2x2ZWRQaXZvdENvbXBvbmVudFxuXG4gICAgICAgICAgICAgIC8vIElzIHRoaXMgY2VsbCBleHBhbmRhYmxlP1xuICAgICAgICAgICAgICBpZiAoY2VsbEluZm8ucGl2b3RlZCB8fCBjZWxsSW5mby5leHBhbmRlcikge1xuICAgICAgICAgICAgICAgIC8vIE1ha2UgaXQgZXhwYW5kYWJsZSBieSBkZWZ1YWx0XG4gICAgICAgICAgICAgICAgY2VsbEluZm8uZXhwYW5kYWJsZSA9IHRydWVcbiAgICAgICAgICAgICAgICB1c2VPbkV4cGFuZGVyQ2xpY2sgPSB0cnVlXG4gICAgICAgICAgICAgICAgLy8gSWYgcGl2b3RlZCwgaGFzIG5vIHN1YlJvd3MsIGFuZCBkb2VzIG5vdCBoYXZlIGEgc3ViQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBtYWtlIGV4cGFuZGFibGVcbiAgICAgICAgICAgICAgICBpZiAoY2VsbEluZm8ucGl2b3RlZCAmJiAhY2VsbEluZm8uc3ViUm93cyAmJiAhU3ViQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICBjZWxsSW5mby5leHBhbmRhYmxlID0gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2VsbEluZm8ucGl2b3RlZCkge1xuICAgICAgICAgICAgICAgIC8vIElzIHRoaXMgY29sdW1uIGEgYnJhbmNoP1xuICAgICAgICAgICAgICAgIGlzQnJhbmNoID0gcm93SW5mby5yb3dbcGl2b3RJREtleV0gPT09IGNvbHVtbi5pZCAmJiBjZWxsSW5mby5zdWJSb3dzXG4gICAgICAgICAgICAgICAgLy8gU2hvdWxkIHRoaXMgY29sdW1uIGJlIGJsYW5rP1xuICAgICAgICAgICAgICAgIGlzUHJldmlldyA9XG4gICAgICAgICAgICAgICAgICBwaXZvdEJ5LmluZGV4T2YoY29sdW1uLmlkKSA+IHBpdm90QnkuaW5kZXhPZihyb3dJbmZvLnJvd1twaXZvdElES2V5XSkgJiZcbiAgICAgICAgICAgICAgICAgIGNlbGxJbmZvLnN1YlJvd3NcbiAgICAgICAgICAgICAgICAvLyBQaXZvdCBDZWxsIFJlbmRlciBPdmVycmlkZVxuICAgICAgICAgICAgICAgIGlmIChpc0JyYW5jaCkge1xuICAgICAgICAgICAgICAgICAgLy8gaXNQaXZvdFxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDZWxsID0gXy5ub3JtYWxpemVDb21wb25lbnQoXG4gICAgICAgICAgICAgICAgICAgIFJlc29sdmVkUGl2b3RDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5jZWxsSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcm93W3Bpdm90VmFsS2V5XSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcm93W3Bpdm90VmFsS2V5XVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNQcmV2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAvLyBTaG93IHRoZSBwaXZvdCBwcmV2aWV3XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZENlbGwgPSBfLm5vcm1hbGl6ZUNvbXBvbmVudChSZXNvbHZlZEFnZ3JlZ2F0ZWRDb21wb25lbnQsIGNlbGxJbmZvLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDZWxsID0gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjZWxsSW5mby5hZ2dyZWdhdGVkKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRDZWxsID0gXy5ub3JtYWxpemVDb21wb25lbnQoUmVzb2x2ZWRBZ2dyZWdhdGVkQ29tcG9uZW50LCBjZWxsSW5mbywgdmFsdWUpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2VsbEluZm8uZXhwYW5kZXIpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlZENlbGwgPSBfLm5vcm1hbGl6ZUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgIFJlc29sdmVkRXhwYW5kZXJDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICBjZWxsSW5mbyxcbiAgICAgICAgICAgICAgICAgIHJvd1twaXZvdFZhbEtleV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKHBpdm90QnkpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjZWxsSW5mby5ncm91cGVkQnlQaXZvdCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZENlbGwgPSBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoIWNlbGxJbmZvLnN1YlJvd3MgJiYgIVN1YkNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZENlbGwgPSBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRPbkV4cGFuZGVyQ2xpY2sgPSB1c2VPbkV4cGFuZGVyQ2xpY2sgPyBvbkV4cGFuZGVyQ2xpY2sgOiAoKSA9PiB7fVxuXG4gICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBvbkNsaWNrIGV2ZW50cywgbWFrZSBzdXJlIHRoZXkgZG9uJ3RcbiAgICAgICAgICAgICAgLy8gb3ZlcnJpZGUgZWFjaG90aGVyLiBUaGlzIHNob3VsZCBtYXliZSBiZSBleHBhbmRlZCB0byBoYW5kbGUgYWxsXG4gICAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25Qcm9wcyA9IHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiByZXNvbHZlZE9uRXhwYW5kZXJDbGljayxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0ZFByb3BzLnJlc3Qub25DbGljaykge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uUHJvcHMub25DbGljayA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGRQcm9wcy5yZXN0Lm9uQ2xpY2soZSwgKCkgPT4gcmVzb2x2ZWRPbkV4cGFuZGVyQ2xpY2soZSkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNvbHVtblByb3BzLnJlc3Qub25DbGljaykge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uUHJvcHMub25DbGljayA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgY29sdW1uUHJvcHMucmVzdC5vbkNsaWNrKGUsICgpID0+IHJlc29sdmVkT25FeHBhbmRlckNsaWNrKGUpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgY2VsbFxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxUZENvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuICAgICAgICAgICAgICAgICAga2V5PXtgJHtpMn0tJHtjb2x1bW4uaWR9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgIWNlbGxJbmZvLmV4cGFuZGFibGUgJiYgIXNob3cgJiYgJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgIGNlbGxJbmZvLmV4cGFuZGFibGUgJiYgJ3J0LWV4cGFuZGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAoaXNCcmFuY2ggfHwgaXNQcmV2aWV3KSAmJiAncnQtcGl2b3QnXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgLi4uc3R5bGVzLFxuICAgICAgICAgICAgICAgICAgICBmbGV4OiBgJHt3aWR0aH0gMCBhdXRvYCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF8uYXNQeCh3aWR0aCksXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBfLmFzUHgobWF4V2lkdGgpLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHsuLi50ZFByb3BzLnJlc3R9XG4gICAgICAgICAgICAgICAgICB7Li4uY29sdW1uUHJvcHMucmVzdH1cbiAgICAgICAgICAgICAgICAgIHsuLi5pbnRlcmFjdGlvblByb3BzfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtyZXNvbHZlZENlbGx9XG4gICAgICAgICAgICAgICAgPC9UZENvbXBvbmVudD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9UckNvbXBvbmVudD5cbiAgICAgICAgICB7cm93SW5mby5zdWJSb3dzICYmXG4gICAgICAgICAgICBpc0V4cGFuZGVkICYmXG4gICAgICAgICAgICByb3dJbmZvLnN1YlJvd3MubWFwKChkLCBpKSA9PiBtYWtlUGFnZVJvdyhkLCBpLCByb3dJbmZvLm5lc3RpbmdQYXRoKSl9XG4gICAgICAgICAge1N1YkNvbXBvbmVudCAmJlxuICAgICAgICAgICAgIXJvd0luZm8uc3ViUm93cyAmJlxuICAgICAgICAgICAgaXNFeHBhbmRlZCAmJlxuICAgICAgICAgICAgU3ViQ29tcG9uZW50KHJvd0luZm8sICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3RXhwYW5kZWQgPSBfLmNsb25lKGV4cGFuZGVkKVxuXG4gICAgICAgICAgICAgIF8uc2V0KG5ld0V4cGFuZGVkLCByb3dJbmZvLm5lc3RpbmdQYXRoLCBmYWxzZSlcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L1RyR3JvdXBDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZVBhZENvbHVtbiA9IChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGNvbnN0IHJlc2l6ZWRDb2wgPSByZXNpemVkLmZpbmQoeCA9PiB4LmlkID09PSBjb2x1bW4uaWQpIHx8IHt9XG4gICAgICBjb25zdCBzaG93ID0gdHlwZW9mIGNvbHVtbi5zaG93ID09PSAnZnVuY3Rpb24nID8gY29sdW1uLnNob3coKSA6IGNvbHVtbi5zaG93XG4gICAgICBjb25zdCB3aWR0aCA9IF8uZ2V0Rmlyc3REZWZpbmVkKHJlc2l6ZWRDb2wudmFsdWUsIGNvbHVtbi53aWR0aCwgY29sdW1uLm1pbldpZHRoKVxuICAgICAgY29uc3QgZmxleCA9IHdpZHRoXG4gICAgICBjb25zdCBtYXhXaWR0aCA9IF8uZ2V0Rmlyc3REZWZpbmVkKHJlc2l6ZWRDb2wudmFsdWUsIGNvbHVtbi53aWR0aCwgY29sdW1uLm1heFdpZHRoKVxuICAgICAgY29uc3QgdGRQcm9wcyA9IF8uc3BsaXRQcm9wcyhnZXRUZFByb3BzKGZpbmFsU3RhdGUsIHVuZGVmaW5lZCwgY29sdW1uLCB0aGlzKSlcbiAgICAgIGNvbnN0IGNvbHVtblByb3BzID0gXy5zcGxpdFByb3BzKGNvbHVtbi5nZXRQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIGNvbHVtbiwgdGhpcykpXG5cbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBbdGRQcm9wcy5jbGFzc05hbWUsIGNvbHVtbi5jbGFzc05hbWUsIGNvbHVtblByb3BzLmNsYXNzTmFtZV1cblxuICAgICAgY29uc3Qgc3R5bGVzID0ge1xuICAgICAgICAuLi50ZFByb3BzLnN0eWxlLFxuICAgICAgICAuLi5jb2x1bW4uc3R5bGUsXG4gICAgICAgIC4uLmNvbHVtblByb3BzLnN0eWxlLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGRDb21wb25lbnRcbiAgICAgICAgICBrZXk9e2Ake2l9LSR7Y29sdW1uLmlkfWB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNsYXNzZXMsICFzaG93ICYmICdoaWRkZW4nKX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4uc3R5bGVzLFxuICAgICAgICAgICAgZmxleDogYCR7ZmxleH0gMCBhdXRvYCxcbiAgICAgICAgICAgIHdpZHRoOiBfLmFzUHgod2lkdGgpLFxuICAgICAgICAgICAgbWF4V2lkdGg6IF8uYXNQeChtYXhXaWR0aCksXG4gICAgICAgICAgfX1cbiAgICAgICAgICB7Li4udGRQcm9wcy5yZXN0fVxuICAgICAgICA+XG4gICAgICAgICAge18ubm9ybWFsaXplQ29tcG9uZW50KFBhZFJvd0NvbXBvbmVudCl9XG4gICAgICAgIDwvVGRDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZVBhZFJvdyA9IChyb3csIGkpID0+IHtcbiAgICAgIGNvbnN0IHRyR3JvdXBQcm9wcyA9IGdldFRyR3JvdXBQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcylcbiAgICAgIGNvbnN0IHRyUHJvcHMgPSBfLnNwbGl0UHJvcHMoZ2V0VHJQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcykpXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VHJHcm91cENvbXBvbmVudCBrZXk9e2BwYWQtJHtpfWB9IHsuLi50ckdyb3VwUHJvcHN9PlxuICAgICAgICAgIDxUckNvbXBvbmVudFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKFxuICAgICAgICAgICAgICAnLXBhZFJvdycsXG4gICAgICAgICAgICAgIChwYWdlUm93cy5sZW5ndGggKyBpKSAlIDIgPyAnLWV2ZW4nIDogJy1vZGQnLFxuICAgICAgICAgICAgICB0clByb3BzLmNsYXNzTmFtZVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHN0eWxlPXt0clByb3BzLnN0eWxlIHx8IHt9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHthbGxWaXNpYmxlQ29sdW1ucy5tYXAobWFrZVBhZENvbHVtbil9XG4gICAgICAgICAgPC9UckNvbXBvbmVudD5cbiAgICAgICAgPC9Uckdyb3VwQ29tcG9uZW50PlxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IG1ha2VDb2x1bW5Gb290ZXIgPSAoY29sdW1uLCBpKSA9PiB7XG4gICAgICBjb25zdCByZXNpemVkQ29sID0gcmVzaXplZC5maW5kKHggPT4geC5pZCA9PT0gY29sdW1uLmlkKSB8fCB7fVxuICAgICAgY29uc3Qgc2hvdyA9IHR5cGVvZiBjb2x1bW4uc2hvdyA9PT0gJ2Z1bmN0aW9uJyA/IGNvbHVtbi5zaG93KCkgOiBjb2x1bW4uc2hvd1xuICAgICAgY29uc3Qgd2lkdGggPSBfLmdldEZpcnN0RGVmaW5lZChyZXNpemVkQ29sLnZhbHVlLCBjb2x1bW4ud2lkdGgsIGNvbHVtbi5taW5XaWR0aClcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gXy5nZXRGaXJzdERlZmluZWQocmVzaXplZENvbC52YWx1ZSwgY29sdW1uLndpZHRoLCBjb2x1bW4ubWF4V2lkdGgpXG4gICAgICBjb25zdCB0Rm9vdFRkUHJvcHMgPSBfLnNwbGl0UHJvcHMoZ2V0VGZvb3RUZFByb3BzKGZpbmFsU3RhdGUsIHVuZGVmaW5lZCwgY29sdW1uLCB0aGlzKSlcbiAgICAgIGNvbnN0IGNvbHVtblByb3BzID0gXy5zcGxpdFByb3BzKGNvbHVtbi5nZXRQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIGNvbHVtbiwgdGhpcykpXG4gICAgICBjb25zdCBjb2x1bW5Gb290ZXJQcm9wcyA9IF8uc3BsaXRQcm9wcyhcbiAgICAgICAgY29sdW1uLmdldEZvb3RlclByb3BzKGZpbmFsU3RhdGUsIHVuZGVmaW5lZCwgY29sdW1uLCB0aGlzKVxuICAgICAgKVxuXG4gICAgICBjb25zdCBjbGFzc2VzID0gW1xuICAgICAgICB0Rm9vdFRkUHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICBjb2x1bW4uY2xhc3NOYW1lLFxuICAgICAgICBjb2x1bW5Qcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGNvbHVtbkZvb3RlclByb3BzLmNsYXNzTmFtZSxcbiAgICAgIF1cblxuICAgICAgY29uc3Qgc3R5bGVzID0ge1xuICAgICAgICAuLi50Rm9vdFRkUHJvcHMuc3R5bGUsXG4gICAgICAgIC4uLmNvbHVtbi5zdHlsZSxcbiAgICAgICAgLi4uY29sdW1uUHJvcHMuc3R5bGUsXG4gICAgICAgIC4uLmNvbHVtbkZvb3RlclByb3BzLnN0eWxlLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGRDb21wb25lbnRcbiAgICAgICAgICBrZXk9e2Ake2l9LSR7Y29sdW1uLmlkfWB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNsYXNzZXMsICFzaG93ICYmICdoaWRkZW4nKX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4uc3R5bGVzLFxuICAgICAgICAgICAgZmxleDogYCR7d2lkdGh9IDAgYXV0b2AsXG4gICAgICAgICAgICB3aWR0aDogXy5hc1B4KHdpZHRoKSxcbiAgICAgICAgICAgIG1heFdpZHRoOiBfLmFzUHgobWF4V2lkdGgpLFxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLmNvbHVtblByb3BzLnJlc3R9XG4gICAgICAgICAgey4uLnRGb290VGRQcm9wcy5yZXN0fVxuICAgICAgICAgIHsuLi5jb2x1bW5Gb290ZXJQcm9wcy5yZXN0fVxuICAgICAgICA+XG4gICAgICAgICAge18ubm9ybWFsaXplQ29tcG9uZW50KGNvbHVtbi5Gb290ZXIsIHtcbiAgICAgICAgICAgIGRhdGE6IHNvcnRlZERhdGEsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvVGRDb21wb25lbnQ+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbWFrZUNvbHVtbkZvb3RlcnMgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0Rm9vdFByb3BzID0gXy5zcGxpdFByb3BzKGdldFRmb290UHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpKVxuICAgICAgY29uc3QgdEZvb3RUclByb3BzID0gXy5zcGxpdFByb3BzKGdldFRmb290VHJQcm9wcyhmaW5hbFN0YXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcykpXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGZvb3RDb21wb25lbnRcbiAgICAgICAgICBjbGFzc05hbWU9e3RGb290UHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAuLi50Rm9vdFByb3BzLnN0eWxlLFxuICAgICAgICAgICAgbWluV2lkdGg6IGAke3Jvd01pbldpZHRofXB4YCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHsuLi50Rm9vdFByb3BzLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICA8VHJDb21wb25lbnRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh0Rm9vdFRyUHJvcHMuY2xhc3NOYW1lKX1cbiAgICAgICAgICAgIHN0eWxlPXt0Rm9vdFRyUHJvcHMuc3R5bGV9XG4gICAgICAgICAgICB7Li4udEZvb3RUclByb3BzLnJlc3R9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2FsbFZpc2libGVDb2x1bW5zLm1hcChtYWtlQ29sdW1uRm9vdGVyKX1cbiAgICAgICAgICA8L1RyQ29tcG9uZW50PlxuICAgICAgICA8L1Rmb290Q29tcG9uZW50PlxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IG1ha2VQYWdpbmF0aW9uID0gaXNUb3AgPT4ge1xuICAgICAgY29uc3QgcGFnaW5hdGlvblByb3BzID0gXy5zcGxpdFByb3BzKFxuICAgICAgICBnZXRQYWdpbmF0aW9uUHJvcHMoZmluYWxTdGF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMpXG4gICAgICApXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UGFnaW5hdGlvbkNvbXBvbmVudFxuICAgICAgICAgIHsuLi5yZXNvbHZlZFN0YXRlfVxuICAgICAgICAgIHBhZ2VzPXtwYWdlc31cbiAgICAgICAgICBjYW5QcmV2aW91cz17Y2FuUHJldmlvdXN9XG4gICAgICAgICAgY2FuTmV4dD17Y2FuTmV4dH1cbiAgICAgICAgICBvblBhZ2VDaGFuZ2U9e3RoaXMub25QYWdlQ2hhbmdlfVxuICAgICAgICAgIG9uUGFnZVNpemVDaGFuZ2U9e3RoaXMub25QYWdlU2l6ZUNoYW5nZX1cbiAgICAgICAgICBjbGFzc05hbWU9e3BhZ2luYXRpb25Qcm9wcy5jbGFzc05hbWV9XG4gICAgICAgICAgc3R5bGU9e3BhZ2luYXRpb25Qcm9wcy5zdHlsZX1cbiAgICAgICAgICBpc1RvcD17aXNUb3B9XG4gICAgICAgICAgey4uLnBhZ2luYXRpb25Qcm9wcy5yZXN0fVxuICAgICAgICAvPlxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IG1ha2VUYWJsZSA9ICgpID0+IChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdSZWFjdFRhYmxlJywgY2xhc3NOYW1lLCByb290UHJvcHMuY2xhc3NOYW1lKX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICAuLi5yb290UHJvcHMuc3R5bGUsXG4gICAgICAgIH19XG4gICAgICAgIHsuLi5yb290UHJvcHMucmVzdH1cbiAgICAgID5cbiAgICAgICAge3Nob3dQYWdpbmF0aW9uICYmIHNob3dQYWdpbmF0aW9uVG9wID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFnaW5hdGlvbi10b3BcIj57bWFrZVBhZ2luYXRpb24odHJ1ZSl9PC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8VGFibGVDb21wb25lbnRcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXModGFibGVQcm9wcy5jbGFzc05hbWUsIGN1cnJlbnRseVJlc2l6aW5nID8gJ3J0LXJlc2l6aW5nJyA6ICcnKX1cbiAgICAgICAgICBzdHlsZT17dGFibGVQcm9wcy5zdHlsZX1cbiAgICAgICAgICB7Li4udGFibGVQcm9wcy5yZXN0fVxuICAgICAgICA+XG4gICAgICAgICAge2hhc0hlYWRlckdyb3VwcyA/IG1ha2VIZWFkZXJHcm91cHMoKSA6IG51bGx9XG4gICAgICAgICAge21ha2VIZWFkZXJzKCl9XG4gICAgICAgICAge2hhc0ZpbHRlcnMgPyBtYWtlRmlsdGVycygpIDogbnVsbH1cbiAgICAgICAgICA8VGJvZHlDb21wb25lbnRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh0Qm9keVByb3BzLmNsYXNzTmFtZSl9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAuLi50Qm9keVByb3BzLnN0eWxlLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogYCR7cm93TWluV2lkdGh9cHhgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHsuLi50Qm9keVByb3BzLnJlc3R9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3BhZ2VSb3dzLm1hcCgoZCwgaSkgPT4gbWFrZVBhZ2VSb3coZCwgaSkpfVxuICAgICAgICAgICAge3BhZFJvd3MubWFwKG1ha2VQYWRSb3cpfVxuICAgICAgICAgIDwvVGJvZHlDb21wb25lbnQ+XG4gICAgICAgICAge2hhc0NvbHVtbkZvb3RlciA/IG1ha2VDb2x1bW5Gb290ZXJzKCkgOiBudWxsfVxuICAgICAgICA8L1RhYmxlQ29tcG9uZW50PlxuICAgICAgICB7c2hvd1BhZ2luYXRpb24gJiYgc2hvd1BhZ2luYXRpb25Cb3R0b20gPyAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYWdpbmF0aW9uLWJvdHRvbVwiPnttYWtlUGFnaW5hdGlvbihmYWxzZSl9PC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7IXBhZ2VSb3dzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPE5vRGF0YUNvbXBvbmVudCB7Li4ubm9EYXRhUHJvcHN9PntfLm5vcm1hbGl6ZUNvbXBvbmVudChub0RhdGFUZXh0KX08L05vRGF0YUNvbXBvbmVudD5cbiAgICAgICAgKX1cbiAgICAgICAgPExvYWRpbmdDb21wb25lbnQgbG9hZGluZz17bG9hZGluZ30gbG9hZGluZ1RleHQ9e2xvYWRpbmdUZXh0fSB7Li4ubG9hZGluZ1Byb3BzfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKVxuXG4gICAgLy8gY2hpbGRQcm9wcyBhcmUgb3B0aW9uYWxseSBwYXNzZWQgdG8gYSBmdW5jdGlvbi1hcy1hLWNoaWxkXG4gICAgcmV0dXJuIGNoaWxkcmVuID8gY2hpbGRyZW4oZmluYWxTdGF0ZSwgbWFrZVRhYmxlLCB0aGlzKSA6IG1ha2VUYWJsZSgpXG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/lib/index.styl b/lib/index.styl new file mode 100644 index 0000000000..c93a986680 --- /dev/null +++ b/lib/index.styl @@ -0,0 +1,322 @@ +$easeOutQuad = cubic-bezier(0.250, 0.460, 0.450, 0.940) +$easeOutBack = cubic-bezier(0.175, 0.885, 0.320, 1.275) +$expandSize = 7px + +input-select-style() + border: 1px solid rgba(0,0,0,0.1) + background: white + padding: 5px 7px + font-size: inherit + border-radius: 3px + font-weight: normal + outline-width: 0 + +.ReactTable + position:relative + display: flex + flex-direction: column + border: 1px solid alpha(black, .1) + * + box-sizing: border-box + .rt-table + flex: auto 1 + display: flex + flex-direction: column + align-items: stretch + width: 100% + border-collapse: collapse + overflow: auto + + .rt-thead + flex: 1 0 auto + display: flex + flex-direction: column + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + &.-headerGroups + background: alpha(black, .03) + border-bottom: 1px solid alpha(black, .05) + + &.-filters + border-bottom: 1px solid alpha(black, 0.05) + + input + select + input-select-style(); + + .rt-th + border-right: 1px solid alpha(black, 0.02) + + &.-header + box-shadow: 0 2px 15px 0px alpha(black, .15) + + .rt-tr + text-align:center + + .rt-th + .rt-td + padding: 5px 5px + line-height: normal + position: relative + border-right: 1px solid alpha(black, .05) + transition box-shadow .3s $easeOutBack + box-shadow:inset 0 0 0 0 transparent + &.-sort-asc + box-shadow:inset 0 3px 0 0 alpha(black, .6) + &.-sort-desc + box-shadow:inset 0 -3px 0 0 alpha(black, .6) + &.-cursor-pointer + cursor: pointer + &:last-child + border-right: 0 + + .rt-th:focus + outline-width: 0 + + .rt-resizable-header + overflow: visible + &:last-child + overflow: hidden + + .rt-resizable-header-content + overflow: hidden + text-overflow: ellipsis + + .rt-header-pivot + border-right-color: #f7f7f7 + + .rt-header-pivot:after, .rt-header-pivot:before + left: 100% + top: 50% + border: solid transparent + content: " " + height: 0 + width: 0 + position: absolute + pointer-events: none + + .rt-header-pivot:after + border-color: rgba(255, 255, 255, 0) + border-left-color: #FFF + border-width: 8px + margin-top: -8px + + .rt-header-pivot:before + border-color: rgba(102, 102, 102, 0) + border-left-color: #f7f7f7 + border-width: 10px + margin-top: -10px + + .rt-tbody + flex: 99999 1 auto + display: flex + flex-direction: column + overflow: auto + // z-index:0 + .rt-tr-group + border-bottom: solid 1px alpha(black, .05) + &:last-child + border-bottom: 0 + .rt-td + border-right:1px solid alpha(black, .02) + &:last-child + border-right:0 + .rt-expandable + cursor: pointer + text-overflow: clip + .rt-tr-group + flex: 1 0 auto + display: flex + flex-direction: column + align-items: stretch + .rt-tr + flex: 1 0 auto + display: inline-flex + .rt-th + .rt-td + flex: 1 0 0px + white-space: nowrap + text-overflow: ellipsis + padding: 7px 5px + overflow: hidden + transition: .3s ease + transition-property: width, min-width, padding, opacity + + &.-hidden + width: 0 !important + min-width: 0 !important + padding: 0 !important + border:0 !important + opacity: 0 !important + + .rt-expander + display: inline-block + position:relative + margin: 0 + color: transparent + margin: 0 10px + &:after + content: '' + position: absolute + width: 0 + height: 0 + top:50% + left:50% + transform: translate(-50%, -50%) rotate(-90deg) + border-left: ($expandSize * .72) solid transparent + border-right: ($expandSize * .72) solid transparent + border-top: $expandSize solid alpha(black, .8) + transition: all .3s $easeOutBack + cursor: pointer + &.-open:after + transform: translate(-50%, -50%) rotate(0deg) + + .rt-resizer + display: inline-block + position: absolute + width: 36px + top: 0 + bottom: 0 + right: -18px + cursor: col-resize + z-index: 10 + + .rt-tfoot + flex: 1 0 auto + display: flex + flex-direction: column + box-shadow: 0 0px 15px 0px alpha(black, .15) + + .rt-td + border-right:1px solid alpha(black, .05) + &:last-child + border-right:0 + + &.-striped + .rt-tr.-odd + background: alpha(black, .03) + &.-highlight + .rt-tbody + .rt-tr:not(.-padRow):hover + background: alpha(black, .05) + + .-pagination + z-index: 1 + display:flex + justify-content: space-between + align-items: stretch + flex-wrap: wrap + padding: 3px + box-shadow: 0 0px 15px 0px alpha(black, .1) + border-top: 2px solid alpha(black, .1) + + input + select + input-select-style() + + .-btn + appearance:none + display:block + width:100% + height:100% + border: 0 + border-radius: 3px + padding: 6px + font-size: 1em + color: alpha(black, .6) + background: alpha(black, .1) + transition: all .1s ease + cursor: pointer + outline-width: 0 + + &[disabled] + opacity: .5 + cursor: default + + &:not([disabled]):hover + background: alpha(black, .3) + color: white + + .-previous + .-next + flex: 1 + text-align: center + + .-center + flex: 1.5 + text-align:center + margin-bottom:0 + display: flex + flex-direction: row + flex-wrap: wrap + align-items: center + justify-content: space-around + + .-pageInfo + display: inline-block + margin: 3px 10px + white-space: nowrap + + .-pageJump + display:inline-block + input + width: 70px + text-align:center + + .-pageSizeOptions + margin: 3px 10px + + .rt-noData + display:block + position:absolute + left:50% + top:50% + transform: translate(-50%, -50%) + background: alpha(white, .8) + transition: all .3s ease + z-index: 1 + pointer-events: none + padding: 20px + color: alpha(black, .5) + + .-loading + display:block + position:absolute + left:0 + right:0 + top:0 + bottom:0 + background: alpha(white, .8) + transition: all .3s ease + z-index: -1 + opacity: 0 + pointer-events: none + + > div + position:absolute + display: block + text-align:center + width:100% + top:50% + left: 0 + font-size: 15px + color: alpha(black, .6) + transform: translateY(-52%) + transition: all .3s $easeOutQuad + + &.-active + opacity: 1 + z-index: 2 + pointer-events: all + > div + transform: translateY(50%) + + .rt-resizing + .rt-th + .rt-td + transition: none!important + cursor: col-resize + user-select none diff --git a/lib/lifecycle.js b/lib/lifecycle.js new file mode 100644 index 0000000000..38b2b4904d --- /dev/null +++ b/lib/lifecycle.js @@ -0,0 +1,150 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +exports.default = function (Base) { + return function (_Base) { + _inherits(_class, _Base); + + function _class(props) { + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).call(this, props)); + + var defaultState = { + page: props.defaultPage, + pageSize: props.defaultPageSize, + sorted: props.defaultSorted, + expanded: props.defaultExpanded, + filtered: props.defaultFiltered, + resized: props.defaultResized, + currentlyResizing: false, + skipNextSort: false + }; + var resolvedState = _this.getResolvedState(props, defaultState); + var dataModel = _this.getDataModel(resolvedState, true); + + _this.state = _this.calculateNewResolvedState(dataModel); + return _this; + } + + _createClass(_class, [{ + key: 'componentDidMount', + value: function componentDidMount() { + this.fireFetchData(); + } + }, { + key: 'componentDidUpdate', + value: function componentDidUpdate(prevProps, prevState) { + var oldState = this.getResolvedState(prevProps, prevState); + var newState = this.getResolvedState(this.props, this.state); + + // Do a deep compare of new and old `defaultOption` and + // if they are different reset `option = defaultOption` + var defaultableOptions = ['sorted', 'filtered', 'resized', 'expanded']; + defaultableOptions.forEach(function (x) { + var defaultName = 'default' + (x.charAt(0).toUpperCase() + x.slice(1)); + if (JSON.stringify(oldState[defaultName]) !== JSON.stringify(newState[defaultName])) { + newState[x] = newState[defaultName]; + } + }); + + // If they change these table options, we need to reset defaults + // or else we could get into a state where the user has changed the UI + // and then disabled the ability to change it back. + // e.g. If `filterable` has changed, set `filtered = defaultFiltered` + var resettableOptions = ['sortable', 'filterable', 'resizable']; + resettableOptions.forEach(function (x) { + if (oldState[x] !== newState[x]) { + var baseName = x.replace('able', ''); + var optionName = baseName + 'ed'; + var defaultName = 'default' + (optionName.charAt(0).toUpperCase() + optionName.slice(1)); + newState[optionName] = newState[defaultName]; + } + }); + + // Props that trigger a data update + if (oldState.data !== newState.data || oldState.columns !== newState.columns || oldState.pivotBy !== newState.pivotBy || oldState.sorted !== newState.sorted || oldState.filtered !== newState.filtered) { + this.setStateWithData(this.getDataModel(newState, oldState.data !== newState.data)); + } + } + }, { + key: 'calculateNewResolvedState', + value: function calculateNewResolvedState(dataModel) { + var oldState = this.getResolvedState(); + var newResolvedState = this.getResolvedState({}, dataModel); + var freezeWhenExpanded = newResolvedState.freezeWhenExpanded; + + // Default to unfrozen state + + newResolvedState.frozen = false; + + // If freezeWhenExpanded is set, check for frozen conditions + if (freezeWhenExpanded) { + // if any rows are expanded, freeze the existing data and sorting + var keys = Object.keys(newResolvedState.expanded); + for (var i = 0; i < keys.length; i += 1) { + if (newResolvedState.expanded[keys[i]]) { + newResolvedState.frozen = true; + break; + } + } + } + + // If the data isn't frozen and either the data or + // sorting model has changed, update the data + if (oldState.frozen && !newResolvedState.frozen || oldState.sorted !== newResolvedState.sorted || oldState.filtered !== newResolvedState.filtered || oldState.showFilters !== newResolvedState.showFilters || !newResolvedState.frozen && oldState.resolvedData !== newResolvedState.resolvedData) { + // Handle collapseOnsortedChange & collapseOnDataChange + if (oldState.sorted !== newResolvedState.sorted && this.props.collapseOnSortingChange || oldState.filtered !== newResolvedState.filtered || oldState.showFilters !== newResolvedState.showFilters || oldState.sortedData && !newResolvedState.frozen && oldState.resolvedData !== newResolvedState.resolvedData && this.props.collapseOnDataChange) { + newResolvedState.expanded = {}; + } + + Object.assign(newResolvedState, this.getSortedData(newResolvedState)); + } + + // Set page to 0 if filters change + if (oldState.filtered !== newResolvedState.filtered) { + newResolvedState.page = 0; + } + + // Calculate pageSize all the time + if (newResolvedState.sortedData) { + newResolvedState.pages = newResolvedState.manual ? newResolvedState.pages : Math.ceil(newResolvedState.sortedData.length / newResolvedState.pageSize); + newResolvedState.page = newResolvedState.manual ? newResolvedState.page : Math.max(newResolvedState.page >= newResolvedState.pages ? newResolvedState.pages - 1 : newResolvedState.page, 0); + } + + return newResolvedState; + } + }, { + key: 'setStateWithData', + value: function setStateWithData(dataModel, cb) { + var _this2 = this; + + var oldState = this.getResolvedState(); + var newResolvedState = this.calculateNewResolvedState(dataModel); + + return this.setState(newResolvedState, function () { + if (cb) { + cb(); + } + if (oldState.page !== newResolvedState.page || oldState.pageSize !== newResolvedState.pageSize || oldState.sorted !== newResolvedState.sorted || oldState.filtered !== newResolvedState.filtered) { + _this2.fireFetchData(); + } + }); + } + }]); + + return _class; + }(Base); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWZlY3ljbGUuanMiXSwibmFtZXMiOlsicHJvcHMiLCJkZWZhdWx0U3RhdGUiLCJwYWdlIiwiZGVmYXVsdFBhZ2UiLCJwYWdlU2l6ZSIsImRlZmF1bHRQYWdlU2l6ZSIsInNvcnRlZCIsImRlZmF1bHRTb3J0ZWQiLCJleHBhbmRlZCIsImRlZmF1bHRFeHBhbmRlZCIsImZpbHRlcmVkIiwiZGVmYXVsdEZpbHRlcmVkIiwicmVzaXplZCIsImRlZmF1bHRSZXNpemVkIiwiY3VycmVudGx5UmVzaXppbmciLCJza2lwTmV4dFNvcnQiLCJyZXNvbHZlZFN0YXRlIiwiZ2V0UmVzb2x2ZWRTdGF0ZSIsImRhdGFNb2RlbCIsImdldERhdGFNb2RlbCIsInN0YXRlIiwiY2FsY3VsYXRlTmV3UmVzb2x2ZWRTdGF0ZSIsImZpcmVGZXRjaERhdGEiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJvbGRTdGF0ZSIsIm5ld1N0YXRlIiwiZGVmYXVsdGFibGVPcHRpb25zIiwiZm9yRWFjaCIsImRlZmF1bHROYW1lIiwieCIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzZXR0YWJsZU9wdGlvbnMiLCJiYXNlTmFtZSIsInJlcGxhY2UiLCJvcHRpb25OYW1lIiwiZGF0YSIsImNvbHVtbnMiLCJwaXZvdEJ5Iiwic2V0U3RhdGVXaXRoRGF0YSIsIm5ld1Jlc29sdmVkU3RhdGUiLCJmcmVlemVXaGVuRXhwYW5kZWQiLCJmcm96ZW4iLCJrZXlzIiwiT2JqZWN0IiwiaSIsImxlbmd0aCIsInNob3dGaWx0ZXJzIiwicmVzb2x2ZWREYXRhIiwiY29sbGFwc2VPblNvcnRpbmdDaGFuZ2UiLCJzb3J0ZWREYXRhIiwiY29sbGFwc2VPbkRhdGFDaGFuZ2UiLCJhc3NpZ24iLCJnZXRTb3J0ZWREYXRhIiwicGFnZXMiLCJtYW51YWwiLCJNYXRoIiwiY2VpbCIsIm1heCIsImNiIiwic2V0U3RhdGUiLCJCYXNlIl0sIm1hcHBpbmdzIjoi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QUFMLENBQWNwQixnQkFBZCxFQUFnQyxZQUFNO0FBQzNDLGNBQUltQixFQUFKLEVBQVE7QUFDTkE7QUFDRDtBQUNELGNBQ0V0QyxTQUFTdkIsSUFBVCxLQUFrQjBDLGlCQUFpQjFDLElBQW5DLElBQ0F1QixTQUFTckIsUUFBVCxLQUFzQndDLGlCQUFpQnhDLFFBRHZDLElBRUFxQixTQUFTbkIsTUFBVCxLQUFvQnNDLGlCQUFpQnRDLE1BRnJDLElBR0FtQixTQUFTZixRQUFULEtBQXNCa0MsaUJBQWlCbEMsUUFKekMsRUFLRTtBQUNBLG1CQUFLWSxhQUFMO0FBQ0Q7QUFDRixTQVpNLENBQVA7QUFhRDtBQXBKVTs7QUFBQTtBQUFBLElBQ0MyQyxJQUREO0FBQUEsQyIsImZpbGUiOiJsaWZlY3ljbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBCYXNlID0+XG4gIGNsYXNzIGV4dGVuZHMgQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcylcblxuICAgICAgY29uc3QgZGVmYXVsdFN0YXRlID0ge1xuICAgICAgICBwYWdlOiBwcm9wcy5kZWZhdWx0UGFnZSxcbiAgICAgICAgcGFnZVNpemU6IHByb3BzLmRlZmF1bHRQYWdlU2l6ZSxcbiAgICAgICAgc29ydGVkOiBwcm9wcy5kZWZhdWx0U29ydGVkLFxuICAgICAgICBleHBhbmRlZDogcHJvcHMuZGVmYXVsdEV4cGFuZGVkLFxuICAgICAgICBmaWx0ZXJlZDogcHJvcHMuZGVmYXVsdEZpbHRlcmVkLFxuICAgICAgICByZXNpemVkOiBwcm9wcy5kZWZhdWx0UmVzaXplZCxcbiAgICAgICAgY3VycmVudGx5UmVzaXppbmc6IGZhbHNlLFxuICAgICAgICBza2lwTmV4dFNvcnQ6IGZhbHNlLFxuICAgICAgfVxuICAgICAgY29uc3QgcmVzb2x2ZWRTdGF0ZSA9IHRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZShwcm9wcywgZGVmYXVsdFN0YXRlKVxuICAgICAgY29uc3QgZGF0YU1vZGVsID0gdGhpcy5nZXREYXRhTW9kZWwocmVzb2x2ZWRTdGF0ZSwgdHJ1ZSlcblxuICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuY2FsY3VsYXRlTmV3UmVzb2x2ZWRTdGF0ZShkYXRhTW9kZWwpXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQgKCkge1xuICAgICAgdGhpcy5maXJlRmV0Y2hEYXRhKClcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUgKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBjb25zdCBvbGRTdGF0ZSA9IHRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSlcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gdGhpcy5nZXRSZXNvbHZlZFN0YXRlKHRoaXMucHJvcHMsIHRoaXMuc3RhdGUpXG5cbiAgICAgIC8vIERvIGEgZGVlcCBjb21wYXJlIG9mIG5ldyBhbmQgb2xkIGBkZWZhdWx0T3B0aW9uYCBhbmRcbiAgICAgIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCByZXNldCBgb3B0aW9uID0gZGVmYXVsdE9wdGlvbmBcbiAgICAgIGNvbnN0IGRlZmF1bHRhYmxlT3B0aW9ucyA9IFsnc29ydGVkJywgJ2ZpbHRlcmVkJywgJ3Jlc2l6ZWQnLCAnZXhwYW5kZWQnXVxuICAgICAgZGVmYXVsdGFibGVPcHRpb25zLmZvckVhY2goeCA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHROYW1lID0gYGRlZmF1bHQke3guY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB4LnNsaWNlKDEpfWBcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KG9sZFN0YXRlW2RlZmF1bHROYW1lXSkgIT09IEpTT04uc3RyaW5naWZ5KG5ld1N0YXRlW2RlZmF1bHROYW1lXSkpIHtcbiAgICAgICAgICBuZXdTdGF0ZVt4XSA9IG5ld1N0YXRlW2RlZmF1bHROYW1lXVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBJZiB0aGV5IGNoYW5nZSB0aGVzZSB0YWJsZSBvcHRpb25zLCB3ZSBuZWVkIHRvIHJlc2V0IGRlZmF1bHRzXG4gICAgICAvLyBvciBlbHNlIHdlIGNvdWxkIGdldCBpbnRvIGEgc3RhdGUgd2hlcmUgdGhlIHVzZXIgaGFzIGNoYW5nZWQgdGhlIFVJXG4gICAgICAvLyBhbmQgdGhlbiBkaXNhYmxlZCB0aGUgYWJpbGl0eSB0byBjaGFuZ2UgaXQgYmFjay5cbiAgICAgIC8vIGUuZy4gSWYgYGZpbHRlcmFibGVgIGhhcyBjaGFuZ2VkLCBzZXQgYGZpbHRlcmVkID0gZGVmYXVsdEZpbHRlcmVkYFxuICAgICAgY29uc3QgcmVzZXR0YWJsZU9wdGlvbnMgPSBbJ3NvcnRhYmxlJywgJ2ZpbHRlcmFibGUnLCAncmVzaXphYmxlJ11cbiAgICAgIHJlc2V0dGFibGVPcHRpb25zLmZvckVhY2goeCA9PiB7XG4gICAgICAgIGlmIChvbGRTdGF0ZVt4XSAhPT0gbmV3U3RhdGVbeF0pIHtcbiAgICAgICAgICBjb25zdCBiYXNlTmFtZSA9IHgucmVwbGFjZSgnYWJsZScsICcnKVxuICAgICAgICAgIGNvbnN0IG9wdGlvbk5hbWUgPSBgJHtiYXNlTmFtZX1lZGBcbiAgICAgICAgICBjb25zdCBkZWZhdWx0TmFtZSA9IGBkZWZhdWx0JHtvcHRpb25OYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgb3B0aW9uTmFtZS5zbGljZSgxKX1gXG4gICAgICAgICAgbmV3U3RhdGVbb3B0aW9uTmFtZV0gPSBuZXdTdGF0ZVtkZWZhdWx0TmFtZV1cbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8gUHJvcHMgdGhhdCB0cmlnZ2VyIGEgZGF0YSB1cGRhdGVcbiAgICAgIGlmIChcbiAgICAgICAgb2xkU3RhdGUuZGF0YSAhPT0gbmV3U3RhdGUuZGF0YSB8fFxuICAgICAgICBvbGRTdGF0ZS5jb2x1bW5zICE9PSBuZXdTdGF0ZS5jb2x1bW5zIHx8XG4gICAgICAgIG9sZFN0YXRlLnBpdm90QnkgIT09IG5ld1N0YXRlLnBpdm90QnkgfHxcbiAgICAgICAgb2xkU3RhdGUuc29ydGVkICE9PSBuZXdTdGF0ZS5zb3J0ZWQgfHxcbiAgICAgICAgb2xkU3RhdGUuZmlsdGVyZWQgIT09IG5ld1N0YXRlLmZpbHRlcmVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZVdpdGhEYXRhKHRoaXMuZ2V0RGF0YU1vZGVsKG5ld1N0YXRlLCBvbGRTdGF0ZS5kYXRhICE9PSBuZXdTdGF0ZS5kYXRhKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxjdWxhdGVOZXdSZXNvbHZlZFN0YXRlIChkYXRhTW9kZWwpIHtcbiAgICAgIGNvbnN0IG9sZFN0YXRlID0gdGhpcy5nZXRSZXNvbHZlZFN0YXRlKClcbiAgICAgIGNvbnN0IG5ld1Jlc29sdmVkU3RhdGUgPSB0aGlzLmdldFJlc29sdmVkU3RhdGUoe30sIGRhdGFNb2RlbClcbiAgICAgIGNvbnN0IHsgZnJlZXplV2hlbkV4cGFuZGVkIH0gPSBuZXdSZXNvbHZlZFN0YXRlXG5cbiAgICAgIC8vIERlZmF1bHQgdG8gdW5mcm96ZW4gc3RhdGVcbiAgICAgIG5ld1Jlc29sdmVkU3RhdGUuZnJvemVuID0gZmFsc2VcblxuICAgICAgLy8gSWYgZnJlZXplV2hlbkV4cGFuZGVkIGlzIHNldCwgY2hlY2sgZm9yIGZyb3plbiBjb25kaXRpb25zXG4gICAgICBpZiAoZnJlZXplV2hlbkV4cGFuZGVkKSB7XG4gICAgICAgIC8vIGlmIGFueSByb3dzIGFyZSBleHBhbmRlZCwgZnJlZXplIHRoZSBleGlzdGluZyBkYXRhIGFuZCBzb3J0aW5nXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhuZXdSZXNvbHZlZFN0YXRlLmV4cGFuZGVkKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICBpZiAobmV3UmVzb2x2ZWRTdGF0ZS5leHBhbmRlZFtrZXlzW2ldXSkge1xuICAgICAgICAgICAgbmV3UmVzb2x2ZWRTdGF0ZS5mcm96ZW4gPSB0cnVlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZGF0YSBpc24ndCBmcm96ZW4gYW5kIGVpdGhlciB0aGUgZGF0YSBvclxuICAgICAgLy8gc29ydGluZyBtb2RlbCBoYXMgY2hhbmdlZCwgdXBkYXRlIHRoZSBkYXRhXG4gICAgICBpZiAoXG4gICAgICAgIChvbGRTdGF0ZS5mcm96ZW4gJiYgIW5ld1Jlc29sdmVkU3RhdGUuZnJvemVuKSB8fFxuICAgICAgICBvbGRTdGF0ZS5zb3J0ZWQgIT09IG5ld1Jlc29sdmVkU3RhdGUuc29ydGVkIHx8XG4gICAgICAgIG9sZFN0YXRlLmZpbHRlcmVkICE9PSBuZXdSZXNvbHZlZFN0YXRlLmZpbHRlcmVkIHx8XG4gICAgICAgIG9sZFN0YXRlLnNob3dGaWx0ZXJzICE9PSBuZXdSZXNvbHZlZFN0YXRlLnNob3dGaWx0ZXJzIHx8XG4gICAgICAgICghbmV3UmVzb2x2ZWRTdGF0ZS5mcm96ZW4gJiYgb2xkU3RhdGUucmVzb2x2ZWREYXRhICE9PSBuZXdSZXNvbHZlZFN0YXRlLnJlc29sdmVkRGF0YSlcbiAgICAgICkge1xuICAgICAgICAvLyBIYW5kbGUgY29sbGFwc2VPbnNvcnRlZENoYW5nZSAmIGNvbGxhcHNlT25EYXRhQ2hhbmdlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAob2xkU3RhdGUuc29ydGVkICE9PSBuZXdSZXNvbHZlZFN0YXRlLnNvcnRlZCAmJiB0aGlzLnByb3BzLmNvbGxhcHNlT25Tb3J0aW5nQ2hhbmdlKSB8fFxuICAgICAgICAgIG9sZFN0YXRlLmZpbHRlcmVkICE9PSBuZXdSZXNvbHZlZFN0YXRlLmZpbHRlcmVkIHx8XG4gICAgICAgICAgb2xkU3RhdGUuc2hvd0ZpbHRlcnMgIT09IG5ld1Jlc29sdmVkU3RhdGUuc2hvd0ZpbHRlcnMgfHxcbiAgICAgICAgICAob2xkU3RhdGUuc29ydGVkRGF0YSAmJlxuICAgICAgICAgICAgIW5ld1Jlc29sdmVkU3RhdGUuZnJvemVuICYmXG4gICAgICAgICAgICBvbGRTdGF0ZS5yZXNvbHZlZERhdGEgIT09IG5ld1Jlc29sdmVkU3RhdGUucmVzb2x2ZWREYXRhICYmXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNvbGxhcHNlT25EYXRhQ2hhbmdlKVxuICAgICAgICApIHtcbiAgICAgICAgICBuZXdSZXNvbHZlZFN0YXRlLmV4cGFuZGVkID0ge31cbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5hc3NpZ24obmV3UmVzb2x2ZWRTdGF0ZSwgdGhpcy5nZXRTb3J0ZWREYXRhKG5ld1Jlc29sdmVkU3RhdGUpKVxuICAgICAgfVxuXG4gICAgICAvLyBTZXQgcGFnZSB0byAwIGlmIGZpbHRlcnMgY2hhbmdlXG4gICAgICBpZiAob2xkU3RhdGUuZmlsdGVyZWQgIT09IG5ld1Jlc29sdmVkU3RhdGUuZmlsdGVyZWQpIHtcbiAgICAgICAgbmV3UmVzb2x2ZWRTdGF0ZS5wYWdlID0gMFxuICAgICAgfVxuXG4gICAgICAvLyBDYWxjdWxhdGUgcGFnZVNpemUgYWxsIHRoZSB0aW1lXG4gICAgICBpZiAobmV3UmVzb2x2ZWRTdGF0ZS5zb3J0ZWREYXRhKSB7XG4gICAgICAgIG5ld1Jlc29sdmVkU3RhdGUucGFnZXMgPSBuZXdSZXNvbHZlZFN0YXRlLm1hbnVhbFxuICAgICAgICAgID8gbmV3UmVzb2x2ZWRTdGF0ZS5wYWdlc1xuICAgICAgICAgIDogTWF0aC5jZWlsKG5ld1Jlc29sdmVkU3RhdGUuc29ydGVkRGF0YS5sZW5ndGggLyBuZXdSZXNvbHZlZFN0YXRlLnBhZ2VTaXplKVxuICAgICAgICBuZXdSZXNvbHZlZFN0YXRlLnBhZ2UgPSBuZXdSZXNvbHZlZFN0YXRlLm1hbnVhbCA/IG5ld1Jlc29sdmVkU3RhdGUucGFnZSA6IE1hdGgubWF4KFxuICAgICAgICAgIG5ld1Jlc29sdmVkU3RhdGUucGFnZSA+PSBuZXdSZXNvbHZlZFN0YXRlLnBhZ2VzXG4gICAgICAgICAgICA/IG5ld1Jlc29sdmVkU3RhdGUucGFnZXMgLSAxXG4gICAgICAgICAgICA6IG5ld1Jlc29sdmVkU3RhdGUucGFnZSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ld1Jlc29sdmVkU3RhdGVcbiAgICB9XG5cbiAgICBzZXRTdGF0ZVdpdGhEYXRhIChkYXRhTW9kZWwsIGNiKSB7XG4gICAgICBjb25zdCBvbGRTdGF0ZSA9IHRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZSgpXG4gICAgICBjb25zdCBuZXdSZXNvbHZlZFN0YXRlID0gdGhpcy5jYWxjdWxhdGVOZXdSZXNvbHZlZFN0YXRlKGRhdGFNb2RlbClcblxuICAgICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUobmV3UmVzb2x2ZWRTdGF0ZSwgKCkgPT4ge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICBjYigpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9sZFN0YXRlLnBhZ2UgIT09IG5ld1Jlc29sdmVkU3RhdGUucGFnZSB8fFxuICAgICAgICAgIG9sZFN0YXRlLnBhZ2VTaXplICE9PSBuZXdSZXNvbHZlZFN0YXRlLnBhZ2VTaXplIHx8XG4gICAgICAgICAgb2xkU3RhdGUuc29ydGVkICE9PSBuZXdSZXNvbHZlZFN0YXRlLnNvcnRlZCB8fFxuICAgICAgICAgIG9sZFN0YXRlLmZpbHRlcmVkICE9PSBuZXdSZXNvbHZlZFN0YXRlLmZpbHRlcmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZmlyZUZldGNoRGF0YSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG4iXX0= \ No newline at end of file diff --git a/lib/methods.js b/lib/methods.js new file mode 100644 index 0000000000..1f7e91ecfa --- /dev/null +++ b/lib/methods.js @@ -0,0 +1,762 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +var _utils = require('./utils'); + +var _utils2 = _interopRequireDefault(_utils); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +exports.default = function (Base) { + return function (_Base) { + _inherits(_class, _Base); + + function _class() { + _classCallCheck(this, _class); + + return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments)); + } + + _createClass(_class, [{ + key: 'getResolvedState', + value: function getResolvedState(props, state) { + var resolvedState = _extends({}, _utils2.default.compactObject(this.state), _utils2.default.compactObject(this.props), _utils2.default.compactObject(state), _utils2.default.compactObject(props)); + return resolvedState; + } + }, { + key: 'getDataModel', + value: function getDataModel(newState, dataChanged) { + var _this2 = this; + + var columns = newState.columns, + _newState$pivotBy = newState.pivotBy, + pivotBy = _newState$pivotBy === undefined ? [] : _newState$pivotBy, + data = newState.data, + resolveData = newState.resolveData, + pivotIDKey = newState.pivotIDKey, + pivotValKey = newState.pivotValKey, + subRowsKey = newState.subRowsKey, + aggregatedKey = newState.aggregatedKey, + nestingLevelKey = newState.nestingLevelKey, + originalKey = newState.originalKey, + indexKey = newState.indexKey, + groupedByPivotKey = newState.groupedByPivotKey, + SubComponent = newState.SubComponent; + + // Determine Header Groups + + var hasHeaderGroups = false; + columns.forEach(function (column) { + if (column.columns) { + hasHeaderGroups = true; + } + }); + + var columnsWithExpander = [].concat(_toConsumableArray(columns)); + + var expanderColumn = columns.find(function (col) { + return col.expander || col.columns && col.columns.some(function (col2) { + return col2.expander; + }); + }); + // The actual expander might be in the columns field of a group column + if (expanderColumn && !expanderColumn.expander) { + expanderColumn = expanderColumn.columns.find(function (col) { + return col.expander; + }); + } + + // If we have SubComponent's we need to make sure we have an expander column + if (SubComponent && !expanderColumn) { + expanderColumn = { expander: true }; + columnsWithExpander = [expanderColumn].concat(_toConsumableArray(columnsWithExpander)); + } + + var makeDecoratedColumn = function makeDecoratedColumn(column, parentColumn) { + var dcol = void 0; + if (column.expander) { + dcol = _extends({}, _this2.props.column, _this2.props.expanderDefaults, column); + } else { + dcol = _extends({}, _this2.props.column, column); + } + + // Ensure minWidth is not greater than maxWidth if set + if (dcol.maxWidth < dcol.minWidth) { + dcol.minWidth = dcol.maxWidth; + } + + if (parentColumn) { + dcol.parentColumn = parentColumn; + } + + // First check for string accessor + if (typeof dcol.accessor === 'string') { + dcol.id = dcol.id || dcol.accessor; + var accessorString = dcol.accessor; + dcol.accessor = function (row) { + return _utils2.default.get(row, accessorString); + }; + return dcol; + } + + // Fall back to functional accessor (but require an ID) + if (dcol.accessor && !dcol.id) { + console.warn(dcol); + throw new Error('A column id is required if using a non-string accessor for column above.'); + } + + // Fall back to an undefined accessor + if (!dcol.accessor) { + dcol.accessor = function () { + return undefined; + }; + } + + return dcol; + }; + + var allDecoratedColumns = []; + + // Decorate the columns + var decorateAndAddToAll = function decorateAndAddToAll(column, parentColumn) { + var decoratedColumn = makeDecoratedColumn(column, parentColumn); + allDecoratedColumns.push(decoratedColumn); + return decoratedColumn; + }; + + var decoratedColumns = columnsWithExpander.map(function (column) { + if (column.columns) { + return _extends({}, column, { + columns: column.columns.map(function (d) { + return decorateAndAddToAll(d, column); + }) + }); + } + return decorateAndAddToAll(column); + }); + + // Build the visible columns, headers and flat column list + var visibleColumns = decoratedColumns.slice(); + var allVisibleColumns = []; + + visibleColumns = visibleColumns.map(function (column) { + if (column.columns) { + var visibleSubColumns = column.columns.filter(function (d) { + return pivotBy.indexOf(d.id) > -1 ? false : _utils2.default.getFirstDefined(d.show, true); + }); + return _extends({}, column, { + columns: visibleSubColumns + }); + } + return column; + }); + + visibleColumns = visibleColumns.filter(function (column) { + return column.columns ? column.columns.length : pivotBy.indexOf(column.id) > -1 ? false : _utils2.default.getFirstDefined(column.show, true); + }); + + // Find any custom pivot location + var pivotIndex = visibleColumns.findIndex(function (col) { + return col.pivot; + }); + + // Handle Pivot Columns + if (pivotBy.length) { + // Retrieve the pivot columns in the correct pivot order + var pivotColumns = []; + pivotBy.forEach(function (pivotID) { + var found = allDecoratedColumns.find(function (d) { + return d.id === pivotID; + }); + if (found) { + pivotColumns.push(found); + } + }); + + var PivotParentColumn = pivotColumns.reduce(function (prev, current) { + return prev && prev === current.parentColumn && current.parentColumn; + }, pivotColumns[0].parentColumn); + + var PivotGroupHeader = hasHeaderGroups && PivotParentColumn.Header; + PivotGroupHeader = PivotGroupHeader || function () { + return _react2.default.createElement( + 'strong', + null, + 'Pivoted' + ); + }; + + var pivotColumnGroup = { + Header: PivotGroupHeader, + columns: pivotColumns.map(function (col) { + return _extends({}, _this2.props.pivotDefaults, col, { + pivoted: true + }); + }) + + // Place the pivotColumns back into the visibleColumns + };if (pivotIndex >= 0) { + pivotColumnGroup = _extends({}, visibleColumns[pivotIndex], pivotColumnGroup); + visibleColumns.splice(pivotIndex, 1, pivotColumnGroup); + } else { + visibleColumns.unshift(pivotColumnGroup); + } + } + + // Build Header Groups + var headerGroups = []; + var currentSpan = []; + + // A convenience function to add a header and reset the currentSpan + var addHeader = function addHeader(columns, column) { + headerGroups.push(_extends({}, _this2.props.column, column, { + columns: columns + })); + currentSpan = []; + }; + + // Build flast list of allVisibleColumns and HeaderGroups + visibleColumns.forEach(function (column) { + if (column.columns) { + allVisibleColumns = allVisibleColumns.concat(column.columns); + if (currentSpan.length > 0) { + addHeader(currentSpan); + } + addHeader(column.columns, column); + return; + } + allVisibleColumns.push(column); + currentSpan.push(column); + }); + if (hasHeaderGroups && currentSpan.length > 0) { + addHeader(currentSpan); + } + + // Access the data + var accessRow = function accessRow(d, i) { + var _row; + + var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + var row = (_row = {}, _defineProperty(_row, originalKey, d), _defineProperty(_row, indexKey, i), _defineProperty(_row, subRowsKey, d[subRowsKey]), _defineProperty(_row, nestingLevelKey, level), _row); + allDecoratedColumns.forEach(function (column) { + if (column.expander) return; + row[column.id] = column.accessor(d); + }); + if (row[subRowsKey]) { + row[subRowsKey] = row[subRowsKey].map(function (d, i) { + return accessRow(d, i, level + 1); + }); + } + return row; + }; + + // // If the data hasn't changed, just use the cached data + var resolvedData = this.resolvedData; + // If the data has changed, run the data resolver and cache the result + if (!this.resolvedData || dataChanged) { + resolvedData = resolveData(data); + this.resolvedData = resolvedData; + } + // Use the resolved data + resolvedData = resolvedData.map(function (d, i) { + return accessRow(d, i); + }); + + // TODO: Make it possible to fabricate nested rows without pivoting + var aggregatingColumns = allVisibleColumns.filter(function (d) { + return !d.expander && d.aggregate; + }); + + // If pivoting, recursively group the data + var aggregate = function aggregate(rows) { + var aggregationValues = {}; + aggregatingColumns.forEach(function (column) { + var values = rows.map(function (d) { + return d[column.id]; + }); + aggregationValues[column.id] = column.aggregate(values, rows); + }); + return aggregationValues; + }; + if (pivotBy.length) { + var groupRecursively = function groupRecursively(rows, keys) { + var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + // This is the last level, just return the rows + if (i === keys.length) { + return rows; + } + // Group the rows together for this level + var groupedRows = Object.entries(_utils2.default.groupBy(rows, keys[i])).map(function (_ref) { + var _ref3; + + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + + return _ref3 = {}, _defineProperty(_ref3, pivotIDKey, keys[i]), _defineProperty(_ref3, pivotValKey, key), _defineProperty(_ref3, keys[i], key), _defineProperty(_ref3, subRowsKey, value), _defineProperty(_ref3, nestingLevelKey, i), _defineProperty(_ref3, groupedByPivotKey, true), _ref3; + }); + // Recurse into the subRows + groupedRows = groupedRows.map(function (rowGroup) { + var _extends2; + + var subRows = groupRecursively(rowGroup[subRowsKey], keys, i + 1); + return _extends({}, rowGroup, (_extends2 = {}, _defineProperty(_extends2, subRowsKey, subRows), _defineProperty(_extends2, aggregatedKey, true), _extends2), aggregate(subRows)); + }); + return groupedRows; + }; + resolvedData = groupRecursively(resolvedData, pivotBy); + } + + return _extends({}, newState, { + resolvedData: resolvedData, + allVisibleColumns: allVisibleColumns, + headerGroups: headerGroups, + allDecoratedColumns: allDecoratedColumns, + hasHeaderGroups: hasHeaderGroups + }); + } + }, { + key: 'getSortedData', + value: function getSortedData(resolvedState) { + var manual = resolvedState.manual, + sorted = resolvedState.sorted, + filtered = resolvedState.filtered, + defaultFilterMethod = resolvedState.defaultFilterMethod, + resolvedData = resolvedState.resolvedData, + allDecoratedColumns = resolvedState.allDecoratedColumns; + + + var sortMethodsByColumnID = {}; + + allDecoratedColumns.filter(function (col) { + return col.sortMethod; + }).forEach(function (col) { + sortMethodsByColumnID[col.id] = col.sortMethod; + }); + + // Resolve the data from either manual data or sorted data + return { + sortedData: manual ? resolvedData : this.sortData(this.filterData(resolvedData, filtered, defaultFilterMethod, allDecoratedColumns), sorted, sortMethodsByColumnID) + }; + } + }, { + key: 'fireFetchData', + value: function fireFetchData() { + // determine the current state, preferring certain state values over props + var currentState = _extends({}, this.getResolvedState(), { + page: this.getStateOrProp('page'), + pageSize: this.getStateOrProp('pageSize'), + filtered: this.getStateOrProp('filtered') + }); + + this.props.onFetchData(currentState, this); + } + }, { + key: 'getPropOrState', + value: function getPropOrState(key) { + return _utils2.default.getFirstDefined(this.props[key], this.state[key]); + } + }, { + key: 'getStateOrProp', + value: function getStateOrProp(key) { + return _utils2.default.getFirstDefined(this.state[key], this.props[key]); + } + }, { + key: 'filterData', + value: function filterData(data, filtered, defaultFilterMethod, allVisibleColumns) { + var _this3 = this; + + var filteredData = data; + + if (filtered.length) { + filteredData = filtered.reduce(function (filteredSoFar, nextFilter) { + var column = allVisibleColumns.find(function (x) { + return x.id === nextFilter.id; + }); + + // Don't filter hidden columns or columns that have had their filters disabled + if (!column || column.filterable === false) { + return filteredSoFar; + } + + var filterMethod = column.filterMethod || defaultFilterMethod; + + // If 'filterAll' is set to true, pass the entire dataset to the filter method + if (column.filterAll) { + return filterMethod(nextFilter, filteredSoFar, column); + } + return filteredSoFar.filter(function (row) { + return filterMethod(nextFilter, row, column); + }); + }, filteredData); + + // Apply the filter to the subrows if we are pivoting, and then + // filter any rows without subcolumns because it would be strange to show + filteredData = filteredData.map(function (row) { + if (!row[_this3.props.subRowsKey]) { + return row; + } + return _extends({}, row, _defineProperty({}, _this3.props.subRowsKey, _this3.filterData(row[_this3.props.subRowsKey], filtered, defaultFilterMethod, allVisibleColumns))); + }).filter(function (row) { + if (!row[_this3.props.subRowsKey]) { + return true; + } + return row[_this3.props.subRowsKey].length > 0; + }); + } + + return filteredData; + } + }, { + key: 'sortData', + value: function sortData(data, sorted) { + var _this4 = this; + + var sortMethodsByColumnID = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (!sorted.length) { + return data; + } + + var sortedData = (this.props.orderByMethod || _utils2.default.orderBy)(data, sorted.map(function (sort) { + // Support custom sorting methods for each column + if (sortMethodsByColumnID[sort.id]) { + return function (a, b) { + return sortMethodsByColumnID[sort.id](a[sort.id], b[sort.id], sort.desc); + }; + } + return function (a, b) { + return _this4.props.defaultSortMethod(a[sort.id], b[sort.id], sort.desc); + }; + }), sorted.map(function (d) { + return !d.desc; + }), this.props.indexKey); + + sortedData.forEach(function (row) { + if (!row[_this4.props.subRowsKey]) { + return; + } + row[_this4.props.subRowsKey] = _this4.sortData(row[_this4.props.subRowsKey], sorted, sortMethodsByColumnID); + }); + + return sortedData; + } + }, { + key: 'getMinRows', + value: function getMinRows() { + return _utils2.default.getFirstDefined(this.props.minRows, this.getStateOrProp('pageSize')); + } + + // User actions + + }, { + key: 'onPageChange', + value: function onPageChange(page) { + var _props = this.props, + onPageChange = _props.onPageChange, + collapseOnPageChange = _props.collapseOnPageChange; + + + var newState = { page: page }; + if (collapseOnPageChange) { + newState.expanded = {}; + } + this.setStateWithData(newState, function () { + return onPageChange && onPageChange(page); + }); + } + }, { + key: 'onPageSizeChange', + value: function onPageSizeChange(newPageSize) { + var onPageSizeChange = this.props.onPageSizeChange; + + var _getResolvedState = this.getResolvedState(), + pageSize = _getResolvedState.pageSize, + page = _getResolvedState.page; + + // Normalize the page to display + + + var currentRow = pageSize * page; + var newPage = Math.floor(currentRow / newPageSize); + + this.setStateWithData({ + pageSize: newPageSize, + page: newPage + }, function () { + return onPageSizeChange && onPageSizeChange(newPageSize, newPage); + }); + } + }, { + key: 'sortColumn', + value: function sortColumn(column, additive) { + var _getResolvedState2 = this.getResolvedState(), + sorted = _getResolvedState2.sorted, + skipNextSort = _getResolvedState2.skipNextSort, + defaultSortDesc = _getResolvedState2.defaultSortDesc; + + var firstSortDirection = Object.prototype.hasOwnProperty.call(column, 'defaultSortDesc') ? column.defaultSortDesc : defaultSortDesc; + var secondSortDirection = !firstSortDirection; + + // we can't stop event propagation from the column resize move handlers + // attached to the document because of react's synthetic events + // so we have to prevent the sort function from actually sorting + // if we click on the column resize element within a header. + if (skipNextSort) { + this.setStateWithData({ + skipNextSort: false + }); + return; + } + + var onSortedChange = this.props.onSortedChange; + + + var newSorted = _utils2.default.clone(sorted || []).map(function (d) { + d.desc = _utils2.default.isSortingDesc(d); + return d; + }); + if (!_utils2.default.isArray(column)) { + // Single-Sort + var existingIndex = newSorted.findIndex(function (d) { + return d.id === column.id; + }); + if (existingIndex > -1) { + var existing = newSorted[existingIndex]; + if (existing.desc === secondSortDirection) { + if (additive) { + newSorted.splice(existingIndex, 1); + } else { + existing.desc = firstSortDirection; + newSorted = [existing]; + } + } else { + existing.desc = secondSortDirection; + if (!additive) { + newSorted = [existing]; + } + } + } else if (additive) { + newSorted.push({ + id: column.id, + desc: firstSortDirection + }); + } else { + newSorted = [{ + id: column.id, + desc: firstSortDirection + }]; + } + } else { + // Multi-Sort + var _existingIndex = newSorted.findIndex(function (d) { + return d.id === column[0].id; + }); + // Existing Sorted Column + if (_existingIndex > -1) { + var _existing = newSorted[_existingIndex]; + if (_existing.desc === secondSortDirection) { + if (additive) { + newSorted.splice(_existingIndex, column.length); + } else { + column.forEach(function (d, i) { + newSorted[_existingIndex + i].desc = firstSortDirection; + }); + } + } else { + column.forEach(function (d, i) { + newSorted[_existingIndex + i].desc = secondSortDirection; + }); + } + if (!additive) { + newSorted = newSorted.slice(_existingIndex, column.length); + } + // New Sort Column + } else if (additive) { + newSorted = newSorted.concat(column.map(function (d) { + return { + id: d.id, + desc: firstSortDirection + }; + })); + } else { + newSorted = column.map(function (d) { + return { + id: d.id, + desc: firstSortDirection + }; + }); + } + } + + this.setStateWithData({ + page: !sorted.length && newSorted.length || !additive ? 0 : this.state.page, + sorted: newSorted + }, function () { + return onSortedChange && onSortedChange(newSorted, column, additive); + }); + } + }, { + key: 'filterColumn', + value: function filterColumn(column, value) { + var _getResolvedState3 = this.getResolvedState(), + filtered = _getResolvedState3.filtered; + + var onFilteredChange = this.props.onFilteredChange; + + // Remove old filter first if it exists + + var newFiltering = (filtered || []).filter(function (x) { + return x.id !== column.id; + }); + + if (value !== '') { + newFiltering.push({ + id: column.id, + value: value + }); + } + + this.setStateWithData({ + filtered: newFiltering + }, function () { + return onFilteredChange && onFilteredChange(newFiltering, column, value); + }); + } + }, { + key: 'resizeColumnStart', + value: function resizeColumnStart(event, column, isTouch) { + var _this5 = this; + + event.stopPropagation(); + var parentWidth = event.target.parentElement.getBoundingClientRect().width; + + var pageX = void 0; + if (isTouch) { + pageX = event.changedTouches[0].pageX; + } else { + pageX = event.pageX; + } + + this.trapEvents = true; + this.setStateWithData({ + currentlyResizing: { + id: column.id, + startX: pageX, + parentWidth: parentWidth + } + }, function () { + if (isTouch) { + document.addEventListener('touchmove', _this5.resizeColumnMoving); + document.addEventListener('touchcancel', _this5.resizeColumnEnd); + document.addEventListener('touchend', _this5.resizeColumnEnd); + } else { + document.addEventListener('mousemove', _this5.resizeColumnMoving); + document.addEventListener('mouseup', _this5.resizeColumnEnd); + document.addEventListener('mouseleave', _this5.resizeColumnEnd); + } + }); + } + }, { + key: 'resizeColumnMoving', + value: function resizeColumnMoving(event) { + event.stopPropagation(); + var _props2 = this.props, + onResizedChange = _props2.onResizedChange, + column = _props2.column; + + var _getResolvedState4 = this.getResolvedState(), + resized = _getResolvedState4.resized, + currentlyResizing = _getResolvedState4.currentlyResizing, + columns = _getResolvedState4.columns; + + var currentColumn = columns.find(function (c) { + return c.accessor === currentlyResizing.id || c.id === currentlyResizing.id; + }); + var minResizeWidth = currentColumn && currentColumn.minResizeWidth != null ? currentColumn.minResizeWidth : column.minResizeWidth; + + // Delete old value + var newResized = resized.filter(function (x) { + return x.id !== currentlyResizing.id; + }); + + var pageX = void 0; + + if (event.type === 'touchmove') { + pageX = event.changedTouches[0].pageX; + } else if (event.type === 'mousemove') { + pageX = event.pageX; + } + + var newWidth = Math.max(currentlyResizing.parentWidth + pageX - currentlyResizing.startX, minResizeWidth); + + newResized.push({ + id: currentlyResizing.id, + value: newWidth + }); + + this.setStateWithData({ + resized: newResized + }, function () { + return onResizedChange && onResizedChange(newResized, event); + }); + } + }, { + key: 'resizeColumnEnd', + value: function resizeColumnEnd(event) { + event.stopPropagation(); + var isTouch = event.type === 'touchend' || event.type === 'touchcancel'; + + if (isTouch) { + document.removeEventListener('touchmove', this.resizeColumnMoving); + document.removeEventListener('touchcancel', this.resizeColumnEnd); + document.removeEventListener('touchend', this.resizeColumnEnd); + } + + // If its a touch event clear the mouse one's as well because sometimes + // the mouseDown event gets called as well, but the mouseUp event doesn't + document.removeEventListener('mousemove', this.resizeColumnMoving); + document.removeEventListener('mouseup', this.resizeColumnEnd); + document.removeEventListener('mouseleave', this.resizeColumnEnd); + + // The touch events don't propagate up to the sorting's onMouseDown event so + // no need to prevent it from happening or else the first click after a touch + // event resize will not sort the column. + if (!isTouch) { + this.setStateWithData({ + skipNextSort: true, + currentlyResizing: false + }); + } + } + }]); + + return _class; + }(Base); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRob2RzLmpzIl0sIm5hbWVzIjpbInByb3BzIiwic3RhdGUiLCJyZXNvbHZlZFN0YXRlIiwiXyIsImNvbXBhY3RPYmplY3QiLCJuZXdTdGF0ZSIsImRhdGFDaGFuZ2VkIiwiY29sdW1ucyIsInBpdm90QnkiLCJkYXRhIiwicmVzb2x2ZURhdGEiLCJwaXZvdElES2V5IiwicGl2b3RWYWxLZXkiLCJzdWJSb3dzS2V5IiwiYWdncmVnYXRlZEtleSIsIm5lc3RpbmdMZXZlbEtleSIsIm9yaWdpbmFsS2V5IiwiaW5kZXhLZXkiLCJncm91cGVkQnlQaXZvdEtleSIsIlN1YkNvbXBvbmVudCIsImhhc0hlYWRlckdyb3VwcyIsImZvckVhY2giLCJjb2x1bW4iLCJjb2x1bW5zV2l0aEV4cGFuZGVyIiwiZXhwYW5kZXJDb2x1bW4iLCJmaW5kIiwiY29sIiwiZXhwYW5kZXIiLCJzb21lIiwiY29sMiIsIm1ha2VEZWNvcmF0ZWRDb2x1bW4iLCJwYXJlbnRDb2x1bW4iLCJkY29sIiwiZXhwYW5kZXJEZWZhdWx0cyIsIm1heFdpZHRoIiwibWluV2lkdGgiLCJhY2Nlc3NvciIsImlkIiwiYWNjZXNzb3JTdHJpbmciLCJnZXQiLCJyb3ciLCJjb25zb2xlIiwid2FybiIsIkVycm9yIiwidW5kZWZpbmVkIiwiYWxsRGVjb3JhdGVkQ29sdW1ucyIsImRlY29yYXRlQW5kQWRkVG9BbGwiLCJkZWNvcmF0ZWRDb2x1bW4iLCJwdXNoIiwiZGVjb3JhdGVkQ29sdW1ucyIsIm1hcCIsImQiLCJ2aXNpYmxlQ29sdW1ucyIsInNsaWNlIiwiYWxsVmlzaWJsZUNvbHVtbnMiLCJ2aXNpYmxlU3ViQ29sdW1ucyIsImZpbHRlciIsImluZGV4T2YiLCJnZXRGaXJzdERlZmluZWQiLCJzaG93IiwibGVuZ3RoIiwicGl2b3RJbmRleCIsImZpbmRJbmRleCIsInBpdm90IiwicGl2b3RDb2x1bW5zIiwiZm91bmQiLCJwaXZvdElEIiwiUGl2b3RQYXJlbnRDb2x1bW4iLCJyZWR1Y2UiLCJwcmV2IiwiY3VycmVudCIsIlBpdm90R3JvdXBIZWFkZXIiLCJIZWFkZXIiLCJwaXZvdENvbHVtbkdyb3VwIiwicGl2b3REZWZhdWx0cyIsInBpdm90ZWQiLCJzcGxpY2UiLCJ1bnNoaWZ0IiwiaGVhZGVyR3JvdXBzIiwiY3VycmVudFNwYW4iLCJhZGRIZWFkZXIiLCJjb25jYXQiLCJhY2Nlc3NSb3ciLCJpIiwibGV2ZWwiLCJyZXNvbHZlZERhdGEiLCJhZ2dyZWdhdGluZ0NvbHVtbnMiLCJhZ2dyZWdhdGUiLCJhZ2dyZWdhdGlvblZhbHVlcyIsInZhbHVlcyIsInJvd3MiLCJncm91cFJlY3Vyc2l2ZWx5Iiwia2V5cyIsImdyb3VwZWRSb3dzIiwiT2JqZWN0IiwiZW50cmllcyIsImdyb3VwQnkiLCJrZXkiLCJ2YWx1ZSIsInN1YlJvd3MiLCJyb3dHcm91cCIsIm1hbnVhbCIsInNvcnRlZCIsImZpbHRlcmVkIiwiZGVmYXVsdEZpbHRlck1ldGhvZCIsInNvcnRNZXRob2RzQnlDb2x1bW5JRCIsInNvcnRNZXRob2QiLCJzb3J0ZWREYXRhIiwic29ydERhdGEiLCJmaWx0ZXJEYXRhIiwiY3VycmVudFN0YXRlIiwiZ2V0UmVzb2x2ZWRTdGF0ZSIsInBhZ2UiLCJnZXRTdGF0ZU9yUHJvcCIsInBhZ2VTaXplIiwib25GZXRjaERhdGEiLCJmaWx0ZXJlZERhdGEiLCJmaWx0ZXJlZFNvRmFyIiwibmV4dEZpbHRlciIsIngiLCJmaWx0ZXJhYmxlIiwiZmlsdGVyTWV0aG9kIiwiZmlsdGVyQWxsIiwib3JkZXJCeU1ldGhvZCIsIm9yZGVyQnkiLCJzb3J0IiwiYSIsImIiLCJkZXNjIiwiZGVmYXVsdFNvcnRNZXRob2QiLCJtaW5Sb3dzIiwib25QYWdlQ2hhbmdlIiwiY29sbGFwc2VPblBhZ2VDaGFuZ2UiLCJleHBhbmRlZCIsInNldFN0YXRlV2l0aERhdGEiLCJuZXdQYWdlU2l6ZSIsIm9uUGFnZVNpemVDaGFuZ2UiLCJjdXJyZW50Um93IiwibmV3UGFnZSIsIk1hdGgiLCJmbG9vciIsImFkZGl0aXZlIiwic2tpcE5leHRTb3J0IiwiZGVmYXVsdFNvcnREZXNjIiwiZmlyc3RTb3J0RGlyZWN0aW9uIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwic2Vjb25kU29ydERpcmVjdGlvbiIsIm9uU29ydGVkQ2hhbmdlIiwibmV3U29ydGVkIiwiY2xvbmUiLCJpc1NvcnRpbmdEZXNjIiwiaXNBcnJheSIsImV4aXN0aW5nSW5kZXgiLCJleGlzdGluZyIsIm9uRmlsdGVyZWRDaGFuZ2UiLCJuZXdGaWx0ZXJpbmciLCJldmVudCIsImlzVG91Y2giLCJzdG9wUHJvcGFnYXRpb24iLCJwYXJlbnRXaWR0aCIsInRhcmdldCIsInBhcmVudEVsZW1lbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsInBhZ2VYIiwiY2hhbmdlZFRvdWNoZXMiLCJ0cmFwRXZlbnRzIiwiY3VycmVudGx5UmVzaXppbmciLCJzdGFydFgiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZXNpemVDb2x1bW5Nb3ZpbmciLCJyZXNpemVDb2x1bW5FbmQiLCJvblJlc2l6ZWRDaGFuZ2UiLCJyZXNpemVkIiwiY3VycmVudENvbHVtbiIsImMiLCJtaW5SZXNpemVXaWR0aCIsIm5ld1Jlc2l6ZWQiLCJ0eXBlIiwibmV3V2lkdGgiLCJtYXgiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiQmFzZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztrQkFFZTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSx1Q0FFT0EsS0FGUCxFQUVjQyxLQUZkLEVBRXFCO0FBQzlCLFlBQU1DLDZCQUNEQyxnQkFBRUMsYUFBRixDQUFnQixLQUFLSCxLQUFyQixDQURDLEVBRURFLGdCQUFFQyxhQUFGLENBQWdCLEtBQUtKLEtBQXJCLENBRkMsRUFHREcsZ0JBQUVDLGFBQUYsQ0FBZ0JILEtBQWhCLENBSEMsRUFJREUsZ0JBQUVDLGFBQUYsQ0FBZ0JKLEtBQWhC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anMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgXyBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBCYXNlID0+XG4gIGNsYXNzIGV4dGVuZHMgQmFzZSB7XG4gICAgZ2V0UmVzb2x2ZWRTdGF0ZSAocHJvcHMsIHN0YXRlKSB7XG4gICAgICBjb25zdCByZXNvbHZlZFN0YXRlID0ge1xuICAgICAgICAuLi5fLmNvbXBhY3RPYmplY3QodGhpcy5zdGF0ZSksXG4gICAgICAgIC4uLl8uY29tcGFjdE9iamVjdCh0aGlzLnByb3BzKSxcbiAgICAgICAgLi4uXy5jb21wYWN0T2JqZWN0KHN0YXRlKSxcbiAgICAgICAgLi4uXy5jb21wYWN0T2JqZWN0KHByb3BzKSxcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlZFN0YXRlXG4gICAgfVxuXG4gICAgZ2V0RGF0YU1vZGVsIChuZXdTdGF0ZSwgZGF0YUNoYW5nZWQpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgcGl2b3RCeSA9IFtdLFxuICAgICAgICBkYXRhLFxuICAgICAgICByZXNvbHZlRGF0YSxcbiAgICAgICAgcGl2b3RJREtleSxcbiAgICAgICAgcGl2b3RWYWxLZXksXG4gICAgICAgIHN1YlJvd3NLZXksXG4gICAgICAgIGFnZ3JlZ2F0ZWRLZXksXG4gICAgICAgIG5lc3RpbmdMZXZlbEtleSxcbiAgICAgICAgb3JpZ2luYWxLZXksXG4gICAgICAgIGluZGV4S2V5LFxuICAgICAgICBncm91cGVkQnlQaXZvdEtleSxcbiAgICAgICAgU3ViQ29tcG9uZW50LFxuICAgICAgfSA9IG5ld1N0YXRlXG5cbiAgICAgIC8vIERldGVybWluZSBIZWFkZXIgR3JvdXBzXG4gICAgICBsZXQgaGFzSGVhZGVyR3JvdXBzID0gZmFsc2VcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmNvbHVtbnMpIHtcbiAgICAgICAgICBoYXNIZWFkZXJHcm91cHMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGxldCBjb2x1bW5zV2l0aEV4cGFuZGVyID0gWy4uLmNvbHVtbnNdXG5cbiAgICAgIGxldCBleHBhbmRlckNvbHVtbiA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgY29sID0+IGNvbC5leHBhbmRlciB8fCAoY29sLmNvbHVtbnMgJiYgY29sLmNvbHVtbnMuc29tZShjb2wyID0+IGNvbDIuZXhwYW5kZXIpKVxuICAgICAgKVxuICAgICAgLy8gVGhlIGFjdHVhbCBleHBhbmRlciBtaWdodCBiZSBpbiB0aGUgY29sdW1ucyBmaWVsZCBvZiBhIGdyb3VwIGNvbHVtblxuICAgICAgaWYgKGV4cGFuZGVyQ29sdW1uICYmICFleHBhbmRlckNvbHVtbi5leHBhbmRlcikge1xuICAgICAgICBleHBhbmRlckNvbHVtbiA9IGV4cGFuZGVyQ29sdW1uLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmV4cGFuZGVyKVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSBoYXZlIFN1YkNvbXBvbmVudCdzIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYW4gZXhwYW5kZXIgY29sdW1uXG4gICAgICBpZiAoU3ViQ29tcG9uZW50ICYmICFleHBhbmRlckNvbHVtbikge1xuICAgICAgICBleHBhbmRlckNvbHVtbiA9IHsgZXhwYW5kZXI6IHRydWUgfVxuICAgICAgICBjb2x1bW5zV2l0aEV4cGFuZGVyID0gW2V4cGFuZGVyQ29sdW1uLCAuLi5jb2x1bW5zV2l0aEV4cGFuZGVyXVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtYWtlRGVjb3JhdGVkQ29sdW1uID0gKGNvbHVtbiwgcGFyZW50Q29sdW1uKSA9PiB7XG4gICAgICAgIGxldCBkY29sXG4gICAgICAgIGlmIChjb2x1bW4uZXhwYW5kZXIpIHtcbiAgICAgICAgICBkY29sID0ge1xuICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5jb2x1bW4sXG4gICAgICAgICAgICAuLi50aGlzLnByb3BzLmV4cGFuZGVyRGVmYXVsdHMsXG4gICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRjb2wgPSB7XG4gICAgICAgICAgICAuLi50aGlzLnByb3BzLmNvbHVtbixcbiAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbnN1cmUgbWluV2lkdGggaXMgbm90IGdyZWF0ZXIgdGhhbiBtYXhXaWR0aCBpZiBzZXRcbiAgICAgICAgaWYgKGRjb2wubWF4V2lkdGggPCBkY29sLm1pbldpZHRoKSB7XG4gICAgICAgICAgZGNvbC5taW5XaWR0aCA9IGRjb2wubWF4V2lkdGhcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJlbnRDb2x1bW4pIHtcbiAgICAgICAgICBkY29sLnBhcmVudENvbHVtbiA9IHBhcmVudENvbHVtblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlyc3QgY2hlY2sgZm9yIHN0cmluZyBhY2Nlc3NvclxuICAgICAgICBpZiAodHlwZW9mIGRjb2wuYWNjZXNzb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgZGNvbC5pZCA9IGRjb2wuaWQgfHwgZGNvbC5hY2Nlc3NvclxuICAgICAgICAgIGNvbnN0IGFjY2Vzc29yU3RyaW5nID0gZGNvbC5hY2Nlc3NvclxuICAgICAgICAgIGRjb2wuYWNjZXNzb3IgPSByb3cgPT4gXy5nZXQocm93LCBhY2Nlc3NvclN0cmluZylcbiAgICAgICAgICByZXR1cm4gZGNvbFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGZ1bmN0aW9uYWwgYWNjZXNzb3IgKGJ1dCByZXF1aXJlIGFuIElEKVxuICAgICAgICBpZiAoZGNvbC5hY2Nlc3NvciAmJiAhZGNvbC5pZCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihkY29sKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdBIGNvbHVtbiBpZCBpcyByZXF1aXJlZCBpZiB1c2luZyBhIG5vbi1zdHJpbmcgYWNjZXNzb3IgZm9yIGNvbHVtbiBhYm92ZS4nXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGFuIHVuZGVmaW5lZCBhY2Nlc3NvclxuICAgICAgICBpZiAoIWRjb2wuYWNjZXNzb3IpIHtcbiAgICAgICAgICBkY29sLmFjY2Vzc29yID0gKCkgPT4gdW5kZWZpbmVkXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGNvbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBhbGxEZWNvcmF0ZWRDb2x1bW5zID0gW11cblxuICAgICAgLy8gRGVjb3JhdGUgdGhlIGNvbHVtbnNcbiAgICAgIGNvbnN0IGRlY29yYXRlQW5kQWRkVG9BbGwgPSAoY29sdW1uLCBwYXJlbnRDb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgZGVjb3JhdGVkQ29sdW1uID0gbWFrZURlY29yYXRlZENvbHVtbihjb2x1bW4sIHBhcmVudENvbHVtbilcbiAgICAgICAgYWxsRGVjb3JhdGVkQ29sdW1ucy5wdXNoKGRlY29yYXRlZENvbHVtbilcbiAgICAgICAgcmV0dXJuIGRlY29yYXRlZENvbHVtblxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWNvcmF0ZWRDb2x1bW5zID0gY29sdW1uc1dpdGhFeHBhbmRlci5tYXAoY29sdW1uID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5jb2x1bW5zKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbi5jb2x1bW5zLm1hcChkID0+IGRlY29yYXRlQW5kQWRkVG9BbGwoZCwgY29sdW1uKSksXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWNvcmF0ZUFuZEFkZFRvQWxsKGNvbHVtbilcbiAgICAgIH0pXG5cbiAgICAgIC8vIEJ1aWxkIHRoZSB2aXNpYmxlIGNvbHVtbnMsIGhlYWRlcnMgYW5kIGZsYXQgY29sdW1uIGxpc3RcbiAgICAgIGxldCB2aXNpYmxlQ29sdW1ucyA9IGRlY29yYXRlZENvbHVtbnMuc2xpY2UoKVxuICAgICAgbGV0IGFsbFZpc2libGVDb2x1bW5zID0gW11cblxuICAgICAgdmlzaWJsZUNvbHVtbnMgPSB2aXNpYmxlQ29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5jb2x1bW5zKSB7XG4gICAgICAgICAgY29uc3QgdmlzaWJsZVN1YkNvbHVtbnMgPSBjb2x1bW4uY29sdW1ucy5maWx0ZXIoZCA9PlxuICAgICAgICAgICAgcGl2b3RCeS5pbmRleE9mKGQuaWQpID4gLTEgPyBmYWxzZSA6IF8uZ2V0Rmlyc3REZWZpbmVkKGQuc2hvdywgdHJ1ZSlcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgIGNvbHVtbnM6IHZpc2libGVTdWJDb2x1bW5zLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sdW1uXG4gICAgICB9KVxuXG4gICAgICB2aXNpYmxlQ29sdW1ucyA9IHZpc2libGVDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT5cbiAgICAgICAgY29sdW1uLmNvbHVtbnNcbiAgICAgICAgICA/IGNvbHVtbi5jb2x1bW5zLmxlbmd0aFxuICAgICAgICAgIDogcGl2b3RCeS5pbmRleE9mKGNvbHVtbi5pZCkgPiAtMVxuICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgOiBfLmdldEZpcnN0RGVmaW5lZChjb2x1bW4uc2hvdywgdHJ1ZSlcbiAgICAgIClcblxuICAgICAgLy8gRmluZCBhbnkgY3VzdG9tIHBpdm90IGxvY2F0aW9uXG4gICAgICBjb25zdCBwaXZvdEluZGV4ID0gdmlzaWJsZUNvbHVtbnMuZmluZEluZGV4KGNvbCA9PiBjb2wucGl2b3QpXG5cbiAgICAgIC8vIEhhbmRsZSBQaXZvdCBDb2x1bW5zXG4gICAgICBpZiAocGl2b3RCeS5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIHBpdm90IGNvbHVtbnMgaW4gdGhlIGNvcnJlY3QgcGl2b3Qgb3JkZXJcbiAgICAgICAgY29uc3QgcGl2b3RDb2x1bW5zID0gW11cbiAgICAgICAgcGl2b3RCeS5mb3JFYWNoKHBpdm90SUQgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvdW5kID0gYWxsRGVjb3JhdGVkQ29sdW1ucy5maW5kKGQgPT4gZC5pZCA9PT0gcGl2b3RJRClcbiAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIHBpdm90Q29sdW1ucy5wdXNoKGZvdW5kKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBQaXZvdFBhcmVudENvbHVtbiA9IHBpdm90Q29sdW1ucy5yZWR1Y2UoXG4gICAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+IHByZXYgJiYgcHJldiA9PT0gY3VycmVudC5wYXJlbnRDb2x1bW4gJiYgY3VycmVudC5wYXJlbnRDb2x1bW4sXG4gICAgICAgICAgcGl2b3RDb2x1bW5zWzBdLnBhcmVudENvbHVtblxuICAgICAgICApXG5cbiAgICAgICAgbGV0IFBpdm90R3JvdXBIZWFkZXIgPSBoYXNIZWFkZXJHcm91cHMgJiYgUGl2b3RQYXJlbnRDb2x1bW4uSGVhZGVyXG4gICAgICAgIFBpdm90R3JvdXBIZWFkZXIgPSBQaXZvdEdyb3VwSGVhZGVyIHx8ICgoKSA9PiA8c3Ryb25nPlBpdm90ZWQ8L3N0cm9uZz4pXG5cbiAgICAgICAgbGV0IHBpdm90Q29sdW1uR3JvdXAgPSB7XG4gICAgICAgICAgSGVhZGVyOiBQaXZvdEdyb3VwSGVhZGVyLFxuICAgICAgICAgIGNvbHVtbnM6IHBpdm90Q29sdW1ucy5tYXAoY29sID0+ICh7XG4gICAgICAgICAgICAuLi50aGlzLnByb3BzLnBpdm90RGVmYXVsdHMsXG4gICAgICAgICAgICAuLi5jb2wsXG4gICAgICAgICAgICBwaXZvdGVkOiB0cnVlLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBsYWNlIHRoZSBwaXZvdENvbHVtbnMgYmFjayBpbnRvIHRoZSB2aXNpYmxlQ29sdW1uc1xuICAgICAgICBpZiAocGl2b3RJbmRleCA+PSAwKSB7XG4gICAgICAgICAgcGl2b3RDb2x1bW5Hcm91cCA9IHtcbiAgICAgICAgICAgIC4uLnZpc2libGVDb2x1bW5zW3Bpdm90SW5kZXhdLFxuICAgICAgICAgICAgLi4ucGl2b3RDb2x1bW5Hcm91cCxcbiAgICAgICAgICB9XG4gICAgICAgICAgdmlzaWJsZUNvbHVtbnMuc3BsaWNlKHBpdm90SW5kZXgsIDEsIHBpdm90Q29sdW1uR3JvdXApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlzaWJsZUNvbHVtbnMudW5zaGlmdChwaXZvdENvbHVtbkdyb3VwKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJ1aWxkIEhlYWRlciBHcm91cHNcbiAgICAgIGNvbnN0IGhlYWRlckdyb3VwcyA9IFtdXG4gICAgICBsZXQgY3VycmVudFNwYW4gPSBbXVxuXG4gICAgICAvLyBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGFkZCBhIGhlYWRlciBhbmQgcmVzZXQgdGhlIGN1cnJlbnRTcGFuXG4gICAgICBjb25zdCBhZGRIZWFkZXIgPSAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgIGhlYWRlckdyb3Vwcy5wdXNoKHtcbiAgICAgICAgICAuLi50aGlzLnByb3BzLmNvbHVtbixcbiAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgfSlcbiAgICAgICAgY3VycmVudFNwYW4gPSBbXVxuICAgICAgfVxuXG4gICAgICAvLyBCdWlsZCBmbGFzdCBsaXN0IG9mIGFsbFZpc2libGVDb2x1bW5zIGFuZCBIZWFkZXJHcm91cHNcbiAgICAgIHZpc2libGVDb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5jb2x1bW5zKSB7XG4gICAgICAgICAgYWxsVmlzaWJsZUNvbHVtbnMgPSBhbGxWaXNpYmxlQ29sdW1ucy5jb25jYXQoY29sdW1uLmNvbHVtbnMpXG4gICAgICAgICAgaWYgKGN1cnJlbnRTcGFuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFkZEhlYWRlcihjdXJyZW50U3BhbilcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkSGVhZGVyKGNvbHVtbi5jb2x1bW5zLCBjb2x1bW4pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgYWxsVmlzaWJsZUNvbHVtbnMucHVzaChjb2x1bW4pXG4gICAgICAgIGN1cnJlbnRTcGFuLnB1c2goY29sdW1uKVxuICAgICAgfSlcbiAgICAgIGlmIChoYXNIZWFkZXJHcm91cHMgJiYgY3VycmVudFNwYW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBhZGRIZWFkZXIoY3VycmVudFNwYW4pXG4gICAgICB9XG5cbiAgICAgIC8vIEFjY2VzcyB0aGUgZGF0YVxuICAgICAgY29uc3QgYWNjZXNzUm93ID0gKGQsIGksIGxldmVsID0gMCkgPT4ge1xuICAgICAgICBjb25zdCByb3cgPSB7XG4gICAgICAgICAgW29yaWdpbmFsS2V5XTogZCxcbiAgICAgICAgICBbaW5kZXhLZXldOiBpLFxuICAgICAgICAgIFtzdWJSb3dzS2V5XTogZFtzdWJSb3dzS2V5XSxcbiAgICAgICAgICBbbmVzdGluZ0xldmVsS2V5XTogbGV2ZWwsXG4gICAgICAgIH1cbiAgICAgICAgYWxsRGVjb3JhdGVkQ29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5leHBhbmRlcikgcmV0dXJuXG4gICAgICAgICAgcm93W2NvbHVtbi5pZF0gPSBjb2x1bW4uYWNjZXNzb3IoZClcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJvd1tzdWJSb3dzS2V5XSkge1xuICAgICAgICAgIHJvd1tzdWJSb3dzS2V5XSA9IHJvd1tzdWJSb3dzS2V5XS5tYXAoKGQsIGkpID0+IGFjY2Vzc1JvdyhkLCBpLCBsZXZlbCArIDEpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dcbiAgICAgIH1cblxuICAgICAgLy8gLy8gSWYgdGhlIGRhdGEgaGFzbid0IGNoYW5nZWQsIGp1c3QgdXNlIHRoZSBjYWNoZWQgZGF0YVxuICAgICAgbGV0IHJlc29sdmVkRGF0YSA9IHRoaXMucmVzb2x2ZWREYXRhXG4gICAgICAvLyBJZiB0aGUgZGF0YSBoYXMgY2hhbmdlZCwgcnVuIHRoZSBkYXRhIHJlc29sdmVyIGFuZCBjYWNoZSB0aGUgcmVzdWx0XG4gICAgICBpZiAoIXRoaXMucmVzb2x2ZWREYXRhIHx8IGRhdGFDaGFuZ2VkKSB7XG4gICAgICAgIHJlc29sdmVkRGF0YSA9IHJlc29sdmVEYXRhKGRhdGEpXG4gICAgICAgIHRoaXMucmVzb2x2ZWREYXRhID0gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBVc2UgdGhlIHJlc29sdmVkIGRhdGFcbiAgICAgIHJlc29sdmVkRGF0YSA9IHJlc29sdmVkRGF0YS5tYXAoKGQsIGkpID0+IGFjY2Vzc1JvdyhkLCBpKSlcblxuICAgICAgLy8gVE9ETzogTWFrZSBpdCBwb3NzaWJsZSB0byBmYWJyaWNhdGUgbmVzdGVkIHJvd3Mgd2l0aG91dCBwaXZvdGluZ1xuICAgICAgY29uc3QgYWdncmVnYXRpbmdDb2x1bW5zID0gYWxsVmlzaWJsZUNvbHVtbnMuZmlsdGVyKGQgPT4gIWQuZXhwYW5kZXIgJiYgZC5hZ2dyZWdhdGUpXG5cbiAgICAgIC8vIElmIHBpdm90aW5nLCByZWN1cnNpdmVseSBncm91cCB0aGUgZGF0YVxuICAgICAgY29uc3QgYWdncmVnYXRlID0gcm93cyA9PiB7XG4gICAgICAgIGNvbnN0IGFnZ3JlZ2F0aW9uVmFsdWVzID0ge31cbiAgICAgICAgYWdncmVnYXRpbmdDb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZXMgPSByb3dzLm1hcChkID0+IGRbY29sdW1uLmlkXSlcbiAgICAgICAgICBhZ2dyZWdhdGlvblZhbHVlc1tjb2x1bW4uaWRdID0gY29sdW1uLmFnZ3JlZ2F0ZSh2YWx1ZXMsIHJvd3MpXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBhZ2dyZWdhdGlvblZhbHVlc1xuICAgICAgfVxuICAgICAgaWYgKHBpdm90QnkubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwUmVjdXJzaXZlbHkgPSAocm93cywga2V5cywgaSA9IDApID0+IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBsYXN0IGxldmVsLCBqdXN0IHJldHVybiB0aGUgcm93c1xuICAgICAgICAgIGlmIChpID09PSBrZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd3NcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gR3JvdXAgdGhlIHJvd3MgdG9nZXRoZXIgZm9yIHRoaXMgbGV2ZWxcbiAgICAgICAgICBsZXQgZ3JvdXBlZFJvd3MgPSBPYmplY3QuZW50cmllcyhfLmdyb3VwQnkocm93cywga2V5c1tpXSkpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICAgICAgW3Bpdm90SURLZXldOiBrZXlzW2ldLFxuICAgICAgICAgICAgW3Bpdm90VmFsS2V5XToga2V5LFxuICAgICAgICAgICAgW2tleXNbaV1dOiBrZXksXG4gICAgICAgICAgICBbc3ViUm93c0tleV06IHZhbHVlLFxuICAgICAgICAgICAgW25lc3RpbmdMZXZlbEtleV06IGksXG4gICAgICAgICAgICBbZ3JvdXBlZEJ5UGl2b3RLZXldOiB0cnVlLFxuICAgICAgICAgIH0pKVxuICAgICAgICAgIC8vIFJlY3Vyc2UgaW50byB0aGUgc3ViUm93c1xuICAgICAgICAgIGdyb3VwZWRSb3dzID0gZ3JvdXBlZFJvd3MubWFwKHJvd0dyb3VwID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YlJvd3MgPSBncm91cFJlY3Vyc2l2ZWx5KHJvd0dyb3VwW3N1YlJvd3NLZXldLCBrZXlzLCBpICsgMSlcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnJvd0dyb3VwLFxuICAgICAgICAgICAgICBbc3ViUm93c0tleV06IHN1YlJvd3MsXG4gICAgICAgICAgICAgIFthZ2dyZWdhdGVkS2V5XTogdHJ1ZSxcbiAgICAgICAgICAgICAgLi4uYWdncmVnYXRlKHN1YlJvd3MpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIGdyb3VwZWRSb3dzXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZWREYXRhID0gZ3JvdXBSZWN1cnNpdmVseShyZXNvbHZlZERhdGEsIHBpdm90QnkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICByZXNvbHZlZERhdGEsXG4gICAgICAgIGFsbFZpc2libGVDb2x1bW5zLFxuICAgICAgICBoZWFkZXJHcm91cHMsXG4gICAgICAgIGFsbERlY29yYXRlZENvbHVtbnMsXG4gICAgICAgIGhhc0hlYWRlckdyb3VwcyxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTb3J0ZWREYXRhIChyZXNvbHZlZFN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hbnVhbCxcbiAgICAgICAgc29ydGVkLFxuICAgICAgICBmaWx0ZXJlZCxcbiAgICAgICAgZGVmYXVsdEZpbHRlck1ldGhvZCxcbiAgICAgICAgcmVzb2x2ZWREYXRhLFxuICAgICAgICBhbGxEZWNvcmF0ZWRDb2x1bW5zLFxuICAgICAgfSA9IHJlc29sdmVkU3RhdGVcblxuICAgICAgY29uc3Qgc29ydE1ldGhvZHNCeUNvbHVtbklEID0ge31cblxuICAgICAgYWxsRGVjb3JhdGVkQ29sdW1uc1xuICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuc29ydE1ldGhvZClcbiAgICAgICAgLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICBzb3J0TWV0aG9kc0J5Q29sdW1uSURbY29sLmlkXSA9IGNvbC5zb3J0TWV0aG9kXG4gICAgICAgIH0pXG5cbiAgICAgIC8vIFJlc29sdmUgdGhlIGRhdGEgZnJvbSBlaXRoZXIgbWFudWFsIGRhdGEgb3Igc29ydGVkIGRhdGFcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvcnRlZERhdGE6IG1hbnVhbFxuICAgICAgICAgID8gcmVzb2x2ZWREYXRhXG4gICAgICAgICAgOiB0aGlzLnNvcnREYXRhKFxuICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhKHJlc29sdmVkRGF0YSwgZmlsdGVyZWQsIGRlZmF1bHRGaWx0ZXJNZXRob2QsIGFsbERlY29yYXRlZENvbHVtbnMpLFxuICAgICAgICAgICAgc29ydGVkLFxuICAgICAgICAgICAgc29ydE1ldGhvZHNCeUNvbHVtbklEXG4gICAgICAgICAgKSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaXJlRmV0Y2hEYXRhICgpIHtcbiAgICAgIC8vIGRldGVybWluZSB0aGUgY3VycmVudCBzdGF0ZSwgcHJlZmVycmluZyBjZXJ0YWluIHN0YXRlIHZhbHVlcyBvdmVyIHByb3BzXG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB7XG4gICAgICAgIC4uLnRoaXMuZ2V0UmVzb2x2ZWRTdGF0ZSgpLFxuICAgICAgICBwYWdlOiB0aGlzLmdldFN0YXRlT3JQcm9wKCdwYWdlJyksXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLmdldFN0YXRlT3JQcm9wKCdwYWdlU2l6ZScpLFxuICAgICAgICBmaWx0ZXJlZDogdGhpcy5nZXRTdGF0ZU9yUHJvcCgnZmlsdGVyZWQnKSxcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcm9wcy5vbkZldGNoRGF0YShjdXJyZW50U3RhdGUsIHRoaXMpXG4gICAgfVxuXG4gICAgZ2V0UHJvcE9yU3RhdGUgKGtleSkge1xuICAgICAgcmV0dXJuIF8uZ2V0Rmlyc3REZWZpbmVkKHRoaXMucHJvcHNba2V5XSwgdGhpcy5zdGF0ZVtrZXldKVxuICAgIH1cblxuICAgIGdldFN0YXRlT3JQcm9wIChrZXkpIHtcbiAgICAgIHJldHVybiBfLmdldEZpcnN0RGVmaW5lZCh0aGlzLnN0YXRlW2tleV0sIHRoaXMucHJvcHNba2V5XSlcbiAgICB9XG5cbiAgICBmaWx0ZXJEYXRhIChkYXRhLCBmaWx0ZXJlZCwgZGVmYXVsdEZpbHRlck1ldGhvZCwgYWxsVmlzaWJsZUNvbHVtbnMpIHtcbiAgICAgIGxldCBmaWx0ZXJlZERhdGEgPSBkYXRhXG5cbiAgICAgIGlmIChmaWx0ZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWQucmVkdWNlKChmaWx0ZXJlZFNvRmFyLCBuZXh0RmlsdGVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1uID0gYWxsVmlzaWJsZUNvbHVtbnMuZmluZCh4ID0+IHguaWQgPT09IG5leHRGaWx0ZXIuaWQpXG5cbiAgICAgICAgICAvLyBEb24ndCBmaWx0ZXIgaGlkZGVuIGNvbHVtbnMgb3IgY29sdW1ucyB0aGF0IGhhdmUgaGFkIHRoZWlyIGZpbHRlcnMgZGlzYWJsZWRcbiAgICAgICAgICBpZiAoIWNvbHVtbiB8fCBjb2x1bW4uZmlsdGVyYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFNvRmFyXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZmlsdGVyTWV0aG9kID0gY29sdW1uLmZpbHRlck1ldGhvZCB8fCBkZWZhdWx0RmlsdGVyTWV0aG9kXG5cbiAgICAgICAgICAvLyBJZiAnZmlsdGVyQWxsJyBpcyBzZXQgdG8gdHJ1ZSwgcGFzcyB0aGUgZW50aXJlIGRhdGFzZXQgdG8gdGhlIGZpbHRlciBtZXRob2RcbiAgICAgICAgICBpZiAoY29sdW1uLmZpbHRlckFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlck1ldGhvZChuZXh0RmlsdGVyLCBmaWx0ZXJlZFNvRmFyLCBjb2x1bW4pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFNvRmFyLmZpbHRlcihyb3cgPT4gZmlsdGVyTWV0aG9kKG5leHRGaWx0ZXIsIHJvdywgY29sdW1uKSlcbiAgICAgICAgfSwgZmlsdGVyZWREYXRhKVxuXG4gICAgICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXIgdG8gdGhlIHN1YnJvd3MgaWYgd2UgYXJlIHBpdm90aW5nLCBhbmQgdGhlblxuICAgICAgICAvLyBmaWx0ZXIgYW55IHJvd3Mgd2l0aG91dCBzdWJjb2x1bW5zIGJlY2F1c2UgaXQgd291bGQgYmUgc3RyYW5nZSB0byBzaG93XG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YVxuICAgICAgICAgIC5tYXAocm93ID0+IHtcbiAgICAgICAgICAgIGlmICghcm93W3RoaXMucHJvcHMuc3ViUm93c0tleV0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJvd1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ucm93LFxuICAgICAgICAgICAgICBbdGhpcy5wcm9wcy5zdWJSb3dzS2V5XTogdGhpcy5maWx0ZXJEYXRhKFxuICAgICAgICAgICAgICAgIHJvd1t0aGlzLnByb3BzLnN1YlJvd3NLZXldLFxuICAgICAgICAgICAgICAgIGZpbHRlcmVkLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJNZXRob2QsXG4gICAgICAgICAgICAgICAgYWxsVmlzaWJsZUNvbHVtbnNcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIocm93ID0+IHtcbiAgICAgICAgICAgIGlmICghcm93W3RoaXMucHJvcHMuc3ViUm93c0tleV0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByb3dbdGhpcy5wcm9wcy5zdWJSb3dzS2V5XS5sZW5ndGggPiAwXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0YVxuICAgIH1cblxuICAgIHNvcnREYXRhIChkYXRhLCBzb3J0ZWQsIHNvcnRNZXRob2RzQnlDb2x1bW5JRCA9IHt9KSB7XG4gICAgICBpZiAoIXNvcnRlZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc29ydGVkRGF0YSA9ICh0aGlzLnByb3BzLm9yZGVyQnlNZXRob2QgfHwgXy5vcmRlckJ5KShcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc29ydGVkLm1hcChzb3J0ID0+IHtcbiAgICAgICAgICAvLyBTdXBwb3J0IGN1c3RvbSBzb3J0aW5nIG1ldGhvZHMgZm9yIGVhY2ggY29sdW1uXG4gICAgICAgICAgaWYgKHNvcnRNZXRob2RzQnlDb2x1bW5JRFtzb3J0LmlkXSkge1xuICAgICAgICAgICAgcmV0dXJuIChhLCBiKSA9PiBzb3J0TWV0aG9kc0J5Q29sdW1uSURbc29ydC5pZF0oYVtzb3J0LmlkXSwgYltzb3J0LmlkXSwgc29ydC5kZXNjKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKGEsIGIpID0+IHRoaXMucHJvcHMuZGVmYXVsdFNvcnRNZXRob2QoYVtzb3J0LmlkXSwgYltzb3J0LmlkXSwgc29ydC5kZXNjKVxuICAgICAgICB9KSxcbiAgICAgICAgc29ydGVkLm1hcChkID0+ICFkLmRlc2MpLFxuICAgICAgICB0aGlzLnByb3BzLmluZGV4S2V5XG4gICAgICApXG5cbiAgICAgIHNvcnRlZERhdGEuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICBpZiAoIXJvd1t0aGlzLnByb3BzLnN1YlJvd3NLZXldKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgcm93W3RoaXMucHJvcHMuc3ViUm93c0tleV0gPSB0aGlzLnNvcnREYXRhKFxuICAgICAgICAgIHJvd1t0aGlzLnByb3BzLnN1YlJvd3NLZXldLFxuICAgICAgICAgIHNvcnRlZCxcbiAgICAgICAgICBzb3J0TWV0aG9kc0J5Q29sdW1uSURcbiAgICAgICAgKVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHNvcnRlZERhdGFcbiAgICB9XG5cbiAgICBnZXRNaW5Sb3dzICgpIHtcbiAgICAgIHJldHVybiBfLmdldEZpcnN0RGVmaW5lZCh0aGlzLnByb3BzLm1pblJvd3MsIHRoaXMuZ2V0U3RhdGVPclByb3AoJ3BhZ2VTaXplJykpXG4gICAgfVxuXG4gICAgLy8gVXNlciBhY3Rpb25zXG4gICAgb25QYWdlQ2hhbmdlIChwYWdlKSB7XG4gICAgICBjb25zdCB7IG9uUGFnZUNoYW5nZSwgY29sbGFwc2VPblBhZ2VDaGFuZ2UgfSA9IHRoaXMucHJvcHNcblxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7IHBhZ2UgfVxuICAgICAgaWYgKGNvbGxhcHNlT25QYWdlQ2hhbmdlKSB7XG4gICAgICAgIG5ld1N0YXRlLmV4cGFuZGVkID0ge31cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGVXaXRoRGF0YShuZXdTdGF0ZSwgKCkgPT4gb25QYWdlQ2hhbmdlICYmIG9uUGFnZUNoYW5nZShwYWdlKSlcbiAgICB9XG5cbiAgICBvblBhZ2VTaXplQ2hhbmdlIChuZXdQYWdlU2l6ZSkge1xuICAgICAgY29uc3QgeyBvblBhZ2VTaXplQ2hhbmdlIH0gPSB0aGlzLnByb3BzXG4gICAgICBjb25zdCB7IHBhZ2VTaXplLCBwYWdlIH0gPSB0aGlzLmdldFJlc29sdmVkU3RhdGUoKVxuXG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHBhZ2UgdG8gZGlzcGxheVxuICAgICAgY29uc3QgY3VycmVudFJvdyA9IHBhZ2VTaXplICogcGFnZVxuICAgICAgY29uc3QgbmV3UGFnZSA9IE1hdGguZmxvb3IoY3VycmVudFJvdyAvIG5ld1BhZ2VTaXplKVxuXG4gICAgICB0aGlzLnNldFN0YXRlV2l0aERhdGEoXG4gICAgICAgIHtcbiAgICAgICAgICBwYWdlU2l6ZTogbmV3UGFnZVNpemUsXG4gICAgICAgICAgcGFnZTogbmV3UGFnZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4gb25QYWdlU2l6ZUNoYW5nZSAmJiBvblBhZ2VTaXplQ2hhbmdlKG5ld1BhZ2VTaXplLCBuZXdQYWdlKVxuICAgICAgKVxuICAgIH1cblxuICAgIHNvcnRDb2x1bW4gKGNvbHVtbiwgYWRkaXRpdmUpIHtcbiAgICAgIGNvbnN0IHsgc29ydGVkLCBza2lwTmV4dFNvcnQsIGRlZmF1bHRTb3J0RGVzYyB9ID0gdGhpcy5nZXRSZXNvbHZlZFN0YXRlKClcblxuICAgICAgY29uc3QgZmlyc3RTb3J0RGlyZWN0aW9uID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbHVtbiwgJ2RlZmF1bHRTb3J0RGVzYycpXG4gICAgICAgID8gY29sdW1uLmRlZmF1bHRTb3J0RGVzY1xuICAgICAgICA6IGRlZmF1bHRTb3J0RGVzY1xuICAgICAgY29uc3Qgc2Vjb25kU29ydERpcmVjdGlvbiA9ICFmaXJzdFNvcnREaXJlY3Rpb25cblxuICAgICAgLy8gd2UgY2FuJ3Qgc3RvcCBldmVudCBwcm9wYWdhdGlvbiBmcm9tIHRoZSBjb2x1bW4gcmVzaXplIG1vdmUgaGFuZGxlcnNcbiAgICAgIC8vIGF0dGFjaGVkIHRvIHRoZSBkb2N1bWVudCBiZWNhdXNlIG9mIHJlYWN0J3Mgc3ludGhldGljIGV2ZW50c1xuICAgICAgLy8gc28gd2UgaGF2ZSB0byBwcmV2ZW50IHRoZSBzb3J0IGZ1bmN0aW9uIGZyb20gYWN0dWFsbHkgc29ydGluZ1xuICAgICAgLy8gaWYgd2UgY2xpY2sgb24gdGhlIGNvbHVtbiByZXNpemUgZWxlbWVudCB3aXRoaW4gYSBoZWFkZXIuXG4gICAgICBpZiAoc2tpcE5leHRTb3J0KSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGVXaXRoRGF0YSh7XG4gICAgICAgICAgc2tpcE5leHRTb3J0OiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgb25Tb3J0ZWRDaGFuZ2UgfSA9IHRoaXMucHJvcHNcblxuICAgICAgbGV0IG5ld1NvcnRlZCA9IF8uY2xvbmUoc29ydGVkIHx8IFtdKS5tYXAoZCA9PiB7XG4gICAgICAgIGQuZGVzYyA9IF8uaXNTb3J0aW5nRGVzYyhkKVxuICAgICAgICByZXR1cm4gZFxuICAgICAgfSlcbiAgICAgIGlmICghXy5pc0FycmF5KGNvbHVtbikpIHtcbiAgICAgICAgLy8gU2luZ2xlLVNvcnRcbiAgICAgICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IG5ld1NvcnRlZC5maW5kSW5kZXgoZCA9PiBkLmlkID09PSBjb2x1bW4uaWQpXG4gICAgICAgIGlmIChleGlzdGluZ0luZGV4ID4gLTEpIHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZyA9IG5ld1NvcnRlZFtleGlzdGluZ0luZGV4XVxuICAgICAgICAgIGlmIChleGlzdGluZy5kZXNjID09PSBzZWNvbmRTb3J0RGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoYWRkaXRpdmUpIHtcbiAgICAgICAgICAgICAgbmV3U29ydGVkLnNwbGljZShleGlzdGluZ0luZGV4LCAxKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXhpc3RpbmcuZGVzYyA9IGZpcnN0U29ydERpcmVjdGlvblxuICAgICAgICAgICAgICBuZXdTb3J0ZWQgPSBbZXhpc3RpbmddXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4aXN0aW5nLmRlc2MgPSBzZWNvbmRTb3J0RGlyZWN0aW9uXG4gICAgICAgICAgICBpZiAoIWFkZGl0aXZlKSB7XG4gICAgICAgICAgICAgIG5ld1NvcnRlZCA9IFtleGlzdGluZ11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYWRkaXRpdmUpIHtcbiAgICAgICAgICBuZXdTb3J0ZWQucHVzaCh7XG4gICAgICAgICAgICBpZDogY29sdW1uLmlkLFxuICAgICAgICAgICAgZGVzYzogZmlyc3RTb3J0RGlyZWN0aW9uLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3U29ydGVkID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogY29sdW1uLmlkLFxuICAgICAgICAgICAgICBkZXNjOiBmaXJzdFNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTXVsdGktU29ydFxuICAgICAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gbmV3U29ydGVkLmZpbmRJbmRleChkID0+IGQuaWQgPT09IGNvbHVtblswXS5pZClcbiAgICAgICAgLy8gRXhpc3RpbmcgU29ydGVkIENvbHVtblxuICAgICAgICBpZiAoZXhpc3RpbmdJbmRleCA+IC0xKSB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBuZXdTb3J0ZWRbZXhpc3RpbmdJbmRleF1cbiAgICAgICAgICBpZiAoZXhpc3RpbmcuZGVzYyA9PT0gc2Vjb25kU29ydERpcmVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGFkZGl0aXZlKSB7XG4gICAgICAgICAgICAgIG5ld1NvcnRlZC5zcGxpY2UoZXhpc3RpbmdJbmRleCwgY29sdW1uLmxlbmd0aClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbHVtbi5mb3JFYWNoKChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgbmV3U29ydGVkW2V4aXN0aW5nSW5kZXggKyBpXS5kZXNjID0gZmlyc3RTb3J0RGlyZWN0aW9uXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbHVtbi5mb3JFYWNoKChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgIG5ld1NvcnRlZFtleGlzdGluZ0luZGV4ICsgaV0uZGVzYyA9IHNlY29uZFNvcnREaXJlY3Rpb25cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghYWRkaXRpdmUpIHtcbiAgICAgICAgICAgIG5ld1NvcnRlZCA9IG5ld1NvcnRlZC5zbGljZShleGlzdGluZ0luZGV4LCBjb2x1bW4ubGVuZ3RoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBOZXcgU29ydCBDb2x1bW5cbiAgICAgICAgfSBlbHNlIGlmIChhZGRpdGl2ZSkge1xuICAgICAgICAgIG5ld1NvcnRlZCA9IG5ld1NvcnRlZC5jb25jYXQoXG4gICAgICAgICAgICBjb2x1bW4ubWFwKGQgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IGQuaWQsXG4gICAgICAgICAgICAgIGRlc2M6IGZpcnN0U29ydERpcmVjdGlvbixcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdTb3J0ZWQgPSBjb2x1bW4ubWFwKGQgPT4gKHtcbiAgICAgICAgICAgIGlkOiBkLmlkLFxuICAgICAgICAgICAgZGVzYzogZmlyc3RTb3J0RGlyZWN0aW9uLFxuICAgICAgICAgIH0pKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGVXaXRoRGF0YShcbiAgICAgICAge1xuICAgICAgICAgIHBhZ2U6ICghc29ydGVkLmxlbmd0aCAmJiBuZXdTb3J0ZWQubGVuZ3RoKSB8fCAhYWRkaXRpdmUgPyAwIDogdGhpcy5zdGF0ZS5wYWdlLFxuICAgICAgICAgIHNvcnRlZDogbmV3U29ydGVkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiBvblNvcnRlZENoYW5nZSAmJiBvblNvcnRlZENoYW5nZShuZXdTb3J0ZWQsIGNvbHVtbiwgYWRkaXRpdmUpXG4gICAgICApXG4gICAgfVxuXG4gICAgZmlsdGVyQ29sdW1uIChjb2x1bW4sIHZhbHVlKSB7XG4gICAgICBjb25zdCB7IGZpbHRlcmVkIH0gPSB0aGlzLmdldFJlc29sdmVkU3RhdGUoKVxuICAgICAgY29uc3QgeyBvbkZpbHRlcmVkQ2hhbmdlIH0gPSB0aGlzLnByb3BzXG5cbiAgICAgIC8vIFJlbW92ZSBvbGQgZmlsdGVyIGZpcnN0IGlmIGl0IGV4aXN0c1xuICAgICAgY29uc3QgbmV3RmlsdGVyaW5nID0gKGZpbHRlcmVkIHx8IFtdKS5maWx0ZXIoeCA9PiB4LmlkICE9PSBjb2x1bW4uaWQpXG5cbiAgICAgIGlmICh2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgbmV3RmlsdGVyaW5nLnB1c2goe1xuICAgICAgICAgIGlkOiBjb2x1bW4uaWQsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGVXaXRoRGF0YShcbiAgICAgICAge1xuICAgICAgICAgIGZpbHRlcmVkOiBuZXdGaWx0ZXJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IG9uRmlsdGVyZWRDaGFuZ2UgJiYgb25GaWx0ZXJlZENoYW5nZShuZXdGaWx0ZXJpbmcsIGNvbHVtbiwgdmFsdWUpXG4gICAgICApXG4gICAgfVxuXG4gICAgcmVzaXplQ29sdW1uU3RhcnQgKGV2ZW50LCBjb2x1bW4sIGlzVG91Y2gpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBjb25zdCBwYXJlbnRXaWR0aCA9IGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoXG5cbiAgICAgIGxldCBwYWdlWFxuICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgcGFnZVggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFnZVggPSBldmVudC5wYWdlWFxuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYXBFdmVudHMgPSB0cnVlXG4gICAgICB0aGlzLnNldFN0YXRlV2l0aERhdGEoXG4gICAgICAgIHtcbiAgICAgICAgICBjdXJyZW50bHlSZXNpemluZzoge1xuICAgICAgICAgICAgaWQ6IGNvbHVtbi5pZCxcbiAgICAgICAgICAgIHN0YXJ0WDogcGFnZVgsXG4gICAgICAgICAgICBwYXJlbnRXaWR0aCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMucmVzaXplQ29sdW1uTW92aW5nKVxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLnJlc2l6ZUNvbHVtbkVuZClcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5yZXNpemVDb2x1bW5FbmQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMucmVzaXplQ29sdW1uTW92aW5nKVxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMucmVzaXplQ29sdW1uRW5kKVxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMucmVzaXplQ29sdW1uRW5kKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHJlc2l6ZUNvbHVtbk1vdmluZyAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBjb25zdCB7IG9uUmVzaXplZENoYW5nZSwgY29sdW1uIH0gPSB0aGlzLnByb3BzXG4gICAgICBjb25zdCB7IHJlc2l6ZWQsIGN1cnJlbnRseVJlc2l6aW5nLCBjb2x1bW5zIH0gPSB0aGlzLmdldFJlc29sdmVkU3RhdGUoKVxuICAgICAgY29uc3QgY3VycmVudENvbHVtbiA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgYyA9PiBjLmFjY2Vzc29yID09PSBjdXJyZW50bHlSZXNpemluZy5pZCB8fCBjLmlkID09PSBjdXJyZW50bHlSZXNpemluZy5pZFxuICAgICAgKVxuICAgICAgY29uc3QgbWluUmVzaXplV2lkdGggPVxuICAgICAgICBjdXJyZW50Q29sdW1uICYmIGN1cnJlbnRDb2x1bW4ubWluUmVzaXplV2lkdGggIT0gbnVsbFxuICAgICAgICAgID8gY3VycmVudENvbHVtbi5taW5SZXNpemVXaWR0aFxuICAgICAgICAgIDogY29sdW1uLm1pblJlc2l6ZVdpZHRoXG5cbiAgICAgIC8vIERlbGV0ZSBvbGQgdmFsdWVcbiAgICAgIGNvbnN0IG5ld1Jlc2l6ZWQgPSByZXNpemVkLmZpbHRlcih4ID0+IHguaWQgIT09IGN1cnJlbnRseVJlc2l6aW5nLmlkKVxuXG4gICAgICBsZXQgcGFnZVhcblxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b3VjaG1vdmUnKSB7XG4gICAgICAgIHBhZ2VYID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVhcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcbiAgICAgICAgcGFnZVggPSBldmVudC5wYWdlWFxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KFxuICAgICAgICBjdXJyZW50bHlSZXNpemluZy5wYXJlbnRXaWR0aCArIHBhZ2VYIC0gY3VycmVudGx5UmVzaXppbmcuc3RhcnRYLFxuICAgICAgICBtaW5SZXNpemVXaWR0aFxuICAgICAgKVxuXG4gICAgICBuZXdSZXNpemVkLnB1c2goe1xuICAgICAgICBpZDogY3VycmVudGx5UmVzaXppbmcuaWQsXG4gICAgICAgIHZhbHVlOiBuZXdXaWR0aCxcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMuc2V0U3RhdGVXaXRoRGF0YShcbiAgICAgICAge1xuICAgICAgICAgIHJlc2l6ZWQ6IG5ld1Jlc2l6ZWQsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IG9uUmVzaXplZENoYW5nZSAmJiBvblJlc2l6ZWRDaGFuZ2UobmV3UmVzaXplZCwgZXZlbnQpXG4gICAgICApXG4gICAgfVxuXG4gICAgcmVzaXplQ29sdW1uRW5kIChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIGNvbnN0IGlzVG91Y2ggPSBldmVudC50eXBlID09PSAndG91Y2hlbmQnIHx8IGV2ZW50LnR5cGUgPT09ICd0b3VjaGNhbmNlbCdcblxuICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5yZXNpemVDb2x1bW5Nb3ZpbmcpXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgdGhpcy5yZXNpemVDb2x1bW5FbmQpXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5yZXNpemVDb2x1bW5FbmQpXG4gICAgICB9XG5cbiAgICAgIC8vIElmIGl0cyBhIHRvdWNoIGV2ZW50IGNsZWFyIHRoZSBtb3VzZSBvbmUncyBhcyB3ZWxsIGJlY2F1c2Ugc29tZXRpbWVzXG4gICAgICAvLyB0aGUgbW91c2VEb3duIGV2ZW50IGdldHMgY2FsbGVkIGFzIHdlbGwsIGJ1dCB0aGUgbW91c2VVcCBldmVudCBkb2Vzbid0XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLnJlc2l6ZUNvbHVtbk1vdmluZylcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJlc2l6ZUNvbHVtbkVuZClcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLnJlc2l6ZUNvbHVtbkVuZClcblxuICAgICAgLy8gVGhlIHRvdWNoIGV2ZW50cyBkb24ndCBwcm9wYWdhdGUgdXAgdG8gdGhlIHNvcnRpbmcncyBvbk1vdXNlRG93biBldmVudCBzb1xuICAgICAgLy8gbm8gbmVlZCB0byBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nIG9yIGVsc2UgdGhlIGZpcnN0IGNsaWNrIGFmdGVyIGEgdG91Y2hcbiAgICAgIC8vIGV2ZW50IHJlc2l6ZSB3aWxsIG5vdCBzb3J0IHRoZSBjb2x1bW4uXG4gICAgICBpZiAoIWlzVG91Y2gpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZVdpdGhEYXRhKHtcbiAgICAgICAgICBza2lwTmV4dFNvcnQ6IHRydWUsXG4gICAgICAgICAgY3VycmVudGx5UmVzaXppbmc6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuIl19 \ No newline at end of file diff --git a/lib/pagination.js b/lib/pagination.js new file mode 100644 index 0000000000..fcd250b216 --- /dev/null +++ b/lib/pagination.js @@ -0,0 +1,280 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint-disable react/no-did-update-set-state */ + + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +var _classnames = require('classnames'); + +var _classnames2 = _interopRequireDefault(_classnames); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var defaultButton = function defaultButton(props) { + return _react2.default.createElement( + 'button', + _extends({ type: 'button' }, props, { className: '-btn' }), + props.children + ); +}; + +var ReactTablePagination = function (_Component) { + _inherits(ReactTablePagination, _Component); + + function ReactTablePagination(props) { + _classCallCheck(this, ReactTablePagination); + + var _this = _possibleConstructorReturn(this, (ReactTablePagination.__proto__ || Object.getPrototypeOf(ReactTablePagination)).call(this, props)); + + _this.getSafePage = _this.getSafePage.bind(_this); + _this.changePage = _this.changePage.bind(_this); + _this.applyPage = _this.applyPage.bind(_this); + + _this.state = { + page: props.page + }; + return _this; + } + + _createClass(ReactTablePagination, [{ + key: 'componentDidUpdate', + value: function componentDidUpdate(prevProps, prevState) { + if (prevProps.page !== this.props.page || prevState.page !== this.state.page) { + // this is probably safe because we only update when old/new props/state.page are different + // eslint-disable-next-line react/no-did-update-set-state + this.setState({ + page: this.props.page + }); + } + /* when the last page from new props is smaller + than the current page in the page box, + the current page needs to be the last page. */ + if (this.props.pages !== prevProps.pages && this.props.pages <= this.state.page) { + this.setState({ + page: this.props.pages - 1 + }); + } + } + }, { + key: 'getSafePage', + value: function getSafePage(page) { + if (Number.isNaN(page)) { + page = this.props.page; + } + return Math.min(Math.max(page, 0), this.props.pages - 1); + } + }, { + key: 'changePage', + value: function changePage(page) { + page = this.getSafePage(page); + this.setState({ page: page }); + if (this.props.page !== page) { + this.props.onPageChange(page); + } + } + }, { + key: 'applyPage', + value: function applyPage(e) { + if (e) { + e.preventDefault(); + } + var page = this.state.page; + this.changePage(page === '' ? this.props.page : page); + } + }, { + key: 'getPageJumpProperties', + value: function getPageJumpProperties() { + var _this2 = this; + + return { + onKeyPress: function onKeyPress(e) { + if (e.which === 13 || e.keyCode === 13) { + _this2.applyPage(); + } + }, + onBlur: this.applyPage, + value: this.state.page === '' ? '' : this.state.page + 1, + onChange: function onChange(e) { + var val = e.target.value; + var page = val - 1; + if (val === '') { + return _this2.setState({ page: val }); + } + _this2.setState({ page: _this2.getSafePage(page) }); + }, + inputType: this.state.page === '' ? 'text' : 'number', + pageJumpText: this.props.pageJumpText + }; + } + }, { + key: 'render', + value: function render() { + var _this3 = this; + + var _props = this.props, + pages = _props.pages, + page = _props.page, + showPageSizeOptions = _props.showPageSizeOptions, + pageSizeOptions = _props.pageSizeOptions, + pageSize = _props.pageSize, + showPageJump = _props.showPageJump, + canPrevious = _props.canPrevious, + canNext = _props.canNext, + onPageSizeChange = _props.onPageSizeChange, + className = _props.className, + PreviousComponent = _props.PreviousComponent, + NextComponent = _props.NextComponent, + renderPageJump = _props.renderPageJump, + renderCurrentPage = _props.renderCurrentPage, + renderTotalPagesCount = _props.renderTotalPagesCount, + renderPageSizeOptions = _props.renderPageSizeOptions; + + + return _react2.default.createElement( + 'div', + { className: (0, _classnames2.default)(className, '-pagination'), style: this.props.style }, + _react2.default.createElement( + 'div', + { className: '-previous' }, + _react2.default.createElement( + PreviousComponent, + { + onClick: function onClick() { + if (!canPrevious) return; + _this3.changePage(page - 1); + }, + disabled: !canPrevious || this.state.page < 1 + }, + this.props.previousText + ) + ), + _react2.default.createElement( + 'div', + { className: '-center' }, + _react2.default.createElement( + 'span', + { className: '-pageInfo' }, + this.props.pageText, + ' ', + showPageJump ? renderPageJump(this.getPageJumpProperties()) : renderCurrentPage(page), + ' ', + this.props.ofText, + ' ', + renderTotalPagesCount(pages) + ), + showPageSizeOptions && renderPageSizeOptions({ + pageSize: pageSize, + rowsSelectorText: this.props.rowsSelectorText, + pageSizeOptions: pageSizeOptions, + onPageSizeChange: onPageSizeChange, + rowsText: this.props.rowsText + }) + ), + _react2.default.createElement( + 'div', + { className: '-next' }, + _react2.default.createElement( + NextComponent, + { + onClick: function onClick() { + if (!canNext) return; + _this3.changePage(page + 1); + }, + disabled: !canNext || this.state.page >= this.props.pages - 1 + }, + this.props.nextText + ) + ) + ); + } + }]); + + return ReactTablePagination; +}(_react.Component); + +ReactTablePagination.defaultProps = { + PreviousComponent: defaultButton, + NextComponent: defaultButton, + renderPageJump: function renderPageJump(_ref) { + var onChange = _ref.onChange, + value = _ref.value, + onBlur = _ref.onBlur, + onKeyPress = _ref.onKeyPress, + inputType = _ref.inputType, + pageJumpText = _ref.pageJumpText; + return _react2.default.createElement( + 'div', + { className: '-pageJump' }, + _react2.default.createElement('input', { + 'aria-label': pageJumpText, + type: inputType, + onChange: onChange, + value: value, + onBlur: onBlur, + onKeyPress: onKeyPress + }) + ); + }, + renderCurrentPage: function renderCurrentPage(page) { + return _react2.default.createElement( + 'span', + { className: '-currentPage' }, + page + 1 + ); + }, + renderTotalPagesCount: function renderTotalPagesCount(pages) { + return _react2.default.createElement( + 'span', + { className: '-totalPages' }, + pages || 1 + ); + }, + renderPageSizeOptions: function renderPageSizeOptions(_ref2) { + var pageSize = _ref2.pageSize, + pageSizeOptions = _ref2.pageSizeOptions, + rowsSelectorText = _ref2.rowsSelectorText, + onPageSizeChange = _ref2.onPageSizeChange, + rowsText = _ref2.rowsText; + return _react2.default.createElement( + 'span', + { className: 'select-wrap -pageSizeOptions' }, + _react2.default.createElement( + 'select', + { + 'aria-label': rowsSelectorText, + onChange: function onChange(e) { + return onPageSizeChange(Number(e.target.value)); + }, + value: pageSize + }, + pageSizeOptions.map(function (option, i) { + return ( + // eslint-disable-next-line react/no-array-index-key + _react2.default.createElement( + 'option', + { key: i, value: option }, + option + ' ' + rowsText + ) + ); + }) + ) + ); + } +}; +exports.default = ReactTablePagination; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYWdpbmF0aW9uLmpzIl0sIm5hbWVzIjpbImRlZmF1bHRCdXR0b24iLCJwcm9wcyIsImNoaWxkcmVuIiwiUmVhY3RUYWJsZVBhZ2luYXRpb24iLCJnZXRTYWZlUGFnZSIsImJpbmQiLCJjaGFuZ2VQYWdlIiwiYXBwbHlQYWdlIiwic3RhdGUiLCJwYWdlIiwicHJldlByb3BzIiwicHJldlN0YXRlIiwic2V0U3RhdGUiLCJwYWdlcyIsIk51bWJlciIsImlzTmFOIiwiTWF0aCIsIm1pbiIsIm1heCIsIm9uUGFnZUNoYW5nZSIsImUiLCJwcmV2ZW50RGVmYXVsdCIsIm9uS2V5UHJlc3MiLCJ3aGljaCIsImtleUNvZGUiLCJvbkJsdXIiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwidmFsIiwidGFyZ2V0IiwiaW5wdXRUeXBlIiwicGFnZUp1bXBUZXh0Iiwic2hvd1BhZ2VTaXplT3B0aW9ucyIsInBhZ2VTaXplT3B0aW9ucyIsInBhZ2VTaXplIiwic2hvd1BhZ2VKdW1wIiwiY2FuUHJldmlvdXMiLCJjYW5OZXh0Iiwib25QYWdlU2l6ZUNoYW5nZSIsImNsYXNzTmFtZSIsIlByZXZpb3VzQ29tcG9uZW50IiwiTmV4dENvbXBvbmVudCIsInJlbmRlclBhZ2VKdW1wIiwicmVuZGVyQ3VycmVudFBhZ2UiLCJyZW5kZXJUb3RhbFBhZ2VzQ291bnQiLCJyZW5kZXJQYWdlU2l6ZU9wdGlvbnMiLCJzdHlsZSIsInByZXZpb3VzVGV4dCIsInBhZ2VUZXh0IiwiZ2V0UGFnZUp1bXBQcm9wZXJ0aWVzIiwib2ZUZXh0Iiwicm93c1NlbGVjdG9yVGV4dCIsInJvd3NUZXh0IiwibmV4dFRleHQiLCJDb21wb25lbnQiLCJkZWZhdWx0UHJvcHMiLCJtYXAiLCJvcHRpb24iLCJpIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztrUUFBQTs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsZ0JBQWdCLFNBQWhCQSxhQUFnQjtBQUFBLFNBQ3BCO0FBQUE7QUFBQSxlQUFRLE1B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QWhCLENBQW9CLFVBQUNDLE1BQUQsRUFBU0MsQ0FBVDtBQUFBO0FBQ25CO0FBQ0E7QUFBQTtBQUFBLGdCQUFRLEtBQUtBLENBQWIsRUFBZ0IsT0FBT0QsTUFBdkI7QUFDTUEsb0JBRE4sU0FDZ0JMO0FBRGhCO0FBRm1CO0FBQUEsU0FBcEI7QUFMSDtBQURGLEtBUHFCO0FBQUE7QUFuQkgsQztrQkFESGpELG9CIiwiZmlsZSI6InBhZ2luYXRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZSAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcblxuY29uc3QgZGVmYXVsdEJ1dHRvbiA9IHByb3BzID0+IChcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgey4uLnByb3BzfSBjbGFzc05hbWU9XCItYnRuXCI+XG4gICAge3Byb3BzLmNoaWxkcmVufVxuICA8L2J1dHRvbj5cbilcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhY3RUYWJsZVBhZ2luYXRpb24gZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIFByZXZpb3VzQ29tcG9uZW50OiBkZWZhdWx0QnV0dG9uLFxuICAgIE5leHRDb21wb25lbnQ6IGRlZmF1bHRCdXR0b24sXG4gICAgcmVuZGVyUGFnZUp1bXA6ICh7XG4gICAgICBvbkNoYW5nZSwgdmFsdWUsIG9uQmx1ciwgb25LZXlQcmVzcywgaW5wdXRUeXBlLCBwYWdlSnVtcFRleHQsXG4gICAgfSkgPT4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCItcGFnZUp1bXBcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgYXJpYS1sYWJlbD17cGFnZUp1bXBUZXh0fVxuICAgICAgICAgIHR5cGU9e2lucHV0VHlwZX1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgICAgIG9uS2V5UHJlc3M9e29uS2V5UHJlc3N9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApLFxuICAgIHJlbmRlckN1cnJlbnRQYWdlOiBwYWdlID0+IDxzcGFuIGNsYXNzTmFtZT1cIi1jdXJyZW50UGFnZVwiPntwYWdlICsgMX08L3NwYW4+LFxuICAgIHJlbmRlclRvdGFsUGFnZXNDb3VudDogcGFnZXMgPT4gPHNwYW4gY2xhc3NOYW1lPVwiLXRvdGFsUGFnZXNcIj57cGFnZXMgfHwgMX08L3NwYW4+LFxuICAgIHJlbmRlclBhZ2VTaXplT3B0aW9uczogKHtcbiAgICAgIHBhZ2VTaXplLFxuICAgICAgcGFnZVNpemVPcHRpb25zLFxuICAgICAgcm93c1NlbGVjdG9yVGV4dCxcbiAgICAgIG9uUGFnZVNpemVDaGFuZ2UsXG4gICAgICByb3dzVGV4dCxcbiAgICB9KSA9PiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzZWxlY3Qtd3JhcCAtcGFnZVNpemVPcHRpb25zXCI+XG4gICAgICAgIDxzZWxlY3RcbiAgICAgICAgICBhcmlhLWxhYmVsPXtyb3dzU2VsZWN0b3JUZXh0fVxuICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IG9uUGFnZVNpemVDaGFuZ2UoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSl9XG4gICAgICAgICAgdmFsdWU9e3BhZ2VTaXplfVxuICAgICAgICA+XG4gICAgICAgICAge3BhZ2VTaXplT3B0aW9ucy5tYXAoKG9wdGlvbiwgaSkgPT4gKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2l9IHZhbHVlPXtvcHRpb259PlxuICAgICAgICAgICAgICB7YCR7b3B0aW9ufSAke3Jvd3NUZXh0fWB9XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L3NwYW4+XG4gICAgKSxcbiAgfVxuXG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKVxuXG4gICAgdGhpcy5nZXRTYWZlUGFnZSA9IHRoaXMuZ2V0U2FmZVBhZ2UuYmluZCh0aGlzKVxuICAgIHRoaXMuY2hhbmdlUGFnZSA9IHRoaXMuY2hhbmdlUGFnZS5iaW5kKHRoaXMpXG4gICAgdGhpcy5hcHBseVBhZ2UgPSB0aGlzLmFwcGx5UGFnZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgcGFnZTogcHJvcHMucGFnZSxcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUgKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgaWYgKHByZXZQcm9wcy5wYWdlICE9PSB0aGlzLnByb3BzLnBhZ2UgfHwgcHJldlN0YXRlLnBhZ2UgIT09IHRoaXMuc3RhdGUucGFnZSkge1xuICAgICAgLy8gdGhpcyBpcyBwcm9iYWJseSBzYWZlIGJlY2F1c2Ugd2Ugb25seSB1cGRhdGUgd2hlbiBvbGQvbmV3IHByb3BzL3N0YXRlLnBhZ2UgYXJlIGRpZmZlcmVudFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcGFnZTogdGhpcy5wcm9wcy5wYWdlLFxuICAgICAgfSlcbiAgICB9XG4gICAgLyogd2hlbiB0aGUgbGFzdCBwYWdlIGZyb20gbmV3IHByb3BzIGlzIHNtYWxsZXJcbiAgICAgdGhhbiB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBwYWdlIGJveCxcbiAgICAgdGhlIGN1cnJlbnQgcGFnZSBuZWVkcyB0byBiZSB0aGUgbGFzdCBwYWdlLiAqL1xuICAgIGlmICh0aGlzLnByb3BzLnBhZ2VzICE9PSBwcmV2UHJvcHMucGFnZXMgJiYgdGhpcy5wcm9wcy5wYWdlcyA8PSB0aGlzLnN0YXRlLnBhZ2UpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwYWdlOiB0aGlzLnByb3BzLnBhZ2VzIC0gMSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0U2FmZVBhZ2UgKHBhZ2UpIHtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHBhZ2UpKSB7XG4gICAgICBwYWdlID0gdGhpcy5wcm9wcy5wYWdlXG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChwYWdlLCAwKSwgdGhpcy5wcm9wcy5wYWdlcyAtIDEpXG4gIH1cblxuICBjaGFuZ2VQYWdlIChwYWdlKSB7XG4gICAgcGFnZSA9IHRoaXMuZ2V0U2FmZVBhZ2UocGFnZSlcbiAgICB0aGlzLnNldFN0YXRlKHsgcGFnZSB9KVxuICAgIGlmICh0aGlzLnByb3BzLnBhZ2UgIT09IHBhZ2UpIHtcbiAgICAgIHRoaXMucHJvcHMub25QYWdlQ2hhbmdlKHBhZ2UpXG4gICAgfVxuICB9XG5cbiAgYXBwbHlQYWdlIChlKSB7XG4gICAgaWYgKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIH1cbiAgICBjb25zdCBwYWdlID0gdGhpcy5zdGF0ZS5wYWdlXG4gICAgdGhpcy5jaGFuZ2VQYWdlKHBhZ2UgPT09ICcnID8gdGhpcy5wcm9wcy5wYWdlIDogcGFnZSlcbiAgfVxuXG4gIGdldFBhZ2VKdW1wUHJvcGVydGllcyAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9uS2V5UHJlc3M6IGUgPT4ge1xuICAgICAgICBpZiAoZS53aGljaCA9PT0gMTMgfHwgZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgIHRoaXMuYXBwbHlQYWdlKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uQmx1cjogdGhpcy5hcHBseVBhZ2UsXG4gICAgICB2YWx1ZTogdGhpcy5zdGF0ZS5wYWdlID09PSAnJyA/ICcnIDogdGhpcy5zdGF0ZS5wYWdlICsgMSxcbiAgICAgIG9uQ2hhbmdlOiBlID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gZS50YXJnZXQudmFsdWVcbiAgICAgICAgY29uc3QgcGFnZSA9IHZhbCAtIDFcbiAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7IHBhZ2U6IHZhbCB9KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBwYWdlOiB0aGlzLmdldFNhZmVQYWdlKHBhZ2UpIH0pXG4gICAgICB9LFxuICAgICAgaW5wdXRUeXBlOiB0aGlzLnN0YXRlLnBhZ2UgPT09ICcnID8gJ3RleHQnIDogJ251bWJlcicsXG4gICAgICBwYWdlSnVtcFRleHQ6IHRoaXMucHJvcHMucGFnZUp1bXBUZXh0LFxuICAgIH1cbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgLy8gQ29tcHV0ZWRcbiAgICAgIHBhZ2VzLFxuICAgICAgLy8gUHJvcHNcbiAgICAgIHBhZ2UsXG4gICAgICBzaG93UGFnZVNpemVPcHRpb25zLFxuICAgICAgcGFnZVNpemVPcHRpb25zLFxuICAgICAgcGFnZVNpemUsXG4gICAgICBzaG93UGFnZUp1bXAsXG4gICAgICBjYW5QcmV2aW91cyxcbiAgICAgIGNhbk5leHQsXG4gICAgICBvblBhZ2VTaXplQ2hhbmdlLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgUHJldmlvdXNDb21wb25lbnQsXG4gICAgICBOZXh0Q29tcG9uZW50LFxuICAgICAgcmVuZGVyUGFnZUp1bXAsXG4gICAgICByZW5kZXJDdXJyZW50UGFnZSxcbiAgICAgIHJlbmRlclRvdGFsUGFnZXNDb3VudCxcbiAgICAgIHJlbmRlclBhZ2VTaXplT3B0aW9ucyxcbiAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNsYXNzTmFtZSwgJy1wYWdpbmF0aW9uJyl9IHN0eWxlPXt0aGlzLnByb3BzLnN0eWxlfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCItcHJldmlvdXNcIj5cbiAgICAgICAgICA8UHJldmlvdXNDb21wb25lbnRcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjYW5QcmV2aW91cykgcmV0dXJuXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFnZShwYWdlIC0gMSlcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBkaXNhYmxlZD17IWNhblByZXZpb3VzIHx8IHRoaXMuc3RhdGUucGFnZSA8IDF9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMucHJldmlvdXNUZXh0fVxuICAgICAgICAgIDwvUHJldmlvdXNDb21wb25lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1jZW50ZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCItcGFnZUluZm9cIj5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUZXh0fXsnICd9XG4gICAgICAgICAgICB7c2hvd1BhZ2VKdW1wID8gcmVuZGVyUGFnZUp1bXAodGhpcy5nZXRQYWdlSnVtcFByb3BlcnRpZXMoKSkgOiByZW5kZXJDdXJyZW50UGFnZShwYWdlKX17JyAnfVxuICAgICAgICAgICAge3RoaXMucHJvcHMub2ZUZXh0fSB7cmVuZGVyVG90YWxQYWdlc0NvdW50KHBhZ2VzKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge3Nob3dQYWdlU2l6ZU9wdGlvbnMgJiZcbiAgICAgICAgICByZW5kZXJQYWdlU2l6ZU9wdGlvbnMoe1xuICAgICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgICByb3dzU2VsZWN0b3JUZXh0OiB0aGlzLnByb3BzLnJvd3NTZWxlY3RvclRleHQsXG4gICAgICAgICAgICBwYWdlU2l6ZU9wdGlvbnMsXG4gICAgICAgICAgICBvblBhZ2VTaXplQ2hhbmdlLFxuICAgICAgICAgICAgcm93c1RleHQ6IHRoaXMucHJvcHMucm93c1RleHQsXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1uZXh0XCI+XG4gICAgICAgICAgPE5leHRDb21wb25lbnRcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjYW5OZXh0KSByZXR1cm5cbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VQYWdlKHBhZ2UgKyAxKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshY2FuTmV4dCB8fCB0aGlzLnN0YXRlLnBhZ2UgPj0gdGhpcy5wcm9wcy5wYWdlcyAtIDF9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMubmV4dFRleHR9XG4gICAgICAgICAgPC9OZXh0Q29tcG9uZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/lib/propTypes.js b/lib/propTypes.js new file mode 100644 index 0000000000..aab994c6a1 --- /dev/null +++ b/lib/propTypes.js @@ -0,0 +1,178 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _propTypes = require('prop-types'); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = { + // General + data: _propTypes2.default.any, + loading: _propTypes2.default.bool, + showPagination: _propTypes2.default.bool, + showPaginationTop: _propTypes2.default.bool, + showPaginationBottom: _propTypes2.default.bool, + showPageSizeOptions: _propTypes2.default.bool, + pageSizeOptions: _propTypes2.default.array, + defaultPageSize: _propTypes2.default.number, + showPageJump: _propTypes2.default.bool, + collapseOnSortingChange: _propTypes2.default.bool, + collapseOnPageChange: _propTypes2.default.bool, + collapseOnDataChange: _propTypes2.default.bool, + freezeWhenExpanded: _propTypes2.default.bool, + sortable: _propTypes2.default.bool, + resizable: _propTypes2.default.bool, + filterable: _propTypes2.default.bool, + defaultSortDesc: _propTypes2.default.bool, + defaultSorted: _propTypes2.default.array, + defaultFiltered: _propTypes2.default.array, + defaultResized: _propTypes2.default.array, + defaultExpanded: _propTypes2.default.object, + defaultFilterMethod: _propTypes2.default.func, + defaultSortMethod: _propTypes2.default.func, + + // Controlled State Callbacks + onPageChange: _propTypes2.default.func, + onPageSizeChange: _propTypes2.default.func, + onSortedChange: _propTypes2.default.func, + onFilteredChange: _propTypes2.default.func, + onResizedChange: _propTypes2.default.func, + onExpandedChange: _propTypes2.default.func, + + // Pivoting + pivotBy: _propTypes2.default.array, + + // Key Constants + pivotValKey: _propTypes2.default.string, + pivotIDKey: _propTypes2.default.string, + subRowsKey: _propTypes2.default.string, + aggregatedKey: _propTypes2.default.string, + nestingLevelKey: _propTypes2.default.string, + originalKey: _propTypes2.default.string, + indexKey: _propTypes2.default.string, + groupedByPivotKey: _propTypes2.default.string, + + // Server-side Callbacks + onFetchData: _propTypes2.default.func, + + // Classes + className: _propTypes2.default.string, + style: _propTypes2.default.object, + + // Component decorators + getProps: _propTypes2.default.func, + getTableProps: _propTypes2.default.func, + getTheadGroupProps: _propTypes2.default.func, + getTheadGroupTrProps: _propTypes2.default.func, + getTheadGroupThProps: _propTypes2.default.func, + getTheadProps: _propTypes2.default.func, + getTheadTrProps: _propTypes2.default.func, + getTheadThProps: _propTypes2.default.func, + getTheadFilterProps: _propTypes2.default.func, + getTheadFilterTrProps: _propTypes2.default.func, + getTheadFilterThProps: _propTypes2.default.func, + getTbodyProps: _propTypes2.default.func, + getTrGroupProps: _propTypes2.default.func, + getTrProps: _propTypes2.default.func, + getTdProps: _propTypes2.default.func, + getTfootProps: _propTypes2.default.func, + getTfootTrProps: _propTypes2.default.func, + getTfootTdProps: _propTypes2.default.func, + getPaginationProps: _propTypes2.default.func, + getLoadingProps: _propTypes2.default.func, + getNoDataProps: _propTypes2.default.func, + getResizerProps: _propTypes2.default.func, + + // Global Column Defaults + columns: _propTypes2.default.arrayOf(_propTypes2.default.shape({ + // Renderers + Cell: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.string, _propTypes2.default.elementType]), + Header: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.string, _propTypes2.default.elementType]), + Footer: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.string, _propTypes2.default.elementType]), + Aggregated: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.string, _propTypes2.default.elementType]), + Pivot: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.string, _propTypes2.default.elementType]), + PivotValue: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.string, _propTypes2.default.elementType]), + Expander: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.string, _propTypes2.default.elementType]), + Filter: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.elementType]), + + // All Columns + sortable: _propTypes2.default.bool, // use table default + resizable: _propTypes2.default.bool, // use table default + filterable: _propTypes2.default.bool, // use table default + show: _propTypes2.default.bool, + minWidth: _propTypes2.default.number, + minResizeWidth: _propTypes2.default.number, + + // Cells only + className: _propTypes2.default.string, + style: _propTypes2.default.object, + getProps: _propTypes2.default.func, + + // Pivot only + aggregate: _propTypes2.default.func, + + // Headers only + headerClassName: _propTypes2.default.string, + headerStyle: _propTypes2.default.object, + getHeaderProps: _propTypes2.default.func, + + // Footers only + footerClassName: _propTypes2.default.string, + footerStyle: _propTypes2.default.object, + getFooterProps: _propTypes2.default.func, + filterMethod: _propTypes2.default.func, + filterAll: _propTypes2.default.bool, + sortMethod: _propTypes2.default.func + })), + + // Global Expander Column Defaults + expanderDefaults: _propTypes2.default.shape({ + sortable: _propTypes2.default.bool, + resizable: _propTypes2.default.bool, + filterable: _propTypes2.default.bool, + width: _propTypes2.default.number + }), + + pivotDefaults: _propTypes2.default.object, + + // Text + previousText: _propTypes2.default.node, + nextText: _propTypes2.default.node, + loadingText: _propTypes2.default.node, + noDataText: _propTypes2.default.node, + pageText: _propTypes2.default.node, + ofText: _propTypes2.default.node, + rowsText: _propTypes2.default.node, + pageJumpText: _propTypes2.default.node, + rowsSelectorText: _propTypes2.default.node, + + // Components + TableComponent: _propTypes2.default.elementType, + TheadComponent: _propTypes2.default.elementType, + TbodyComponent: _propTypes2.default.elementType, + TrGroupComponent: _propTypes2.default.elementType, + TrComponent: _propTypes2.default.elementType, + ThComponent: _propTypes2.default.elementType, + TdComponent: _propTypes2.default.elementType, + TfootComponent: _propTypes2.default.elementType, + FilterComponent: _propTypes2.default.elementType, + ExpanderComponent: _propTypes2.default.elementType, + PivotValueComponent: _propTypes2.default.elementType, + AggregatedComponent: _propTypes2.default.elementType, + // this is a computed default generated using + PivotComponent: _propTypes2.default.elementType, + // the ExpanderComponent and PivotValueComponent at run-time in methods.js + PaginationComponent: _propTypes2.default.elementType, + PreviousComponent: _propTypes2.default.elementType, + NextComponent: _propTypes2.default.elementType, + LoadingComponent: _propTypes2.default.elementType, + NoDataComponent: _propTypes2.default.elementType, + ResizerComponent: _propTypes2.default.elementType, + PadRowComponent: _propTypes2.default.elementType +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9wVHlwZXMuanMiXSwibmFtZXMiOlsiZGF0YSIsIlByb3BUeXBlcyIsImFueSIsImxvYWRpbmciLCJib29sIiwic2hvd1BhZ2luYXRpb24iLCJzaG93UGFnaW5hdGlvblRvcCIsInNob3dQYWdpbmF0aW9uQm90dG9tIiwic2hvd1BhZ2VTaXplT3B0aW9ucyIsInBhZ2VTaXplT3B0aW9ucyIsImFycmF5IiwiZGVmYXVsdFBhZ2VTaXplIiwibnVtYmVyIiwic2hvd1BhZ2VKdW1wIiwiY29sbGFwc2VPblNvcnRpbmdDaGFuZ2UiLCJjb2xsYXBzZU9uUGFnZUNoYW5nZSIsImNvbGxhcHNlT25EYXRhQ2hhbmdlIiwiZnJlZXplV2hlbkV4cGFuZGVkIiwic29ydGFibGUiLCJyZXNpemFibGUiLCJmaWx0ZXJhYmxlIiwiZGVmYXVsdFNvcnREZXNjIiwiZGVmYXVsdFNvcnRlZCIsImRlZmF1bHRGaWx0ZXJlZCIsImRlZmF1bHRSZXNpemVkIiwiZGVmYXVsdEV4cGFuZGVkIiwib2JqZWN0IiwiZGVmYXVsdEZpbHRlck1ldGhvZCIsImZ1bmMiLCJkZWZhdWx0U29ydE1ldGhvZCIsIm9uUGFnZUNoYW5nZSIsIm9uUGFnZVNpemVDaGFuZ2UiLCJvblNvcnRlZENoYW5nZSIsIm9uRmlsdGVyZWRDaGFuZ2UiLCJvblJlc2l6ZWRDaGFuZ2UiLCJvbkV4cGFuZGVkQ2hhbmdlIiwicGl2b3RCeSIsInBpdm90VmFsS2V5Iiwic3RyaW5nIiwicGl2b3RJREtleSIsInN1YlJvd3NLZXkiLCJhZ2dyZWdhdGVkS2V5IiwibmVzdGluZ0xldmVsS2V5Iiwib3JpZ2luYWxLZXkiLCJpbmRleEtleSIsImdyb3VwZWRCeVBpdm90S2V5Iiwib25GZXRjaERhdGEiLCJjbGFzc05hbWUiLCJzdHlsZSIsImdldFByb3BzIiwiZ2V0VGFibGVQcm9wcyIsImdldFRoZWFkR3JvdXBQcm9wcyIsImdldFRoZWFkR3JvdXBUclByb3BzIiwiZ2V0VGhlYWRHcm91cFRoUHJvcHMiLCJnZXRUaGVhZFByb3BzIiwiZ2V0VGhlYWRUclByb3BzIiwiZ2V0VGhlYWRUaFByb3BzIiwiZ2V0VGhlYWRGaWx0ZXJQcm9wcyIsImdldFRoZWFkRmlsdGVyVHJQcm9wcyIsImdldFRoZWFkRmlsdGVyVGhQcm9wcyIsImdldFRib2R5UHJvcHMiLCJnZXRUckdyb3VwUHJvcHMiLCJnZXRUclByb3BzIiwiZ2V0VGRQcm9wcyIsImdldFRmb290UHJvcHMiLCJnZXRUZm9vdFRyUHJvcHMiLCJnZXRUZm9vdFRkUHJvcHMiLCJnZXRQYWdpbmF0aW9uUHJvcHMiLCJnZXRMb2FkaW5nUHJvcHMiLCJnZXROb0RhdGFQcm9wcyIsImdldFJlc2l6ZXJQcm9wcyIsImNvbHVtbnMiLCJhcnJheU9mIiwic2hhcGUiLCJDZWxsIiwib25lT2ZUeXBlIiwiZWxlbWVudCIsImVsZW1lbnRUeXBlIiwiSGVhZGVyIiwiRm9vdGVyIiwiQWdncmVnYXRlZCIsIlBpdm90IiwiUGl2b3RWYWx1ZSIsIkV4cGFuZGVyIiwiRmlsdGVyIiwic2hvdyIsIm1pbldpZHRoIiwibWluUmVzaXplV2lkdGgiLCJhZ2dyZWdhdGUiLCJoZWFkZXJDbGFzc05hbWUiLCJoZWFkZXJTdHlsZSIsImdldEhlYWRlclByb3BzIiwiZm9vdGVyQ2xhc3NOYW1lIiwiZm9vdGVyU3R5bGUiLCJnZXRGb290ZXJQcm9wcyIsImZpbHRlck1ldGhvZCIsImZpbHRlckFsbCIsInNvcnRNZXRob2QiLCJleHBhbmRlckRlZmF1bHRzIiwid2lkdGgiLCJwaXZvdERlZmF1bHRzIiwicHJldmlvdXNUZXh0Iiwibm9kZSIsIm5leHRUZXh0IiwibG9hZGluZ1RleHQiLCJub0RhdGFUZXh0IiwicGFnZVRleHQiLCJvZlRleHQiLCJyb3dzVGV4dCIsInBhZ2VKdW1wVGV4dCIsInJvd3NTZWxlY3RvclRleHQiLCJUYWJsZUNvbXBvbmVudCIsIlRoZWFkQ29tcG9uZW50IiwiVGJvZHlDb21wb25lbnQiLCJUckdyb3VwQ29tcG9uZW50IiwiVHJDb21wb25lbnQiLCJUaENvbXBvbmVudCIsIlRkQ29tcG9uZW50IiwiVGZvb3RDb21wb25lbnQiLCJGaWx0ZXJDb21wb25lbnQiLCJFeHBhbmRlckNvbXBvbmVudCIsIlBpdm90VmFsdWVDb21wb25lbnQiLCJBZ2dyZWdhdGVkQ29tcG9uZW50IiwiUGl2b3RDb21wb25lbnQiLCJQYWdpbmF0aW9uQ29tcG9uZW50IiwiUHJldmlvdXNDb21wb25lbnQiLCJOZXh0Q29tcG9uZW50IiwiTG9hZGluZ0NvbXBvbmVudCIsIk5vRGF0YUNvbXBvbmVudCIsIlJlc2l6ZXJDb21wb25lbnQiLCJQYWRSb3dDb21wb25lbnQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7Ozs7a0JBRWU7QUFDYjtBQUNBQSxRQUFNQyxvQkFBVUMsR0FGSDtBQUdiQyxXQUFTRixvQkFBVUcsSUFITjtBQUliQyxrQkFBZ0JKLG9CQUFVRyxJQUpiO0FBS2JFLHFCQUFtQkwsb0JBQVVHLElBTGhCO0FBTWJHLHdCQUFzQk4sb0JBQVVHLElBTm5CO0FBT2JJLHVCQUFxQlAsb0JBQVVHLElBUGxCO0FBUWJLLG1CQUFpQlIsb0JBQVVTLEtBUmQ7QUFTYkMsbUJBQWlCVixvQkFBVVcsTUFUZDtBQVViQyxnQkFBY1osb0JBQVVHLElBVlg7QUFXYlUsMkJBQXlCYixvQkFBVUcsSUFYdEI7QUFZYlcsd0JBQXNCZCxvQkFBVUcsSUFabkI7QUFhYlksd0JBQXNCZixvQkFBVUcsSUFibkI7QUFjYmEsc0JBQW9CaEIsb0JBQVVHLElBZGpCO0FBZWJjLFlBQVVqQixvQkFBVUcsSUFmUDtBQWdCYmUsYUFBV2xCLG9CQUFVRyxJQWhCUjtBQWlCYmdCLGNBQVluQixvQkFBVUcsSUFqQlQ7QUFrQmJpQixtQkFBaUJwQixvQkFBVUcsSUFsQmQ7QUFtQmJrQixpQkFBZXJCLG9CQUFVUyxLQW5CWjtBQW9CYmEsbUJBQWlCdEIsb0JBQVVTLEtBcEJkO0FBcUJiYyxrQkFBZ0J2QixvQkFBVVMsS0FyQmI7QUFzQmJlLG1CQUFpQnhCLG9CQUFVeUIsTUF0QmQ7QUF1QmJDLHVCQUFxQjFCLG9CQUFVMkIsSUF2QmxCO0FB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VTRFLFdBM0psQjtBQTRKYjtBQUNBOEMsa0JBQWdCMUgsb0JBQVU0RSxXQTdKYjtBQThKYjtBQUNBK0MsdUJBQXFCM0gsb0JBQVU0RSxXQS9KbEI7QUFnS2JnRCxxQkFBbUI1SCxvQkFBVTRFLFdBaEtoQjtBQWlLYmlELGlCQUFlN0gsb0JBQVU0RSxXQWpLWjtBQWtLYmtELG9CQUFrQjlILG9CQUFVNEUsV0FsS2Y7QUFtS2JtRCxtQkFBaUIvSCxvQkFBVTRFLFdBbktkO0FBb0tib0Qsb0JBQWtCaEksb0JBQVU0RSxXQXBLZjtBQXFLYnFELG1CQUFpQmpJLG9CQUFVNEU7QUFyS2QsQyIsImZpbGUiOiJwcm9wVHlwZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLy8gR2VuZXJhbFxuICBkYXRhOiBQcm9wVHlwZXMuYW55LFxuICBsb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2hvd1BhZ2luYXRpb246IFByb3BUeXBlcy5ib29sLFxuICBzaG93UGFnaW5hdGlvblRvcDogUHJvcFR5cGVzLmJvb2wsXG4gIHNob3dQYWdpbmF0aW9uQm90dG9tOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2hvd1BhZ2VTaXplT3B0aW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIHBhZ2VTaXplT3B0aW9uczogUHJvcFR5cGVzLmFycmF5LFxuICBkZWZhdWx0UGFnZVNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gIHNob3dQYWdlSnVtcDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbGxhcHNlT25Tb3J0aW5nQ2hhbmdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29sbGFwc2VPblBhZ2VDaGFuZ2U6IFByb3BUeXBlcy5ib29sLFxuICBjb2xsYXBzZU9uRGF0YUNoYW5nZTogUHJvcFR5cGVzLmJvb2wsXG4gIGZyZWV6ZVdoZW5FeHBhbmRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHNvcnRhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgcmVzaXphYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgZmlsdGVyYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIGRlZmF1bHRTb3J0RGVzYzogUHJvcFR5cGVzLmJvb2wsXG4gIGRlZmF1bHRTb3J0ZWQ6IFByb3BUeXBlcy5hcnJheSxcbiAgZGVmYXVsdEZpbHRlcmVkOiBQcm9wVHlwZXMuYXJyYXksXG4gIGRlZmF1bHRSZXNpemVkOiBQcm9wVHlwZXMuYXJyYXksXG4gIGRlZmF1bHRFeHBhbmRlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgZGVmYXVsdEZpbHRlck1ldGhvZDogUHJvcFR5cGVzLmZ1bmMsXG4gIGRlZmF1bHRTb3J0TWV0aG9kOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvLyBDb250cm9sbGVkIFN0YXRlIENhbGxiYWNrc1xuICBvblBhZ2VDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblBhZ2VTaXplQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Tb3J0ZWRDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkZpbHRlcmVkQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25SZXNpemVkQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25FeHBhbmRlZENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLy8gUGl2b3RpbmdcbiAgcGl2b3RCeTogUHJvcFR5cGVzLmFycmF5LFxuXG4gIC8vIEtleSBDb25zdGFudHNcbiAgcGl2b3RWYWxLZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHBpdm90SURLZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHN1YlJvd3NLZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFnZ3JlZ2F0ZWRLZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG5lc3RpbmdMZXZlbEtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb3JpZ2luYWxLZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGluZGV4S2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBncm91cGVkQnlQaXZvdEtleTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvLyBTZXJ2ZXItc2lkZSBDYWxsYmFja3NcbiAgb25GZXRjaERhdGE6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8vIENsYXNzZXNcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvLyBDb21wb25lbnQgZGVjb3JhdG9yc1xuICBnZXRQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gIGdldFRhYmxlUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRUaGVhZEdyb3VwUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRUaGVhZEdyb3VwVHJQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gIGdldFRoZWFkR3JvdXBUaFByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0VGhlYWRQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gIGdldFRoZWFkVHJQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gIGdldFRoZWFkVGhQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gIGdldFRoZWFkRmlsdGVyUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRUaGVhZEZpbHRlclRyUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRUaGVhZEZpbHRlclRoUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRUYm9keVByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0VHJHcm91cFByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0VHJQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gIGdldFRkUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRUZm9vdFByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0VGZvb3RUclByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0VGZvb3RUZFByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0UGFnaW5hdGlvblByb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0TG9hZGluZ1Byb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0Tm9EYXRhUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBnZXRSZXNpemVyUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8vIEdsb2JhbCBDb2x1bW4gRGVmYXVsdHNcbiAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8vIFJlbmRlcmVyc1xuICAgICAgQ2VsbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQsIFByb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5lbGVtZW50VHlwZV0pLFxuICAgICAgSGVhZGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudCwgUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmVsZW1lbnRUeXBlXSksXG4gICAgICBGb290ZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZWxlbWVudFR5cGVdKSxcbiAgICAgIEFnZ3JlZ2F0ZWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZWxlbWVudFR5cGVdKSxcbiAgICAgIFBpdm90OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudCwgUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmVsZW1lbnRUeXBlXSksXG4gICAgICBQaXZvdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudCwgUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmVsZW1lbnRUeXBlXSksXG4gICAgICBFeHBhbmRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQsIFByb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5lbGVtZW50VHlwZV0pLFxuICAgICAgRmlsdGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlXSksXG5cbiAgICAgIC8vIEFsbCBDb2x1bW5zXG4gICAgICBzb3J0YWJsZTogUHJvcFR5cGVzLmJvb2wsIC8vIHVzZSB0YWJsZSBkZWZhdWx0XG4gICAgICByZXNpemFibGU6IFByb3BUeXBlcy5ib29sLCAvLyB1c2UgdGFibGUgZGVmYXVsdFxuICAgICAgZmlsdGVyYWJsZTogUHJvcFR5cGVzLmJvb2wsIC8vIHVzZSB0YWJsZSBkZWZhdWx0XG4gICAgICBzaG93OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIG1pbldpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgbWluUmVzaXplV2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgICAgIC8vIENlbGxzIG9ubHlcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgZ2V0UHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgICAvLyBQaXZvdCBvbmx5XG4gICAgICBhZ2dyZWdhdGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgICAvLyBIZWFkZXJzIG9ubHlcbiAgICAgIGhlYWRlckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGhlYWRlclN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgZ2V0SGVhZGVyUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgICAvLyBGb290ZXJzIG9ubHlcbiAgICAgIGZvb3RlckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGZvb3RlclN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgZ2V0Rm9vdGVyUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgZmlsdGVyTWV0aG9kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGZpbHRlckFsbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBzb3J0TWV0aG9kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB9KVxuICApLFxuXG4gIC8vIEdsb2JhbCBFeHBhbmRlciBDb2x1bW4gRGVmYXVsdHNcbiAgZXhwYW5kZXJEZWZhdWx0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzb3J0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgcmVzaXphYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBmaWx0ZXJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB3aWR0aDogUHJvcFR5cGVzLm51bWJlcixcbiAgfSksXG5cbiAgcGl2b3REZWZhdWx0czogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvLyBUZXh0XG4gIHByZXZpb3VzVGV4dDogUHJvcFR5cGVzLm5vZGUsXG4gIG5leHRUZXh0OiBQcm9wVHlwZXMubm9kZSxcbiAgbG9hZGluZ1RleHQ6IFByb3BUeXBlcy5ub2RlLFxuICBub0RhdGFUZXh0OiBQcm9wVHlwZXMubm9kZSxcbiAgcGFnZVRleHQ6IFByb3BUeXBlcy5ub2RlLFxuICBvZlRleHQ6IFByb3BUeXBlcy5ub2RlLFxuICByb3dzVGV4dDogUHJvcFR5cGVzLm5vZGUsXG4gIHBhZ2VKdW1wVGV4dDogUHJvcFR5cGVzLm5vZGUsXG4gIHJvd3NTZWxlY3RvclRleHQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8vIENvbXBvbmVudHNcbiAgVGFibGVDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgVGhlYWRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgVGJvZHlDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgVHJHcm91cENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBUckNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBUaENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBUZENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBUZm9vdENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBGaWx0ZXJDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgRXhwYW5kZXJDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgUGl2b3RWYWx1ZUNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBBZ2dyZWdhdGVkQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8vIHRoaXMgaXMgYSBjb21wdXRlZCBkZWZhdWx0IGdlbmVyYXRlZCB1c2luZ1xuICBQaXZvdENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvLyB0aGUgRXhwYW5kZXJDb21wb25lbnQgYW5kIFBpdm90VmFsdWVDb21wb25lbnQgYXQgcnVuLXRpbWUgaW4gbWV0aG9kcy5qc1xuICBQYWdpbmF0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIFByZXZpb3VzQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIE5leHRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgTG9hZGluZ0NvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBOb0RhdGFDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgUmVzaXplckNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICBQYWRSb3dDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbn1cbiJdfQ== \ No newline at end of file diff --git a/lib/utils.js b/lib/utils.js new file mode 100644 index 0000000000..2a3a1e16eb --- /dev/null +++ b/lib/utils.js @@ -0,0 +1,252 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +var _classnames = require('classnames'); + +var _classnames2 = _interopRequireDefault(_classnames); + +var _reactIs = require('react-is'); + +var ReactIs = _interopRequireWildcard(_reactIs); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +// +exports.default = { + get: get, + set: set, + takeRight: takeRight, + last: last, + orderBy: orderBy, + range: range, + remove: remove, + clone: clone, + getFirstDefined: getFirstDefined, + sum: sum, + makeTemplateComponent: makeTemplateComponent, + groupBy: groupBy, + isArray: isArray, + splitProps: splitProps, + compactObject: compactObject, + isSortingDesc: isSortingDesc, + normalizeComponent: normalizeComponent, + asPx: asPx +}; + + +function get(obj, path, def) { + if (!path) { + return obj; + } + var pathObj = makePathArray(path); + var val = void 0; + try { + val = pathObj.reduce(function (current, pathPart) { + return current[pathPart]; + }, obj); + } catch (e) { + // continue regardless of error + } + return typeof val !== 'undefined' ? val : def; +} + +function set() { + var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var path = arguments[1]; + var value = arguments[2]; + + var keys = makePathArray(path); + var keyPart = void 0; + var cursor = obj; + while ((keyPart = keys.shift()) && keys.length) { + if (!cursor[keyPart]) { + cursor[keyPart] = {}; + } + cursor = cursor[keyPart]; + } + cursor[keyPart] = value; + return obj; +} + +function takeRight(arr, n) { + var start = n > arr.length ? 0 : arr.length - n; + return arr.slice(start); +} + +function last(arr) { + return arr[arr.length - 1]; +} + +function range(n) { + var arr = []; + for (var i = 0; i < n; i += 1) { + arr.push(n); + } + return arr; +} + +function orderBy(arr, funcs, dirs, indexKey) { + return arr.sort(function (rowA, rowB) { + for (var i = 0; i < funcs.length; i += 1) { + var comp = funcs[i]; + var desc = dirs[i] === false || dirs[i] === 'desc'; + var sortInt = comp(rowA, rowB); + if (sortInt) { + return desc ? -sortInt : sortInt; + } + } + // Use the row index for tie breakers + return dirs[0] ? rowA[indexKey] - rowB[indexKey] : rowB[indexKey] - rowA[indexKey]; + }); +} + +function remove(a, b) { + return a.filter(function (o, i) { + var r = b(o); + if (r) { + a.splice(i, 1); + return true; + } + return false; + }); +} + +function clone(a) { + try { + return JSON.parse(JSON.stringify(a, function (key, value) { + if (typeof value === 'function') { + return value.toString(); + } + return value; + })); + } catch (e) { + return a; + } +} + +function getFirstDefined() { + for (var i = 0; i < arguments.length; i += 1) { + if (typeof (arguments.length <= i ? undefined : arguments[i]) !== 'undefined') { + return arguments.length <= i ? undefined : arguments[i]; + } + } +} + +function sum(arr) { + return arr.reduce(function (a, b) { + return a + b; + }, 0); +} + +function makeTemplateComponent(compClass, displayName) { + if (!displayName) { + throw new Error('No displayName found for template component:', compClass); + } + var cmp = function cmp(_ref) { + var children = _ref.children, + className = _ref.className, + rest = _objectWithoutProperties(_ref, ['children', 'className']); + + return _react2.default.createElement( + 'div', + _extends({ className: (0, _classnames2.default)(compClass, className) }, rest), + children + ); + }; + cmp.displayName = displayName; + return cmp; +} + +function groupBy(xs, key) { + return xs.reduce(function (rv, x, i) { + var resKey = typeof key === 'function' ? key(x, i) : x[key]; + rv[resKey] = isArray(rv[resKey]) ? rv[resKey] : []; + rv[resKey].push(x); + return rv; + }, {}); +} + +function asPx(value) { + value = Number(value); + return Number.isNaN(value) ? null : value + 'px'; +} + +function isArray(a) { + return Array.isArray(a); +} + +// ######################################################################## +// Non-exported Helpers +// ######################################################################## + +function makePathArray(obj) { + return flattenDeep(obj).join('.').replace(/\[/g, '.').replace(/\]/g, '').split('.'); +} + +function flattenDeep(arr) { + var newArr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + if (!isArray(arr)) { + newArr.push(arr); + } else { + for (var i = 0; i < arr.length; i += 1) { + flattenDeep(arr[i], newArr); + } + } + return newArr; +} + +function splitProps(_ref2) { + var className = _ref2.className, + style = _ref2.style, + rest = _objectWithoutProperties(_ref2, ['className', 'style']); + + return { + className: className, + style: style, + rest: rest || {} + }; +} + +function compactObject(obj) { + var newObj = {}; + if (obj) { + Object.keys(obj).map(function (key) { + if (Object.prototype.hasOwnProperty.call(obj, key) && obj[key] !== undefined && typeof obj[key] !== 'undefined') { + newObj[key] = obj[key]; + } + return true; + }); + } + return newObj; +} + +function isSortingDesc(d) { + return !!(d.sort === 'desc' || d.desc === true || d.asc === false); +} + +function normalizeComponent(Comp, props) { + var fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Comp; + + if (ReactIs.isElement(Comp) || typeof Comp === 'string') { + return Comp; + } else if (ReactIs.isValidElementType(Comp)) { + return _react2.default.createElement(Comp, props); + } + + return fallback; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy5qcyJdLCJuYW1lcyI6WyJSZWFjdElzIiwiZ2V0Iiwic2V0IiwidGFrZVJpZ2h0IiwibGFzdCIsIm9yZGVyQnkiLCJyYW5nZSIsInJlbW92ZSIsImNsb25lIiwiZ2V0Rmlyc3REZWZpbmVkIiwic3VtIiwibWFrZVRlbXBsYXRlQ29tcG9uZW50IiwiZ3JvdXBCeSIsImlzQXJyYXkiLCJzcGxpdFByb3BzIiwiY29tcGFjdE9iamVjdCIsImlzU29ydGluZ0Rlc2MiLCJub3JtYWxpemVDb21wb25lbnQiLCJhc1B4Iiwib2JqIiwicGF0aCIsImRlZiIsInBhdGhPYmoiLCJtYWtlUGF0aEFycmF5IiwidmFsIiwicmVkdWNlIiwiY3VycmVudCIsInBhdGhQYXJ0IiwiZSIsInZhbHVlIiwia2V5cyIsImtleVBhcnQiLCJjdXJzb3IiLCJzaGlmdCIsImxlbmd0aCIsImFyciIsIm4iLCJzdGFydCIsInNsaWNlIiwiaSIsInB1c2giLCJmdW5jcyIsImRpcnMiLCJpbmRleEtleSIsInNvcnQiLCJyb3dBIiwicm93QiIsImNvbXAiLCJkZXNjIiwic29ydEludCIsImEiLCJiIiwiZmlsdGVyIiwibyIsInIiLCJzcGxpY2UiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJrZXkiLCJ0b1N0cmluZyIsImNvbXBDbGFzcyIsImRpc3BsYXlOYW1lIiwiRXJyb3IiLCJjbXAiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsInJlc3QiLCJ4cyIsInJ2IiwieCIsInJlc0tleSIsIk51bWJlciIsImlzTmFOIiwiQXJyYXkiLCJmbGF0dGVuRGVlcCIsImpvaW4iLCJyZXBsYWNlIiwic3BsaXQiLCJuZXdBcnIiLCJzdHlsZSIsIm5ld09iaiIsIk9iamVjdCIsIm1hcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInVuZGVmaW5lZCIsImQiLCJhc2MiLCJDb21wIiwicHJvcHMiLCJmYWxsYmFjayIsImlzRWxlbWVudCIsImlzVmFsaWRFbGVtZW50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QyxXQUFPLDhCQUFDLElBQUQsRUFBVUMsS0FBVixDQUFQO0FBQ0Q7O0FBRUQsU0FBT0MsUUFBUDtBQUNEIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCAqIGFzIFJlYWN0SXMgZnJvbSAncmVhY3QtaXMnXG5cbi8vXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCxcbiAgc2V0LFxuICB0YWtlUmlnaHQsXG4gIGxhc3QsXG4gIG9yZGVyQnksXG4gIHJhbmdlLFxuICByZW1vdmUsXG4gIGNsb25lLFxuICBnZXRGaXJzdERlZmluZWQsXG4gIHN1bSxcbiAgbWFrZVRlbXBsYXRlQ29tcG9uZW50LFxuICBncm91cEJ5LFxuICBpc0FycmF5LFxuICBzcGxpdFByb3BzLFxuICBjb21wYWN0T2JqZWN0LFxuICBpc1NvcnRpbmdEZXNjLFxuICBub3JtYWxpemVDb21wb25lbnQsXG4gIGFzUHgsXG59XG5cbmZ1bmN0aW9uIGdldCAob2JqLCBwYXRoLCBkZWYpIHtcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuIG9ialxuICB9XG4gIGNvbnN0IHBhdGhPYmogPSBtYWtlUGF0aEFycmF5KHBhdGgpXG4gIGxldCB2YWxcbiAgdHJ5IHtcbiAgICB2YWwgPSBwYXRoT2JqLnJlZHVjZSgoY3VycmVudCwgcGF0aFBhcnQpID0+IGN1cnJlbnRbcGF0aFBhcnRdLCBvYmopXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIG9mIGVycm9yXG4gIH1cbiAgcmV0dXJuIHR5cGVvZiB2YWwgIT09ICd1bmRlZmluZWQnID8gdmFsIDogZGVmXG59XG5cbmZ1bmN0aW9uIHNldCAob2JqID0ge30sIHBhdGgsIHZhbHVlKSB7XG4gIGNvbnN0IGtleXMgPSBtYWtlUGF0aEFycmF5KHBhdGgpXG4gIGxldCBrZXlQYXJ0XG4gIGxldCBjdXJzb3IgPSBvYmpcbiAgd2hpbGUgKChrZXlQYXJ0ID0ga2V5cy5zaGlmdCgpKSAmJiBrZXlzLmxlbmd0aCkge1xuICAgIGlmICghY3Vyc29yW2tleVBhcnRdKSB7XG4gICAgICBjdXJzb3Jba2V5UGFydF0gPSB7fVxuICAgIH1cbiAgICBjdXJzb3IgPSBjdXJzb3Jba2V5UGFydF1cbiAgfVxuICBjdXJzb3Jba2V5UGFydF0gPSB2YWx1ZVxuICByZXR1cm4gb2JqXG59XG5cbmZ1bmN0aW9uIHRha2VSaWdodCAoYXJyLCBuKSB7XG4gIGNvbnN0IHN0YXJ0ID0gbiA+IGFyci5sZW5ndGggPyAwIDogYXJyLmxlbmd0aCAtIG5cbiAgcmV0dXJuIGFyci5zbGljZShzdGFydClcbn1cblxuZnVuY3Rpb24gbGFzdCAoYXJyKSB7XG4gIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdXG59XG5cbmZ1bmN0aW9uIHJhbmdlIChuKSB7XG4gIGNvbnN0IGFyciA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSArPSAxKSB7XG4gICAgYXJyLnB1c2gobilcbiAgfVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIG9yZGVyQnkgKGFyciwgZnVuY3MsIGRpcnMsIGluZGV4S2V5KSB7XG4gIHJldHVybiBhcnIuc29ydCgocm93QSwgcm93QikgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IGNvbXAgPSBmdW5jc1tpXVxuICAgICAgY29uc3QgZGVzYyA9IGRpcnNbaV0gPT09IGZhbHNlIHx8IGRpcnNbaV0gPT09ICdkZXNjJ1xuICAgICAgY29uc3Qgc29ydEludCA9IGNvbXAocm93QSwgcm93QilcbiAgICAgIGlmIChzb3J0SW50KSB7XG4gICAgICAgIHJldHVybiBkZXNjID8gLXNvcnRJbnQgOiBzb3J0SW50XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFVzZSB0aGUgcm93IGluZGV4IGZvciB0aWUgYnJlYWtlcnNcbiAgICByZXR1cm4gZGlyc1swXSA/IHJvd0FbaW5kZXhLZXldIC0gcm93QltpbmRleEtleV0gOiByb3dCW2luZGV4S2V5XSAtIHJvd0FbaW5kZXhLZXldXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlbW92ZSAoYSwgYikge1xuICByZXR1cm4gYS5maWx0ZXIoKG8sIGkpID0+IHtcbiAgICBjb25zdCByID0gYihvKVxuICAgIGlmIChyKSB7XG4gICAgICBhLnNwbGljZShpLCAxKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNsb25lIChhKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICBKU09OLnN0cmluZ2lmeShhLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0pXG4gICAgKVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGFcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRGaXJzdERlZmluZWQgKC4uLmFyZ3MpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGFyZ3NbaV1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3VtIChhcnIpIHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKVxufVxuXG5mdW5jdGlvbiBtYWtlVGVtcGxhdGVDb21wb25lbnQgKGNvbXBDbGFzcywgZGlzcGxheU5hbWUpIHtcbiAgaWYgKCFkaXNwbGF5TmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gZGlzcGxheU5hbWUgZm91bmQgZm9yIHRlbXBsYXRlIGNvbXBvbmVudDonLCBjb21wQ2xhc3MpXG4gIH1cbiAgY29uc3QgY21wID0gKHsgY2hpbGRyZW4sIGNsYXNzTmFtZSwgLi4ucmVzdCB9KSA9PiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoY29tcENsYXNzLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbiAgY21wLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWVcbiAgcmV0dXJuIGNtcFxufVxuXG5mdW5jdGlvbiBncm91cEJ5ICh4cywga2V5KSB7XG4gIHJldHVybiB4cy5yZWR1Y2UoKHJ2LCB4LCBpKSA9PiB7XG4gICAgY29uc3QgcmVzS2V5ID0gdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJyA/IGtleSh4LCBpKSA6IHhba2V5XVxuICAgIHJ2W3Jlc0tleV0gPSBpc0FycmF5KHJ2W3Jlc0tleV0pID8gcnZbcmVzS2V5XSA6IFtdXG4gICAgcnZbcmVzS2V5XS5wdXNoKHgpXG4gICAgcmV0dXJuIHJ2XG4gIH0sIHt9KVxufVxuXG5mdW5jdGlvbiBhc1B4ICh2YWx1ZSkge1xuICB2YWx1ZSA9IE51bWJlcih2YWx1ZSlcbiAgcmV0dXJuIE51bWJlci5pc05hTih2YWx1ZSkgPyBudWxsIDogYCR7dmFsdWV9cHhgXG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkgKGEpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYSlcbn1cblxuLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBOb24tZXhwb3J0ZWQgSGVscGVyc1xuLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbmZ1bmN0aW9uIG1ha2VQYXRoQXJyYXkgKG9iaikge1xuICByZXR1cm4gZmxhdHRlbkRlZXAob2JqKVxuICAgIC5qb2luKCcuJylcbiAgICAucmVwbGFjZSgvXFxbL2csICcuJylcbiAgICAucmVwbGFjZSgvXFxdL2csICcnKVxuICAgIC5zcGxpdCgnLicpXG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW5EZWVwIChhcnIsIG5ld0FyciA9IFtdKSB7XG4gIGlmICghaXNBcnJheShhcnIpKSB7XG4gICAgbmV3QXJyLnB1c2goYXJyKVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBmbGF0dGVuRGVlcChhcnJbaV0sIG5ld0FycilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld0FyclxufVxuXG5mdW5jdGlvbiBzcGxpdFByb3BzICh7IGNsYXNzTmFtZSwgc3R5bGUsIC4uLnJlc3QgfSkge1xuICByZXR1cm4ge1xuICAgIGNsYXNzTmFtZSxcbiAgICBzdHlsZSxcbiAgICByZXN0OiByZXN0IHx8IHt9LFxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBhY3RPYmplY3QgKG9iaikge1xuICBjb25zdCBuZXdPYmogPSB7fVxuICBpZiAob2JqKSB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5tYXAoa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSAmJlxuICAgICAgICBvYmpba2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHR5cGVvZiBvYmpba2V5XSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICkge1xuICAgICAgICBuZXdPYmpba2V5XSA9IG9ialtrZXldXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIG5ld09ialxufVxuXG5mdW5jdGlvbiBpc1NvcnRpbmdEZXNjIChkKSB7XG4gIHJldHVybiAhIShkLnNvcnQgPT09ICdkZXNjJyB8fCBkLmRlc2MgPT09IHRydWUgfHwgZC5hc2MgPT09IGZhbHNlKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKENvbXAsIHByb3BzLCBmYWxsYmFjayA9IENvbXApIHtcbiAgaWYgKFJlYWN0SXMuaXNFbGVtZW50KENvbXApIHx8IHR5cGVvZiBDb21wID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBDb21wXG4gIH0gZWxzZSBpZiAoUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUoQ29tcCkpIHtcbiAgICByZXR1cm4gPENvbXAgey4uLnByb3BzfSAvPlxuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrXG59XG5cbiJdfQ== \ No newline at end of file diff --git a/react-table.css b/react-table.css new file mode 100644 index 0000000000..67b658a550 --- /dev/null +++ b/react-table.css @@ -0,0 +1 @@ +.ReactTable{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border:1px solid rgba(0,0,0,0.1)}.ReactTable *{box-sizing:border-box}.ReactTable .rt-table{-webkit-box-flex:1;-ms-flex:auto 1;flex:auto 1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%;border-collapse:collapse;overflow:auto}.ReactTable .rt-thead{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ReactTable .rt-thead.-headerGroups{background:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.05)}.ReactTable .rt-thead.-filters{border-bottom:1px solid rgba(0,0,0,0.05)}.ReactTable .rt-thead.-filters input,.ReactTable .rt-thead.-filters select{border:1px solid rgba(0,0,0,0.1);background:#fff;padding:5px 7px;font-size:inherit;border-radius:3px;font-weight:normal;outline-width:0}.ReactTable .rt-thead.-filters .rt-th{border-right:1px solid rgba(0,0,0,0.02)}.ReactTable .rt-thead.-header{box-shadow:0 2px 15px 0 rgba(0,0,0,0.15)}.ReactTable .rt-thead .rt-tr{text-align:center}.ReactTable .rt-thead .rt-th,.ReactTable .rt-thead .rt-td{padding:5px 5px;line-height:normal;position:relative;border-right:1px solid rgba(0,0,0,0.05);transition:box-shadow .3s cubic-bezier(.175,.885,.32,1.275);box-shadow:inset 0 0 0 0 transparent}.ReactTable .rt-thead .rt-th.-sort-asc,.ReactTable .rt-thead .rt-td.-sort-asc{box-shadow:inset 0 3px 0 0 rgba(0,0,0,0.6)}.ReactTable .rt-thead .rt-th.-sort-desc,.ReactTable .rt-thead .rt-td.-sort-desc{box-shadow:inset 0 -3px 0 0 rgba(0,0,0,0.6)}.ReactTable .rt-thead .rt-th.-cursor-pointer,.ReactTable .rt-thead .rt-td.-cursor-pointer{cursor:pointer}.ReactTable .rt-thead .rt-th:last-child,.ReactTable .rt-thead .rt-td:last-child{border-right:0}.ReactTable .rt-thead .rt-th:focus{outline-width:0}.ReactTable .rt-thead .rt-resizable-header{overflow:visible}.ReactTable .rt-thead .rt-resizable-header:last-child{overflow:hidden}.ReactTable .rt-thead .rt-resizable-header-content{overflow:hidden;text-overflow:ellipsis}.ReactTable .rt-thead .rt-header-pivot{border-right-color:#f7f7f7}.ReactTable .rt-thead .rt-header-pivot:after,.ReactTable .rt-thead .rt-header-pivot:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.ReactTable .rt-thead .rt-header-pivot:after{border-color:rgba(255,255,255,0);border-left-color:#fff;border-width:8px;margin-top:-8px}.ReactTable .rt-thead .rt-header-pivot:before{border-color:rgba(102,102,102,0);border-left-color:#f7f7f7;border-width:10px;margin-top:-10px}.ReactTable .rt-tbody{-webkit-box-flex:99999;-ms-flex:99999 1 auto;flex:99999 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:auto}.ReactTable .rt-tbody .rt-tr-group{border-bottom:solid 1px rgba(0,0,0,0.05)}.ReactTable .rt-tbody .rt-tr-group:last-child{border-bottom:0}.ReactTable .rt-tbody .rt-td{border-right:1px solid rgba(0,0,0,0.02)}.ReactTable .rt-tbody .rt-td:last-child{border-right:0}.ReactTable .rt-tbody .rt-expandable{cursor:pointer;text-overflow:clip}.ReactTable .rt-tr-group{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.ReactTable .rt-tr{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.ReactTable .rt-th,.ReactTable .rt-td{-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0;white-space:nowrap;text-overflow:ellipsis;padding:7px 5px;overflow:hidden;transition:.3s ease;transition-property:width,min-width,padding,opacity}.ReactTable .rt-th.-hidden,.ReactTable .rt-td.-hidden{width:0 !important;min-width:0 !important;padding:0 !important;border:0 !important;opacity:0 !important}.ReactTable .rt-expander{display:inline-block;position:relative;margin:0;color:transparent;margin:0 10px}.ReactTable .rt-expander:after{content:'';position:absolute;width:0;height:0;top:50%;left:50%;-webkit-transform:translate(-50%,-50%) rotate(-90deg);transform:translate(-50%,-50%) rotate(-90deg);border-left:5.04px solid transparent;border-right:5.04px solid transparent;border-top:7px solid rgba(0,0,0,0.8);transition:all .3s cubic-bezier(.175,.885,.32,1.275);cursor:pointer}.ReactTable .rt-expander.-open:after{-webkit-transform:translate(-50%,-50%) rotate(0);transform:translate(-50%,-50%) rotate(0)}.ReactTable .rt-resizer{display:inline-block;position:absolute;width:36px;top:0;bottom:0;right:-18px;cursor:col-resize;z-index:10}.ReactTable .rt-tfoot{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;box-shadow:0 0 15px 0 rgba(0,0,0,0.15)}.ReactTable .rt-tfoot .rt-td{border-right:1px solid rgba(0,0,0,0.05)}.ReactTable .rt-tfoot .rt-td:last-child{border-right:0}.ReactTable.-striped .rt-tr.-odd{background:rgba(0,0,0,0.03)}.ReactTable.-highlight .rt-tbody .rt-tr:not(.-padRow):hover{background:rgba(0,0,0,0.05)}.ReactTable .-pagination{z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:3px;box-shadow:0 0 15px 0 rgba(0,0,0,0.1);border-top:2px solid rgba(0,0,0,0.1)}.ReactTable .-pagination input,.ReactTable .-pagination select{border:1px solid rgba(0,0,0,0.1);background:#fff;padding:5px 7px;font-size:inherit;border-radius:3px;font-weight:normal;outline-width:0}.ReactTable .-pagination .-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:block;width:100%;height:100%;border:0;border-radius:3px;padding:6px;font-size:1em;color:rgba(0,0,0,0.6);background:rgba(0,0,0,0.1);transition:all .1s ease;cursor:pointer;outline-width:0}.ReactTable .-pagination .-btn[disabled]{opacity:.5;cursor:default}.ReactTable .-pagination .-btn:not([disabled]):hover{background:rgba(0,0,0,0.3);color:#fff}.ReactTable .-pagination .-previous,.ReactTable .-pagination .-next{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.ReactTable .-pagination .-center{-webkit-box-flex:1.5;-ms-flex:1.5;flex:1.5;text-align:center;margin-bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.ReactTable .-pagination .-pageInfo{display:inline-block;margin:3px 10px;white-space:nowrap}.ReactTable .-pagination .-pageJump{display:inline-block}.ReactTable .-pagination .-pageJump input{width:70px;text-align:center}.ReactTable .-pagination .-pageSizeOptions{margin:3px 10px}.ReactTable .rt-noData{display:block;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background:rgba(255,255,255,0.8);transition:all .3s ease;z-index:1;pointer-events:none;padding:20px;color:rgba(0,0,0,0.5)}.ReactTable .-loading{display:block;position:absolute;left:0;right:0;top:0;bottom:0;background:rgba(255,255,255,0.8);transition:all .3s ease;z-index:-1;opacity:0;pointer-events:none}.ReactTable .-loading > div{position:absolute;display:block;text-align:center;width:100%;top:50%;left:0;font-size:15px;color:rgba(0,0,0,0.6);-webkit-transform:translateY(-52%);transform:translateY(-52%);transition:all .3s cubic-bezier(.25,.46,.45,.94)}.ReactTable .-loading.-active{opacity:1;z-index:2;pointer-events:all}.ReactTable .-loading.-active > div{-webkit-transform:translateY(50%);transform:translateY(50%)}.ReactTable .rt-resizing .rt-th,.ReactTable .rt-resizing .rt-td{transition:none !important;cursor:col-resize;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} \ No newline at end of file diff --git a/react-table.js b/react-table.js new file mode 100644 index 0000000000..59ce75807d --- /dev/null +++ b/react-table.js @@ -0,0 +1,3971 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) : + typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) : + (factory((global.ReactTable = {}),global.React)); +}(this, (function (exports,React) { 'use strict'; + +var React__default = 'default' in React ? React['default'] : React; + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var classnames = createCommonjsModule(function (module) { +/*! + Copyright (c) 2018 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ +/* global define */ + +(function () { + var hasOwn = {}.hasOwnProperty; + + function classNames() { + var classes = []; + + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i]; + if (!arg) continue; + + var argType = typeof arg; + + if (argType === 'string' || argType === 'number') { + classes.push(arg); + } else if (Array.isArray(arg)) { + if (arg.length) { + var inner = classNames.apply(null, arg); + if (inner) { + classes.push(inner); + } + } + } else if (argType === 'object') { + if (arg.toString === Object.prototype.toString) { + for (var key in arg) { + if (hasOwn.call(arg, key) && arg[key]) { + classes.push(key); + } + } + } else { + classes.push(arg.toString()); + } + } + } + + return classes.join(' '); + } + + if ('object' !== 'undefined' && module.exports) { + classNames.default = classNames; + module.exports = classNames; + } else if (typeof undefined === 'function' && typeof undefined.amd === 'object' && undefined.amd) { + // register as 'classnames', consistent with npm package name + undefined('classnames', [], function () { + return classNames; + }); + } else { + window.classNames = classNames; + } +}()); +}); + +/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var b="function"===typeof Symbol&&Symbol.for; var c=b?Symbol.for("react.element"):60103; var d=b?Symbol.for("react.portal"):60106; var e=b?Symbol.for("react.fragment"):60107; var f=b?Symbol.for("react.strict_mode"):60108; var g=b?Symbol.for("react.profiler"):60114; var h=b?Symbol.for("react.provider"):60109; var k=b?Symbol.for("react.context"):60110; var l=b?Symbol.for("react.async_mode"):60111; var m=b?Symbol.for("react.concurrent_mode"):60111; var n=b?Symbol.for("react.forward_ref"):60112; var p=b?Symbol.for("react.suspense"):60113; var q=b? +Symbol.for("react.suspense_list"):60120; var r=b?Symbol.for("react.memo"):60115; var t=b?Symbol.for("react.lazy"):60116; var v=b?Symbol.for("react.block"):60121; var w=b?Symbol.for("react.fundamental"):60117; var x=b?Symbol.for("react.responder"):60118; var y=b?Symbol.for("react.scope"):60119; +function z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type, a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof, a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}var AsyncMode=l;var ConcurrentMode=m;var ContextConsumer=k;var ContextProvider=h;var Element=c;var ForwardRef=n;var Fragment=e;var Lazy=t;var Memo=r;var Portal=d; +var Profiler=g;var StrictMode=f;var Suspense=p;var isAsyncMode=function(a){return A(a)||z(a)===l};var isConcurrentMode=A;var isContextConsumer=function(a){return z(a)===k};var isContextProvider=function(a){return z(a)===h};var isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===c};var isForwardRef=function(a){return z(a)===n};var isFragment=function(a){return z(a)===e};var isLazy=function(a){return z(a)===t}; +var isMemo=function(a){return z(a)===r};var isPortal=function(a){return z(a)===d};var isProfiler=function(a){return z(a)===g};var isStrictMode=function(a){return z(a)===f};var isSuspense=function(a){return z(a)===p}; +var isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};var typeOf=z; + +var reactIs_production_min = { + AsyncMode: AsyncMode, + ConcurrentMode: ConcurrentMode, + ContextConsumer: ContextConsumer, + ContextProvider: ContextProvider, + Element: Element, + ForwardRef: ForwardRef, + Fragment: Fragment, + Lazy: Lazy, + Memo: Memo, + Portal: Portal, + Profiler: Profiler, + StrictMode: StrictMode, + Suspense: Suspense, + isAsyncMode: isAsyncMode, + isConcurrentMode: isConcurrentMode, + isContextConsumer: isContextConsumer, + isContextProvider: isContextProvider, + isElement: isElement, + isForwardRef: isForwardRef, + isFragment: isFragment, + isLazy: isLazy, + isMemo: isMemo, + isPortal: isPortal, + isProfiler: isProfiler, + isStrictMode: isStrictMode, + isSuspense: isSuspense, + isValidElementType: isValidElementType, + typeOf: typeOf +}; + +var reactIs_development = createCommonjsModule(function (module, exports) { +/** @license React v16.13.1 + * react-is.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +if (undefined !== "production") { + (function() { +var hasSymbol = typeof Symbol === 'function' && Symbol.for; +var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; +var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; +var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; +var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; +var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; +var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; +var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary +// (unstable) APIs that have been removed. Can we remove the symbols? + +var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; +var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; +var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; +var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; +var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8; +var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; +var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; +var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9; +var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5; +var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6; +var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7; + +function isValidElementType(type) { + return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. + type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE); +} + +function typeOf(object) { + if (typeof object === 'object' && object !== null) { + var $$typeof = object.$$typeof; + + switch ($$typeof) { + case REACT_ELEMENT_TYPE: + var type = object.type; + + switch (type) { + case REACT_ASYNC_MODE_TYPE: + case REACT_CONCURRENT_MODE_TYPE: + case REACT_FRAGMENT_TYPE: + case REACT_PROFILER_TYPE: + case REACT_STRICT_MODE_TYPE: + case REACT_SUSPENSE_TYPE: + return type; + + default: + var $$typeofType = type && type.$$typeof; + + switch ($$typeofType) { + case REACT_CONTEXT_TYPE: + case REACT_FORWARD_REF_TYPE: + case REACT_LAZY_TYPE: + case REACT_MEMO_TYPE: + case REACT_PROVIDER_TYPE: + return $$typeofType; + + default: + return $$typeof; + } + + } + + case REACT_PORTAL_TYPE: + return $$typeof; + } + } + + return undefined; +} // AsyncMode is deprecated along with isAsyncMode + +var AsyncMode = REACT_ASYNC_MODE_TYPE; +var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; +var ContextConsumer = REACT_CONTEXT_TYPE; +var ContextProvider = REACT_PROVIDER_TYPE; +var Element = REACT_ELEMENT_TYPE; +var ForwardRef = REACT_FORWARD_REF_TYPE; +var Fragment = REACT_FRAGMENT_TYPE; +var Lazy = REACT_LAZY_TYPE; +var Memo = REACT_MEMO_TYPE; +var Portal = REACT_PORTAL_TYPE; +var Profiler = REACT_PROFILER_TYPE; +var StrictMode = REACT_STRICT_MODE_TYPE; +var Suspense = REACT_SUSPENSE_TYPE; +var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated + +function isAsyncMode(object) { + { + if (!hasWarnedAboutDeprecatedIsAsyncMode) { + hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint + + console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); + } + } + + return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; +} +function isConcurrentMode(object) { + return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; +} +function isContextConsumer(object) { + return typeOf(object) === REACT_CONTEXT_TYPE; +} +function isContextProvider(object) { + return typeOf(object) === REACT_PROVIDER_TYPE; +} +function isElement(object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; +} +function isForwardRef(object) { + return typeOf(object) === REACT_FORWARD_REF_TYPE; +} +function isFragment(object) { + return typeOf(object) === REACT_FRAGMENT_TYPE; +} +function isLazy(object) { + return typeOf(object) === REACT_LAZY_TYPE; +} +function isMemo(object) { + return typeOf(object) === REACT_MEMO_TYPE; +} +function isPortal(object) { + return typeOf(object) === REACT_PORTAL_TYPE; +} +function isProfiler(object) { + return typeOf(object) === REACT_PROFILER_TYPE; +} +function isStrictMode(object) { + return typeOf(object) === REACT_STRICT_MODE_TYPE; +} +function isSuspense(object) { + return typeOf(object) === REACT_SUSPENSE_TYPE; +} + +exports.AsyncMode = AsyncMode; +exports.ConcurrentMode = ConcurrentMode; +exports.ContextConsumer = ContextConsumer; +exports.ContextProvider = ContextProvider; +exports.Element = Element; +exports.ForwardRef = ForwardRef; +exports.Fragment = Fragment; +exports.Lazy = Lazy; +exports.Memo = Memo; +exports.Portal = Portal; +exports.Profiler = Profiler; +exports.StrictMode = StrictMode; +exports.Suspense = Suspense; +exports.isAsyncMode = isAsyncMode; +exports.isConcurrentMode = isConcurrentMode; +exports.isContextConsumer = isContextConsumer; +exports.isContextProvider = isContextProvider; +exports.isElement = isElement; +exports.isForwardRef = isForwardRef; +exports.isFragment = isFragment; +exports.isLazy = isLazy; +exports.isMemo = isMemo; +exports.isPortal = isPortal; +exports.isProfiler = isProfiler; +exports.isStrictMode = isStrictMode; +exports.isSuspense = isSuspense; +exports.isValidElementType = isValidElementType; +exports.typeOf = typeOf; + })(); +} +}); + +var reactIs_development_1 = reactIs_development.AsyncMode; +var reactIs_development_2 = reactIs_development.ConcurrentMode; +var reactIs_development_3 = reactIs_development.ContextConsumer; +var reactIs_development_4 = reactIs_development.ContextProvider; +var reactIs_development_5 = reactIs_development.Element; +var reactIs_development_6 = reactIs_development.ForwardRef; +var reactIs_development_7 = reactIs_development.Fragment; +var reactIs_development_8 = reactIs_development.Lazy; +var reactIs_development_9 = reactIs_development.Memo; +var reactIs_development_10 = reactIs_development.Portal; +var reactIs_development_11 = reactIs_development.Profiler; +var reactIs_development_12 = reactIs_development.StrictMode; +var reactIs_development_13 = reactIs_development.Suspense; +var reactIs_development_14 = reactIs_development.isAsyncMode; +var reactIs_development_15 = reactIs_development.isConcurrentMode; +var reactIs_development_16 = reactIs_development.isContextConsumer; +var reactIs_development_17 = reactIs_development.isContextProvider; +var reactIs_development_18 = reactIs_development.isElement; +var reactIs_development_19 = reactIs_development.isForwardRef; +var reactIs_development_20 = reactIs_development.isFragment; +var reactIs_development_21 = reactIs_development.isLazy; +var reactIs_development_22 = reactIs_development.isMemo; +var reactIs_development_23 = reactIs_development.isPortal; +var reactIs_development_24 = reactIs_development.isProfiler; +var reactIs_development_25 = reactIs_development.isStrictMode; +var reactIs_development_26 = reactIs_development.isSuspense; +var reactIs_development_27 = reactIs_development.isValidElementType; +var reactIs_development_28 = reactIs_development.typeOf; + +var reactIs = createCommonjsModule(function (module) { +if (undefined === 'production') { + module.exports = reactIs_production_min; +} else { + module.exports = reactIs_development; +} +}); + +var reactIs_1 = reactIs.isValidElementType; +var reactIs_2 = reactIs.isElement; + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + + + + + +var defineProperty = function (obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +}; + +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; +}; + + + +var inherits = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; +}; + + + + + + + + + +var objectWithoutProperties = function (obj, keys) { + var target = {}; + + for (var i in obj) { + if (keys.indexOf(i) >= 0) continue; + if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; + target[i] = obj[i]; + } + + return target; +}; + +var possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; +}; + + + + + +var slicedToArray = function () { + function sliceIterator(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"]) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + return function (arr, i) { + if (Array.isArray(arr)) { + return arr; + } else if (Symbol.iterator in Object(arr)) { + return sliceIterator(arr, i); + } else { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + }; +}(); + + + + + + + + + + + + + +var toConsumableArray = function (arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } else { + return Array.from(arr); + } +}; + +// +var _ = { + get: get$1, + set: set$1, + takeRight: takeRight, + last: last, + orderBy: orderBy, + range: range, + remove: remove, + clone: clone, + getFirstDefined: getFirstDefined, + sum: sum, + makeTemplateComponent: makeTemplateComponent, + groupBy: groupBy, + isArray: isArray, + splitProps: splitProps, + compactObject: compactObject, + isSortingDesc: isSortingDesc, + normalizeComponent: normalizeComponent, + asPx: asPx +}; + +function get$1(obj, path, def) { + if (!path) { + return obj; + } + var pathObj = makePathArray(path); + var val = void 0; + try { + val = pathObj.reduce(function (current, pathPart) { + return current[pathPart]; + }, obj); + } catch (e) { + // continue regardless of error + } + return typeof val !== 'undefined' ? val : def; +} + +function set$1() { + var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var path = arguments[1]; + var value = arguments[2]; + + var keys = makePathArray(path); + var keyPart = void 0; + var cursor = obj; + while ((keyPart = keys.shift()) && keys.length) { + if (!cursor[keyPart]) { + cursor[keyPart] = {}; + } + cursor = cursor[keyPart]; + } + cursor[keyPart] = value; + return obj; +} + +function takeRight(arr, n) { + var start = n > arr.length ? 0 : arr.length - n; + return arr.slice(start); +} + +function last(arr) { + return arr[arr.length - 1]; +} + +function range(n) { + var arr = []; + for (var i = 0; i < n; i += 1) { + arr.push(n); + } + return arr; +} + +function orderBy(arr, funcs, dirs, indexKey) { + return arr.sort(function (rowA, rowB) { + for (var i = 0; i < funcs.length; i += 1) { + var comp = funcs[i]; + var desc = dirs[i] === false || dirs[i] === 'desc'; + var sortInt = comp(rowA, rowB); + if (sortInt) { + return desc ? -sortInt : sortInt; + } + } + // Use the row index for tie breakers + return dirs[0] ? rowA[indexKey] - rowB[indexKey] : rowB[indexKey] - rowA[indexKey]; + }); +} + +function remove(a, b) { + return a.filter(function (o, i) { + var r = b(o); + if (r) { + a.splice(i, 1); + return true; + } + return false; + }); +} + +function clone(a) { + try { + return JSON.parse(JSON.stringify(a, function (key, value) { + if (typeof value === 'function') { + return value.toString(); + } + return value; + })); + } catch (e) { + return a; + } +} + +function getFirstDefined() { + for (var i = 0; i < arguments.length; i += 1) { + if (typeof (arguments.length <= i ? undefined : arguments[i]) !== 'undefined') { + return arguments.length <= i ? undefined : arguments[i]; + } + } +} + +function sum(arr) { + return arr.reduce(function (a, b) { + return a + b; + }, 0); +} + +function makeTemplateComponent(compClass, displayName) { + if (!displayName) { + throw new Error('No displayName found for template component:', compClass); + } + var cmp = function cmp(_ref) { + var children = _ref.children, + className = _ref.className, + rest = objectWithoutProperties(_ref, ['children', 'className']); + return React__default.createElement( + 'div', + _extends({ className: classnames(compClass, className) }, rest), + children + ); + }; + cmp.displayName = displayName; + return cmp; +} + +function groupBy(xs, key) { + return xs.reduce(function (rv, x, i) { + var resKey = typeof key === 'function' ? key(x, i) : x[key]; + rv[resKey] = isArray(rv[resKey]) ? rv[resKey] : []; + rv[resKey].push(x); + return rv; + }, {}); +} + +function asPx(value) { + value = Number(value); + return Number.isNaN(value) ? null : value + 'px'; +} + +function isArray(a) { + return Array.isArray(a); +} + +// ######################################################################## +// Non-exported Helpers +// ######################################################################## + +function makePathArray(obj) { + return flattenDeep(obj).join('.').replace(/\[/g, '.').replace(/\]/g, '').split('.'); +} + +function flattenDeep(arr) { + var newArr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + if (!isArray(arr)) { + newArr.push(arr); + } else { + for (var i = 0; i < arr.length; i += 1) { + flattenDeep(arr[i], newArr); + } + } + return newArr; +} + +function splitProps(_ref2) { + var className = _ref2.className, + style = _ref2.style, + rest = objectWithoutProperties(_ref2, ['className', 'style']); + + return { + className: className, + style: style, + rest: rest || {} + }; +} + +function compactObject(obj) { + var newObj = {}; + if (obj) { + Object.keys(obj).map(function (key) { + if (Object.prototype.hasOwnProperty.call(obj, key) && obj[key] !== undefined && typeof obj[key] !== 'undefined') { + newObj[key] = obj[key]; + } + return true; + }); + } + return newObj; +} + +function isSortingDesc(d) { + return !!(d.sort === 'desc' || d.desc === true || d.asc === false); +} + +function normalizeComponent(Comp, props) { + var fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Comp; + + if (reactIs_2(Comp) || typeof Comp === 'string') { + return Comp; + } else if (reactIs_1(Comp)) { + return React__default.createElement(Comp, props); + } + + return fallback; +} + +var Lifecycle = (function (Base) { + return function (_Base) { + inherits(_class, _Base); + + function _class(props) { + classCallCheck(this, _class); + + var _this = possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).call(this, props)); + + var defaultState = { + page: props.defaultPage, + pageSize: props.defaultPageSize, + sorted: props.defaultSorted, + expanded: props.defaultExpanded, + filtered: props.defaultFiltered, + resized: props.defaultResized, + currentlyResizing: false, + skipNextSort: false + }; + var resolvedState = _this.getResolvedState(props, defaultState); + var dataModel = _this.getDataModel(resolvedState, true); + + _this.state = _this.calculateNewResolvedState(dataModel); + return _this; + } + + createClass(_class, [{ + key: 'componentDidMount', + value: function componentDidMount() { + this.fireFetchData(); + } + }, { + key: 'componentDidUpdate', + value: function componentDidUpdate(prevProps, prevState) { + var oldState = this.getResolvedState(prevProps, prevState); + var newState = this.getResolvedState(this.props, this.state); + + // Do a deep compare of new and old `defaultOption` and + // if they are different reset `option = defaultOption` + var defaultableOptions = ['sorted', 'filtered', 'resized', 'expanded']; + defaultableOptions.forEach(function (x) { + var defaultName = 'default' + (x.charAt(0).toUpperCase() + x.slice(1)); + if (JSON.stringify(oldState[defaultName]) !== JSON.stringify(newState[defaultName])) { + newState[x] = newState[defaultName]; + } + }); + + // If they change these table options, we need to reset defaults + // or else we could get into a state where the user has changed the UI + // and then disabled the ability to change it back. + // e.g. If `filterable` has changed, set `filtered = defaultFiltered` + var resettableOptions = ['sortable', 'filterable', 'resizable']; + resettableOptions.forEach(function (x) { + if (oldState[x] !== newState[x]) { + var baseName = x.replace('able', ''); + var optionName = baseName + 'ed'; + var defaultName = 'default' + (optionName.charAt(0).toUpperCase() + optionName.slice(1)); + newState[optionName] = newState[defaultName]; + } + }); + + // Props that trigger a data update + if (oldState.data !== newState.data || oldState.columns !== newState.columns || oldState.pivotBy !== newState.pivotBy || oldState.sorted !== newState.sorted || oldState.filtered !== newState.filtered) { + this.setStateWithData(this.getDataModel(newState, oldState.data !== newState.data)); + } + } + }, { + key: 'calculateNewResolvedState', + value: function calculateNewResolvedState(dataModel) { + var oldState = this.getResolvedState(); + var newResolvedState = this.getResolvedState({}, dataModel); + var freezeWhenExpanded = newResolvedState.freezeWhenExpanded; + + // Default to unfrozen state + + newResolvedState.frozen = false; + + // If freezeWhenExpanded is set, check for frozen conditions + if (freezeWhenExpanded) { + // if any rows are expanded, freeze the existing data and sorting + var keys = Object.keys(newResolvedState.expanded); + for (var i = 0; i < keys.length; i += 1) { + if (newResolvedState.expanded[keys[i]]) { + newResolvedState.frozen = true; + break; + } + } + } + + // If the data isn't frozen and either the data or + // sorting model has changed, update the data + if (oldState.frozen && !newResolvedState.frozen || oldState.sorted !== newResolvedState.sorted || oldState.filtered !== newResolvedState.filtered || oldState.showFilters !== newResolvedState.showFilters || !newResolvedState.frozen && oldState.resolvedData !== newResolvedState.resolvedData) { + // Handle collapseOnsortedChange & collapseOnDataChange + if (oldState.sorted !== newResolvedState.sorted && this.props.collapseOnSortingChange || oldState.filtered !== newResolvedState.filtered || oldState.showFilters !== newResolvedState.showFilters || oldState.sortedData && !newResolvedState.frozen && oldState.resolvedData !== newResolvedState.resolvedData && this.props.collapseOnDataChange) { + newResolvedState.expanded = {}; + } + + Object.assign(newResolvedState, this.getSortedData(newResolvedState)); + } + + // Set page to 0 if filters change + if (oldState.filtered !== newResolvedState.filtered) { + newResolvedState.page = 0; + } + + // Calculate pageSize all the time + if (newResolvedState.sortedData) { + newResolvedState.pages = newResolvedState.manual ? newResolvedState.pages : Math.ceil(newResolvedState.sortedData.length / newResolvedState.pageSize); + newResolvedState.page = newResolvedState.manual ? newResolvedState.page : Math.max(newResolvedState.page >= newResolvedState.pages ? newResolvedState.pages - 1 : newResolvedState.page, 0); + } + + return newResolvedState; + } + }, { + key: 'setStateWithData', + value: function setStateWithData(dataModel, cb) { + var _this2 = this; + + var oldState = this.getResolvedState(); + var newResolvedState = this.calculateNewResolvedState(dataModel); + + return this.setState(newResolvedState, function () { + if (cb) { + cb(); + } + if (oldState.page !== newResolvedState.page || oldState.pageSize !== newResolvedState.pageSize || oldState.sorted !== newResolvedState.sorted || oldState.filtered !== newResolvedState.filtered) { + _this2.fireFetchData(); + } + }); + } + }]); + return _class; + }(Base); +}); + +var Methods = (function (Base) { + return function (_Base) { + inherits(_class, _Base); + + function _class() { + classCallCheck(this, _class); + return possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments)); + } + + createClass(_class, [{ + key: 'getResolvedState', + value: function getResolvedState(props, state) { + var resolvedState = _extends({}, _.compactObject(this.state), _.compactObject(this.props), _.compactObject(state), _.compactObject(props)); + return resolvedState; + } + }, { + key: 'getDataModel', + value: function getDataModel(newState, dataChanged) { + var _this2 = this; + + var columns = newState.columns, + _newState$pivotBy = newState.pivotBy, + pivotBy = _newState$pivotBy === undefined ? [] : _newState$pivotBy, + data = newState.data, + resolveData = newState.resolveData, + pivotIDKey = newState.pivotIDKey, + pivotValKey = newState.pivotValKey, + subRowsKey = newState.subRowsKey, + aggregatedKey = newState.aggregatedKey, + nestingLevelKey = newState.nestingLevelKey, + originalKey = newState.originalKey, + indexKey = newState.indexKey, + groupedByPivotKey = newState.groupedByPivotKey, + SubComponent = newState.SubComponent; + + // Determine Header Groups + + var hasHeaderGroups = false; + columns.forEach(function (column) { + if (column.columns) { + hasHeaderGroups = true; + } + }); + + var columnsWithExpander = [].concat(toConsumableArray(columns)); + + var expanderColumn = columns.find(function (col) { + return col.expander || col.columns && col.columns.some(function (col2) { + return col2.expander; + }); + }); + // The actual expander might be in the columns field of a group column + if (expanderColumn && !expanderColumn.expander) { + expanderColumn = expanderColumn.columns.find(function (col) { + return col.expander; + }); + } + + // If we have SubComponent's we need to make sure we have an expander column + if (SubComponent && !expanderColumn) { + expanderColumn = { expander: true }; + columnsWithExpander = [expanderColumn].concat(toConsumableArray(columnsWithExpander)); + } + + var makeDecoratedColumn = function makeDecoratedColumn(column, parentColumn) { + var dcol = void 0; + if (column.expander) { + dcol = _extends({}, _this2.props.column, _this2.props.expanderDefaults, column); + } else { + dcol = _extends({}, _this2.props.column, column); + } + + // Ensure minWidth is not greater than maxWidth if set + if (dcol.maxWidth < dcol.minWidth) { + dcol.minWidth = dcol.maxWidth; + } + + if (parentColumn) { + dcol.parentColumn = parentColumn; + } + + // First check for string accessor + if (typeof dcol.accessor === 'string') { + dcol.id = dcol.id || dcol.accessor; + var accessorString = dcol.accessor; + dcol.accessor = function (row) { + return _.get(row, accessorString); + }; + return dcol; + } + + // Fall back to functional accessor (but require an ID) + if (dcol.accessor && !dcol.id) { + console.warn(dcol); + throw new Error('A column id is required if using a non-string accessor for column above.'); + } + + // Fall back to an undefined accessor + if (!dcol.accessor) { + dcol.accessor = function () { + return undefined; + }; + } + + return dcol; + }; + + var allDecoratedColumns = []; + + // Decorate the columns + var decorateAndAddToAll = function decorateAndAddToAll(column, parentColumn) { + var decoratedColumn = makeDecoratedColumn(column, parentColumn); + allDecoratedColumns.push(decoratedColumn); + return decoratedColumn; + }; + + var decoratedColumns = columnsWithExpander.map(function (column) { + if (column.columns) { + return _extends({}, column, { + columns: column.columns.map(function (d) { + return decorateAndAddToAll(d, column); + }) + }); + } + return decorateAndAddToAll(column); + }); + + // Build the visible columns, headers and flat column list + var visibleColumns = decoratedColumns.slice(); + var allVisibleColumns = []; + + visibleColumns = visibleColumns.map(function (column) { + if (column.columns) { + var visibleSubColumns = column.columns.filter(function (d) { + return pivotBy.indexOf(d.id) > -1 ? false : _.getFirstDefined(d.show, true); + }); + return _extends({}, column, { + columns: visibleSubColumns + }); + } + return column; + }); + + visibleColumns = visibleColumns.filter(function (column) { + return column.columns ? column.columns.length : pivotBy.indexOf(column.id) > -1 ? false : _.getFirstDefined(column.show, true); + }); + + // Find any custom pivot location + var pivotIndex = visibleColumns.findIndex(function (col) { + return col.pivot; + }); + + // Handle Pivot Columns + if (pivotBy.length) { + // Retrieve the pivot columns in the correct pivot order + var pivotColumns = []; + pivotBy.forEach(function (pivotID) { + var found = allDecoratedColumns.find(function (d) { + return d.id === pivotID; + }); + if (found) { + pivotColumns.push(found); + } + }); + + var PivotParentColumn = pivotColumns.reduce(function (prev, current) { + return prev && prev === current.parentColumn && current.parentColumn; + }, pivotColumns[0].parentColumn); + + var PivotGroupHeader = hasHeaderGroups && PivotParentColumn.Header; + PivotGroupHeader = PivotGroupHeader || function () { + return React__default.createElement( + 'strong', + null, + 'Pivoted' + ); + }; + + var pivotColumnGroup = { + Header: PivotGroupHeader, + columns: pivotColumns.map(function (col) { + return _extends({}, _this2.props.pivotDefaults, col, { + pivoted: true + }); + }) + + // Place the pivotColumns back into the visibleColumns + };if (pivotIndex >= 0) { + pivotColumnGroup = _extends({}, visibleColumns[pivotIndex], pivotColumnGroup); + visibleColumns.splice(pivotIndex, 1, pivotColumnGroup); + } else { + visibleColumns.unshift(pivotColumnGroup); + } + } + + // Build Header Groups + var headerGroups = []; + var currentSpan = []; + + // A convenience function to add a header and reset the currentSpan + var addHeader = function addHeader(columns, column) { + headerGroups.push(_extends({}, _this2.props.column, column, { + columns: columns + })); + currentSpan = []; + }; + + // Build flast list of allVisibleColumns and HeaderGroups + visibleColumns.forEach(function (column) { + if (column.columns) { + allVisibleColumns = allVisibleColumns.concat(column.columns); + if (currentSpan.length > 0) { + addHeader(currentSpan); + } + addHeader(column.columns, column); + return; + } + allVisibleColumns.push(column); + currentSpan.push(column); + }); + if (hasHeaderGroups && currentSpan.length > 0) { + addHeader(currentSpan); + } + + // Access the data + var accessRow = function accessRow(d, i) { + var _row; + + var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + var row = (_row = {}, defineProperty(_row, originalKey, d), defineProperty(_row, indexKey, i), defineProperty(_row, subRowsKey, d[subRowsKey]), defineProperty(_row, nestingLevelKey, level), _row); + allDecoratedColumns.forEach(function (column) { + if (column.expander) return; + row[column.id] = column.accessor(d); + }); + if (row[subRowsKey]) { + row[subRowsKey] = row[subRowsKey].map(function (d, i) { + return accessRow(d, i, level + 1); + }); + } + return row; + }; + + // // If the data hasn't changed, just use the cached data + var resolvedData = this.resolvedData; + // If the data has changed, run the data resolver and cache the result + if (!this.resolvedData || dataChanged) { + resolvedData = resolveData(data); + this.resolvedData = resolvedData; + } + // Use the resolved data + resolvedData = resolvedData.map(function (d, i) { + return accessRow(d, i); + }); + + // TODO: Make it possible to fabricate nested rows without pivoting + var aggregatingColumns = allVisibleColumns.filter(function (d) { + return !d.expander && d.aggregate; + }); + + // If pivoting, recursively group the data + var aggregate = function aggregate(rows) { + var aggregationValues = {}; + aggregatingColumns.forEach(function (column) { + var values = rows.map(function (d) { + return d[column.id]; + }); + aggregationValues[column.id] = column.aggregate(values, rows); + }); + return aggregationValues; + }; + if (pivotBy.length) { + var groupRecursively = function groupRecursively(rows, keys) { + var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + // This is the last level, just return the rows + if (i === keys.length) { + return rows; + } + // Group the rows together for this level + var groupedRows = Object.entries(_.groupBy(rows, keys[i])).map(function (_ref) { + var _ref3; + + var _ref2 = slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + + return _ref3 = {}, defineProperty(_ref3, pivotIDKey, keys[i]), defineProperty(_ref3, pivotValKey, key), defineProperty(_ref3, keys[i], key), defineProperty(_ref3, subRowsKey, value), defineProperty(_ref3, nestingLevelKey, i), defineProperty(_ref3, groupedByPivotKey, true), _ref3; + }); + // Recurse into the subRows + groupedRows = groupedRows.map(function (rowGroup) { + var _babelHelpers$extends; + + var subRows = groupRecursively(rowGroup[subRowsKey], keys, i + 1); + return _extends({}, rowGroup, (_babelHelpers$extends = {}, defineProperty(_babelHelpers$extends, subRowsKey, subRows), defineProperty(_babelHelpers$extends, aggregatedKey, true), _babelHelpers$extends), aggregate(subRows)); + }); + return groupedRows; + }; + resolvedData = groupRecursively(resolvedData, pivotBy); + } + + return _extends({}, newState, { + resolvedData: resolvedData, + allVisibleColumns: allVisibleColumns, + headerGroups: headerGroups, + allDecoratedColumns: allDecoratedColumns, + hasHeaderGroups: hasHeaderGroups + }); + } + }, { + key: 'getSortedData', + value: function getSortedData(resolvedState) { + var manual = resolvedState.manual, + sorted = resolvedState.sorted, + filtered = resolvedState.filtered, + defaultFilterMethod = resolvedState.defaultFilterMethod, + resolvedData = resolvedState.resolvedData, + allDecoratedColumns = resolvedState.allDecoratedColumns; + + + var sortMethodsByColumnID = {}; + + allDecoratedColumns.filter(function (col) { + return col.sortMethod; + }).forEach(function (col) { + sortMethodsByColumnID[col.id] = col.sortMethod; + }); + + // Resolve the data from either manual data or sorted data + return { + sortedData: manual ? resolvedData : this.sortData(this.filterData(resolvedData, filtered, defaultFilterMethod, allDecoratedColumns), sorted, sortMethodsByColumnID) + }; + } + }, { + key: 'fireFetchData', + value: function fireFetchData() { + // determine the current state, preferring certain state values over props + var currentState = _extends({}, this.getResolvedState(), { + page: this.getStateOrProp('page'), + pageSize: this.getStateOrProp('pageSize'), + filtered: this.getStateOrProp('filtered') + }); + + this.props.onFetchData(currentState, this); + } + }, { + key: 'getPropOrState', + value: function getPropOrState(key) { + return _.getFirstDefined(this.props[key], this.state[key]); + } + }, { + key: 'getStateOrProp', + value: function getStateOrProp(key) { + return _.getFirstDefined(this.state[key], this.props[key]); + } + }, { + key: 'filterData', + value: function filterData(data, filtered, defaultFilterMethod, allVisibleColumns) { + var _this3 = this; + + var filteredData = data; + + if (filtered.length) { + filteredData = filtered.reduce(function (filteredSoFar, nextFilter) { + var column = allVisibleColumns.find(function (x) { + return x.id === nextFilter.id; + }); + + // Don't filter hidden columns or columns that have had their filters disabled + if (!column || column.filterable === false) { + return filteredSoFar; + } + + var filterMethod = column.filterMethod || defaultFilterMethod; + + // If 'filterAll' is set to true, pass the entire dataset to the filter method + if (column.filterAll) { + return filterMethod(nextFilter, filteredSoFar, column); + } + return filteredSoFar.filter(function (row) { + return filterMethod(nextFilter, row, column); + }); + }, filteredData); + + // Apply the filter to the subrows if we are pivoting, and then + // filter any rows without subcolumns because it would be strange to show + filteredData = filteredData.map(function (row) { + if (!row[_this3.props.subRowsKey]) { + return row; + } + return _extends({}, row, defineProperty({}, _this3.props.subRowsKey, _this3.filterData(row[_this3.props.subRowsKey], filtered, defaultFilterMethod, allVisibleColumns))); + }).filter(function (row) { + if (!row[_this3.props.subRowsKey]) { + return true; + } + return row[_this3.props.subRowsKey].length > 0; + }); + } + + return filteredData; + } + }, { + key: 'sortData', + value: function sortData(data, sorted) { + var _this4 = this; + + var sortMethodsByColumnID = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (!sorted.length) { + return data; + } + + var sortedData = (this.props.orderByMethod || _.orderBy)(data, sorted.map(function (sort) { + // Support custom sorting methods for each column + if (sortMethodsByColumnID[sort.id]) { + return function (a, b) { + return sortMethodsByColumnID[sort.id](a[sort.id], b[sort.id], sort.desc); + }; + } + return function (a, b) { + return _this4.props.defaultSortMethod(a[sort.id], b[sort.id], sort.desc); + }; + }), sorted.map(function (d) { + return !d.desc; + }), this.props.indexKey); + + sortedData.forEach(function (row) { + if (!row[_this4.props.subRowsKey]) { + return; + } + row[_this4.props.subRowsKey] = _this4.sortData(row[_this4.props.subRowsKey], sorted, sortMethodsByColumnID); + }); + + return sortedData; + } + }, { + key: 'getMinRows', + value: function getMinRows() { + return _.getFirstDefined(this.props.minRows, this.getStateOrProp('pageSize')); + } + + // User actions + + }, { + key: 'onPageChange', + value: function onPageChange(page) { + var _props = this.props, + onPageChange = _props.onPageChange, + collapseOnPageChange = _props.collapseOnPageChange; + + + var newState = { page: page }; + if (collapseOnPageChange) { + newState.expanded = {}; + } + this.setStateWithData(newState, function () { + return onPageChange && onPageChange(page); + }); + } + }, { + key: 'onPageSizeChange', + value: function onPageSizeChange(newPageSize) { + var onPageSizeChange = this.props.onPageSizeChange; + + var _getResolvedState = this.getResolvedState(), + pageSize = _getResolvedState.pageSize, + page = _getResolvedState.page; + + // Normalize the page to display + + + var currentRow = pageSize * page; + var newPage = Math.floor(currentRow / newPageSize); + + this.setStateWithData({ + pageSize: newPageSize, + page: newPage + }, function () { + return onPageSizeChange && onPageSizeChange(newPageSize, newPage); + }); + } + }, { + key: 'sortColumn', + value: function sortColumn(column, additive) { + var _getResolvedState2 = this.getResolvedState(), + sorted = _getResolvedState2.sorted, + skipNextSort = _getResolvedState2.skipNextSort, + defaultSortDesc = _getResolvedState2.defaultSortDesc; + + var firstSortDirection = Object.prototype.hasOwnProperty.call(column, 'defaultSortDesc') ? column.defaultSortDesc : defaultSortDesc; + var secondSortDirection = !firstSortDirection; + + // we can't stop event propagation from the column resize move handlers + // attached to the document because of react's synthetic events + // so we have to prevent the sort function from actually sorting + // if we click on the column resize element within a header. + if (skipNextSort) { + this.setStateWithData({ + skipNextSort: false + }); + return; + } + + var onSortedChange = this.props.onSortedChange; + + + var newSorted = _.clone(sorted || []).map(function (d) { + d.desc = _.isSortingDesc(d); + return d; + }); + if (!_.isArray(column)) { + // Single-Sort + var existingIndex = newSorted.findIndex(function (d) { + return d.id === column.id; + }); + if (existingIndex > -1) { + var existing = newSorted[existingIndex]; + if (existing.desc === secondSortDirection) { + if (additive) { + newSorted.splice(existingIndex, 1); + } else { + existing.desc = firstSortDirection; + newSorted = [existing]; + } + } else { + existing.desc = secondSortDirection; + if (!additive) { + newSorted = [existing]; + } + } + } else if (additive) { + newSorted.push({ + id: column.id, + desc: firstSortDirection + }); + } else { + newSorted = [{ + id: column.id, + desc: firstSortDirection + }]; + } + } else { + // Multi-Sort + var _existingIndex = newSorted.findIndex(function (d) { + return d.id === column[0].id; + }); + // Existing Sorted Column + if (_existingIndex > -1) { + var _existing = newSorted[_existingIndex]; + if (_existing.desc === secondSortDirection) { + if (additive) { + newSorted.splice(_existingIndex, column.length); + } else { + column.forEach(function (d, i) { + newSorted[_existingIndex + i].desc = firstSortDirection; + }); + } + } else { + column.forEach(function (d, i) { + newSorted[_existingIndex + i].desc = secondSortDirection; + }); + } + if (!additive) { + newSorted = newSorted.slice(_existingIndex, column.length); + } + // New Sort Column + } else if (additive) { + newSorted = newSorted.concat(column.map(function (d) { + return { + id: d.id, + desc: firstSortDirection + }; + })); + } else { + newSorted = column.map(function (d) { + return { + id: d.id, + desc: firstSortDirection + }; + }); + } + } + + this.setStateWithData({ + page: !sorted.length && newSorted.length || !additive ? 0 : this.state.page, + sorted: newSorted + }, function () { + return onSortedChange && onSortedChange(newSorted, column, additive); + }); + } + }, { + key: 'filterColumn', + value: function filterColumn(column, value) { + var _getResolvedState3 = this.getResolvedState(), + filtered = _getResolvedState3.filtered; + + var onFilteredChange = this.props.onFilteredChange; + + // Remove old filter first if it exists + + var newFiltering = (filtered || []).filter(function (x) { + return x.id !== column.id; + }); + + if (value !== '') { + newFiltering.push({ + id: column.id, + value: value + }); + } + + this.setStateWithData({ + filtered: newFiltering + }, function () { + return onFilteredChange && onFilteredChange(newFiltering, column, value); + }); + } + }, { + key: 'resizeColumnStart', + value: function resizeColumnStart(event, column, isTouch) { + var _this5 = this; + + event.stopPropagation(); + var parentWidth = event.target.parentElement.getBoundingClientRect().width; + + var pageX = void 0; + if (isTouch) { + pageX = event.changedTouches[0].pageX; + } else { + pageX = event.pageX; + } + + this.trapEvents = true; + this.setStateWithData({ + currentlyResizing: { + id: column.id, + startX: pageX, + parentWidth: parentWidth + } + }, function () { + if (isTouch) { + document.addEventListener('touchmove', _this5.resizeColumnMoving); + document.addEventListener('touchcancel', _this5.resizeColumnEnd); + document.addEventListener('touchend', _this5.resizeColumnEnd); + } else { + document.addEventListener('mousemove', _this5.resizeColumnMoving); + document.addEventListener('mouseup', _this5.resizeColumnEnd); + document.addEventListener('mouseleave', _this5.resizeColumnEnd); + } + }); + } + }, { + key: 'resizeColumnMoving', + value: function resizeColumnMoving(event) { + event.stopPropagation(); + var _props2 = this.props, + onResizedChange = _props2.onResizedChange, + column = _props2.column; + + var _getResolvedState4 = this.getResolvedState(), + resized = _getResolvedState4.resized, + currentlyResizing = _getResolvedState4.currentlyResizing, + columns = _getResolvedState4.columns; + + var currentColumn = columns.find(function (c) { + return c.accessor === currentlyResizing.id || c.id === currentlyResizing.id; + }); + var minResizeWidth = currentColumn && currentColumn.minResizeWidth != null ? currentColumn.minResizeWidth : column.minResizeWidth; + + // Delete old value + var newResized = resized.filter(function (x) { + return x.id !== currentlyResizing.id; + }); + + var pageX = void 0; + + if (event.type === 'touchmove') { + pageX = event.changedTouches[0].pageX; + } else if (event.type === 'mousemove') { + pageX = event.pageX; + } + + var newWidth = Math.max(currentlyResizing.parentWidth + pageX - currentlyResizing.startX, minResizeWidth); + + newResized.push({ + id: currentlyResizing.id, + value: newWidth + }); + + this.setStateWithData({ + resized: newResized + }, function () { + return onResizedChange && onResizedChange(newResized, event); + }); + } + }, { + key: 'resizeColumnEnd', + value: function resizeColumnEnd(event) { + event.stopPropagation(); + var isTouch = event.type === 'touchend' || event.type === 'touchcancel'; + + if (isTouch) { + document.removeEventListener('touchmove', this.resizeColumnMoving); + document.removeEventListener('touchcancel', this.resizeColumnEnd); + document.removeEventListener('touchend', this.resizeColumnEnd); + } + + // If its a touch event clear the mouse one's as well because sometimes + // the mouseDown event gets called as well, but the mouseUp event doesn't + document.removeEventListener('mousemove', this.resizeColumnMoving); + document.removeEventListener('mouseup', this.resizeColumnEnd); + document.removeEventListener('mouseleave', this.resizeColumnEnd); + + // The touch events don't propagate up to the sorting's onMouseDown event so + // no need to prevent it from happening or else the first click after a touch + // event resize will not sort the column. + if (!isTouch) { + this.setStateWithData({ + skipNextSort: true, + currentlyResizing: false + }); + } + } + }]); + return _class; + }(Base); +}); + +/* eslint-disable react/no-did-update-set-state */ +var defaultButton = function defaultButton(props) { + return React__default.createElement( + 'button', + _extends({ type: 'button' }, props, { className: '-btn' }), + props.children + ); +}; + +var ReactTablePagination = function (_Component) { + inherits(ReactTablePagination, _Component); + + function ReactTablePagination(props) { + classCallCheck(this, ReactTablePagination); + + var _this = possibleConstructorReturn(this, (ReactTablePagination.__proto__ || Object.getPrototypeOf(ReactTablePagination)).call(this, props)); + + _this.getSafePage = _this.getSafePage.bind(_this); + _this.changePage = _this.changePage.bind(_this); + _this.applyPage = _this.applyPage.bind(_this); + + _this.state = { + page: props.page + }; + return _this; + } + + createClass(ReactTablePagination, [{ + key: 'componentDidUpdate', + value: function componentDidUpdate(prevProps, prevState) { + if (prevProps.page !== this.props.page || prevState.page !== this.state.page) { + // this is probably safe because we only update when old/new props/state.page are different + // eslint-disable-next-line react/no-did-update-set-state + this.setState({ + page: this.props.page + }); + } + /* when the last page from new props is smaller + than the current page in the page box, + the current page needs to be the last page. */ + if (this.props.pages !== prevProps.pages && this.props.pages <= this.state.page) { + this.setState({ + page: this.props.pages - 1 + }); + } + } + }, { + key: 'getSafePage', + value: function getSafePage(page) { + if (Number.isNaN(page)) { + page = this.props.page; + } + return Math.min(Math.max(page, 0), this.props.pages - 1); + } + }, { + key: 'changePage', + value: function changePage(page) { + page = this.getSafePage(page); + this.setState({ page: page }); + if (this.props.page !== page) { + this.props.onPageChange(page); + } + } + }, { + key: 'applyPage', + value: function applyPage(e) { + if (e) { + e.preventDefault(); + } + var page = this.state.page; + this.changePage(page === '' ? this.props.page : page); + } + }, { + key: 'getPageJumpProperties', + value: function getPageJumpProperties() { + var _this2 = this; + + return { + onKeyPress: function onKeyPress(e) { + if (e.which === 13 || e.keyCode === 13) { + _this2.applyPage(); + } + }, + onBlur: this.applyPage, + value: this.state.page === '' ? '' : this.state.page + 1, + onChange: function onChange(e) { + var val = e.target.value; + var page = val - 1; + if (val === '') { + return _this2.setState({ page: val }); + } + _this2.setState({ page: _this2.getSafePage(page) }); + }, + inputType: this.state.page === '' ? 'text' : 'number', + pageJumpText: this.props.pageJumpText + }; + } + }, { + key: 'render', + value: function render() { + var _this3 = this; + + var _props = this.props, + pages = _props.pages, + page = _props.page, + showPageSizeOptions = _props.showPageSizeOptions, + pageSizeOptions = _props.pageSizeOptions, + pageSize = _props.pageSize, + showPageJump = _props.showPageJump, + canPrevious = _props.canPrevious, + canNext = _props.canNext, + onPageSizeChange = _props.onPageSizeChange, + className = _props.className, + PreviousComponent = _props.PreviousComponent, + NextComponent = _props.NextComponent, + renderPageJump = _props.renderPageJump, + renderCurrentPage = _props.renderCurrentPage, + renderTotalPagesCount = _props.renderTotalPagesCount, + renderPageSizeOptions = _props.renderPageSizeOptions; + + + return React__default.createElement( + 'div', + { className: classnames(className, '-pagination'), style: this.props.style }, + React__default.createElement( + 'div', + { className: '-previous' }, + React__default.createElement( + PreviousComponent, + { + onClick: function onClick() { + if (!canPrevious) return; + _this3.changePage(page - 1); + }, + disabled: !canPrevious || this.state.page < 1 + }, + this.props.previousText + ) + ), + React__default.createElement( + 'div', + { className: '-center' }, + React__default.createElement( + 'span', + { className: '-pageInfo' }, + this.props.pageText, + ' ', + showPageJump ? renderPageJump(this.getPageJumpProperties()) : renderCurrentPage(page), + ' ', + this.props.ofText, + ' ', + renderTotalPagesCount(pages) + ), + showPageSizeOptions && renderPageSizeOptions({ + pageSize: pageSize, + rowsSelectorText: this.props.rowsSelectorText, + pageSizeOptions: pageSizeOptions, + onPageSizeChange: onPageSizeChange, + rowsText: this.props.rowsText + }) + ), + React__default.createElement( + 'div', + { className: '-next' }, + React__default.createElement( + NextComponent, + { + onClick: function onClick() { + if (!canNext) return; + _this3.changePage(page + 1); + }, + disabled: !canNext || this.state.page >= this.props.pages - 1 + }, + this.props.nextText + ) + ) + ); + } + }]); + return ReactTablePagination; +}(React.Component); + +ReactTablePagination.defaultProps = { + PreviousComponent: defaultButton, + NextComponent: defaultButton, + renderPageJump: function renderPageJump(_ref) { + var onChange = _ref.onChange, + value = _ref.value, + onBlur = _ref.onBlur, + onKeyPress = _ref.onKeyPress, + inputType = _ref.inputType, + pageJumpText = _ref.pageJumpText; + return React__default.createElement( + 'div', + { className: '-pageJump' }, + React__default.createElement('input', { + 'aria-label': pageJumpText, + type: inputType, + onChange: onChange, + value: value, + onBlur: onBlur, + onKeyPress: onKeyPress + }) + ); + }, + renderCurrentPage: function renderCurrentPage(page) { + return React__default.createElement( + 'span', + { className: '-currentPage' }, + page + 1 + ); + }, + renderTotalPagesCount: function renderTotalPagesCount(pages) { + return React__default.createElement( + 'span', + { className: '-totalPages' }, + pages || 1 + ); + }, + renderPageSizeOptions: function renderPageSizeOptions(_ref2) { + var pageSize = _ref2.pageSize, + pageSizeOptions = _ref2.pageSizeOptions, + rowsSelectorText = _ref2.rowsSelectorText, + onPageSizeChange = _ref2.onPageSizeChange, + rowsText = _ref2.rowsText; + return React__default.createElement( + 'span', + { className: 'select-wrap -pageSizeOptions' }, + React__default.createElement( + 'select', + { + 'aria-label': rowsSelectorText, + onChange: function onChange(e) { + return onPageSizeChange(Number(e.target.value)); + }, + value: pageSize + }, + pageSizeOptions.map(function (option, i) { + return ( + // eslint-disable-next-line react/no-array-index-key + React__default.createElement( + 'option', + { key: i, value: option }, + option + ' ' + rowsText + ) + ); + }) + ) + ); + } +}; + +// +var emptyObj = function emptyObj() { + return {}; +}; + +var defaultProps = { + // General + data: [], + resolveData: function resolveData(data) { + return data; + }, + loading: false, + showPagination: true, + showPaginationTop: false, + showPaginationBottom: true, + showPageSizeOptions: true, + pageSizeOptions: [5, 10, 20, 25, 50, 100], + defaultPage: 0, + defaultPageSize: 20, + showPageJump: true, + collapseOnSortingChange: true, + collapseOnPageChange: true, + collapseOnDataChange: true, + freezeWhenExpanded: false, + sortable: true, + multiSort: true, + resizable: true, + filterable: false, + defaultSortDesc: false, + defaultSorted: [], + defaultFiltered: [], + defaultResized: [], + defaultExpanded: {}, + // eslint-disable-next-line no-unused-vars + defaultFilterMethod: function defaultFilterMethod(filter, row, column) { + var id = filter.pivotId || filter.id; + return row[id] !== undefined ? String(row[id]).startsWith(filter.value) : true; + }, + // eslint-disable-next-line no-unused-vars + defaultSortMethod: function defaultSortMethod(a, b, desc) { + // force null and undefined to the bottom + a = a === null || a === undefined ? '' : a; + b = b === null || b === undefined ? '' : b; + // force any string values to lowercase + a = typeof a === 'string' ? a.toLowerCase() : a; + b = typeof b === 'string' ? b.toLowerCase() : b; + // Return either 1 or -1 to indicate a sort priority + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + // returning 0, undefined or any falsey value will use subsequent sorts or + // the index as a tiebreaker + return 0; + }, + + // Controlled State Props + // page: undefined, + // pageSize: undefined, + // sorted: [], + // filtered: [], + // resized: [], + // expanded: {}, + + // Controlled State Callbacks + onPageChange: undefined, + onPageSizeChange: undefined, + onSortedChange: undefined, + onFilteredChange: undefined, + onResizedChange: undefined, + onExpandedChange: undefined, + + // Pivoting + pivotBy: undefined, + + // Key Constants + pivotValKey: '_pivotVal', + pivotIDKey: '_pivotID', + subRowsKey: '_subRows', + aggregatedKey: '_aggregated', + nestingLevelKey: '_nestingLevel', + originalKey: '_original', + indexKey: '_index', + groupedByPivotKey: '_groupedByPivot', + + // Server-side Callbacks + onFetchData: function onFetchData() { + return null; + }, + + // Classes + className: '', + style: {}, + + // Component decorators + getProps: emptyObj, + getTableProps: emptyObj, + getTheadGroupProps: emptyObj, + getTheadGroupTrProps: emptyObj, + getTheadGroupThProps: emptyObj, + getTheadProps: emptyObj, + getTheadTrProps: emptyObj, + getTheadThProps: emptyObj, + getTheadFilterProps: emptyObj, + getTheadFilterTrProps: emptyObj, + getTheadFilterThProps: emptyObj, + getTbodyProps: emptyObj, + getTrGroupProps: emptyObj, + getTrProps: emptyObj, + getTdProps: emptyObj, + getTfootProps: emptyObj, + getTfootTrProps: emptyObj, + getTfootTdProps: emptyObj, + getPaginationProps: emptyObj, + getLoadingProps: emptyObj, + getNoDataProps: emptyObj, + getResizerProps: emptyObj, + + // Global Column Defaults + column: { + // Renderers + Cell: undefined, + Header: undefined, + Footer: undefined, + Aggregated: undefined, + Pivot: undefined, + PivotValue: undefined, + Expander: undefined, + Filter: undefined, + Placeholder: undefined, + // All Columns + sortable: undefined, // use table default + resizable: undefined, // use table default + filterable: undefined, // use table default + show: true, + minWidth: 100, + minResizeWidth: 11, + // Cells only + className: '', + style: {}, + getProps: emptyObj, + // Pivot only + aggregate: undefined, + // Headers only + headerClassName: '', + headerStyle: {}, + getHeaderProps: emptyObj, + // Footers only + footerClassName: '', + footerStyle: {}, + getFooterProps: emptyObj, + filterMethod: undefined, + filterAll: false, + sortMethod: undefined + }, + + // Global Expander Column Defaults + expanderDefaults: { + sortable: false, + resizable: false, + filterable: false, + width: 35 + }, + + pivotDefaults: { + // extend the defaults for pivoted columns here + }, + + // Text + previousText: 'Previous', + nextText: 'Next', + loadingText: 'Loading...', + noDataText: 'No rows found', + pageText: 'Page', + ofText: 'of', + rowsText: 'rows', + pageJumpText: 'jump to page', + rowsSelectorText: 'rows per page', + + // Components + TableComponent: function TableComponent(_ref) { + var children = _ref.children, + className = _ref.className, + rest = objectWithoutProperties(_ref, ['children', 'className']); + return React__default.createElement( + 'div', + _extends({ + className: classnames('rt-table', className), + role: 'grid' + // tabIndex='0' + }, rest), + children + ); + }, + TheadComponent: _.makeTemplateComponent('rt-thead', 'Thead'), + TbodyComponent: _.makeTemplateComponent('rt-tbody', 'Tbody'), + TrGroupComponent: function TrGroupComponent(_ref2) { + var children = _ref2.children, + className = _ref2.className, + rest = objectWithoutProperties(_ref2, ['children', 'className']); + return React__default.createElement( + 'div', + _extends({ className: classnames('rt-tr-group', className), role: 'rowgroup' }, rest), + children + ); + }, + TrComponent: function TrComponent(_ref3) { + var children = _ref3.children, + className = _ref3.className, + rest = objectWithoutProperties(_ref3, ['children', 'className']); + return React__default.createElement( + 'div', + _extends({ className: classnames('rt-tr', className), role: 'row' }, rest), + children + ); + }, + ThComponent: function ThComponent(_ref4) { + var toggleSort = _ref4.toggleSort, + className = _ref4.className, + children = _ref4.children, + rest = objectWithoutProperties(_ref4, ['toggleSort', 'className', 'children']); + return ( + // eslint-disable-next-line jsx-a11y/click-events-have-key-events + React__default.createElement( + 'div', + _extends({ + className: classnames('rt-th', className), + onClick: function onClick(e) { + return toggleSort && toggleSort(e); + }, + role: 'columnheader', + tabIndex: '-1' // Resolves eslint issues without implementing keyboard navigation incorrectly + }, rest), + children + ) + ); + }, + TdComponent: function TdComponent(_ref5) { + var toggleSort = _ref5.toggleSort, + className = _ref5.className, + children = _ref5.children, + rest = objectWithoutProperties(_ref5, ['toggleSort', 'className', 'children']); + return React__default.createElement( + 'div', + _extends({ className: classnames('rt-td', className), role: 'gridcell' }, rest), + children + ); + }, + TfootComponent: _.makeTemplateComponent('rt-tfoot', 'Tfoot'), + FilterComponent: function FilterComponent(_ref6) { + var filter = _ref6.filter, + _onChange = _ref6.onChange, + column = _ref6.column; + return React__default.createElement('input', { + type: 'text', + style: { + width: '100%' + }, + placeholder: column.Placeholder, + value: filter ? filter.value : '', + onChange: function onChange(event) { + return _onChange(event.target.value); + } + }); + }, + ExpanderComponent: function ExpanderComponent(_ref7) { + var isExpanded = _ref7.isExpanded; + return React__default.createElement( + 'div', + { className: classnames('rt-expander', isExpanded && '-open') }, + '\u2022' + ); + }, + PivotValueComponent: function PivotValueComponent(_ref8) { + var subRows = _ref8.subRows, + value = _ref8.value; + return React__default.createElement( + 'span', + null, + value, + ' ', + subRows && '(' + subRows.length + ')' + ); + }, + AggregatedComponent: function AggregatedComponent(_ref9) { + var subRows = _ref9.subRows, + column = _ref9.column; + + var previewValues = subRows.filter(function (d) { + return typeof d[column.id] !== 'undefined'; + }).map(function (row, i) { + return ( + // eslint-disable-next-line react/no-array-index-key + React__default.createElement( + 'span', + { key: i }, + row[column.id], + i < subRows.length - 1 ? ', ' : '' + ) + ); + }); + return React__default.createElement( + 'span', + null, + previewValues + ); + }, + PivotComponent: undefined, // this is a computed default generated using + // the ExpanderComponent and PivotValueComponent at run-time in methods.js + PaginationComponent: ReactTablePagination, + PreviousComponent: undefined, + NextComponent: undefined, + LoadingComponent: function LoadingComponent(_ref10) { + var className = _ref10.className, + loading = _ref10.loading, + loadingText = _ref10.loadingText, + rest = objectWithoutProperties(_ref10, ['className', 'loading', 'loadingText']); + return React__default.createElement( + 'div', + _extends({ className: classnames('-loading', { '-active': loading }, className) }, rest), + React__default.createElement( + 'div', + { className: '-loading-inner' }, + loadingText + ) + ); + }, + NoDataComponent: _.makeTemplateComponent('rt-noData', 'NoData'), + ResizerComponent: _.makeTemplateComponent('rt-resizer', 'Resizer'), + PadRowComponent: function PadRowComponent() { + return React__default.createElement( + 'span', + null, + '\xA0' + ); + } +}; + +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +var objectAssign = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; + +var ReactPropTypesSecret_1 = ReactPropTypesSecret; + +var printWarning = function() {}; + +if (undefined !== 'production') { + var ReactPropTypesSecret$2 = ReactPropTypesSecret_1; + var loggedTypeFailures = {}; + var has = Function.call.bind(Object.prototype.hasOwnProperty); + + printWarning = function(text) { + var message = 'Warning: ' + text; + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; +} + +/** + * Assert that the values match with the type specs. + * Error messages are memorized and will only be shown once. + * + * @param {object} typeSpecs Map of name to a ReactPropType + * @param {object} values Runtime values that need to be type-checked + * @param {string} location e.g. "prop", "context", "child context" + * @param {string} componentName Name of the component for error messages. + * @param {?Function} getStack Returns the component stack. + * @private + */ +function checkPropTypes(typeSpecs, values, location, componentName, getStack) { + if (undefined !== 'production') { + for (var typeSpecName in typeSpecs) { + if (has(typeSpecs, typeSpecName)) { + var error; + // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + var err = Error( + (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + ); + err.name = 'Invariant Violation'; + throw err; + } + error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$2); + } catch (ex) { + error = ex; + } + if (error && !(error instanceof Error)) { + printWarning( + (componentName || 'React class') + ': type specification of ' + + location + ' `' + typeSpecName + '` is invalid; the type checker ' + + 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + + 'You may have forgotten to pass an argument to the type checker ' + + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + + 'shape all require an argument).' + ); + } + if (error instanceof Error && !(error.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error.message] = true; + + var stack = getStack ? getStack() : ''; + + printWarning( + 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '') + ); + } + } + } + } +} + +/** + * Resets warning cache when testing. + * + * @private + */ +checkPropTypes.resetWarningCache = function() { + if (undefined !== 'production') { + loggedTypeFailures = {}; + } +}; + +var checkPropTypes_1 = checkPropTypes; + +var has$1 = Function.call.bind(Object.prototype.hasOwnProperty); +var printWarning$1 = function() {}; + +if (undefined !== 'production') { + printWarning$1 = function(text) { + var message = 'Warning: ' + text; + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; +} + +function emptyFunctionThatReturnsNull() { + return null; +} + +var factoryWithTypeCheckers = function(isValidElement, throwOnDirectAccess) { + /* global Symbol */ + var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; + var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. + + /** + * Returns the iterator method function contained on the iterable object. + * + * Be sure to invoke the function with the iterable as context: + * + * var iteratorFn = getIteratorFn(myIterable); + * if (iteratorFn) { + * var iterator = iteratorFn.call(myIterable); + * ... + * } + * + * @param {?object} maybeIterable + * @return {?function} + */ + function getIteratorFn(maybeIterable) { + var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); + if (typeof iteratorFn === 'function') { + return iteratorFn; + } + } + + /** + * Collection of methods that allow declaration and validation of props that are + * supplied to React components. Example usage: + * + * var Props = require('ReactPropTypes'); + * var MyArticle = React.createClass({ + * propTypes: { + * // An optional string prop named "description". + * description: Props.string, + * + * // A required enum prop named "category". + * category: Props.oneOf(['News','Photos']).isRequired, + * + * // A prop named "dialog" that requires an instance of Dialog. + * dialog: Props.instanceOf(Dialog).isRequired + * }, + * render: function() { ... } + * }); + * + * A more formal specification of how these methods are used: + * + * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) + * decl := ReactPropTypes.{type}(.isRequired)? + * + * Each and every declaration produces a function with the same signature. This + * allows the creation of custom validation functions. For example: + * + * var MyLink = React.createClass({ + * propTypes: { + * // An optional string or URI prop named "href". + * href: function(props, propName, componentName) { + * var propValue = props[propName]; + * if (propValue != null && typeof propValue !== 'string' && + * !(propValue instanceof URI)) { + * return new Error( + * 'Expected a string or an URI for ' + propName + ' in ' + + * componentName + * ); + * } + * } + * }, + * render: function() {...} + * }); + * + * @internal + */ + + var ANONYMOUS = '<>'; + + // Important! + // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. + var ReactPropTypes = { + array: createPrimitiveTypeChecker('array'), + bool: createPrimitiveTypeChecker('boolean'), + func: createPrimitiveTypeChecker('function'), + number: createPrimitiveTypeChecker('number'), + object: createPrimitiveTypeChecker('object'), + string: createPrimitiveTypeChecker('string'), + symbol: createPrimitiveTypeChecker('symbol'), + + any: createAnyTypeChecker(), + arrayOf: createArrayOfTypeChecker, + element: createElementTypeChecker(), + elementType: createElementTypeTypeChecker(), + instanceOf: createInstanceTypeChecker, + node: createNodeChecker(), + objectOf: createObjectOfTypeChecker, + oneOf: createEnumTypeChecker, + oneOfType: createUnionTypeChecker, + shape: createShapeTypeChecker, + exact: createStrictShapeTypeChecker, + }; + + /** + * inlined Object.is polyfill to avoid requiring consumers ship their own + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is + */ + /*eslint-disable no-self-compare*/ + function is(x, y) { + // SameValue algorithm + if (x === y) { + // Steps 1-5, 7-10 + // Steps 6.b-6.e: +0 != -0 + return x !== 0 || 1 / x === 1 / y; + } else { + // Step 6.a: NaN == NaN + return x !== x && y !== y; + } + } + /*eslint-enable no-self-compare*/ + + /** + * We use an Error-like object for backward compatibility as people may call + * PropTypes directly and inspect their output. However, we don't use real + * Errors anymore. We don't inspect their stack anyway, and creating them + * is prohibitively expensive if they are created too often, such as what + * happens in oneOfType() for any type before the one that matched. + */ + function PropTypeError(message) { + this.message = message; + this.stack = ''; + } + // Make `instanceof Error` still work for returned errors. + PropTypeError.prototype = Error.prototype; + + function createChainableTypeChecker(validate) { + if (undefined !== 'production') { + var manualPropTypeCallCache = {}; + var manualPropTypeWarningCount = 0; + } + function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { + componentName = componentName || ANONYMOUS; + propFullName = propFullName || propName; + + if (secret !== ReactPropTypesSecret_1) { + if (throwOnDirectAccess) { + // New behavior only for users of `prop-types` package + var err = new Error( + 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + + 'Use `PropTypes.checkPropTypes()` to call them. ' + + 'Read more at http://fb.me/use-check-prop-types' + ); + err.name = 'Invariant Violation'; + throw err; + } else if (undefined !== 'production' && typeof console !== 'undefined') { + // Old behavior for people using React.PropTypes + var cacheKey = componentName + ':' + propName; + if ( + !manualPropTypeCallCache[cacheKey] && + // Avoid spamming the console because they are often not actionable except for lib authors + manualPropTypeWarningCount < 3 + ) { + printWarning$1( + 'You are manually calling a React.PropTypes validation ' + + 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + + 'and will throw in the standalone `prop-types` package. ' + + 'You may be seeing this warning due to a third-party PropTypes ' + + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.' + ); + manualPropTypeCallCache[cacheKey] = true; + manualPropTypeWarningCount++; + } + } + } + if (props[propName] == null) { + if (isRequired) { + if (props[propName] === null) { + return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); + } + return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); + } + return null; + } else { + return validate(props, propName, componentName, location, propFullName); + } + } + + var chainedCheckType = checkType.bind(null, false); + chainedCheckType.isRequired = checkType.bind(null, true); + + return chainedCheckType; + } + + function createPrimitiveTypeChecker(expectedType) { + function validate(props, propName, componentName, location, propFullName, secret) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== expectedType) { + // `propValue` being instance of, say, date/regexp, pass the 'object' + // check, but we can offer a more precise error message here rather than + // 'of type `object`'. + var preciseType = getPreciseType(propValue); + + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createAnyTypeChecker() { + return createChainableTypeChecker(emptyFunctionThatReturnsNull); + } + + function createArrayOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + if (typeof typeChecker !== 'function') { + return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); + } + var propValue = props[propName]; + if (!Array.isArray(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); + } + for (var i = 0; i < propValue.length; i++) { + var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret_1); + if (error instanceof Error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createElementTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + if (!isValidElement(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createElementTypeTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + if (!reactIs.isValidElementType(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createInstanceTypeChecker(expectedClass) { + function validate(props, propName, componentName, location, propFullName) { + if (!(props[propName] instanceof expectedClass)) { + var expectedClassName = expectedClass.name || ANONYMOUS; + var actualClassName = getClassName(props[propName]); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createEnumTypeChecker(expectedValues) { + if (!Array.isArray(expectedValues)) { + if (undefined !== 'production') { + if (arguments.length > 1) { + printWarning$1( + 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + + 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).' + ); + } else { + printWarning$1('Invalid argument supplied to oneOf, expected an array.'); + } + } + return emptyFunctionThatReturnsNull; + } + + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + for (var i = 0; i < expectedValues.length; i++) { + if (is(propValue, expectedValues[i])) { + return null; + } + } + + var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { + var type = getPreciseType(value); + if (type === 'symbol') { + return String(value); + } + return value; + }); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); + } + return createChainableTypeChecker(validate); + } + + function createObjectOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + if (typeof typeChecker !== 'function') { + return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); + } + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); + } + for (var key in propValue) { + if (has$1(propValue, key)) { + var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1); + if (error instanceof Error) { + return error; + } + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createUnionTypeChecker(arrayOfTypeCheckers) { + if (!Array.isArray(arrayOfTypeCheckers)) { + undefined !== 'production' ? printWarning$1('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0; + return emptyFunctionThatReturnsNull; + } + + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + if (typeof checker !== 'function') { + printWarning$1( + 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + + 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.' + ); + return emptyFunctionThatReturnsNull; + } + } + + function validate(props, propName, componentName, location, propFullName) { + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret_1) == null) { + return null; + } + } + + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); + } + return createChainableTypeChecker(validate); + } + + function createNodeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!isNode(props[propName])) { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + for (var key in shapeTypes) { + var checker = shapeTypes[key]; + if (!checker) { + continue; + } + var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1); + if (error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createStrictShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + // We need to check all keys in case some are required but missing from + // props. + var allKeys = objectAssign({}, props[propName], shapeTypes); + for (var key in allKeys) { + var checker = shapeTypes[key]; + if (!checker) { + return new PropTypeError( + 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + + '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + + '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ') + ); + } + var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1); + if (error) { + return error; + } + } + return null; + } + + return createChainableTypeChecker(validate); + } + + function isNode(propValue) { + switch (typeof propValue) { + case 'number': + case 'string': + case 'undefined': + return true; + case 'boolean': + return !propValue; + case 'object': + if (Array.isArray(propValue)) { + return propValue.every(isNode); + } + if (propValue === null || isValidElement(propValue)) { + return true; + } + + var iteratorFn = getIteratorFn(propValue); + if (iteratorFn) { + var iterator = iteratorFn.call(propValue); + var step; + if (iteratorFn !== propValue.entries) { + while (!(step = iterator.next()).done) { + if (!isNode(step.value)) { + return false; + } + } + } else { + // Iterator will provide entry [k,v] tuples rather than values. + while (!(step = iterator.next()).done) { + var entry = step.value; + if (entry) { + if (!isNode(entry[1])) { + return false; + } + } + } + } + } else { + return false; + } + + return true; + default: + return false; + } + } + + function isSymbol(propType, propValue) { + // Native Symbol. + if (propType === 'symbol') { + return true; + } + + // falsy value can't be a Symbol + if (!propValue) { + return false; + } + + // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' + if (propValue['@@toStringTag'] === 'Symbol') { + return true; + } + + // Fallback for non-spec compliant Symbols which are polyfilled. + if (typeof Symbol === 'function' && propValue instanceof Symbol) { + return true; + } + + return false; + } + + // Equivalent of `typeof` but with special handling for array and regexp. + function getPropType(propValue) { + var propType = typeof propValue; + if (Array.isArray(propValue)) { + return 'array'; + } + if (propValue instanceof RegExp) { + // Old webkits (at least until Android 4.0) return 'function' rather than + // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ + // passes PropTypes.object. + return 'object'; + } + if (isSymbol(propType, propValue)) { + return 'symbol'; + } + return propType; + } + + // This handles more types than `getPropType`. Only used for error messages. + // See `createPrimitiveTypeChecker`. + function getPreciseType(propValue) { + if (typeof propValue === 'undefined' || propValue === null) { + return '' + propValue; + } + var propType = getPropType(propValue); + if (propType === 'object') { + if (propValue instanceof Date) { + return 'date'; + } else if (propValue instanceof RegExp) { + return 'regexp'; + } + } + return propType; + } + + // Returns a string that is postfixed to a warning about an invalid type. + // For example, "undefined" or "of type array" + function getPostfixForTypeWarning(value) { + var type = getPreciseType(value); + switch (type) { + case 'array': + case 'object': + return 'an ' + type; + case 'boolean': + case 'date': + case 'regexp': + return 'a ' + type; + default: + return type; + } + } + + // Returns class name of the object, if any. + function getClassName(propValue) { + if (!propValue.constructor || !propValue.constructor.name) { + return ANONYMOUS; + } + return propValue.constructor.name; + } + + ReactPropTypes.checkPropTypes = checkPropTypes_1; + ReactPropTypes.resetWarningCache = checkPropTypes_1.resetWarningCache; + ReactPropTypes.PropTypes = ReactPropTypes; + + return ReactPropTypes; +}; + +function emptyFunction() {} +function emptyFunctionWithReset() {} +emptyFunctionWithReset.resetWarningCache = emptyFunction; + +var factoryWithThrowingShims = function() { + function shim(props, propName, componentName, location, propFullName, secret) { + if (secret === ReactPropTypesSecret_1) { + // It is still safe when called from React. + return; + } + var err = new Error( + 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + + 'Use PropTypes.checkPropTypes() to call them. ' + + 'Read more at http://fb.me/use-check-prop-types' + ); + err.name = 'Invariant Violation'; + throw err; + } + shim.isRequired = shim; + function getShim() { + return shim; + } + // Important! + // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`. + var ReactPropTypes = { + array: shim, + bool: shim, + func: shim, + number: shim, + object: shim, + string: shim, + symbol: shim, + + any: shim, + arrayOf: getShim, + element: shim, + elementType: shim, + instanceOf: getShim, + node: shim, + objectOf: getShim, + oneOf: getShim, + oneOfType: getShim, + shape: getShim, + exact: getShim, + + checkPropTypes: emptyFunctionWithReset, + resetWarningCache: emptyFunction + }; + + ReactPropTypes.PropTypes = ReactPropTypes; + + return ReactPropTypes; +}; + +var propTypes = createCommonjsModule(function (module) { +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +if (undefined !== 'production') { + var ReactIs = reactIs; + + // By explicitly using `prop-types` you are opting into new development behavior. + // http://fb.me/prop-types-in-prod + var throwOnDirectAccess = true; + module.exports = factoryWithTypeCheckers(ReactIs.isElement, throwOnDirectAccess); +} else { + // By explicitly using `prop-types` you are opting into new production behavior. + // http://fb.me/prop-types-in-prod + module.exports = factoryWithThrowingShims(); +} +}); + +var propTypes$1 = { + // General + data: propTypes.any, + loading: propTypes.bool, + showPagination: propTypes.bool, + showPaginationTop: propTypes.bool, + showPaginationBottom: propTypes.bool, + showPageSizeOptions: propTypes.bool, + pageSizeOptions: propTypes.array, + defaultPageSize: propTypes.number, + showPageJump: propTypes.bool, + collapseOnSortingChange: propTypes.bool, + collapseOnPageChange: propTypes.bool, + collapseOnDataChange: propTypes.bool, + freezeWhenExpanded: propTypes.bool, + sortable: propTypes.bool, + resizable: propTypes.bool, + filterable: propTypes.bool, + defaultSortDesc: propTypes.bool, + defaultSorted: propTypes.array, + defaultFiltered: propTypes.array, + defaultResized: propTypes.array, + defaultExpanded: propTypes.object, + defaultFilterMethod: propTypes.func, + defaultSortMethod: propTypes.func, + + // Controlled State Callbacks + onPageChange: propTypes.func, + onPageSizeChange: propTypes.func, + onSortedChange: propTypes.func, + onFilteredChange: propTypes.func, + onResizedChange: propTypes.func, + onExpandedChange: propTypes.func, + + // Pivoting + pivotBy: propTypes.array, + + // Key Constants + pivotValKey: propTypes.string, + pivotIDKey: propTypes.string, + subRowsKey: propTypes.string, + aggregatedKey: propTypes.string, + nestingLevelKey: propTypes.string, + originalKey: propTypes.string, + indexKey: propTypes.string, + groupedByPivotKey: propTypes.string, + + // Server-side Callbacks + onFetchData: propTypes.func, + + // Classes + className: propTypes.string, + style: propTypes.object, + + // Component decorators + getProps: propTypes.func, + getTableProps: propTypes.func, + getTheadGroupProps: propTypes.func, + getTheadGroupTrProps: propTypes.func, + getTheadGroupThProps: propTypes.func, + getTheadProps: propTypes.func, + getTheadTrProps: propTypes.func, + getTheadThProps: propTypes.func, + getTheadFilterProps: propTypes.func, + getTheadFilterTrProps: propTypes.func, + getTheadFilterThProps: propTypes.func, + getTbodyProps: propTypes.func, + getTrGroupProps: propTypes.func, + getTrProps: propTypes.func, + getTdProps: propTypes.func, + getTfootProps: propTypes.func, + getTfootTrProps: propTypes.func, + getTfootTdProps: propTypes.func, + getPaginationProps: propTypes.func, + getLoadingProps: propTypes.func, + getNoDataProps: propTypes.func, + getResizerProps: propTypes.func, + + // Global Column Defaults + columns: propTypes.arrayOf(propTypes.shape({ + // Renderers + Cell: propTypes.oneOfType([propTypes.element, propTypes.string, propTypes.elementType]), + Header: propTypes.oneOfType([propTypes.element, propTypes.string, propTypes.elementType]), + Footer: propTypes.oneOfType([propTypes.element, propTypes.string, propTypes.elementType]), + Aggregated: propTypes.oneOfType([propTypes.element, propTypes.string, propTypes.elementType]), + Pivot: propTypes.oneOfType([propTypes.element, propTypes.string, propTypes.elementType]), + PivotValue: propTypes.oneOfType([propTypes.element, propTypes.string, propTypes.elementType]), + Expander: propTypes.oneOfType([propTypes.element, propTypes.string, propTypes.elementType]), + Filter: propTypes.oneOfType([propTypes.element, propTypes.elementType]), + + // All Columns + sortable: propTypes.bool, // use table default + resizable: propTypes.bool, // use table default + filterable: propTypes.bool, // use table default + show: propTypes.bool, + minWidth: propTypes.number, + minResizeWidth: propTypes.number, + + // Cells only + className: propTypes.string, + style: propTypes.object, + getProps: propTypes.func, + + // Pivot only + aggregate: propTypes.func, + + // Headers only + headerClassName: propTypes.string, + headerStyle: propTypes.object, + getHeaderProps: propTypes.func, + + // Footers only + footerClassName: propTypes.string, + footerStyle: propTypes.object, + getFooterProps: propTypes.func, + filterMethod: propTypes.func, + filterAll: propTypes.bool, + sortMethod: propTypes.func + })), + + // Global Expander Column Defaults + expanderDefaults: propTypes.shape({ + sortable: propTypes.bool, + resizable: propTypes.bool, + filterable: propTypes.bool, + width: propTypes.number + }), + + pivotDefaults: propTypes.object, + + // Text + previousText: propTypes.node, + nextText: propTypes.node, + loadingText: propTypes.node, + noDataText: propTypes.node, + pageText: propTypes.node, + ofText: propTypes.node, + rowsText: propTypes.node, + pageJumpText: propTypes.node, + rowsSelectorText: propTypes.node, + + // Components + TableComponent: propTypes.elementType, + TheadComponent: propTypes.elementType, + TbodyComponent: propTypes.elementType, + TrGroupComponent: propTypes.elementType, + TrComponent: propTypes.elementType, + ThComponent: propTypes.elementType, + TdComponent: propTypes.elementType, + TfootComponent: propTypes.elementType, + FilterComponent: propTypes.elementType, + ExpanderComponent: propTypes.elementType, + PivotValueComponent: propTypes.elementType, + AggregatedComponent: propTypes.elementType, + // this is a computed default generated using + PivotComponent: propTypes.elementType, + // the ExpanderComponent and PivotValueComponent at run-time in methods.js + PaginationComponent: propTypes.elementType, + PreviousComponent: propTypes.elementType, + NextComponent: propTypes.elementType, + LoadingComponent: propTypes.elementType, + NoDataComponent: propTypes.elementType, + ResizerComponent: propTypes.elementType, + PadRowComponent: propTypes.elementType +}; + +// +var ReactTableDefaults = defaultProps; + +var ReactTable = function (_Methods) { + inherits(ReactTable, _Methods); + + function ReactTable(props) { + classCallCheck(this, ReactTable); + + var _this = possibleConstructorReturn(this, (ReactTable.__proto__ || Object.getPrototypeOf(ReactTable)).call(this, props)); + + _this.getResolvedState = _this.getResolvedState.bind(_this); + _this.getDataModel = _this.getDataModel.bind(_this); + _this.getSortedData = _this.getSortedData.bind(_this); + _this.fireFetchData = _this.fireFetchData.bind(_this); + _this.getPropOrState = _this.getPropOrState.bind(_this); + _this.getStateOrProp = _this.getStateOrProp.bind(_this); + _this.filterData = _this.filterData.bind(_this); + _this.sortData = _this.sortData.bind(_this); + _this.getMinRows = _this.getMinRows.bind(_this); + _this.onPageChange = _this.onPageChange.bind(_this); + _this.onPageSizeChange = _this.onPageSizeChange.bind(_this); + _this.sortColumn = _this.sortColumn.bind(_this); + _this.filterColumn = _this.filterColumn.bind(_this); + _this.resizeColumnStart = _this.resizeColumnStart.bind(_this); + _this.resizeColumnEnd = _this.resizeColumnEnd.bind(_this); + _this.resizeColumnMoving = _this.resizeColumnMoving.bind(_this); + return _this; + } + + createClass(ReactTable, [{ + key: 'render', + value: function render() { + var _this2 = this; + + var resolvedState = this.getResolvedState(); + var children = resolvedState.children, + className = resolvedState.className, + style = resolvedState.style, + getProps = resolvedState.getProps, + getTableProps = resolvedState.getTableProps, + getTheadGroupProps = resolvedState.getTheadGroupProps, + getTheadGroupTrProps = resolvedState.getTheadGroupTrProps, + getTheadGroupThProps = resolvedState.getTheadGroupThProps, + getTheadProps = resolvedState.getTheadProps, + getTheadTrProps = resolvedState.getTheadTrProps, + getTheadThProps = resolvedState.getTheadThProps, + getTheadFilterProps = resolvedState.getTheadFilterProps, + getTheadFilterTrProps = resolvedState.getTheadFilterTrProps, + getTheadFilterThProps = resolvedState.getTheadFilterThProps, + getTbodyProps = resolvedState.getTbodyProps, + getTrGroupProps = resolvedState.getTrGroupProps, + getTrProps = resolvedState.getTrProps, + getTdProps = resolvedState.getTdProps, + getTfootProps = resolvedState.getTfootProps, + getTfootTrProps = resolvedState.getTfootTrProps, + getTfootTdProps = resolvedState.getTfootTdProps, + getPaginationProps = resolvedState.getPaginationProps, + getLoadingProps = resolvedState.getLoadingProps, + getNoDataProps = resolvedState.getNoDataProps, + getResizerProps = resolvedState.getResizerProps, + showPagination = resolvedState.showPagination, + showPaginationTop = resolvedState.showPaginationTop, + showPaginationBottom = resolvedState.showPaginationBottom, + manual = resolvedState.manual, + loadingText = resolvedState.loadingText, + noDataText = resolvedState.noDataText, + sortable = resolvedState.sortable, + multiSort = resolvedState.multiSort, + resizable = resolvedState.resizable, + filterable = resolvedState.filterable, + pivotIDKey = resolvedState.pivotIDKey, + pivotValKey = resolvedState.pivotValKey, + pivotBy = resolvedState.pivotBy, + subRowsKey = resolvedState.subRowsKey, + aggregatedKey = resolvedState.aggregatedKey, + originalKey = resolvedState.originalKey, + indexKey = resolvedState.indexKey, + groupedByPivotKey = resolvedState.groupedByPivotKey, + loading = resolvedState.loading, + pageSize = resolvedState.pageSize, + page = resolvedState.page, + sorted = resolvedState.sorted, + filtered = resolvedState.filtered, + resized = resolvedState.resized, + expanded = resolvedState.expanded, + pages = resolvedState.pages, + onExpandedChange = resolvedState.onExpandedChange, + TableComponent = resolvedState.TableComponent, + TheadComponent = resolvedState.TheadComponent, + TbodyComponent = resolvedState.TbodyComponent, + TrGroupComponent = resolvedState.TrGroupComponent, + TrComponent = resolvedState.TrComponent, + ThComponent = resolvedState.ThComponent, + TdComponent = resolvedState.TdComponent, + TfootComponent = resolvedState.TfootComponent, + PaginationComponent = resolvedState.PaginationComponent, + LoadingComponent = resolvedState.LoadingComponent, + SubComponent = resolvedState.SubComponent, + NoDataComponent = resolvedState.NoDataComponent, + ResizerComponent = resolvedState.ResizerComponent, + ExpanderComponent = resolvedState.ExpanderComponent, + PivotValueComponent = resolvedState.PivotValueComponent, + PivotComponent = resolvedState.PivotComponent, + AggregatedComponent = resolvedState.AggregatedComponent, + FilterComponent = resolvedState.FilterComponent, + PadRowComponent = resolvedState.PadRowComponent, + resolvedData = resolvedState.resolvedData, + allVisibleColumns = resolvedState.allVisibleColumns, + headerGroups = resolvedState.headerGroups, + hasHeaderGroups = resolvedState.hasHeaderGroups, + sortedData = resolvedState.sortedData, + currentlyResizing = resolvedState.currentlyResizing; + + // Pagination + + var startRow = pageSize * page; + var endRow = startRow + pageSize; + var pageRows = manual ? resolvedData : sortedData.slice(startRow, endRow); + var minRows = this.getMinRows(); + var padRows = _.range(Math.max(minRows - pageRows.length, 0)); + + var hasColumnFooter = allVisibleColumns.some(function (d) { + return d.Footer; + }); + var hasFilters = filterable || allVisibleColumns.some(function (d) { + return d.filterable; + }); + + var recurseRowsViewIndex = function recurseRowsViewIndex(rows) { + var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1; + return [rows.map(function (row, i) { + index += 1; + var rowWithViewIndex = _extends({}, row, { + _viewIndex: index + }); + var newPath = path.concat([i]); + if (rowWithViewIndex[subRowsKey] && _.get(expanded, newPath)) { + var _recurseRowsViewIndex = recurseRowsViewIndex(rowWithViewIndex[subRowsKey], newPath, index); + + var _recurseRowsViewIndex2 = slicedToArray(_recurseRowsViewIndex, 2); + + rowWithViewIndex[subRowsKey] = _recurseRowsViewIndex2[0]; + index = _recurseRowsViewIndex2[1]; + } + return rowWithViewIndex; + }), index]; + }; + + var _recurseRowsViewIndex3 = recurseRowsViewIndex(pageRows); + + var _recurseRowsViewIndex4 = slicedToArray(_recurseRowsViewIndex3, 1); + + pageRows = _recurseRowsViewIndex4[0]; + + + var canPrevious = page > 0; + var canNext = page + 1 < pages; + + var rowMinWidth = _.sum(allVisibleColumns.map(function (d) { + var resizedColumn = resized.find(function (x) { + return x.id === d.id; + }) || {}; + return _.getFirstDefined(resizedColumn.value, d.width, d.minWidth); + })); + + var rowIndex = -1; + + var finalState = _extends({}, resolvedState, { + startRow: startRow, + endRow: endRow, + pageRows: pageRows, + minRows: minRows, + padRows: padRows, + hasColumnFooter: hasColumnFooter, + canPrevious: canPrevious, + canNext: canNext, + rowMinWidth: rowMinWidth + }); + + var rootProps = _.splitProps(getProps(finalState, undefined, undefined, this)); + var tableProps = _.splitProps(getTableProps(finalState, undefined, undefined, this)); + var tBodyProps = _.splitProps(getTbodyProps(finalState, undefined, undefined, this)); + var loadingProps = getLoadingProps(finalState, undefined, undefined, this); + var noDataProps = getNoDataProps(finalState, undefined, undefined, this); + + // Visual Components + + var makeHeaderGroup = function makeHeaderGroup(column, i) { + var resizedValue = function resizedValue(col) { + return (resized.find(function (x) { + return x.id === col.id; + }) || {}).value; + }; + var flex = _.sum(column.columns.map(function (col) { + return col.width || resizedValue(col) ? 0 : col.minWidth; + })); + var width = _.sum(column.columns.map(function (col) { + return _.getFirstDefined(resizedValue(col), col.width, col.minWidth); + })); + var maxWidth = _.sum(column.columns.map(function (col) { + return _.getFirstDefined(resizedValue(col), col.width, col.maxWidth); + })); + + var theadGroupThProps = _.splitProps(getTheadGroupThProps(finalState, undefined, column, _this2)); + var columnHeaderProps = _.splitProps(column.getHeaderProps(finalState, undefined, column, _this2)); + + var classes = [column.headerClassName, theadGroupThProps.className, columnHeaderProps.className]; + + var styles = _extends({}, column.headerStyle, theadGroupThProps.style, columnHeaderProps.style); + + var rest = _extends({}, theadGroupThProps.rest, columnHeaderProps.rest); + + var flexStyles = { + flex: flex + ' 0 auto', + width: _.asPx(width), + maxWidth: _.asPx(maxWidth) + }; + + return React__default.createElement( + ThComponent, + _extends({ + key: i + '-' + column.id, + className: classnames(classes), + style: _extends({}, styles, flexStyles) + }, rest), + _.normalizeComponent(column.Header, { + data: sortedData, + column: column + }) + ); + }; + + var makeHeaderGroups = function makeHeaderGroups() { + var theadGroupProps = _.splitProps(getTheadGroupProps(finalState, undefined, undefined, _this2)); + var theadGroupTrProps = _.splitProps(getTheadGroupTrProps(finalState, undefined, undefined, _this2)); + return React__default.createElement( + TheadComponent, + _extends({ + className: classnames('-headerGroups', theadGroupProps.className), + style: _extends({}, theadGroupProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, theadGroupProps.rest), + React__default.createElement( + TrComponent, + _extends({ + className: theadGroupTrProps.className, + style: theadGroupTrProps.style + }, theadGroupTrProps.rest), + headerGroups.map(makeHeaderGroup) + ) + ); + }; + + var makeHeader = function makeHeader(column, i) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var sort = sorted.find(function (d) { + return d.id === column.id; + }); + var show = typeof column.show === 'function' ? column.show() : column.show; + var width = _.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var maxWidth = _.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var theadThProps = _.splitProps(getTheadThProps(finalState, undefined, column, _this2)); + var columnHeaderProps = _.splitProps(column.getHeaderProps(finalState, undefined, column, _this2)); + + var classes = [column.headerClassName, theadThProps.className, columnHeaderProps.className]; + + var styles = _extends({}, column.headerStyle, theadThProps.style, columnHeaderProps.style); + + var rest = _extends({}, theadThProps.rest, columnHeaderProps.rest); + + var isResizable = _.getFirstDefined(column.resizable, resizable, false); + var resizer = isResizable ? React__default.createElement(ResizerComponent, _extends({ + onMouseDown: function onMouseDown(e) { + return _this2.resizeColumnStart(e, column, false); + }, + onTouchStart: function onTouchStart(e) { + return _this2.resizeColumnStart(e, column, true); + } + }, getResizerProps('finalState', undefined, column, _this2))) : null; + + var isSortable = _.getFirstDefined(column.sortable, sortable, false); + + return React__default.createElement( + ThComponent, + _extends({ + key: i + '-' + column.id, + className: classnames(classes, isResizable && 'rt-resizable-header', sort ? sort.desc ? '-sort-desc' : '-sort-asc' : '', isSortable && '-cursor-pointer', !show && '-hidden', pivotBy && pivotBy.slice(0, -1).includes(column.id) && 'rt-header-pivot'), + style: _extends({}, styles, { + flex: width + ' 0 auto', + width: _.asPx(width), + maxWidth: _.asPx(maxWidth) + }), + toggleSort: function toggleSort(e) { + if (isSortable) _this2.sortColumn(column, multiSort ? e.shiftKey : false); + } + }, rest), + React__default.createElement( + 'div', + { className: classnames(isResizable && 'rt-resizable-header-content') }, + _.normalizeComponent(column.Header, { + data: sortedData, + column: column + }) + ), + resizer + ); + }; + + var makeHeaders = function makeHeaders() { + var theadProps = _.splitProps(getTheadProps(finalState, undefined, undefined, _this2)); + var theadTrProps = _.splitProps(getTheadTrProps(finalState, undefined, undefined, _this2)); + return React__default.createElement( + TheadComponent, + _extends({ + className: classnames('-header', theadProps.className), + style: _extends({}, theadProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, theadProps.rest), + React__default.createElement( + TrComponent, + _extends({ + className: theadTrProps.className, + style: theadTrProps.style + }, theadTrProps.rest), + allVisibleColumns.map(makeHeader) + ) + ); + }; + + var makeFilter = function makeFilter(column, i) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var width = _.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var maxWidth = _.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var theadFilterThProps = _.splitProps(getTheadFilterThProps(finalState, undefined, column, _this2)); + var columnHeaderProps = _.splitProps(column.getHeaderProps(finalState, undefined, column, _this2)); + + var classes = [column.headerClassName, theadFilterThProps.className, columnHeaderProps.className]; + + var styles = _extends({}, column.headerStyle, theadFilterThProps.style, columnHeaderProps.style); + + var rest = _extends({}, theadFilterThProps.rest, columnHeaderProps.rest); + + var filter = filtered.find(function (filter) { + return filter.id === column.id; + }); + + var ResolvedFilterComponent = column.Filter || FilterComponent; + + var isFilterable = _.getFirstDefined(column.filterable, filterable, false); + + return React__default.createElement( + ThComponent, + _extends({ + key: i + '-' + column.id, + className: classnames(classes), + style: _extends({}, styles, { + flex: width + ' 0 auto', + width: _.asPx(width), + maxWidth: _.asPx(maxWidth) + }) + }, rest), + isFilterable ? _.normalizeComponent(ResolvedFilterComponent, { + column: column, + filter: filter, + onChange: function onChange(value) { + return _this2.filterColumn(column, value); + } + }, defaultProps.column.Filter) : null + ); + }; + + var makeFilters = function makeFilters() { + var theadFilterProps = _.splitProps(getTheadFilterProps(finalState, undefined, undefined, _this2)); + var theadFilterTrProps = _.splitProps(getTheadFilterTrProps(finalState, undefined, undefined, _this2)); + return React__default.createElement( + TheadComponent, + _extends({ + className: classnames('-filters', theadFilterProps.className), + style: _extends({}, theadFilterProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, theadFilterProps.rest), + React__default.createElement( + TrComponent, + _extends({ + className: theadFilterTrProps.className, + style: theadFilterTrProps.style + }, theadFilterTrProps.rest), + allVisibleColumns.map(makeFilter) + ) + ); + }; + + var makePageRow = function makePageRow(row, i) { + var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + + var rowInfo = { + original: row[originalKey], + row: row, + index: row[indexKey], + viewIndex: rowIndex += 1, + pageSize: pageSize, + page: page, + level: path.length, + nestingPath: path.concat([i]), + aggregated: row[aggregatedKey], + groupedByPivot: row[groupedByPivotKey], + subRows: row[subRowsKey] + }; + var isExpanded = _.get(expanded, rowInfo.nestingPath); + var trGroupProps = getTrGroupProps(finalState, rowInfo, undefined, _this2); + var trProps = _.splitProps(getTrProps(finalState, rowInfo, undefined, _this2)); + return React__default.createElement( + TrGroupComponent, + _extends({ key: rowInfo.nestingPath.join('_') }, trGroupProps), + React__default.createElement( + TrComponent, + _extends({ + className: classnames(trProps.className, row._viewIndex % 2 ? '-even' : '-odd'), + style: trProps.style + }, trProps.rest), + allVisibleColumns.map(function (column, i2) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var show = typeof column.show === 'function' ? column.show() : column.show; + var width = _.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var maxWidth = _.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var tdProps = _.splitProps(getTdProps(finalState, rowInfo, column, _this2)); + var columnProps = _.splitProps(column.getProps(finalState, rowInfo, column, _this2)); + + var classes = [tdProps.className, column.className, columnProps.className]; + + var styles = _extends({}, tdProps.style, column.style, columnProps.style); + + var cellInfo = _extends({}, rowInfo, { + isExpanded: isExpanded, + column: _extends({}, column), + value: rowInfo.row[column.id], + pivoted: column.pivoted, + expander: column.expander, + resized: resized, + show: show, + width: width, + maxWidth: maxWidth, + tdProps: tdProps, + columnProps: columnProps, + classes: classes, + styles: styles + }); + + var value = cellInfo.value; + + var useOnExpanderClick = void 0; + var isBranch = void 0; + var isPreview = void 0; + + var onExpanderClick = function onExpanderClick(e) { + var newExpanded = _.clone(expanded); + if (isExpanded) { + newExpanded = _.set(newExpanded, cellInfo.nestingPath, false); + } else { + newExpanded = _.set(newExpanded, cellInfo.nestingPath, {}); + } + + return _this2.setStateWithData({ + expanded: newExpanded + }, function () { + return onExpandedChange && onExpandedChange(newExpanded, cellInfo.nestingPath, e, cellInfo); + }); + }; + + // Default to a standard cell + var resolvedCell = _.normalizeComponent(column.Cell, cellInfo, value); + + // Resolve Renderers + var ResolvedAggregatedComponent = column.Aggregated || (!column.aggregate ? AggregatedComponent : column.Cell); + var ResolvedExpanderComponent = column.Expander || ExpanderComponent; + var ResolvedPivotValueComponent = column.PivotValue || PivotValueComponent; + var DefaultResolvedPivotComponent = PivotComponent || function (props) { + return React__default.createElement( + 'div', + null, + React__default.createElement(ResolvedExpanderComponent, props), + React__default.createElement(ResolvedPivotValueComponent, props) + ); + }; + var ResolvedPivotComponent = column.Pivot || DefaultResolvedPivotComponent; + + // Is this cell expandable? + if (cellInfo.pivoted || cellInfo.expander) { + // Make it expandable by defualt + cellInfo.expandable = true; + useOnExpanderClick = true; + // If pivoted, has no subRows, and does not have a subComponent, + // do not make expandable + if (cellInfo.pivoted && !cellInfo.subRows && !SubComponent) { + cellInfo.expandable = false; + } + } + + if (cellInfo.pivoted) { + // Is this column a branch? + isBranch = rowInfo.row[pivotIDKey] === column.id && cellInfo.subRows; + // Should this column be blank? + isPreview = pivotBy.indexOf(column.id) > pivotBy.indexOf(rowInfo.row[pivotIDKey]) && cellInfo.subRows; + // Pivot Cell Render Override + if (isBranch) { + // isPivot + resolvedCell = _.normalizeComponent(ResolvedPivotComponent, _extends({}, cellInfo, { + value: row[pivotValKey] + }), row[pivotValKey]); + } else if (isPreview) { + // Show the pivot preview + resolvedCell = _.normalizeComponent(ResolvedAggregatedComponent, cellInfo, value); + } else { + resolvedCell = null; + } + } else if (cellInfo.aggregated) { + resolvedCell = _.normalizeComponent(ResolvedAggregatedComponent, cellInfo, value); + } + + if (cellInfo.expander) { + resolvedCell = _.normalizeComponent(ResolvedExpanderComponent, cellInfo, row[pivotValKey]); + if (pivotBy) { + if (cellInfo.groupedByPivot) { + resolvedCell = null; + } + if (!cellInfo.subRows && !SubComponent) { + resolvedCell = null; + } + } + } + + var resolvedOnExpanderClick = useOnExpanderClick ? onExpanderClick : function () {}; + + // If there are multiple onClick events, make sure they don't + // override eachother. This should maybe be expanded to handle all + // function attributes + var interactionProps = { + onClick: resolvedOnExpanderClick + }; + + if (tdProps.rest.onClick) { + interactionProps.onClick = function (e) { + tdProps.rest.onClick(e, function () { + return resolvedOnExpanderClick(e); + }); + }; + } + + if (columnProps.rest.onClick) { + interactionProps.onClick = function (e) { + columnProps.rest.onClick(e, function () { + return resolvedOnExpanderClick(e); + }); + }; + } + + // Return the cell + return React__default.createElement( + TdComponent + // eslint-disable-next-line react/no-array-index-key + , + _extends({ key: i2 + '-' + column.id, + className: classnames(classes, !cellInfo.expandable && !show && 'hidden', cellInfo.expandable && 'rt-expandable', (isBranch || isPreview) && 'rt-pivot'), + style: _extends({}, styles, { + flex: width + ' 0 auto', + width: _.asPx(width), + maxWidth: _.asPx(maxWidth) + }) + }, tdProps.rest, columnProps.rest, interactionProps), + resolvedCell + ); + }) + ), + rowInfo.subRows && isExpanded && rowInfo.subRows.map(function (d, i) { + return makePageRow(d, i, rowInfo.nestingPath); + }), + SubComponent && !rowInfo.subRows && isExpanded && SubComponent(rowInfo, function () { + var newExpanded = _.clone(expanded); + + _.set(newExpanded, rowInfo.nestingPath, false); + }) + ); + }; + + var makePadColumn = function makePadColumn(column, i) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var show = typeof column.show === 'function' ? column.show() : column.show; + var width = _.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var flex = width; + var maxWidth = _.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var tdProps = _.splitProps(getTdProps(finalState, undefined, column, _this2)); + var columnProps = _.splitProps(column.getProps(finalState, undefined, column, _this2)); + + var classes = [tdProps.className, column.className, columnProps.className]; + + var styles = _extends({}, tdProps.style, column.style, columnProps.style); + + return React__default.createElement( + TdComponent, + _extends({ + key: i + '-' + column.id, + className: classnames(classes, !show && 'hidden'), + style: _extends({}, styles, { + flex: flex + ' 0 auto', + width: _.asPx(width), + maxWidth: _.asPx(maxWidth) + }) + }, tdProps.rest), + _.normalizeComponent(PadRowComponent) + ); + }; + + var makePadRow = function makePadRow(row, i) { + var trGroupProps = getTrGroupProps(finalState, undefined, undefined, _this2); + var trProps = _.splitProps(getTrProps(finalState, undefined, undefined, _this2)); + return React__default.createElement( + TrGroupComponent, + _extends({ key: 'pad-' + i }, trGroupProps), + React__default.createElement( + TrComponent, + { + className: classnames('-padRow', (pageRows.length + i) % 2 ? '-even' : '-odd', trProps.className), + style: trProps.style || {} + }, + allVisibleColumns.map(makePadColumn) + ) + ); + }; + + var makeColumnFooter = function makeColumnFooter(column, i) { + var resizedCol = resized.find(function (x) { + return x.id === column.id; + }) || {}; + var show = typeof column.show === 'function' ? column.show() : column.show; + var width = _.getFirstDefined(resizedCol.value, column.width, column.minWidth); + var maxWidth = _.getFirstDefined(resizedCol.value, column.width, column.maxWidth); + var tFootTdProps = _.splitProps(getTfootTdProps(finalState, undefined, column, _this2)); + var columnProps = _.splitProps(column.getProps(finalState, undefined, column, _this2)); + var columnFooterProps = _.splitProps(column.getFooterProps(finalState, undefined, column, _this2)); + + var classes = [tFootTdProps.className, column.className, columnProps.className, columnFooterProps.className]; + + var styles = _extends({}, tFootTdProps.style, column.style, columnProps.style, columnFooterProps.style); + + return React__default.createElement( + TdComponent, + _extends({ + key: i + '-' + column.id, + className: classnames(classes, !show && 'hidden'), + style: _extends({}, styles, { + flex: width + ' 0 auto', + width: _.asPx(width), + maxWidth: _.asPx(maxWidth) + }) + }, columnProps.rest, tFootTdProps.rest, columnFooterProps.rest), + _.normalizeComponent(column.Footer, { + data: sortedData, + column: column + }) + ); + }; + + var makeColumnFooters = function makeColumnFooters() { + var tFootProps = _.splitProps(getTfootProps(finalState, undefined, undefined, _this2)); + var tFootTrProps = _.splitProps(getTfootTrProps(finalState, undefined, undefined, _this2)); + return React__default.createElement( + TfootComponent, + _extends({ + className: tFootProps.className, + style: _extends({}, tFootProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, tFootProps.rest), + React__default.createElement( + TrComponent, + _extends({ + className: classnames(tFootTrProps.className), + style: tFootTrProps.style + }, tFootTrProps.rest), + allVisibleColumns.map(makeColumnFooter) + ) + ); + }; + + var makePagination = function makePagination(isTop) { + var paginationProps = _.splitProps(getPaginationProps(finalState, undefined, undefined, _this2)); + return React__default.createElement(PaginationComponent, _extends({}, resolvedState, { + pages: pages, + canPrevious: canPrevious, + canNext: canNext, + onPageChange: _this2.onPageChange, + onPageSizeChange: _this2.onPageSizeChange, + className: paginationProps.className, + style: paginationProps.style, + isTop: isTop + }, paginationProps.rest)); + }; + + var makeTable = function makeTable() { + return React__default.createElement( + 'div', + _extends({ + className: classnames('ReactTable', className, rootProps.className), + style: _extends({}, style, rootProps.style) + }, rootProps.rest), + showPagination && showPaginationTop ? React__default.createElement( + 'div', + { className: 'pagination-top' }, + makePagination(true) + ) : null, + React__default.createElement( + TableComponent, + _extends({ + className: classnames(tableProps.className, currentlyResizing ? 'rt-resizing' : ''), + style: tableProps.style + }, tableProps.rest), + hasHeaderGroups ? makeHeaderGroups() : null, + makeHeaders(), + hasFilters ? makeFilters() : null, + React__default.createElement( + TbodyComponent, + _extends({ + className: classnames(tBodyProps.className), + style: _extends({}, tBodyProps.style, { + minWidth: rowMinWidth + 'px' + }) + }, tBodyProps.rest), + pageRows.map(function (d, i) { + return makePageRow(d, i); + }), + padRows.map(makePadRow) + ), + hasColumnFooter ? makeColumnFooters() : null + ), + showPagination && showPaginationBottom ? React__default.createElement( + 'div', + { className: 'pagination-bottom' }, + makePagination(false) + ) : null, + !pageRows.length && React__default.createElement( + NoDataComponent, + noDataProps, + _.normalizeComponent(noDataText) + ), + React__default.createElement(LoadingComponent, _extends({ loading: loading, loadingText: loadingText }, loadingProps)) + ); + }; + + // childProps are optionally passed to a function-as-a-child + return children ? children(finalState, makeTable, this) : makeTable(); + } + }]); + return ReactTable; +}(Methods(Lifecycle(React.Component))); + +ReactTable.propTypes = propTypes$1; +ReactTable.defaultProps = defaultProps; + +exports.ReactTableDefaults = ReactTableDefaults; +exports.default = ReactTable; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/react-table.min.js b/react-table.min.js new file mode 100644 index 0000000000..aae47d0b63 --- /dev/null +++ b/react-table.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],t):t(e.ReactTable={},e.React)}(this,function(e,t){"use strict";var n="default"in t?t.default:t;function o(e,t){return e(t={exports:{}},t.exports),t.exports}var r=o(function(e){!function(){var t={}.hasOwnProperty;function n(){for(var e=[],o=0;o=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n},_=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},j=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],o=!0,r=!1,a=void 0;try{for(var i,s=e[Symbol.iterator]();!(o=(i=s.next()).done)&&(n.push(i.value),!t||n.length!==t);o=!0);}catch(e){r=!0,a=e}finally{try{!o&&s.return&&s.return()}finally{if(r)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),K=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],o=B(t),r=void 0,a=e;for(;(r=o.shift())&&o.length;)a[r]||(a[r]={}),a=a[r];return a[r]=n,e},takeRight:function(e,t){var n=t>e.length?0:e.length-t;return e.slice(n)},last:function(e){return e[e.length-1]},orderBy:function(e,t,n,o){return e.sort(function(e,r){for(var a=0;a2&&void 0!==arguments[2]?arguments[2]:e;if(D(e)||"string"==typeof e)return e;if(z(e))return n.createElement(e,t);return o},asPx:function(e){return e=Number(e),Number.isNaN(e)?null:e+"px"}};function A(e){return Array.isArray(e)}function B(e){return function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(A(t))for(var o=0;o=this.props.pages-1},this.props.nextText)))}}]),t}(t.Component);G.defaultProps={PreviousComponent:$,NextComponent:$,renderPageJump:function(e){var t=e.onChange,o=e.value,r=e.onBlur,a=e.onKeyPress,i=e.inputType,s=e.pageJumpText;return n.createElement("div",{className:"-pageJump"},n.createElement("input",{"aria-label":s,type:i,onChange:t,value:o,onBlur:r,onKeyPress:a}))},renderCurrentPage:function(e){return n.createElement("span",{className:"-currentPage"},e+1)},renderTotalPagesCount:function(e){return n.createElement("span",{className:"-totalPages"},e||1)},renderPageSizeOptions:function(e){var t=e.pageSize,o=e.pageSizeOptions,r=e.rowsSelectorText,a=e.onPageSizeChange,i=e.rowsText;return n.createElement("span",{className:"select-wrap -pageSizeOptions"},n.createElement("select",{"aria-label":r,onChange:function(e){return a(Number(e.target.value))},value:t},o.map(function(e,t){return n.createElement("option",{key:t,value:e},e+" "+i)})))}};var I=function(){return{}},J={data:[],resolveData:function(e){return e},loading:!1,showPagination:!0,showPaginationTop:!1,showPaginationBottom:!0,showPageSizeOptions:!0,pageSizeOptions:[5,10,20,25,50,100],defaultPage:0,defaultPageSize:20,showPageJump:!0,collapseOnSortingChange:!0,collapseOnPageChange:!0,collapseOnDataChange:!0,freezeWhenExpanded:!1,sortable:!0,multiSort:!0,resizable:!0,filterable:!1,defaultSortDesc:!1,defaultSorted:[],defaultFiltered:[],defaultResized:[],defaultExpanded:{},defaultFilterMethod:function(e,t,n){var o=e.pivotId||e.id;return void 0===t[o]||String(t[o]).startsWith(e.value)},defaultSortMethod:function(e,t,n){return e=null===e||void 0===e?"":e,t=null===t||void 0===t?"":t,(e="string"==typeof e?e.toLowerCase():e)>(t="string"==typeof t?t.toLowerCase():t)?1:e1&&void 0!==arguments[1]?arguments[1]:[],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;return[t.map(function(t,r){var a=k({},t,{_viewIndex:o+=1}),i=n.concat([r]);if(a[V]&&L.get(oe,i)){var s=e(a[V],i,o),l=j(s,2);a[V]=l[0],o=l[1]}return a}),o]}(ke),Le=j(Ke,1);ke=Le[0];var Ae=Z>0,Be=Z+12&&void 0!==arguments[2]?arguments[2]:[],s={original:o[U],row:o,index:o[X],viewIndex:Ge+=1,pageSize:Q,page:Z,level:i.length,nestingPath:i.concat([a]),aggregated:o[H],groupedByPivot:o[q],subRows:o[V]},l=L.get(oe,s.nestingPath),u=P(Ie,s,void 0,e),p=L.splitProps(b(Ie,s,void 0,e));return n.createElement(ue,k({key:s.nestingPath.join("_")},u),n.createElement(pe,k({className:r(p.className,o._viewIndex%2?"-even":"-odd"),style:p.style},p.rest),Ne.map(function(t,a){var i=ne.find(function(e){return e.id===t.id})||{},u="function"==typeof t.show?t.show():t.show,p=L.getFirstDefined(i.value,t.width,t.minWidth),d=L.getFirstDefined(i.value,t.width,t.maxWidth),c=L.splitProps(C(Ie,s,t,e)),f=L.splitProps(t.getProps(Ie,s,t,e)),g=[c.className,t.className,f.className],m=k({},c.style,t.style,f.style),h=k({},s,{isExpanded:l,column:k({},t),value:s.row[t.id],pivoted:t.pivoted,expander:t.expander,resized:ne,show:u,width:p,maxWidth:d,tdProps:c,columnProps:f,classes:g,styles:m}),v=h.value,y=void 0,P=void 0,b=void 0,T=L.normalizeComponent(t.Cell,h,v),S=t.Aggregated||(t.aggregate?t.Cell:Te),x=t.Expander||Pe,w=t.PivotValue||be,N=Ce||function(e){return n.createElement("div",null,n.createElement(x,e),n.createElement(w,e))},E=t.Pivot||N;(h.pivoted||h.expander)&&(h.expandable=!0,y=!0,!h.pivoted||h.subRows||he||(h.expandable=!1)),h.pivoted?(P=s.row[$]===t.id&&h.subRows,b=I.indexOf(t.id)>I.indexOf(s.row[$])&&h.subRows,T=P?L.normalizeComponent(E,k({},h,{value:o[G]}),o[G]):b?L.normalizeComponent(S,h,v):null):h.aggregated&&(T=L.normalizeComponent(S,h,v)),h.expander&&(T=L.normalizeComponent(x,h,o[G]),I&&(h.groupedByPivot&&(T=null),h.subRows||he||(T=null)));var z=y?function(t){var n=L.clone(oe);return n=l?L.set(n,h.nestingPath,!1):L.set(n,h.nestingPath,{}),e.setStateWithData({expanded:n},function(){return ae&&ae(n,h.nestingPath,t,h)})}:function(){},D={onClick:z};return c.rest.onClick&&(D.onClick=function(e){c.rest.onClick(e,function(){return z(e)})}),f.rest.onClick&&(D.onClick=function(e){f.rest.onClick(e,function(){return z(e)})}),n.createElement(ce,k({key:a+"-"+t.id,className:r(g,!h.expandable&&!u&&"hidden",h.expandable&&"rt-expandable",(P||b)&&"rt-pivot"),style:k({},m,{flex:p+" 0 auto",width:L.asPx(p),maxWidth:L.asPx(d)})},c.rest,f.rest,D),T)})),s.subRows&&l&&s.subRows.map(function(e,n){return t(e,n,s.nestingPath)}),he&&!s.subRows&&l&&he(s,function(){var e=L.clone(oe);L.set(e,s.nestingPath,!1)}))}(t,o)}),Me.map(et)),_e?(t=L.splitProps(T(Ie,void 0,void 0,e)),o=L.splitProps(S(Ie,void 0,void 0,e)),n.createElement(fe,k({className:t.className,style:k({},t.style,{minWidth:$e+"px"})},t.rest),n.createElement(pe,k({className:r(o.className),style:o.style},o.rest),Ne.map(tt)))):null),D&&R?n.createElement("div",{className:"pagination-bottom"},nt(!1)):null,!ke.length&&n.createElement(ve,Xe,L.normalizeComponent(M)),n.createElement(me,k({loading:Y,loadingText:W},Ue)));var t,o,s,l,d,g,v,y};return o?o(Ie,ot,this):ot()}}]),t}(function(e){return function(t){function o(){return O(this,o),_(this,(o.__proto__||Object.getPrototypeOf(o)).apply(this,arguments))}return W(o,e),R(o,[{key:"getResolvedState",value:function(e,t){return k({},L.compactObject(this.state),L.compactObject(this.props),L.compactObject(t),L.compactObject(e))}},{key:"getDataModel",value:function(e,t){var o=this,r=e.columns,a=e.pivotBy,i=void 0===a?[]:a,s=e.data,l=e.resolveData,u=e.pivotIDKey,p=e.pivotValKey,d=e.subRowsKey,c=e.aggregatedKey,f=e.nestingLevelKey,g=e.originalKey,m=e.indexKey,h=e.groupedByPivotKey,v=e.SubComponent,y=!1;r.forEach(function(e){e.columns&&(y=!0)});var P=[].concat(K(r)),b=r.find(function(e){return e.expander||e.columns&&e.columns.some(function(e){return e.expander})});b&&!b.expander&&(b=b.columns.find(function(e){return e.expander})),v&&!b&&(P=[b={expander:!0}].concat(K(P)));var C=[],T=function(e,t){var n=function(e,t){var n=void 0;if((n=e.expander?k({},o.props.column,o.props.expanderDefaults,e):k({},o.props.column,e)).maxWidth-1)&&L.getFirstDefined(e.show,!0)});return k({},e,{columns:t})}return e})).filter(function(e){return e.columns?e.columns.length:!(i.indexOf(e.id)>-1)&&L.getFirstDefined(e.show,!0)})).findIndex(function(e){return e.pivot});if(i.length){var N=[];i.forEach(function(e){var t=C.find(function(t){return t.id===e});t&&N.push(t)});var E=N.reduce(function(e,t){return e&&e===t.parentColumn&&t.parentColumn},N[0].parentColumn),z=y&&E.Header,D={Header:z=z||function(){return n.createElement("strong",null,"Pivoted")},columns:N.map(function(e){return k({},o.props.pivotDefaults,e,{pivoted:!0})})};w>=0?(D=k({},S[w],D),S.splice(w,1,D)):S.unshift(D)}var O=[],R=[],W=function(e,t){O.push(k({},o.props.column,t,{columns:e})),R=[]};S.forEach(function(e){if(e.columns)return x=x.concat(e.columns),R.length>0&&W(R),void W(e.columns,e);x.push(e),R.push(e)}),y&&R.length>0&&W(R);var M=this.resolvedData;this.resolvedData&&!t||(M=l(s),this.resolvedData=M),M=M.map(function(e,t){return function e(t,n){var o,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=(F(o={},g,t),F(o,m,n),F(o,d,t[d]),F(o,f,r),o);return C.forEach(function(e){e.expander||(a[e.id]=e.accessor(t))}),a[d]&&(a[d]=a[d].map(function(t,n){return e(t,n,r+1)})),a}(e,t)});var _=x.filter(function(e){return!e.expander&&e.aggregate});return i.length&&(M=function e(t,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(o===n.length)return t;var r=Object.entries(L.groupBy(t,n[o])).map(function(e){var t,r=j(e,2),a=r[0],i=r[1];return F(t={},u,n[o]),F(t,p,a),F(t,n[o],a),F(t,d,i),F(t,f,o),F(t,h,!0),t});return r=r.map(function(t){var r,a,i,s=e(t[d],n,o+1);return k({},t,(F(r={},d,s),F(r,c,!0),r),(a=s,i={},_.forEach(function(e){var t=a.map(function(t){return t[e.id]});i[e.id]=e.aggregate(t,a)}),i))})}(M,i)),k({},e,{resolvedData:M,allVisibleColumns:x,headerGroups:O,allDecoratedColumns:C,hasHeaderGroups:y})}},{key:"getSortedData",value:function(e){var t=e.manual,n=e.sorted,o=e.filtered,r=e.defaultFilterMethod,a=e.resolvedData,i=e.allDecoratedColumns,s={};return i.filter(function(e){return e.sortMethod}).forEach(function(e){s[e.id]=e.sortMethod}),{sortedData:t?a:this.sortData(this.filterData(a,o,r,i),n,s)}}},{key:"fireFetchData",value:function(){var e=k({},this.getResolvedState(),{page:this.getStateOrProp("page"),pageSize:this.getStateOrProp("pageSize"),filtered:this.getStateOrProp("filtered")});this.props.onFetchData(e,this)}},{key:"getPropOrState",value:function(e){return L.getFirstDefined(this.props[e],this.state[e])}},{key:"getStateOrProp",value:function(e){return L.getFirstDefined(this.state[e],this.props[e])}},{key:"filterData",value:function(e,t,n,o){var r=this,a=e;return t.length&&(a=(a=t.reduce(function(e,t){var r=o.find(function(e){return e.id===t.id});if(!r||!1===r.filterable)return e;var a=r.filterMethod||n;return r.filterAll?a(t,e,r):e.filter(function(e){return a(t,e,r)})},a)).map(function(e){return e[r.props.subRowsKey]?k({},e,F({},r.props.subRowsKey,r.filterData(e[r.props.subRowsKey],t,n,o))):e}).filter(function(e){return!e[r.props.subRowsKey]||e[r.props.subRowsKey].length>0})),a}},{key:"sortData",value:function(e,t){var n=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!t.length)return e;var r=(this.props.orderByMethod||L.orderBy)(e,t.map(function(e){return o[e.id]?function(t,n){return o[e.id](t[e.id],n[e.id],e.desc)}:function(t,o){return n.props.defaultSortMethod(t[e.id],o[e.id],e.desc)}}),t.map(function(e){return!e.desc}),this.props.indexKey);return r.forEach(function(e){e[n.props.subRowsKey]&&(e[n.props.subRowsKey]=n.sortData(e[n.props.subRowsKey],t,o))}),r}},{key:"getMinRows",value:function(){return L.getFirstDefined(this.props.minRows,this.getStateOrProp("pageSize"))}},{key:"onPageChange",value:function(e){var t=this.props,n=t.onPageChange,o=t.collapseOnPageChange,r={page:e};o&&(r.expanded={}),this.setStateWithData(r,function(){return n&&n(e)})}},{key:"onPageSizeChange",value:function(e){var t=this.props.onPageSizeChange,n=this.getResolvedState(),o=n.pageSize*n.page,r=Math.floor(o/e);this.setStateWithData({pageSize:e,page:r},function(){return t&&t(e,r)})}},{key:"sortColumn",value:function(e,t){var n=this.getResolvedState(),o=n.sorted,r=n.skipNextSort,a=n.defaultSortDesc,i=Object.prototype.hasOwnProperty.call(e,"defaultSortDesc")?e.defaultSortDesc:a,s=!i;if(r)this.setStateWithData({skipNextSort:!1});else{var l=this.props.onSortedChange,u=L.clone(o||[]).map(function(e){return e.desc=L.isSortingDesc(e),e});if(L.isArray(e)){var p=u.findIndex(function(t){return t.id===e[0].id});p>-1?(u[p].desc===s?t?u.splice(p,e.length):e.forEach(function(e,t){u[p+t].desc=i}):e.forEach(function(e,t){u[p+t].desc=s}),t||(u=u.slice(p,e.length))):u=t?u.concat(e.map(function(e){return{id:e.id,desc:i}})):e.map(function(e){return{id:e.id,desc:i}})}else{var d=u.findIndex(function(t){return t.id===e.id});if(d>-1){var c=u[d];c.desc===s?t?u.splice(d,1):(c.desc=i,u=[c]):(c.desc=s,t||(u=[c]))}else t?u.push({id:e.id,desc:i}):u=[{id:e.id,desc:i}]}this.setStateWithData({page:!o.length&&u.length||!t?0:this.state.page,sorted:u},function(){return l&&l(u,e,t)})}}},{key:"filterColumn",value:function(e,t){var n=this.getResolvedState().filtered,o=this.props.onFilteredChange,r=(n||[]).filter(function(t){return t.id!==e.id});""!==t&&r.push({id:e.id,value:t}),this.setStateWithData({filtered:r},function(){return o&&o(r,e,t)})}},{key:"resizeColumnStart",value:function(e,t,n){var o=this;e.stopPropagation();var r=e.target.parentElement.getBoundingClientRect().width,a=void 0;a=n?e.changedTouches[0].pageX:e.pageX,this.trapEvents=!0,this.setStateWithData({currentlyResizing:{id:t.id,startX:a,parentWidth:r}},function(){n?(document.addEventListener("touchmove",o.resizeColumnMoving),document.addEventListener("touchcancel",o.resizeColumnEnd),document.addEventListener("touchend",o.resizeColumnEnd)):(document.addEventListener("mousemove",o.resizeColumnMoving),document.addEventListener("mouseup",o.resizeColumnEnd),document.addEventListener("mouseleave",o.resizeColumnEnd))})}},{key:"resizeColumnMoving",value:function(e){e.stopPropagation();var t=this.props,n=t.onResizedChange,o=t.column,r=this.getResolvedState(),a=r.resized,i=r.currentlyResizing,s=r.columns.find(function(e){return e.accessor===i.id||e.id===i.id}),l=s&&null!=s.minResizeWidth?s.minResizeWidth:o.minResizeWidth,u=a.filter(function(e){return e.id!==i.id}),p=void 0;"touchmove"===e.type?p=e.changedTouches[0].pageX:"mousemove"===e.type&&(p=e.pageX);var d=Math.max(i.parentWidth+p-i.startX,l);u.push({id:i.id,value:d}),this.setStateWithData({resized:u},function(){return n&&n(u,e)})}},{key:"resizeColumnEnd",value:function(e){e.stopPropagation();var t="touchend"===e.type||"touchcancel"===e.type;t&&(document.removeEventListener("touchmove",this.resizeColumnMoving),document.removeEventListener("touchcancel",this.resizeColumnEnd),document.removeEventListener("touchend",this.resizeColumnEnd)),document.removeEventListener("mousemove",this.resizeColumnMoving),document.removeEventListener("mouseup",this.resizeColumnEnd),document.removeEventListener("mouseleave",this.resizeColumnEnd),t||this.setStateWithData({skipNextSort:!0,currentlyResizing:!1})}}]),o}()}((X=t.Component,function(e){function t(e){O(this,t);var n=_(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e)),o={page:e.defaultPage,pageSize:e.defaultPageSize,sorted:e.defaultSorted,expanded:e.defaultExpanded,filtered:e.defaultFiltered,resized:e.defaultResized,currentlyResizing:!1,skipNextSort:!1},r=n.getResolvedState(e,o),a=n.getDataModel(r,!0);return n.state=n.calculateNewResolvedState(a),n}return W(t,X),R(t,[{key:"componentDidMount",value:function(){this.fireFetchData()}},{key:"componentDidUpdate",value:function(e,t){var n=this.getResolvedState(e,t),o=this.getResolvedState(this.props,this.state);["sorted","filtered","resized","expanded"].forEach(function(e){var t="default"+(e.charAt(0).toUpperCase()+e.slice(1));JSON.stringify(n[t])!==JSON.stringify(o[t])&&(o[e]=o[t])}),["sortable","filterable","resizable"].forEach(function(e){if(n[e]!==o[e]){var t=e.replace("able","")+"ed",r="default"+(t.charAt(0).toUpperCase()+t.slice(1));o[t]=o[r]}}),n.data===o.data&&n.columns===o.columns&&n.pivotBy===o.pivotBy&&n.sorted===o.sorted&&n.filtered===o.filtered||this.setStateWithData(this.getDataModel(o,n.data!==o.data))}},{key:"calculateNewResolvedState",value:function(e){var t=this.getResolvedState(),n=this.getResolvedState({},e),o=n.freezeWhenExpanded;if(n.frozen=!1,o)for(var r=Object.keys(n.expanded),a=0;a=n.pages?n.pages-1:n.page,0)),n}},{key:"setStateWithData",value:function(e,t){var n=this,o=this.getResolvedState(),r=this.calculateNewResolvedState(e);return this.setState(r,function(){t&&t(),o.page===r.page&&o.pageSize===r.pageSize&&o.sorted===r.sorted&&o.filtered===r.filtered||n.fireFetchData()})}}]),t}())));Z.propTypes=Y,Z.defaultProps=J,e.ReactTableDefaults=Q,e.default=Z,Object.defineProperty(e,"__esModule",{value:!0})}); diff --git a/src/hoc/advancedExpandTable/index.js b/src/hoc/advancedExpandTable/index.js index ac610bc464..5020819c9b 100644 --- a/src/hoc/advancedExpandTable/index.js +++ b/src/hoc/advancedExpandTable/index.js @@ -94,6 +94,7 @@ export const advancedExpandTableHOC = TableComponent => hideRowSubComponent, ...rest }) { + // eslint-disable-next-line react/jsx-pascal-case return } diff --git a/yarn.lock b/yarn.lock index da3007c59b..d588fd8509 100644 --- a/yarn.lock +++ b/yarn.lock @@ -46,6 +46,21 @@ esutils "^2.0.2" js-tokens "^3.0.0" +"@babel/runtime-corejs3@^7.10.2": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz#0ef292bbce40ca00f874c9724ef175a12476465c" + integrity sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA== + dependencies: + core-js-pure "^3.15.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" + integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" @@ -78,6 +93,32 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" +"@types/prop-types@*": + version "15.7.4" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" + integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== + +"@types/react-table@^6.8.5": + version "6.8.8" + resolved "https://registry.yarnpkg.com/@types/react-table/-/react-table-6.8.8.tgz#8c0fda81880e3015f8d25786a0ffd2eedb0fe30a" + integrity sha512-QOpAJo4tVMgfiHUnUD043enhjKk57FD3GUrvG27tpA3pEMadBB2NUOpCK/tbwYOQQK0PlP6BpUcEKWdrhCONGA== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "17.0.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.14.tgz#f0629761ca02945c4e8fea99b8177f4c5c61fb0f" + integrity sha512-0WwKHUbWuQWOce61UexYuWTGuGY/8JvtUe/dtQ6lR4sZ3UiylHotJeWpf3ArP9+DSGUoLY3wbU59VyMrJps5VQ== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -120,10 +161,6 @@ ajv@^5.2.3, ajv@^5.3.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -144,9 +181,10 @@ ansi-styles@^2.1.0, ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" @@ -177,42 +215,45 @@ argparse@^1.0.7: aria-query@^0.7.0: version "0.7.1" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" + integrity sha1-Jsu1r/ZBRLCoJb4YRuCxbPoAsR4= dependencies: ast-types-flow "0.0.7" commander "^2.11.0" +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= dependencies: arr-flatten "^1.0.1" arr-flatten@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" +array-includes@^3.0.3, array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" + is-string "^1.0.5" array-union@^1.0.1: version "1.0.2" @@ -227,6 +268,7 @@ array-uniq@^1.0.0, array-uniq@^1.0.1: array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= array.prototype.find@^2.0.1: version "2.0.4" @@ -235,6 +277,25 @@ array.prototype.find@^2.0.1: define-properties "^1.1.2" es-abstract "^1.7.0" +array.prototype.flat@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +array.prototype.flatmap@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" + integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + function-bind "^1.1.1" + arrify@^1.0.0, arrify@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -256,9 +317,10 @@ assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" -ast-types-flow@0.0.7: +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= async-each@^1.0.0: version "1.0.1" @@ -268,6 +330,11 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + autoprefixer@^6.7.0: version "6.7.7" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" @@ -287,12 +354,23 @@ aws4@^1.2.1: version "1.7.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" +axe-core@^4.0.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.1.tgz#0c6a076e4a1c3e0544ba6a9479158f9be7a7928e" + integrity sha512-3WVgVPs/7OnKU3s+lqMtkv3wQlg3WxK1YifmpJSDO0E1aPBrZWlrrTO6cxRqCXLuX2aYgCljqXIQd0VnRidV0g== + axobject-query@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" + integrity sha1-YvWdvFnJ+SQnWco0mWDnov48NsA= dependencies: ast-types-flow "0.0.7" +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + babel-cli@6.14.0: version "6.14.0" resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.14.0.tgz#cbc778ad1ff4e58c87b87d7e08993993c2d3b75f" @@ -942,8 +1020,9 @@ babylon@^6.11.0, babylon@^6.15.0, babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base16@^1.0.0: version "1.0.0" @@ -996,6 +1075,7 @@ brace-expansion@^1.0.0, brace-expansion@^1.1.7: braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= dependencies: expand-range "^1.8.1" preserve "^0.2.0" @@ -1022,10 +1102,20 @@ buffer-from@^1.0.0: builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= builtin-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" + integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" caller-path@^0.1.0: version "0.1.0" @@ -1096,9 +1186,10 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^2.1.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" +chalk@^2.1.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" @@ -1143,8 +1234,9 @@ circular-json@^0.3.1: resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" classnames@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" + version "2.3.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" + integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== cli-cursor@^1.0.1: version "1.0.2" @@ -1179,14 +1271,16 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: - color-name "^1.1.1" + color-name "1.1.3" -color-name@^1.1.1: +color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.6" @@ -1194,9 +1288,10 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@^2.11.0, commander@^2.9.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" +commander@^2.11.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^2.8.1: version "2.9.0" @@ -1204,6 +1299,10 @@ commander@^2.8.1: dependencies: graceful-readlink ">= 1.0.0" +commander@^2.9.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" @@ -1211,6 +1310,7 @@ commander@~2.13.0: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.5.2, concat-stream@^1.6.0: version "1.6.2" @@ -1228,11 +1328,17 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= convert-source-map@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" +core-js-pure@^3.15.0: + version "3.15.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.2.tgz#c8e0874822705f3385d3197af9348f7c9ae2e3ce" + integrity sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA== + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -1247,23 +1353,25 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" cross-env@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.4.tgz#f61c14291f7cc653bb86457002ea80a04699d022" + version "5.2.1" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d" + integrity sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ== dependencies: - cross-spawn "^5.1.0" - is-windows "^1.0.0" + cross-spawn "^6.0.5" cross-spawn@^5.1.0, cross-spawn@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.4: +cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" path-key "^2.0.1" @@ -1277,9 +1385,27 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" -css-parse@1.7.x: - version "1.7.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" +css-parse@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" + integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= + dependencies: + css "^2.0.0" + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +csstype@^3.0.2: + version "3.0.8" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" + integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== currently-unhandled@^0.4.1: version "0.4.1" @@ -1293,9 +1419,10 @@ d@1: dependencies: es5-ext "^0.10.9" -damerau-levenshtein@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" +damerau-levenshtein@^1.0.0, damerau-levenshtein@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" + integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== dashdash@^1.12.0: version "1.14.1" @@ -1307,12 +1434,6 @@ debug-log@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" -debug@*: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" - dependencies: - ms "2.0.0" - debug@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" @@ -1325,16 +1446,28 @@ debug@^2.1.1, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9: dependencies: ms "2.0.0" -debug@^3.1.0: +debug@^3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + deep-extend@~0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" @@ -1343,12 +1476,12 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" + object-keys "^1.0.12" deglob@^2.1.0: version "2.1.0" @@ -1398,6 +1531,7 @@ diacritic@0.0.2: doctrine@1.5.0, doctrine@^1.2.2: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: esutils "^2.0.2" isarray "^1.0.0" @@ -1408,10 +1542,6 @@ doctrine@^2.0.0, doctrine@^2.0.2, doctrine@^2.1.0: dependencies: esutils "^2.0.2" -duplexer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -1429,37 +1559,57 @@ electron-to-chromium@^1.3.45: emoji-regex@^6.1.0: version "6.5.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" + integrity sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ== + +emoji-regex@^9.0.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: - iconv-lite "~0.4.13" + iconv-lite "^0.6.2" error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.4.3, es-abstract@^1.7.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" +es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2, es-abstract@^1.7.0: + version "1.18.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" + integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== dependencies: - es-to-primitive "^1.1.1" + call-bind "^1.0.2" + es-to-primitive "^1.2.1" function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.10.3" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: - is-callable "^1.1.1" + is-callable "^1.1.4" is-date-object "^1.0.1" - is-symbol "^1.0.1" + is-symbol "^1.0.2" es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: version "0.10.42" @@ -1567,12 +1717,13 @@ eslint-import-resolver-node@^0.2.0: object-assign "^4.0.1" resolve "^1.1.6" -eslint-import-resolver-node@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" +eslint-import-resolver-node@^0.3.1, eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== dependencies: debug "^2.6.9" - resolve "^1.5.0" + resolve "^1.13.1" eslint-module-utils@^2.0.0: version "2.0.0" @@ -1581,12 +1732,13 @@ eslint-module-utils@^2.0.0: debug "2.2.0" pkg-dir "^1.0.0" -eslint-module-utils@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" +eslint-module-utils@^2.2.0, eslint-module-utils@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" + integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A== dependencies: - debug "^2.6.8" - pkg-dir "^1.0.0" + debug "^3.2.7" + pkg-dir "^2.0.0" eslint-plugin-babel@^4.1.2: version "4.1.2" @@ -1599,19 +1751,25 @@ eslint-plugin-class-property@^1.0.6: eslint "^3.19.0" eslint-plugin-import@^2.7.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.12.0.tgz#dad31781292d6664b25317fd049d2e2b2f02205d" + version "2.23.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97" + integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ== dependencies: - contains-path "^0.1.0" - debug "^2.6.8" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.2.0" - has "^1.0.1" - lodash "^4.17.4" - minimatch "^3.0.3" - read-pkg-up "^2.0.0" - resolve "^1.6.0" + array-includes "^3.1.3" + array.prototype.flat "^1.2.4" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.1" + find-up "^2.0.0" + has "^1.0.3" + is-core-module "^2.4.0" + minimatch "^3.0.4" + object.values "^1.1.3" + pkg-up "^2.0.0" + read-pkg-up "^3.0.0" + resolve "^1.20.0" + tsconfig-paths "^3.9.0" eslint-plugin-import@^2.9.0: version "2.11.0" @@ -1643,7 +1801,24 @@ eslint-plugin-import@~2.2.0: minimatch "^3.0.3" pkg-up "^1.0.0" -eslint-plugin-jsx-a11y@^6.0.2, eslint-plugin-jsx-a11y@^6.0.3: +eslint-plugin-jsx-a11y@^6.0.2: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== + dependencies: + "@babel/runtime" "^7.11.2" + aria-query "^4.2.2" + array-includes "^3.1.1" + ast-types-flow "^0.0.7" + axe-core "^4.0.2" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.6" + emoji-regex "^9.0.0" + has "^1.0.3" + jsx-ast-utils "^3.1.0" + language-tags "^1.0.5" + +eslint-plugin-jsx-a11y@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5" dependencies: @@ -1670,13 +1845,22 @@ eslint-plugin-promise@~3.5.0: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca" eslint-plugin-react@^7.4.0: - version "7.8.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.8.2.tgz#e95c9c47fece55d2303d1a67c9d01b930b88a51d" + version "7.24.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4" + integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q== dependencies: - doctrine "^2.0.2" - has "^1.0.1" - jsx-ast-utils "^2.0.1" - prop-types "^15.6.0" + array-includes "^3.1.3" + array.prototype.flatmap "^1.2.4" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.0.4" + object.entries "^1.1.4" + object.fromentries "^2.0.4" + object.values "^1.1.4" + prop-types "^15.7.2" + resolve "^2.0.0-next.3" + string.prototype.matchall "^4.0.5" eslint-plugin-react@^7.7.0: version "7.7.0" @@ -1829,18 +2013,21 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: estree-walker@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" - -estree-walker@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.1.tgz#e6b1a51cf7292524e7237c312e5fe6660c1ce1aa" + integrity sha1-va/oCVOD2EFNXcLs9MkXO225QS4= estree-walker@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.1.tgz#64fc375053abc6f57d73e9bd2f004644ad3c5854" +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== event-emitter@~0.3.5: version "0.3.5" @@ -1849,18 +2036,6 @@ event-emitter@~0.3.5: d "1" es5-ext "~0.10.14" -event-stream@~3.3.0: - version "3.3.4" - resolved "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -1868,12 +2043,14 @@ exit-hook@^1.0.0: expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= dependencies: is-posix-bracket "^0.1.0" expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= dependencies: fill-range "^2.1.0" @@ -1892,6 +2069,7 @@ external-editor@^2.0.4: extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= dependencies: is-extglob "^1.0.0" @@ -1915,19 +2093,6 @@ fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" -fbjs@^0.8.16: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - fbjs@^0.8.9: version "0.8.12" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" @@ -1963,14 +2128,16 @@ file-entry-cache@^2.0.0: filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== dependencies: is-number "^2.1.0" isobject "^2.0.0" - randomatic "^1.1.3" + randomatic "^3.0.0" repeat-element "^1.1.2" repeat-string "^1.5.2" @@ -1981,13 +2148,15 @@ find-root@^1.0.0: find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.0.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" @@ -2012,17 +2181,15 @@ flat-cache@^1.2.1: for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= dependencies: for-in "^1.0.1" -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -2035,10 +2202,6 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - fs-readdir-recursive@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz#315b4fb8c1ca5b8c47defef319d073dad3568059" @@ -2046,6 +2209,7 @@ fs-readdir-recursive@^0.1.0: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.0.0: version "1.1.3" @@ -2071,9 +2235,10 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: +function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== functional-red-black-tree@^1.0.1: version "1.0.1" @@ -2110,6 +2275,15 @@ get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -2127,6 +2301,7 @@ getpass@^0.1.1: glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" @@ -2134,20 +2309,10 @@ glob-base@^0.3.0: glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= dependencies: is-glob "^2.0.0" -glob@7.0.x: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^5.0.5: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -2168,7 +2333,7 @@ glob@^6.0.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -2179,6 +2344,18 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.0.5, glob@^7.1.3, glob@^7.1.6: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-object@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-object/-/global-object-1.0.0.tgz#2a1b45e901d55e4773154f12f0cec1ef9aba5f9f" @@ -2213,7 +2390,12 @@ globby@^5.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.4: +graceful-fs@^4.1.2: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +graceful-fs@^4.1.4: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -2247,6 +2429,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" @@ -2254,16 +2441,23 @@ has-flag@^1.0.0: has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: - function-bind "^1.0.2" + function-bind "^1.1.1" hawk@3.1.3, hawk@~3.1.3: version "3.1.3" @@ -2286,8 +2480,9 @@ home-or-tmp@^2.0.0: os-tmpdir "^1.0.1" hosted-git-info@^2.1.4: - version "2.6.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== http-signature@~1.1.0: version "1.1.1" @@ -2303,12 +2498,12 @@ iconv-lite@^0.4.17: dependencies: safer-buffer "^2.1.0" -iconv-lite@~0.4.13: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: - safer-buffer ">= 2.1.2 < 3" + safer-buffer ">= 2.1.2 < 3.0.0" ignore@^3.0.11, ignore@^3.0.9: version "3.3.3" @@ -2331,11 +2526,17 @@ indent-string@^2.1.0: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3: +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -2380,6 +2581,15 @@ inquirer@^3.0.6: strip-ansi "^4.0.0" through "^2.3.6" +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + interpret@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" @@ -2397,6 +2607,12 @@ invert-kv@^1.0.0: is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-bigint@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" + integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== is-binary-path@^1.0.0: version "1.0.1" @@ -2404,41 +2620,63 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-boolean-object@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" + integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + dependencies: + call-bind "^1.0.2" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-builtin-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= dependencies: builtin-modules "^1.0.0" -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" +is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + +is-core-module@^2.2.0, is-core-module@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" + integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== + dependencies: + has "^1.0.3" is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" + integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= dependencies: is-primitive "^2.0.0" is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= is-finite@^1.0.0: version "1.0.2" @@ -2459,12 +2697,14 @@ is-fullwidth-code-point@^2.0.0: is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= dependencies: is-extglob "^1.0.0" is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= is-my-ip-valid@^1.0.0: version "1.0.0" @@ -2480,17 +2720,27 @@ is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: jsonpointer "^4.0.0" xtend "^4.0.0" +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" + integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== + is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= dependencies: kind-of "^3.0.2" -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== is-path-cwd@^1.0.0: version "1.0.0" @@ -2511,10 +2761,12 @@ is-path-inside@^1.0.0: is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= is-promise@^2.1.0: version "2.1.0" @@ -2524,11 +2776,13 @@ is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" +is-regex@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== dependencies: - has "^1.0.1" + call-bind "^1.0.2" + has-symbols "^1.0.2" is-resolvable@^1.0.0: version "1.1.0" @@ -2539,9 +2793,17 @@ is-stream@^1.0.1: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" +is-string@^1.0.5, is-string@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" is-typedarray@~1.0.0: version "1.0.0" @@ -2551,10 +2813,6 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -is-windows@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -2562,10 +2820,12 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" @@ -2620,6 +2880,7 @@ jsesc@~0.5.0: json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-schema-traverse@^0.3.0: version "0.3.1" @@ -2647,9 +2908,17 @@ json5@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" +json5@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= jsonpointer@^4.0.0: version "4.0.1" @@ -2669,22 +2938,44 @@ jsx-ast-utils@^1.3.4: resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + version "2.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" + integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== dependencies: - array-includes "^3.0.3" + array-includes "^3.1.1" + object.assign "^4.1.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" + integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== + dependencies: + array-includes "^3.1.2" + object.assign "^4.1.2" kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" +kind-of@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +language-subtag-registry@~0.3.2: + version "0.3.21" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= dependencies: - is-buffer "^1.1.5" + language-subtag-registry "~0.3.2" lcid@^1.0.0: version "1.0.0" @@ -2712,6 +3003,7 @@ load-json-file@^1.0.0: load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -2721,6 +3013,7 @@ load-json-file@^2.0.0: load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" @@ -2730,6 +3023,7 @@ load-json-file@^4.0.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -2758,7 +3052,12 @@ lodash@^4.0.0, lodash@^4.3.0: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" -lodash@^4.17.4, lodash@^4.2.0: +lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lodash@^4.2.0: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" @@ -2768,19 +3067,13 @@ log-symbols@^1.0.2: dependencies: chalk "^1.0.0" -loose-envify@^1.0.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" -loose-envify@^1.1.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - dependencies: - js-tokens "^3.0.0" - loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" @@ -2789,8 +3082,9 @@ loud-rejection@^1.0.0: signal-exit "^3.0.0" lru-cache@^4.0.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" yallist "^2.1.2" @@ -2798,17 +3092,21 @@ lru-cache@^4.0.1: magic-string@^0.22.4: version "0.22.5" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" + integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== dependencies: vlq "^0.2.2" +magic-string@^0.25.2: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - match-sorter@^1.8.0: version "1.8.1" resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-1.8.1.tgz#5b164e526c261dc8628db925430facbe0cd26614" @@ -2816,9 +3114,15 @@ match-sorter@^1.8.0: diacritic "0.0.2" global-object "1.0.0" +math-random@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= meow@^3.5.0: version "3.7.0" @@ -2835,7 +3139,7 @@ meow@^3.5.0: redent "^1.0.0" trim-newlines "^1.0.0" -micromatch@^2.1.5, micromatch@^2.3.11: +micromatch@^2.1.5: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -2882,17 +3186,28 @@ minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" +mkdirp@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" @@ -2900,6 +3215,12 @@ ms@0.7.1: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mute-stream@0.0.5: version "0.0.5" @@ -2926,8 +3247,9 @@ next-tick@1: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" nice-try@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-fetch@^1.0.1: version "1.7.3" @@ -2961,11 +3283,12 @@ nopt@^4.0.1: osenv "^0.1.4" normalize-package-data@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" + resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" @@ -2989,15 +3312,16 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" npm-run-all@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.3.tgz#49f15b55a66bb4101664ce270cb18e7103f8f185" + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== dependencies: - ansi-styles "^3.2.0" - chalk "^2.1.0" - cross-spawn "^6.0.4" + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" memorystream "^0.3.1" minimatch "^3.0.4" - ps-tree "^1.1.0" + pidtree "^0.3.0" read-pkg "^3.0.0" shell-quote "^1.6.1" string.prototype.padend "^3.0.0" @@ -3027,10 +3351,20 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-keys@^1.0.10, object-keys@^1.0.8: +object-inspect@^1.10.3, object-inspect@^1.9.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + +object-keys@^1.0.10: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object.assign@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" @@ -3039,13 +3373,52 @@ object.assign@^4.0.4: function-bind "^1.1.0" object-keys "^1.0.10" +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd" + integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + +object.fromentries@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" + integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + has "^1.0.3" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= dependencies: for-own "^0.1.4" is-extendable "^0.1.1" +object.values@^1.1.3, object.values@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" + integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + once@^1.3.0, once@^1.3.3: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -3113,24 +3486,28 @@ output-file-sync@^1.1.0: object-assign "^4.1.0" p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" @@ -3140,12 +3517,14 @@ parse-glob@^3.0.4: parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" @@ -3157,16 +3536,19 @@ path-exists@^1.0.0: path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" @@ -3175,10 +3557,12 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2: path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +path-parse@^1.0.5, path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^1.0.0: version "1.1.0" @@ -3191,42 +3575,47 @@ path-type@^1.0.0: path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= dependencies: pify "^2.0.0" path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - dependencies: - through "~2.3" - performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pkg-conf@^2.0.0: version "2.0.0" @@ -3246,15 +3635,30 @@ pkg-config@^1.1.0: pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= dependencies: find-up "^1.0.0" +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + pkg-up@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" dependencies: find-up "^1.0.0" +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" @@ -3306,6 +3710,7 @@ prelude-ls@~1.1.2: preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= private@^0.1.6: version "0.1.8" @@ -3337,7 +3742,7 @@ prop-types@^15.5.8: fbjs "^0.8.9" loose-envify "^1.3.1" -prop-types@^15.6.0, prop-types@^15.7.2: +prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -3346,15 +3751,10 @@ prop-types@^15.6.0, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" -ps-tree@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" - dependencies: - event-stream "~3.3.0" - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= punycode@^1.4.1: version "1.4.1" @@ -3372,12 +3772,14 @@ qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" +randomatic@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" rc@^1.1.7: version "1.2.6" @@ -3398,18 +3800,19 @@ react-base16-styling@^0.5.1: pure-color "^1.2.0" react-dom@^16.3.2: - version "16.4.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.4.1.tgz#7f8b0223b3a5fbe205116c56deb85de32685dad6" + version "16.14.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" + integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== dependencies: - fbjs "^0.8.16" loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.0" + prop-types "^15.6.2" + scheduler "^0.19.1" react-is@^16.8.1: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" - integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-json-tree@^0.10.9: version "0.10.9" @@ -3420,13 +3823,13 @@ react-json-tree@^0.10.9: react-base16-styling "^0.5.1" react@^16.3.2: - version "16.3.2" - resolved "https://registry.yarnpkg.com/react/-/react-16.3.2.tgz#fdc8420398533a1e58872f59091b272ce2f91ea9" + version "16.14.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" + integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== dependencies: - fbjs "^0.8.16" loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.0" + prop-types "^15.6.2" read-file-stdin@^0.2.0: version "0.2.1" @@ -3444,10 +3847,19 @@ read-pkg-up@^1.0.1: read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= dependencies: find-up "^2.0.0" read-pkg "^2.0.0" +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -3459,6 +3871,7 @@ read-pkg@^1.0.0: read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= dependencies: load-json-file "^2.0.0" normalize-package-data "^2.3.2" @@ -3467,6 +3880,7 @@ read-pkg@^2.0.0: read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: load-json-file "^4.0.0" normalize-package-data "^2.3.2" @@ -3526,6 +3940,11 @@ regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -3537,9 +3956,18 @@ regenerator-transform@^0.10.0: regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== dependencies: is-equal-shallow "^0.1.3" +regexp.prototype.flags@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + regexpp@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" @@ -3565,14 +3993,17 @@ regjsparser@^0.1.4: remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= repeating@^2.0.0: version "2.0.1" @@ -3651,16 +4082,37 @@ resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve@^1.1.6, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.6.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.20.0, resolve@^1.6.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== dependencies: - path-parse "^1.0.5" + is-core-module "^2.2.0" + path-parse "^1.0.6" resolve@^1.1.7: version "1.2.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" +resolve@^1.4.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" + dependencies: + path-parse "^1.0.5" + +resolve@^2.0.0-next.3: + version "2.0.0-next.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -3675,15 +4127,23 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" +rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rollup-plugin-babel@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-3.0.4.tgz#41b3e762fe64450dd61da3105a2cf7ad76be4edc" + version "3.0.7" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-3.0.7.tgz#5b13611f1ab8922497e9d15197ae5d8a23fe3b1e" + integrity sha512-bVe2y0z/V5Ax1qU8NX/0idmzIwJPdUGu8Xx3vXH73h0yGjxfv2gkFI82MBVg49SlsFlLTBadBHb67zy4TWM3hA== dependencies: rollup-pluginutils "^1.5.0" @@ -3698,20 +4158,21 @@ rollup-plugin-commonjs@^8.3.0: rollup-pluginutils "^2.0.1" rollup-plugin-node-resolve@^3.0.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.3.0.tgz#c26d110a36812cbefa7ce117cadcd3439aa1c713" + version "3.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" + integrity sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg== dependencies: builtin-modules "^2.0.0" is-module "^1.0.0" resolve "^1.1.6" rollup-plugin-replace@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.0.0.tgz#19074089c8ed57184b8cc64e967a03d095119277" + version "2.2.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.2.0.tgz#f41ae5372e11e7a217cde349c8b5d5fd115e70e3" + integrity sha512-/5bxtUPkDHyBJAKketb4NfaeZjL5yLZdeUihSfbF2PQMz+rSTEb8ARKoOl3UBT4m7/X+QOXJo3sLTcq+yMMYTA== dependencies: - magic-string "^0.22.4" - minimatch "^3.0.2" - rollup-pluginutils "^2.0.1" + magic-string "^0.25.2" + rollup-pluginutils "^2.6.0" rollup-plugin-uglify@^3.0.0: version "3.0.0" @@ -3722,16 +4183,17 @@ rollup-plugin-uglify@^3.0.0: rollup-pluginutils@^1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" + integrity sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg= dependencies: estree-walker "^0.2.1" minimatch "^3.0.2" -rollup-pluginutils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz#7ec95b3573f6543a46a6461bd9a7c544525d0fc0" +rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.6.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== dependencies: - estree-walker "^0.3.0" - micromatch "^2.3.11" + estree-walker "^0.6.1" rollup@^0.55.3: version "0.55.5" @@ -3771,14 +4233,23 @@ safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0, safer-buffer@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@0.5.x: - version "0.5.8" - resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" semver-regex@^1.0.0: version "1.0.0" @@ -3790,9 +4261,10 @@ semver-truncate@^1.0.0: dependencies: semver "^5.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" +"semver@2 || 3 || 4 || 5", semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@5.3.0: version "5.3.0" @@ -3802,6 +4274,15 @@ semver@^4.0.3: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" +semver@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -3818,21 +4299,19 @@ setimmediate@^1.0.5: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== shelljs@^0.7.5: version "0.7.8" @@ -3842,6 +4321,15 @@ shelljs@^0.7.5: interpret "^1.0.0" rechoir "^0.6.2" +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -3866,53 +4354,71 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + source-map-support@^0.4.2: version "0.4.10" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.10.tgz#d7b19038040a14c0837a18e630a196453952b378" dependencies: source-map "^0.5.3" -source-map@0.1.x: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - dependencies: - amdefine ">=0.0.4" +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" -source-map@~0.6.1: +source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" - -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - dependencies: - through "2" + version "3.0.9" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" + integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== sprintf-js@~1.0.2: version "1.0.3" @@ -3955,12 +4461,6 @@ standard@^10.0.2: eslint-plugin-standard "~3.0.1" standard-engine "~7.0.0" -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - dependencies: - duplexer "~0.1.1" - string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -3976,13 +4476,44 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string.prototype.matchall@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" + integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + get-intrinsic "^1.1.1" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" + string.prototype.padend@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" + version "3.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz#6858ca4f35c5268ebd5e8615e1327d55f59ee311" + integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== dependencies: - define-properties "^1.1.2" - es-abstract "^1.4.3" - function-bind "^1.0.2" + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" string_decoder@~1.1.1: version "1.1.1" @@ -4015,6 +4546,7 @@ strip-bom@^2.0.0: strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-indent@^1.0.1: version "1.0.1" @@ -4027,15 +4559,18 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" stylus@^0.54.5: - version "0.54.5" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" - dependencies: - css-parse "1.7.x" - debug "*" - glob "7.0.x" - mkdirp "0.5.x" - sax "0.5.x" - source-map "0.1.x" + version "0.54.8" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147" + integrity sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg== + dependencies: + css-parse "~2.0.0" + debug "~3.1.0" + glob "^7.1.6" + mkdirp "~1.0.4" + safer-buffer "^2.1.2" + sax "~1.2.4" + semver "^6.3.0" + source-map "^0.7.3" supports-color@^2.0.0: version "2.0.0" @@ -4048,8 +4583,9 @@ supports-color@^3.2.3: has-flag "^1.0.0" supports-color@^5.3.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" @@ -4100,7 +4636,7 @@ text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" -through@2, through@^2.3.6, through@~2.3, through@~2.3.1: +through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -4136,6 +4672,15 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" +tsconfig-paths@^3.9.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz#79ae67a68c15289fdf5c51cb74f397522d795ed7" + integrity sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q== + dependencies: + json5 "^2.2.0" + minimist "^1.2.0" + strip-bom "^3.0.0" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -4160,7 +4705,7 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -ua-parser-js@^0.7.18, ua-parser-js@^0.7.9: +ua-parser-js@^0.7.9: version "0.7.20" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw== @@ -4176,10 +4721,25 @@ uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" @@ -4205,8 +4765,9 @@ v8flags@^2.0.10: user-home "^1.1.1" validate-npm-package-license@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" @@ -4222,19 +4783,32 @@ verror@1.10.0: vlq@^0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== whatwg-fetch@>=0.10.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" - integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + version "3.6.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" which@^1.2.9: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" @@ -4262,6 +4836,7 @@ wrap-ansi@^2.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write@^0.2.1: version "0.2.1" @@ -4280,6 +4855,7 @@ y18n@^3.2.1: yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= yargs-parser@^2.4.1: version "2.4.1"