UNPKG

@hitachivantara/uikit-react-core

Version:
78 lines (77 loc) 2.77 kB
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 };