@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
71 lines (70 loc) • 1.91 kB
JavaScript
import { jsx } from "react/jsx-runtime";
import { forwardRef, useRef, useMemo } from "react";
import { useDefaultProps } from "@hitachivantara/uikit-react-utils";
import { useClasses } from "./Table.styles.js";
import { staticClasses } from "./Table.styles.js";
import TableContext from "./TableContext.js";
const defaultComponent = "table";
const computeTablePartComponents = (rootComponent) => {
if (rootComponent === "table") {
return {
Table: "table",
THead: "thead",
TBody: "tbody",
Tr: "tr",
Th: "th",
Td: "td"
};
}
return {
Table: rootComponent,
THead: rootComponent,
TBody: rootComponent,
Tr: rootComponent,
Th: rootComponent,
Td: rootComponent
};
};
const HvTable = forwardRef(function HvTable2(props, ref) {
const {
classes: classesProp,
className,
component = defaultComponent,
stickyHeader = false,
stickyColumns = false,
variant = "default",
...others
} = useDefaultProps("HvTable", props);
const { classes, cx } = useClasses(classesProp);
const containerRef = useRef(ref);
const components = useMemo(
() => computeTablePartComponents(component),
[component]
);
const tableContext = useMemo(
() => ({ components, variant, containerRef }),
[components, variant, containerRef]
);
const Table = useMemo(() => components.Table, [components]);
return /* @__PURE__ */ jsx(TableContext.Provider, { value: tableContext, children: /* @__PURE__ */ jsx(
Table,
{
ref,
role: component === defaultComponent ? null : "table",
className: cx(
classes.root,
{
[classes.stickyHeader]: stickyHeader,
[classes.stickyColumns]: stickyColumns,
[classes.listRow]: variant === "listrow"
},
className
),
...others
}
) });
});
export {
HvTable,
staticClasses as tableClasses
};