@salesforce/design-system-react
Version:
Salesforce Lightning Design System for React
237 lines (212 loc) • 8.78 kB
JavaScript
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
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; }
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import EventUtil from '../../utilities/event';
import BuilderHeaderUtilities from './utilities';
import BuilderHeaderNavLink from './nav-link';
import Icon from '../icon';
import { BUILDER_HEADER, BUILDER_HEADER_NAV, BUILDER_HEADER_TOOLBAR, BUILDER_HEADER_MISC, BUILDER_HEADER_UTILITIES } from '../../utilities/constants';
var propTypes = {
/**
* **Assistive text for accessibility**
* This object is merged with the default props object on every render.
* * `backIcon`: Used for the back icon.
* * `helpIcon`: Used for the help icon.
* * `icon`: Used for the main icon next to the header title.
* * _Tested with snapshot testing._
*/
assistiveText: PropTypes.shape({
backIcon: PropTypes.string,
helpIcon: PropTypes.string,
icon: PropTypes.string
}),
/**
* Provide children of the types `<BuilderHeaderNav />`, `<BuilderHeaderToolbar />`, or `<BuilderHeaderMisc />` to define the structure of the header.
* ```
* <BuilderHeader>
* <BuilderHeaderNav />
* <BuilderHeaderToolbar />
* <BuilderHeaderMisc />
* </BuilderHeader>
* ```
*/
children: PropTypes.node,
/**
* CSS classes to be added to tag with `.slds-builder-header_container`. Uses `classNames` [API](https://github.com/JedWatson/classnames). _Tested with snapshot testing._
*/
className: PropTypes.oneOfType([PropTypes.array, PropTypes.object, PropTypes.string]),
/**
* Event Callbacks
* * `onClickBack`: Called when the Back link is clicked.
* * `onClickHelp`: Called when the Help link is clicked.
* _Tested with Mocha testing._
*/
events: PropTypes.shape({
onClickBack: PropTypes.func,
onClickHelp: PropTypes.func
}),
/**
* Category of the title icon from [lightningdesignsystem.com/icons/](https://www.lightningdesignsystem.com/icons/)
*/
iconCategory: PropTypes.string,
/**
* CSS classes that are applied to the title icon.
*/
iconClassName: PropTypes.oneOfType([PropTypes.array, PropTypes.object, PropTypes.string]),
/**
* Name of the title icon. Visit <a href='http://www.lightningdesignsystem.com/resources/icons'>Lightning Design System Icons</a> to reference icon names.
*/
iconName: PropTypes.string,
/**
* Path to the title icon. This will override any global icon settings.
*/
iconPath: PropTypes.string,
/**
* **Text labels for internationalization**
* This object is merged with the default props object on every render.
* * `back`: The label for the Back link.
* * `help`: The label for the Help link.
* * `pageType`: The label that describes the page type.
* * `title`: The label for the page title.
* _Tested with snapshot testing._
*/
labels: PropTypes.shape({
back: PropTypes.string,
help: PropTypes.string,
pageType: PropTypes.string,
title: PropTypes.string
}),
/**
* Custom styles applied to the `.slds-builder-header_container` element.
*/
style: PropTypes.object
};
var defaultProps = {
assistiveText: {
backIcon: 'Back',
helpIcon: 'Help',
icon: 'Builder'
},
iconCategory: 'utility',
iconName: 'builder',
labels: {
back: 'Back',
help: 'Help',
pageType: 'Page Type',
title: 'App Name'
}
};
/**
* Every builder needs a builder header, which contains basic navigation elements. It also shows the builder type and content name.
*/
var BuilderHeader = function BuilderHeader(_ref) {
var _ref$assistiveText = _ref.assistiveText,
assistiveText = _ref$assistiveText === void 0 ? defaultProps.assistiveText : _ref$assistiveText,
children = _ref.children,
className = _ref.className,
_ref$events = _ref.events,
events = _ref$events === void 0 ? {} : _ref$events,
_ref$iconCategory = _ref.iconCategory,
iconCategory = _ref$iconCategory === void 0 ? defaultProps.iconCategory : _ref$iconCategory,
iconClassName = _ref.iconClassName,
_ref$iconName = _ref.iconName,
iconName = _ref$iconName === void 0 ? defaultProps.iconName : _ref$iconName,
iconPath = _ref.iconPath,
_ref$labels = _ref.labels,
labels = _ref$labels === void 0 ? defaultProps.labels : _ref$labels,
style = _ref.style;
var mergedAssistiveText = _objectSpread(_objectSpread({}, defaultProps.assistiveText), assistiveText);
var mergedEvents = _objectSpread(_objectSpread({}, {}), events);
var mergedLabels = _objectSpread(_objectSpread({}, defaultProps.labels), labels);
var nav;
var toolbar; // Default utilities includes Back and Help links
var utilities = /*#__PURE__*/React.createElement(BuilderHeaderUtilities, null, /*#__PURE__*/React.createElement(BuilderHeaderNavLink, {
assistiveText: {
icon: mergedAssistiveText.backIcon
},
iconCategory: "utility",
iconName: "back",
label: mergedLabels.back,
onClick: EventUtil.trappedHandler(mergedEvents.onClickBack)
}), /*#__PURE__*/React.createElement(BuilderHeaderNavLink, {
assistiveText: {
icon: mergedAssistiveText.helpIcon
},
iconCategory: "utility",
iconName: "help",
label: mergedLabels.help,
onClick: EventUtil.trappedHandler(mergedEvents.onClickHelp)
}));
var misc = [];
React.Children.forEach(children, function (child) {
if (child) {
switch (child.type.displayName) {
case BUILDER_HEADER_NAV:
nav = child;
break;
case BUILDER_HEADER_TOOLBAR:
toolbar = child;
break;
case BUILDER_HEADER_MISC:
// eslint-disable-next-line fp/no-mutating-methods
misc.push(child);
break;
case BUILDER_HEADER_UTILITIES:
utilities = child;
break;
default:
}
}
});
var resolvedIconCategory;
var resolvedIconName;
var resolvedIconPath;
if (iconPath) {
resolvedIconPath = iconPath;
} else {
resolvedIconCategory = iconCategory;
resolvedIconName = iconName;
}
return /*#__PURE__*/React.createElement("div", {
style: {
position: 'relative',
height: '100px'
}
}, /*#__PURE__*/React.createElement("div", {
className: classNames('slds-builder-header_container', className),
style: style
}, /*#__PURE__*/React.createElement("header", {
className: "slds-builder-header"
}, /*#__PURE__*/React.createElement("div", {
className: "slds-builder-header__item"
}, /*#__PURE__*/React.createElement("div", {
className: "slds-builder-header__item-label slds-media slds-media_center"
}, /*#__PURE__*/React.createElement("div", {
className: "slds-media__figure"
}, /*#__PURE__*/React.createElement(Icon, {
assistiveText: {
label: mergedAssistiveText.icon
},
category: resolvedIconCategory,
containerClassName: classNames('slds-icon_container', 'slds-icon-utility-builder', 'slds-current-color', iconClassName),
name: resolvedIconName,
path: resolvedIconPath,
size: "x-small"
})), /*#__PURE__*/React.createElement("div", {
className: "slds-media__body"
}, mergedLabels.title))), nav, misc.length > 0 ? misc : /*#__PURE__*/React.createElement("div", {
className: "slds-builder-header__item slds-has-flexi-truncate"
}, /*#__PURE__*/React.createElement("h1", {
className: "slds-builder-header__item-label"
}, /*#__PURE__*/React.createElement("span", {
className: "slds-truncate",
title: mergedLabels.pageType
}, mergedLabels.pageType))), utilities), toolbar));
};
BuilderHeader.displayName = BUILDER_HEADER;
BuilderHeader.propTypes = propTypes;
export default BuilderHeader;
//# sourceMappingURL=index.js.map