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

29 lines (28 loc) 1.93 kB
import { __assign, __rest } from "tslib"; import React, { useMemo, useCallback, useEffect } from 'react'; import clsx from 'clsx'; import { getBaseProps } from '../internal/base-component'; import { fireNonCancelableEvent, fireCancelableEvent } from '../internal/events'; import { Header, ItemList } from './internal'; import { generateExpandableItemsMapping, checkDuplicateHrefs } from './util'; import styles from './styles.css.js'; import { isDevelopment } from '../internal/is-development'; import { useTelemetry } from '../internal/hooks/use-telemetry'; export default function SideNavigation(_a) { var header = _a.header, activeHref = _a.activeHref, _b = _a.items, items = _b === void 0 ? [] : _b, onFollow = _a.onFollow, onChange = _a.onChange, props = __rest(_a, ["header", "activeHref", "items", "onFollow", "onChange"]); useTelemetry('SideNavigation'); var baseProps = getBaseProps(props); var parentMap = useMemo(function () { return generateExpandableItemsMapping(items); }, [items]); if (isDevelopment) { useEffect(function () { return checkDuplicateHrefs(items); }, [items]); } var onChangeHandler = useCallback(function (item, expanded) { fireNonCancelableEvent(onChange, { item: item, expanded: expanded, expandableParents: parentMap.get(item) }); }, [onChange, parentMap]); var onFollowHandler = useCallback(function (item, sourceEvent) { fireCancelableEvent(onFollow, item, sourceEvent); }, [onFollow]); return (React.createElement("div", __assign({}, baseProps, { className: clsx(styles.root, baseProps.className) }), header && (React.createElement(Header, { definition: header, activeHref: activeHref, fireChange: onChangeHandler, fireFollow: onFollowHandler })), items && (React.createElement(ItemList, { variant: "root", items: items, fireFollow: onFollowHandler, fireChange: onChangeHandler, activeHref: activeHref })))); }