UNPKG

@netdata/netdata-ui

Version:

netdata UI kit

154 lines (153 loc) 8.21 kB
"use strict"; exports.__esModule = true; exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var _reactVirtual = require("@tanstack/react-virtual"); var _identity = _interopRequireDefault(require("lodash/identity")); var _flex = _interopRequireDefault(require("../../templates/flex")); var _provider = require("../provider"); var _row = _interopRequireDefault(require("./row")); var _header = _interopRequireDefault(require("./header")); var _excluded = ["dataGa", "table", "testPrefix", "testPrefixCallback", "coloredSortedColumn", "meta", "overscan", "getHasNextPage", "getHasPrevPage", "getItemKey", "loading", "loadMore", "onVirtualChange", "virtualRef", "initialOffset", "onScroll"]; function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } var noop = function noop() {}; var rerenderSelector = function rerenderSelector(state) { return { sorting: state.sorting, sizing: state.columnSizing, rowsById: state.rowsById, expanded: state.expanded, grouping: state.grouping }; }; var Body = /*#__PURE__*/(0, _react.memo)(function (_ref) { var dataGa = _ref.dataGa, table = _ref.table, testPrefix = _ref.testPrefix, testPrefixCallback = _ref.testPrefixCallback, coloredSortedColumn = _ref.coloredSortedColumn, meta = _ref.meta, overscan = _ref.overscan, _ref$getHasNextPage = _ref.getHasNextPage, getHasNextPage = _ref$getHasNextPage === void 0 ? noop : _ref$getHasNextPage, _ref$getHasPrevPage = _ref.getHasPrevPage, getHasPrevPage = _ref$getHasPrevPage === void 0 ? noop : _ref$getHasPrevPage, _ref$getItemKey = _ref.getItemKey, _getItemKey = _ref$getItemKey === void 0 ? _identity["default"] : _ref$getItemKey, loading = _ref.loading, _ref$loadMore = _ref.loadMore, loadMore = _ref$loadMore === void 0 ? noop : _ref$loadMore, onVirtualChange = _ref.onVirtualChange, virtualRef = _ref.virtualRef, _ref$initialOffset = _ref.initialOffset, initialOffset = _ref$initialOffset === void 0 ? 0 : _ref$initialOffset, onScroll = _ref.onScroll, rest = _objectWithoutPropertiesLoose(_ref, _excluded); (0, _provider.useTableState)(rerenderSelector); var ref = (0, _react.useRef)(); var _table$getRowModel = table.getRowModel(), rows = _table$getRowModel.rows; var rowVirtualizer = (0, _reactVirtual.useVirtualizer)({ count: rows.length ? rows.length + 1 : 1, getScrollElement: function getScrollElement() { return ref.current; }, enableSmoothScroll: false, estimateSize: function estimateSize() { var _meta$styles, _meta$cellStyles; return !!((_meta$styles = meta.styles) != null && _meta$styles.height) && parseInt(meta.styles.height) || !!((_meta$cellStyles = meta.cellStyles) != null && _meta$cellStyles.height) && parseInt(meta.cellStyles.height) || 35; }, overscan: overscan || 15, onChange: onVirtualChange, initialOffset: initialOffset, getItemKey: function getItemKey(index) { return index === 0 ? "header" : _getItemKey(index - 1); }, rangeExtractor: (0, _react.useCallback)(function (range) { if (range.count && range.startIndex >= 0) { var next = new Set([0].concat(_toConsumableArray((0, _reactVirtual.defaultRangeExtractor)(range)))); return _toConsumableArray(next).sort(function (a, b) { return a - b; }); } return (0, _reactVirtual.defaultRangeExtractor)(range); }, []) }); if (virtualRef) virtualRef.current = rowVirtualizer; var virtualRows = rowVirtualizer.getVirtualItems(); (0, _react.useEffect)(function () { if (!loadMore) return; var lastItem = virtualRows[virtualRows.length - 1]; if (!lastItem) return; if (lastItem.index >= rows.length && getHasNextPage() && !loading) { loadMore("backward"); } }, [virtualRows, loading]); (0, _react.useEffect)(function () { if (!loadMore) return; var first = virtualRows[1]; if (!first) return; if (first.index <= 1 && getHasPrevPage() && !loading) { loadMore("forward"); } }, [virtualRows, getHasPrevPage(), loading]); return /*#__PURE__*/_react["default"].createElement(_flex["default"], { ref: ref, height: "100%", overflow: "auto", flex: "1", "data-testid": "netdata-table" + testPrefix, onScroll: onScroll, border: true }, /*#__PURE__*/_react["default"].createElement("div", { style: { height: rowVirtualizer.getTotalSize() + "px", position: "relative", display: "flex", flex: "1 0 auto" } }, virtualRows.map(function (virtualRow) { return /*#__PURE__*/_react["default"].createElement("div", { key: virtualRow.key, style: { transform: "translateY(" + virtualRow.start + "px)", top: 0, left: 0, position: virtualRow.key === "header" ? "sticky" : "absolute", zIndex: virtualRow.key === "header" ? 1 : 0, minWidth: "100%", alignSelf: "start", flex: "1 1 auto", display: "flex" }, "data-index": virtualRow.index, ref: rowVirtualizer.measureElement }, virtualRow.index === 0 ? /*#__PURE__*/_react["default"].createElement(_header["default"], _extends({ dataGa: dataGa, table: table, testPrefix: testPrefix, coloredSortedColumn: coloredSortedColumn, index: virtualRow.index }, rest)) : /*#__PURE__*/_react["default"].createElement(_row["default"], _extends({ dataGa: dataGa, table: table, testPrefix: testPrefix, testPrefixCallback: testPrefixCallback, coloredSortedColumn: coloredSortedColumn, meta: meta, row: rows[virtualRow.index - 1], index: virtualRow.index }, rest))); }))); }); var _default = exports["default"] = Body;