@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
JavaScript
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 }))));
}