UNPKG

baseui

Version:

A React Component library implementing the Base design language

125 lines (122 loc) 5.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var React = _interopRequireWildcard(require("react")); var _checkbox = require("../checkbox"); var _locale = require("../locale"); var _styles = require("../styles"); var _chevronDown = _interopRequireDefault(require("../icon/chevron-down")); var _chevronUp = _interopRequireDefault(require("../icon/chevron-up")); var _constants = require("./constants"); var _focusVisible = require("../utils/focusVisible"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (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 && Object.prototype.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; } /* Copyright (c) Uber Technologies, Inc. This source code is licensed under the MIT license found in the LICENSE file in the root directory of this source tree. */ const HeaderCell = /*#__PURE__*/React.forwardRef((props, ref) => { const locale = React.useContext(_locale.LocaleContext); const [css, theme] = (0, _styles.useStyletron)(); const [focusVisible, setFocusVisible] = React.useState(false); const checkboxRef = React.useRef(null); const handleFocus = event => { if ((0, _focusVisible.isFocusVisible)(event)) { setFocusVisible(true); } }; const handleBlur = () => { if (focusVisible !== false) { setFocusVisible(false); } }; const backgroundColor = props.isHovered ? theme.colors.backgroundSecondary : theme.colors.backgroundPrimary; return /*#__PURE__*/React.createElement("div", { ref: ref, className: css({ ...theme.typography.font350, alignItems: 'center', backgroundColor, color: theme.colors.contentPrimary, display: props.isMeasured ? 'inline-flex' : 'flex', flexGrow: 1, height: '100%', paddingLeft: theme.sizing.scale500 }) }, props.isSelectable && /*#__PURE__*/React.createElement("span", { className: css({ paddingRight: theme.sizing.scale300 }), ref: checkboxRef }, /*#__PURE__*/React.createElement(_checkbox.Checkbox, { onChange: () => { if (props.isSelectedAll || props.isSelectedIndeterminate) { props.onSelectNone(); } else { props.onSelectAll(); } }, "aria-label": locale.datatable.selectAllRows, checked: props.isSelectedAll || props.isSelectedIndeterminate, isIndeterminate: props.isSelectedIndeterminate })), /*#__PURE__*/React.createElement("div", { "aria-label": locale.datatable.sortColumn, className: css({ alignItems: 'center', backgroundColor: 'transparent', border: 'none', boxSizing: 'border-box', // @ts-ignore cursor: props.sortable ? 'pointer' : null, display: 'flex', flexGrow: 1, height: '100%', outline: focusVisible ? `3px solid ${theme.colors.borderAccent}` : 'none', outlineOffset: '-3px', // paddingLeft: theme.sizing.scale500, paddingRight: theme.sizing.scale500, whiteSpace: 'nowrap' }), onMouseEnter: props.onMouseEnter, onMouseLeave: props.onMouseLeave, onKeyUp: event => { if (event.key === 'Enter') { props.onSort(props.index); } }, onClick: () => { if (props.sortable) { props.onSort(props.index); } }, onFocus: handleFocus, onBlur: handleBlur, role: "button", tabIndex: 0 }, props.title, /*#__PURE__*/React.createElement("div", { className: css({ position: 'relative', width: '100%', display: 'flex', alignItems: 'center' }) }, (props.isHovered || props.sortDirection) && props.sortable && /*#__PURE__*/React.createElement("div", { style: { backgroundColor, display: 'flex', alignItems: 'center', position: 'absolute', right: -4 } }, props.sortDirection === _constants.SORT_DIRECTIONS.DESC && /*#__PURE__*/React.createElement(_chevronDown.default, { color: props.sortDirection ? theme.colors.contentPrimary : theme.colors.contentSecondary }), (props.sortDirection === _constants.SORT_DIRECTIONS.ASC || !props.sortDirection) && /*#__PURE__*/React.createElement(_chevronUp.default, { color: props.sortDirection ? theme.colors.contentPrimary : theme.colors.contentSecondary }))))); }); HeaderCell.displayName = 'HeaderCell'; var _default = exports.default = HeaderCell;