UNPKG

@awsui/components-react

Version:

AWS UI is a collection of [React](https://reactjs.org/) components that help create intuitive, responsive, and accessible user experiences for web applications. It is developed by Amazon Web Services (AWS). This work is available under the terms of the [A

52 lines (51 loc) 3.08 kB
import { __assign, __rest, __spreadArrays } from "tslib"; import React from 'react'; import styles from './styles.css.js'; import clsx from 'clsx'; import Icon from '../icon'; import InternalButtonDropdown from '../button-dropdown/internal'; import { InternalButton } from '../button/internal'; import { BreadcrumbItem } from './item/item'; import { breadcrumbItemClickHandler } from './item-click-handler'; import { getBaseProps } from '../internal/base-component'; import { useMobile } from '../internal/hooks/use-mobile'; import { useTelemetry } from '../internal/hooks/use-telemetry'; var DropdownTrigger = function (clickHandler, ref, isDisabled, isExpanded) { return (React.createElement(InternalButton, { disabled: isDisabled, onClick: clickHandler, ref: ref, "aria-expanded": isExpanded ? true : null, "aria-haspopup": true, variant: "breadcrumb-group" }, "...")); }; var EllipsisDropdown = function (_a) { var dropdownItems = _a.dropdownItems, onDropdownItemClick = _a.onDropdownItemClick; return (React.createElement("li", { className: styles.ellipsis, "aria-label": "Show path" }, React.createElement(InternalButtonDropdown, { items: dropdownItems, onItemClick: onDropdownItemClick, customTriggerBuilder: DropdownTrigger, allowHref: true }), React.createElement(Icon, { name: "angle-right", variant: "disabled", className: styles.icon }))); }; function BreadcrumbGroup(_a) { var _b = _a.items, items = _b === void 0 ? [] : _b, ariaLabel = _a.ariaLabel, onClick = _a.onClick, onFollow = _a.onFollow, props = __rest(_a, ["items", "ariaLabel", "onClick", "onFollow"]); useTelemetry('BreadcrumbGroup'); var baseProps = getBaseProps(props); var isMobile = useMobile(); var breadcrumbItems = items.map(function (item, index) { return (React.createElement("li", { className: styles.item, key: index }, React.createElement(BreadcrumbItem, { item: item, onClick: onClick, onFollow: onFollow, isCompressed: isMobile, isLast: index === items.length - 1 }))); }); if (breadcrumbItems.length >= 3) { var dropdownItems = items .slice(1, items.length - 1) .map(function (item, index) { return ({ id: (index + 1).toString(), text: item.text, href: item.href || '#' }); }); breadcrumbItems = __spreadArrays([ breadcrumbItems[0], React.createElement(EllipsisDropdown, { key: 'ellipsis', dropdownItems: dropdownItems, onDropdownItemClick: function (e) { var _a = e.detail, id = _a.id, event = _a.event; var item = items[id]; breadcrumbItemClickHandler(item, onFollow, onClick, event); } }) ], breadcrumbItems.slice(1)); } return (React.createElement("nav", __assign({}, baseProps, { className: clsx(styles['breadcrumb-group'], isMobile && styles.mobile, baseProps.className), "aria-label": ariaLabel || undefined }), React.createElement("ol", null, breadcrumbItems))); } export default BreadcrumbGroup;