diff --git a/app/packages/core/src/plugins/SchemaIO/components/ToastView.tsx b/app/packages/core/src/plugins/SchemaIO/components/ToastView.tsx index b5a8708cd51..77169216b45 100644 --- a/app/packages/core/src/plugins/SchemaIO/components/ToastView.tsx +++ b/app/packages/core/src/plugins/SchemaIO/components/ToastView.tsx @@ -1,10 +1,111 @@ -import React from "react"; -import { Toast } from "@fiftyone/components"; +import React, { useState } from "react"; +import { Box, Snackbar, SnackbarContent } from "@mui/material"; export default function ToastView(props) { const { schema } = props; const { view = {} } = schema; const { message, duration, layout } = view; - return ; + return ( + + ); } + +interface ToastProps { + message: React.ReactNode; + primary?: (setOpen: (open: boolean) => void) => React.ReactNode; + secondary?: (setOpen: (open: boolean) => void) => React.ReactNode; + duration?: number; + layout?: { + vertical?: "top" | "bottom"; + horizontal?: "left" | "center" | "right"; + height?: number | string; + top?: number | string; + bottom?: number | string; + backgroundColor?: string; + color?: string; + fontSize?: string; + textAlign?: string; + }; + onHandleClose?: ( + event: React.SyntheticEvent | Event, + reason?: string + ) => void; +} + +const Toast: React.FC = ({ + message, + primary, + secondary, + duration = 5000, + layout = {}, + onHandleClose, +}) => { + const [open, setOpen] = useState(true); // do not use a global recoil atom for this state + + const handleClose = ( + event: React.SyntheticEvent | Event, + reason?: string + ) => { + if (reason === "clickaway") { + return; + } + setOpen(false); + + if (onHandleClose) { + onHandleClose(event, reason); + } + }; + + const snackbarStyle = { + height: layout?.height || 5, + ...(layout?.top && { top: layout.top }), + ...(layout?.bottom && { bottom: layout.bottom }), + }; + + const action = ( + + {primary && primary(setOpen)} {/* Pass setOpen to primary button */} + {secondary && secondary(setOpen)} {/* Pass setOpen to secondary button */} + + ); + + return ( + + + {message} + {action} + + } + sx={{ + backgroundColor: layout?.backgroundColor || "#333", + color: layout?.color || "#fff", + fontSize: layout?.fontSize || "14px", + display: "block", + textAlign: layout?.textAlign || "left", + }} + /> + + ); +};