baseui
Version:
A React Component library implementing the Base design language
125 lines (122 loc) • 5.08 kB
JavaScript
"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;