UNPKG

@atlaskit/table-tree

Version:

A table tree is an expandable table for showing nested hierarchies of information.

134 lines (132 loc) • 5.58 kB
/* 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;