@atlaskit/table-tree
Version:
A table tree is an expandable table for showing nested hierarchies of information.
143 lines (140 loc) • 6.78 kB
JavaScript
/* row.tsx generated by @compiled/babel-plugin v3.0.2 */
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("./row.compiled.css");
var _runtime = require("@compiled/react/runtime");
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _usePlatformLeafEventHandler = require("@atlaskit/analytics-next/usePlatformLeafEventHandler");
var _toItemId = _interopRequireDefault(require("../utils/to-item-id"));
var _chevron = _interopRequireDefault(require("./internal/chevron"));
var _treeRowContainer = require("./internal/tree-row-container");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
var treeRowClickableStyles = null;
var getExtendedLabel = function getExtendedLabel(cellContent, cellIndex, mainColumnForExpandCollapseLabel) {
/**
* First condition - when we pass data via `items` property in `<TableTree />`
* Second condition - when we pass data via `<Rows />` as children in `<TableTree />`.
*/
if (cellContent.hasOwnProperty('props')) {
return cellContent === null || cellContent === void 0 ? void 0 : cellContent.props[mainColumnForExpandCollapseLabel === null || mainColumnForExpandCollapseLabel === void 0 ? void 0 : mainColumnForExpandCollapseLabel.toLowerCase()];
} else if (cellIndex === mainColumnForExpandCollapseLabel) {
return cellContent;
}
return undefined;
};
function Row(_ref) {
var shouldExpandOnClick = _ref.shouldExpandOnClick,
hasChildren = _ref.hasChildren,
depth = _ref.depth,
renderChildren = _ref.renderChildren,
isDefaultExpanded = _ref.isDefaultExpanded,
data = _ref.data,
providedOnExpand = _ref.onExpand,
providedOnCollapse = _ref.onCollapse,
mainColumnForExpandCollapseLabel = _ref.mainColumnForExpandCollapseLabel,
expandLabel = _ref.expandLabel,
collapseLabel = _ref.collapseLabel,
itemId = _ref.itemId,
children = _ref.children,
isProvidedExpanded = _ref.isExpanded;
var _useState = (0, _react.useState)(isDefaultExpanded || false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
isExpandedState = _useState2[0],
setIsExpandedState = _useState2[1];
(0, _react.useEffect)(function () {
if (isProvidedExpanded === undefined && isDefaultExpanded !== undefined) {
setIsExpandedState(isDefaultExpanded);
}
}, [isDefaultExpanded, isProvidedExpanded]);
var onExpand = (0, _usePlatformLeafEventHandler.usePlatformLeafEventHandler)({
fn: function fn(value) {
return providedOnExpand && providedOnExpand(value);
},
action: 'expanded',
actionSubject: 'tableTree',
componentName: 'row',
packageName: "@atlaskit/table-tree",
packageVersion: "13.3.3"
});
var onCollapse = (0, _usePlatformLeafEventHandler.usePlatformLeafEventHandler)({
fn: function fn(value) {
return providedOnCollapse && providedOnCollapse(value);
},
action: 'collapsed',
actionSubject: 'tableTree',
componentName: 'row',
packageName: "@atlaskit/table-tree",
packageVersion: "13.3.3"
});
/**
* This ensures a user won't trigger a click event and expand the accordion
* when making a text selection.
*/
var onClickHandler = function onClickHandler(e) {
var _window$getSelection;
var selection = ((_window$getSelection = window.getSelection()) === null || _window$getSelection === void 0 ? void 0 : _window$getSelection.toString()) || '';
if ((selection === null || selection === void 0 ? void 0 : selection.length) === 0) {
onExpandToggle(e);
}
};
var onExpandStateChange = function onExpandStateChange(isExpanded) {
if (data) {
if (isExpanded && onExpand) {
onExpand(data);
} else if (!isExpanded && onCollapse) {
onCollapse(data);
}
}
};
var onExpandToggle = function onExpandToggle(e) {
e.stopPropagation();
if (isProvidedExpanded !== undefined) {
onExpandStateChange(!isProvidedExpanded);
} else {
setIsExpandedState(function (prevState) {
onExpandStateChange(!prevState);
return !prevState;
});
}
};
var renderCell = function renderCell(cell, cellIndex) {
var isFirstCell = cellIndex === 0;
var indentLevel = isFirstCell ? depth : 0;
var cellContent = cell.props.children || [];
var extendedLabel = getExtendedLabel(cellContent, cellIndex, mainColumnForExpandCollapseLabel);
if (isFirstCell && hasChildren) {
cellContent = [/*#__PURE__*/_react.default.createElement(_chevron.default, {
key: "chevron",
expandLabel: expandLabel,
collapseLabel: collapseLabel,
extendedLabel: extendedLabel,
isExpanded: isProvidedExpanded !== undefined ? isProvidedExpanded : isExpandedState,
onExpandToggle: onExpandToggle,
ariaControls: !!itemId ? (0, _toItemId.default)(itemId) : undefined,
rowId: !!itemId ? itemId : ''
})].concat(cellContent);
}
// eslint-disable-next-line @repo/internal/react/no-clone-element
return /*#__PURE__*/_react.default.cloneElement(cell, {
key: cellIndex,
columnIndex: cellIndex,
indentLevel: indentLevel
}, cellContent);
};
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_treeRowContainer.TreeRowContainer, {
onClick: hasChildren && shouldExpandOnClick ? onClickHandler : undefined,
"aria-expanded": hasChildren ? isExpandedState : undefined,
"aria-level": depth ? depth : undefined,
className: (0, _runtime.ax)([hasChildren && shouldExpandOnClick && "_80omtlke"])
}, _react.default.Children.map(children, function (cell, index) {
return renderCell(cell, index);
})), hasChildren && (isProvidedExpanded !== undefined ? isProvidedExpanded : isExpandedState) && renderChildren && renderChildren());
}
// eslint-disable-next-line @repo/internal/react/require-jsdoc
var _default = exports.default = Row;