UNPKG

office-ui-fabric-react

Version:

Reusable React components for building experiences for Office 365.

47 lines 3.86 kB
import * as tslib_1 from "tslib"; import * as React from 'react'; import { anchorProperties, getNativeProps, createRef } from '../../../Utilities'; import { ContextualMenuItemWrapper } from './ContextualMenuItemWrapper'; import { KeytipData } from '../../../KeytipData'; import { isItemDisabled, hasSubmenu } from '../../../utilities/contextualMenu/index'; import { ContextualMenuItem } from '../ContextualMenuItem'; var ContextualMenuAnchor = /** @class */ (function (_super) { tslib_1.__extends(ContextualMenuAnchor, _super); function ContextualMenuAnchor() { var _this = _super !== null && _super.apply(this, arguments) || this; _this._anchor = createRef(); _this._getSubmenuTarget = function () { return _this._anchor.current ? _this._anchor.current : undefined; }; _this._onItemClick = function (ev) { var _a = _this.props, item = _a.item, onItemClick = _a.onItemClick; if (onItemClick) { onItemClick(item, ev); } }; return _this; } ContextualMenuAnchor.prototype.render = function () { var _this = this; var _a = this.props, item = _a.item, classNames = _a.classNames, index = _a.index, focusableElementIndex = _a.focusableElementIndex, totalItemCount = _a.totalItemCount, hasCheckmarks = _a.hasCheckmarks, hasIcons = _a.hasIcons, _b = _a.contextualMenuItemAs, ChildrenRenderer = _b === void 0 ? ContextualMenuItem : _b, expandedMenuItemKey = _a.expandedMenuItemKey, onItemClick = _a.onItemClick, openSubMenu = _a.openSubMenu, dismissSubMenu = _a.dismissSubMenu, dismissMenu = _a.dismissMenu; var anchorRel = item.rel; if (item.target && item.target.toLowerCase() === '_blank') { anchorRel = anchorRel ? anchorRel : 'nofollow noopener noreferrer'; // Safe default to prevent tabjacking } var subMenuId = this._getSubMenuId(item); var itemHasSubmenu = hasSubmenu(item); var nativeProps = getNativeProps(item, anchorProperties); var disabled = isItemDisabled(item); var itemProps = item.itemProps; var keytipProps = item.keytipProps; if (keytipProps && itemHasSubmenu) { keytipProps = tslib_1.__assign({}, keytipProps, { hasMenu: true }); } return (React.createElement("div", null, React.createElement(KeytipData, { keytipProps: item.keytipProps, ariaDescribedBy: nativeProps['aria-describedby'], disabled: disabled }, function (keytipAttributes) { return (React.createElement("a", tslib_1.__assign({}, nativeProps, keytipAttributes, { ref: _this._anchor, href: item.href, target: item.target, rel: anchorRel, className: classNames.root, role: "menuitem", "aria-owns": item.key === expandedMenuItemKey ? subMenuId : undefined, "aria-haspopup": itemHasSubmenu || undefined, "aria-expanded": itemHasSubmenu ? item.key === expandedMenuItemKey : undefined, "aria-posinset": focusableElementIndex + 1, "aria-setsize": totalItemCount, "aria-disabled": isItemDisabled(item), style: item.style, onClick: _this._onItemClick, onMouseEnter: _this._onItemMouseEnter, onMouseLeave: _this._onItemMouseLeave, onKeyDown: itemHasSubmenu ? _this._onItemKeyDown : null }), React.createElement(ChildrenRenderer, tslib_1.__assign({ componentRef: item.componentRef, item: item, classNames: classNames, index: index, onCheckmarkClick: hasCheckmarks && onItemClick ? onItemClick.bind(_this, item) : undefined, hasIcons: hasIcons, openSubMenu: openSubMenu, dismissSubMenu: dismissSubMenu, dismissMenu: dismissMenu, getSubmenuTarget: _this._getSubmenuTarget }, itemProps)))); }))); }; return ContextualMenuAnchor; }(ContextualMenuItemWrapper)); export { ContextualMenuAnchor }; //# sourceMappingURL=ContextualMenuAnchor.js.map