UNPKG

@hitachivantara/uikit-react-core

Version:

Core React components for the NEXT Design System.

110 lines (109 loc) 2.99 kB
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 };