@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
64 lines (63 loc) • 1.88 kB
JavaScript
import { jsx } from "react/jsx-runtime";
import { useState } from "react";
import { useDefaultProps } from "@hitachivantara/uikit-react-utils";
import { useClasses } from "./Select.styles.js";
import { HvBaseDropdown } from "../BaseDropdown/BaseDropdown.js";
import { HvPanel } from "../Panel/Panel.js";
import { HvSelectionList } from "../SelectionList/SelectionList.js";
import { HvListItem } from "../ListContainer/ListItem/ListItem.js";
const Option = ({ ...props }) => /* @__PURE__ */ jsx(HvListItem, { ...props });
const HvSelect = (props) => {
const {
className,
classes: classesProp,
onChange,
disabled,
value,
children,
...others
} = useDefaultProps("HvPaginationSelect", props);
const { classes } = useClasses(classesProp);
const [open, setOpen] = useState(false);
const handleSelect = (evt, val) => {
onChange?.(evt, val);
setOpen(false);
};
const handleToggle = (_evt, s) => {
setOpen(s);
};
const setFocusToContent = (containerRef) => {
const listItems = containerRef != null ? [...containerRef.getElementsByTagName("li")] : [];
listItems.every((listItem) => {
if (listItem.tabIndex >= 0) {
listItem.focus();
return false;
}
return true;
});
};
return /* @__PURE__ */ jsx(
HvBaseDropdown,
{
className,
classes: {
selection: classes.selection,
header: classes.header,
headerOpen: classes.headerOpen,
root: classes.root
},
expanded: open,
onToggle: handleToggle,
onContainerCreation: setFocusToContent,
placeholder: value,
disabled,
variableWidth: true,
...others,
children: /* @__PURE__ */ jsx(HvPanel, { children: /* @__PURE__ */ jsx(HvSelectionList, { value, onChange: handleSelect, children }) })
}
);
};
export {
Option,
HvSelect as default
};