UNPKG

@fluentui/react-northstar

Version:
179 lines (176 loc) 7.31 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.treeTitleSlotClassNames = exports.treeTitleClassName = exports.TreeTitle = void 0; var _invoke2 = _interopRequireDefault(require("lodash/invoke")); var _accessibility = require("@fluentui/accessibility"); var _reactBindings = require("@fluentui/react-bindings"); var _Box = require("../Box/Box"); var customPropTypes = _interopRequireWildcard(require("@fluentui/react-proptypes")); var PropTypes = _interopRequireWildcard(require("prop-types")); var React = _interopRequireWildcard(require("react")); var _utils = require("../../utils"); var _context = require("./context"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var treeTitleClassName = 'ui-tree__title'; exports.treeTitleClassName = treeTitleClassName; var treeTitleSlotClassNames = { indicator: treeTitleClassName + "__selection-indicator" }; /** * A TreeTitle renders a title of TreeItem. */ exports.treeTitleSlotClassNames = treeTitleSlotClassNames; var TreeTitle = /*#__PURE__*/React.forwardRef(function (props, ref) { var context = (0, _reactBindings.useFluentContext)(); var _useTelemetry = (0, _reactBindings.useTelemetry)(TreeTitle.displayName, context.telemetry), setStart = _useTelemetry.setStart, setEnd = _useTelemetry.setEnd; setStart(); var _React$useContext = React.useContext(_context.TreeContext), focusItemById = _React$useContext.focusItemById, toggleItemActive = _React$useContext.toggleItemActive, toggleItemSelect = _React$useContext.toggleItemSelect; var accessibility = props.accessibility, id = props.id, children = props.children, className = props.className, content = props.content, design = props.design, hasSubtree = props.hasSubtree, level = props.level, index = props.index, styles = props.styles, treeSize = props.treeSize, variables = props.variables, selectionIndicator = props.selectionIndicator, disabled = props.disabled, selected = props.selected, selectable = props.selectable, expanded = props.expanded, indeterminate = props.indeterminate; var getA11Props = (0, _reactBindings.useAccessibility)(accessibility, { debugName: TreeTitle.displayName, actionHandlers: { performClick: function performClick(e) { if ((0, _utils.shouldPreventDefaultOnKeyDown)(e)) { e.preventDefault(); } e.stopPropagation(); handleClick(e); }, focusParent: function focusParent(e) { // allow bubbling up to parent treeItem focusItemById(props.parent); } }, mapPropsToBehavior: function mapPropsToBehavior() { return { hasSubtree: hasSubtree, level: level, index: index, treeSize: treeSize, selected: selected, selectable: selectable }; }, rtl: context.rtl }); var _useStyles = (0, _reactBindings.useStyles)(TreeTitle.displayName, { className: treeTitleClassName, mapPropsToStyles: function mapPropsToStyles() { return { selected: selected, disabled: disabled, selectable: selectable, indeterminate: indeterminate, level: level, showIndicator: selectable && (hasSubtree && expanded || selected || indeterminate) }; }, mapPropsToInlineStyles: function mapPropsToInlineStyles() { return { className: className, design: design, styles: styles, variables: variables }; }, rtl: context.rtl, unstyled: props.unstyled }), classes = _useStyles.classes, resolvedStyles = _useStyles.styles; var ElementType = (0, _reactBindings.getElementType)(props); var unhandledProps = (0, _reactBindings.useUnhandledProps)(TreeTitle.handledProps, props); var handleClick = function handleClick(e) { if (hasSubtree) { toggleItemActive(e, id); } else { toggleItemSelect(e, id); } (0, _invoke2.default)(props, 'onClick', e, props); }; var selectionIndicatorOverrideProps = function selectionIndicatorOverrideProps(predefinedProps) { return { onClick: function onClick(e) { e.stopPropagation(); // otherwise onClick on title will also be executed if (selectable) { toggleItemSelect(e, id); } (0, _invoke2.default)(predefinedProps, 'onClick', e); } }; }; var selectionIndicatorElement = selectable && _Box.Box.create(selectionIndicator, { defaultProps: function defaultProps() { return Object.assign({ as: 'span', selected: selected }, getA11Props('indicator', { className: treeTitleSlotClassNames.indicator, styles: resolvedStyles.selectionIndicator })); }, overrideProps: selectionIndicatorOverrideProps }); var element = /*#__PURE__*/React.createElement(ElementType, getA11Props('root', Object.assign({ className: classes.root, onClick: handleClick, selected: selected, ref: ref }, _utils.rtlTextContainer.getAttributes({ forElements: [children, content] }), unhandledProps)), (0, _utils.childrenExist)(children) ? children : content, selectionIndicatorElement); setEnd(); return element; }); exports.TreeTitle = TreeTitle; TreeTitle.displayName = 'TreeTitle'; TreeTitle.propTypes = Object.assign({}, _utils.commonPropTypes.createCommon(), { id: PropTypes.string, hasSubtree: PropTypes.bool, index: PropTypes.number, level: PropTypes.number, onClick: PropTypes.func, expanded: PropTypes.bool, selected: PropTypes.bool, selectable: PropTypes.bool, treeSize: PropTypes.number, selectionIndicator: customPropTypes.shorthandAllowingChildren, unstyled: PropTypes.bool, indeterminate: PropTypes.bool, parent: PropTypes.string }); TreeTitle.defaultProps = { as: 'a', selectionIndicator: {}, accessibility: _accessibility.treeTitleBehavior }; TreeTitle.handledProps = Object.keys(TreeTitle.propTypes); TreeTitle.create = (0, _utils.createShorthandFactory)({ Component: TreeTitle, mappedProp: 'content' }); //# sourceMappingURL=TreeTitle.js.map