@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
102 lines (101 loc) • 3.12 kB
JavaScript
import { jsx, jsxs } from "react/jsx-runtime";
import { forwardRef, useMemo } from "react";
import { useDefaultProps } from "@hitachivantara/uikit-react-utils";
import { useClasses } from "./AppSwitcher.styles.js";
import { staticClasses } from "./AppSwitcher.styles.js";
import { HvAppSwitcherAction } from "./Action/Action.js";
import { HvPanel } from "../Panel/Panel.js";
import { HvTypography } from "../Typography/Typography.js";
import { HvOverflowTooltip } from "../OverflowTooltip/OverflowTooltip.js";
import { HvListContainer } from "../ListContainer/ListContainer.js";
const HvAppSwitcher = forwardRef(function HvAppSwitcher2(props, ref) {
const {
className,
classes: classesProp,
layout = "single",
title,
applications,
onActionClickedCallback = () => {
},
isActionSelectedCallback = () => false,
header,
footer,
isOpen,
...others
} = useDefaultProps("HvAppSwitcher", props);
const { classes, cx } = useClasses(classesProp);
const panelActions = useMemo(
() => applications?.map((application) => {
if (application.name) {
return /* @__PURE__ */ jsx(
HvAppSwitcherAction,
{
application,
onClickCallback: onActionClickedCallback,
isSelectedCallback: isActionSelectedCallback,
classes: {
root: classes.item,
selected: classes.itemSelected,
disabled: classes.itemDisabled,
typography: classes.itemTrigger,
icon: classes.itemIcon,
title: classes.itemTitle,
iconInfo: classes.itemInfoIcon
}
},
application.id || `${application.name}_${application.url}`
);
}
return void 0;
}),
[applications, classes, isActionSelectedCallback, onActionClickedCallback]
);
return /* @__PURE__ */ jsxs(
HvPanel,
{
ref,
className: cx(
classes.root,
classes[layout],
{ [classes.open]: !!isOpen, [classes.closed]: isOpen === false },
className
),
...others,
children: [
header && /* @__PURE__ */ jsx(HvTypography, { component: "div", variant: "label", className: classes.title, children: header }) || title && /* @__PURE__ */ jsx(
HvOverflowTooltip,
{
className: classes.title,
data: title,
placement: "top-start",
classes: {
tooltipAnchorParagraph: classes.titleAnchor
}
}
),
/* @__PURE__ */ jsx(
HvListContainer,
{
condensed: true,
disableGutters: true,
className: classes.actionsContainer,
children: panelActions
}
),
footer && /* @__PURE__ */ jsx(
HvTypography,
{
component: "div",
variant: "label",
className: classes.footerContainer,
children: footer
}
)
]
}
);
});
export {
HvAppSwitcher,
staticClasses as appSwitcherClasses
};