@atlaskit/dynamic-table
Version:
A dynamic table displays rows of data with built-in pagination, sorting, and re-ordering functionality.
120 lines (119 loc) • 5.83 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.RankableBody = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _pragmaticDragAndDropReactBeautifulDndMigration = require("@atlaskit/pragmatic-drag-and-drop-react-beautiful-dnd-migration");
var _tableRow = _interopRequireDefault(require("./table-row"));
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
// computes destination of ranking
// - if drag was cancelled returns undefined
// - if drag was finished, returns new position and after/before key
var computeRankDestination = function computeRankDestination(result, pageRows) {
var sourceIndex = result.source.index,
destination = result.destination;
if (destination) {
var index = destination.index;
var keyIndex = index < sourceIndex ? index - 1 : index;
var afterKey = keyIndex !== -1 ? pageRows[keyIndex].key : undefined;
var beforeIndex = keyIndex === -1 ? 0 : keyIndex + 1;
var beforeKey = beforeIndex < pageRows.length ? pageRows[beforeIndex].key : undefined;
return {
index: index,
afterKey: afterKey,
beforeKey: beforeKey
};
}
return undefined;
};
// eslint-disable-next-line @repo/internal/react/no-class-components
var RankableBody = exports.RankableBody = /*#__PURE__*/function (_React$Component) {
function RankableBody() {
var _this;
(0, _classCallCheck2.default)(this, RankableBody);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _callSuper(this, RankableBody, [].concat(args));
(0, _defineProperty2.default)(_this, "onBeforeDragStart", function (dragStart) {
var key = dragStart.draggableId,
index = dragStart.source.index;
var rankStartProps = {
index: index,
key: key
};
_this.props.onRankStart(rankStartProps);
});
(0, _defineProperty2.default)(_this, "onDragEnd", function (result) {
var _this$props = _this.props,
pageRows = _this$props.pageRows,
onRankEnd = _this$props.onRankEnd;
var sourceKey = result.draggableId,
sourceIndex = result.source.index;
var destination = computeRankDestination(result, pageRows);
var rankEndProps = {
sourceIndex: sourceIndex,
sourceKey: sourceKey,
destination: destination
};
onRankEnd(rankEndProps);
});
return _this;
}
(0, _inherits2.default)(RankableBody, _React$Component);
return (0, _createClass2.default)(RankableBody, [{
key: "render",
value: function render() {
var _this$props2 = this.props,
highlightedRowIndex = _this$props2.highlightedRowIndex,
pageRows = _this$props2.pageRows,
head = _this$props2.head,
isFixedSize = _this$props2.isFixedSize,
isRanking = _this$props2.isRanking,
isRankingDisabled = _this$props2.isRankingDisabled,
testId = _this$props2.testId,
forwardedRef = _this$props2.forwardedRef;
return /*#__PURE__*/_react.default.createElement(_pragmaticDragAndDropReactBeautifulDndMigration.DragDropContext, {
onBeforeDragStart: this.onBeforeDragStart,
onDragEnd: this.onDragEnd
}, /*#__PURE__*/_react.default.createElement(_pragmaticDragAndDropReactBeautifulDndMigration.Droppable, {
droppableId: "dynamic-table-droppable",
isDropDisabled: isRankingDisabled
}, function (provided) {
return /*#__PURE__*/_react.default.createElement("tbody", (0, _extends2.default)({
"data-testid": testId,
ref: function ref(_ref) {
if (provided && typeof provided.innerRef === 'function') {
provided.innerRef(_ref);
}
if (forwardedRef) {
forwardedRef.current = _ref;
}
}
}, provided.droppableProps), pageRows.map(function (row, rowIndex) {
return /*#__PURE__*/_react.default.createElement(_tableRow.default, {
head: head,
isRanking: isRanking,
isFixedSize: isFixedSize,
key: row.key,
rowIndex: rowIndex,
row: row,
isRankingDisabled: isRankingDisabled,
isHighlighted: highlightedRowIndex !== undefined && (typeof highlightedRowIndex === 'number' ? highlightedRowIndex === rowIndex : highlightedRowIndex.indexOf(rowIndex) > -1),
testId: testId && "".concat(testId, "--").concat(row.key, "--rankable--table--row")
});
}), provided.placeholder);
}));
}
}]);
}(_react.default.Component);