From cabf8052ca3ab7ad3b12d295bca560c71d1e8ac8 Mon Sep 17 00:00:00 2001 From: talksik Date: Tue, 19 Apr 2022 06:33:42 -0500 Subject: [PATCH] adding in context for mui toast custom --- packages/web/components/footer/index.tsx | 6 +- .../components/providers/toastProvider.tsx | 65 +++++++++++++++++++ packages/web/package.json | 1 - packages/web/pages/_app.tsx | 10 +-- 4 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 packages/web/components/providers/toastProvider.tsx diff --git a/packages/web/components/footer/index.tsx b/packages/web/components/footer/index.tsx index f688bfd..a106c6d 100644 --- a/packages/web/components/footer/index.tsx +++ b/packages/web/components/footer/index.tsx @@ -1,14 +1,16 @@ import FullMottoLogo from "../../../components/logo/fullMotto"; -import toast from "react-hot-toast"; import { useCallback } from "react"; +import useNirvanaToast from "../providers/toastProvider"; const contactEmailAddress = "arjunpatel@berkeley.edu"; export default function Footer() { + const toast = useNirvanaToast(); + const copyToClipboard = useCallback(() => { navigator.clipboard.writeText(contactEmailAddress); - toast.success("copied to clipboard"); + toast.handleOpen("success", "copied to clipboard"); }, []); return ( diff --git a/packages/web/components/providers/toastProvider.tsx b/packages/web/components/providers/toastProvider.tsx new file mode 100644 index 0000000..994d56f --- /dev/null +++ b/packages/web/components/providers/toastProvider.tsx @@ -0,0 +1,65 @@ +import MuiAlert, { AlertProps } from "@mui/material/Alert"; +import React, { useState } from "react"; + +import { AlertColor } from "@mui/material"; +import Snackbar from "@mui/material/Snackbar"; +import { useContext } from "react"; + +const Alert = React.forwardRef(function Alert( + props, + ref +) { + return ; +}); + +interface context { + handleOpen: (severity: AlertColor, message: string) => void; +} + +const NirvanaToastContext = React.createContext({ + handleOpen: ( + severity: AlertColor = "success", + message: string = "Success" + ) => {}, +}); + +export const NirvanaToastProvider: React.FC = ({ children }) => { + const [open, setOpen] = useState(false); + + const [severity, setSeverity] = useState("success"); + const [message, setMessage] = useState("Success"); + + const handleOpen = ( + severity: AlertColor = "success", + message: string = "Success" + ) => { + // set severity + message first + setSeverity(severity); + setMessage(message); + + // show the alert + setOpen(true); + }; + + const handleClose = () => setOpen(false); + + const value = { + handleOpen, + }; + + return ( + + + + {message} + + + + {children} + + ); +}; + +export default function useNirvanaToast() { + return useContext(NirvanaToastContext); +} diff --git a/packages/web/package.json b/packages/web/package.json index 50e5b07..4856684 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -13,7 +13,6 @@ "next": "12.1.4", "react": "18.0.0", "react-dom": "18.0.0", - "react-hot-toast": "^2.2.0", "react-icons": "^4.3.1" }, "devDependencies": { diff --git a/packages/web/pages/_app.tsx b/packages/web/pages/_app.tsx index 12fcfb5..e286b4a 100644 --- a/packages/web/pages/_app.tsx +++ b/packages/web/pages/_app.tsx @@ -2,8 +2,8 @@ import "../styles/globals.css"; import type { AppProps } from "next/app"; import Head from "next/head"; +import { NirvanaToastProvider } from "../components/providers/toastProvider"; import React from "react"; -import { Toaster } from "react-hot-toast"; function MyApp({ Component, pageProps }: AppProps) { return ( @@ -25,9 +25,11 @@ function MyApp({ Component, pageProps }: AppProps) { /> -
- -
+ +
+ +
+
); }