@hitachivantara/uikit-react-core
Version:
UI Kit Core React components.
78 lines (77 loc) • 2.77 kB
JavaScript
import { HvSnackbarContent } from "../Snackbar/SnackbarContent/SnackbarContent.js";
import { useClasses } from "./SnackbarProvider.styles.js";
import { useDefaultProps } from "@hitachivantara/uikit-react-utils";
import { forwardRef, useCallback, useMemo } from "react";
import { jsx } from "react/jsx-runtime";
import { SnackbarContent, SnackbarProvider, useSnackbar } from "notistack";
//#region src/SnackbarProvider/SnackbarProvider.tsx
var HvNotistackSnackMessage = forwardRef(function HvNotistackSnackMessage(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
})
});
});
var 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]);
};
/**
* A snackbar provider to control the stacking of multiple snackbars in the app.
*
* This component uses of the [Notistack](https://github.com/iamhosseindhv/notistack) library.
* Please refer to its [API Reference](https://notistack.com/api-reference) for more complex usage scenarios.
*/
var 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 || {};
return /* @__PURE__ */ jsx(SnackbarProvider, {
classes: {
containerRoot: cx(css({
pointerEvents: "all",
"& > div > div": {
padding: "0 !important",
transition: "all 0s ease 0s !important"
}
}), containerRoot),
...otherNotistackClasses
},
maxSnack,
autoHideDuration,
anchorOrigin,
className: cx(classes.snackItemRoot, className),
domRoot: container,
...others,
children
});
};
//#endregion
export { HvSnackbarProvider, useHvSnackbar };