@salesforce/design-system-react
Version:
Salesforce Lightning Design System for React
189 lines (162 loc) • 5.57 kB
JavaScript
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/* Copyright (c) 2015-present, salesforce.com, inc. All rights reserved */
/* Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
// # GlobalNavigationBar Link Component
// ## Dependencies
// ### React
import React from 'react';
import PropTypes from 'prop-types'; // ### classNames
import classNames from 'classnames'; // ### isFunction
import isFunction from 'lodash.isfunction'; // ## Constants
import { GLOBAL_NAVIGATION_BAR_LINK } from '../../utilities/constants';
function handleClick(event, href, onClick) {
event.preventDefault();
onClick(event, {
href: href
});
}
/**
* Wraps a link in the proper markup to support use in the GlobalNavigationBar.
*/
var GlobalNavigationBarLink = function GlobalNavigationBarLink(props) {
// Separate props we care about in order to pass others along passively to the `a` tag
var active = props.active,
activeBackgroundColor = props.activeBackgroundColor,
assistiveText = props.assistiveText,
className = props.className,
dividerPosition = props.dividerPosition,
href = props.href,
id = props.id,
label = props.label,
onBlur = props.onBlur,
onClick = props.onClick,
onFocus = props.onFocus,
onKeyDown = props.onKeyDown,
onKeyPress = props.onKeyPress,
onKeyUp = props.onKeyUp,
onMouseEnter = props.onMouseEnter,
onMouseLeave = props.onMouseLeave,
tabIndex = props.tabIndex;
var listItemstyle = active ? {
backgroundColor: activeBackgroundColor,
borderBottomColor: activeBackgroundColor
} : null;
return (
/*#__PURE__*/
React.createElement("li", {
className: classNames('slds-context-bar__item', _defineProperty({
'slds-is-active': active
}, "slds-context-bar__item_divider-".concat(dividerPosition), dividerPosition)),
id: id,
style: listItemstyle
},
/*#__PURE__*/
React.createElement("a", {
href: href,
className: classNames('slds-context-bar__label-action', className),
onBlur: onBlur,
onClick: isFunction(onClick) ? function (event) {
return handleClick(event, href, onClick);
} : null,
onFocus: onFocus,
onKeyDown: onKeyDown,
onKeyPress: onKeyPress,
onKeyUp: onKeyUp,
onMouseEnter: onMouseEnter,
onMouseLeave: onMouseLeave,
tabIndex: tabIndex,
title: label
}, active ?
/*#__PURE__*/
React.createElement("span", {
className: "slds-assistive-text"
}, assistiveText.activeDescriptor) : null,
/*#__PURE__*/
React.createElement("span", {
className: "slds-truncate",
title: label
}, label)))
);
};
GlobalNavigationBarLink.displayName = GLOBAL_NAVIGATION_BAR_LINK; // ### Prop Types
GlobalNavigationBarLink.propTypes = {
/**
* Whether the item is active or not.
*/
active: PropTypes.bool,
/**
* Allows alignment of active item with active application background color. If application background is dark, text color may need to be `#fff`. This can be done with the style prop.
*/
activeBackgroundColor: PropTypes.string,
/**
* **Assistive text for accessibility.**
* * `activeDescriptor`: The text that appears alongside a link that is currently active.
*/
assistiveText: PropTypes.shape({
activeDescriptor: PropTypes.string
}),
/**
* Class names to be added to the anchor element
*/
className: PropTypes.oneOfType([PropTypes.array, PropTypes.object, PropTypes.string]),
/**
* Determines position of separating bar.
*/
dividerPosition: PropTypes.oneOf(['left', 'right']),
/**
* The `href` attribute of the link. Please pass in bookmarkable URLs from your routing library. Use `GlobalNavigationBarButton` if a "real URL" is not desired. If the `onClick` callback is specified this URL will still be prevented from changing the browser's location.
*/
href: PropTypes.string,
/**
* The `id` attribute is applied to the `li` tag. _This was recently changed from being on the anchor tag._
*/
id: PropTypes.string,
/**
* Text to show for link item.
*/
label: PropTypes.string,
/**
* Triggered when focus is removed.
*/
onBlur: PropTypes.func,
/**
* `function (event, href)` - fires when the link is clicked. If set, the browser location change to the `href` specified will be ignored, but the `href` will be included in an additional parameter passed to the callback.
*/
onClick: PropTypes.func,
/**
* Triggered when component is focused.
*/
onFocus: PropTypes.func,
/**
* Triggered when a key is pressed down
*/
onKeyDown: PropTypes.func,
/**
* Triggered when a key is pressed and released
*/
onKeyPress: PropTypes.func,
/**
* Triggered when a key is released
*/
onKeyUp: PropTypes.func,
/**
* Triggered when a mouse arrow hovers
*/
onMouseEnter: PropTypes.func,
/**
* Triggered when a mouse arrow no longer hovers
*/
onMouseLeave: PropTypes.func,
/**
* Write "-1" if you don't want the user to tab to the button.
*/
tabIndex: PropTypes.string
};
GlobalNavigationBarLink.defaultProps = {
assistiveText: {
activeDescriptor: 'Current page:'
},
href: 'javascript:void(0);' // eslint-disable-line no-script-url
};
export default GlobalNavigationBarLink;
//# sourceMappingURL=link.js.map