@atlaskit/table-tree
Version:
A table tree is an expandable table for showing nested hierarchies of information.
134 lines (132 loc) • 5.58 kB
JavaScript
/* row.tsx generated by @compiled/babel-plugin v3.0.2 */
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import "./row.compiled.css";
import { ax, ix } from "@compiled/react/runtime";
import React, { Fragment, useEffect, useState } from 'react';
import { usePlatformLeafEventHandler } from '@atlaskit/analytics-next/usePlatformLeafEventHandler';
import toItemId from '../utils/to-item-id';
import Chevron from './internal/chevron';
import { TreeRowContainer } from './internal/tree-row-container';
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 = useState(isDefaultExpanded || false),
_useState2 = _slicedToArray(_useState, 2),
isExpandedState = _useState2[0],
setIsExpandedState = _useState2[1];
useEffect(function () {
if (isProvidedExpanded === undefined && isDefaultExpanded !== undefined) {
setIsExpandedState(isDefaultExpanded);
}
}, [isDefaultExpanded, isProvidedExpanded]);
var onExpand = 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 = 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.createElement(Chevron, {
key: "chevron",
expandLabel: expandLabel,
collapseLabel: collapseLabel,
extendedLabel: extendedLabel,
isExpanded: isProvidedExpanded !== undefined ? isProvidedExpanded : isExpandedState,
onExpandToggle: onExpandToggle,
ariaControls: !!itemId ? toItemId(itemId) : undefined,
rowId: !!itemId ? itemId : ''
})].concat(cellContent);
}
// eslint-disable-next-line @repo/internal/react/no-clone-element
return /*#__PURE__*/React.cloneElement(cell, {
key: cellIndex,
columnIndex: cellIndex,
indentLevel: indentLevel
}, cellContent);
};
return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(TreeRowContainer, {
onClick: hasChildren && shouldExpandOnClick ? onClickHandler : undefined,
"aria-expanded": hasChildren ? isExpandedState : undefined,
"aria-level": depth ? depth : undefined,
className: ax([hasChildren && shouldExpandOnClick && "_80omtlke"])
}, React.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
export default Row;