@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
110 lines (109 loc) • 2.99 kB
JavaScript
import { jsx } from "react/jsx-runtime";
import { useCallback, forwardRef, useMemo } from "react";
import { useSnackbar, SnackbarProvider, SnackbarContent } from "notistack";
import { useDefaultProps } from "@hitachivantara/uikit-react-utils";
import { useClasses } from "./SnackbarProvider.styles.js";
import { staticClasses } from "./SnackbarProvider.styles.js";
import { HvSnackbarContent } from "../Snackbar/SnackbarContent/SnackbarContent.js";
const HvNotistackSnackMessage = forwardRef(function HvNotistackSnackMessage2(props, ref) {
const { id, message, variant = "success", snackbarContentProps } = props;
return /* @__PURE__ */ jsx(SnackbarContent, { ref, children: /* @__PURE__ */ jsx(
HvSnackbarContent,
{
id,
variant,
showIcon: true,
label: message,
role: "none",
...snackbarContentProps
}
) });
});
const useHvSnackbar = () => {
const snackbarContext = useSnackbar();
if (!snackbarContext) {
throw new Error("useHvSnackbar must be used within an HvSnackbarProvider");
}
const { enqueueSnackbar: enqueueNotistackSnackbar, closeSnackbar } = snackbarContext;
const enqueueSnackbar = useCallback(
(message, options = {}) => {
const {
id,
variant = "success",
snackbarContentProps,
className,
...otherOptions
} = options;
return enqueueNotistackSnackbar(
/* @__PURE__ */ jsx(
HvNotistackSnackMessage,
{
id,
message,
variant,
snackbarContentProps
}
),
{ ...otherOptions, className }
);
},
[enqueueNotistackSnackbar]
);
return useMemo(
() => ({
enqueueSnackbar,
closeSnackbar
}),
[enqueueSnackbar, closeSnackbar]
);
};
const HvSnackbarProvider = (props) => {
const {
children,
notistackClassesOverride,
maxSnack = 5,
autoHideDuration = 5e3,
anchorOrigin = {
vertical: "top",
horizontal: "right"
},
classes: classesProp,
className,
container,
...others
} = useDefaultProps("HvSnackbarProvider", props);
const { classes, css, cx } = useClasses(classesProp);
const { containerRoot, ...otherNotistackClasses } = notistackClassesOverride || {};
const notistackClasses = {
containerRoot: cx(
css({
pointerEvents: "all",
"& > div > div": {
// Overrides notistack extra padding
padding: "0 !important",
transition: "all 0s ease 0s !important"
}
}),
containerRoot
),
...otherNotistackClasses
};
return /* @__PURE__ */ jsx(
SnackbarProvider,
{
classes: notistackClasses,
maxSnack,
autoHideDuration,
anchorOrigin,
className: cx(classes.snackItemRoot, className),
domRoot: container,
...others,
children
}
);
};
export {
HvSnackbarProvider,
staticClasses as snackbarProviderClasses,
useHvSnackbar
};