diff --git a/src/components/modal/Modal.tsx b/src/components/modal/Modal.tsx
index 9e06ae8..3de180b 100644
--- a/src/components/modal/Modal.tsx
+++ b/src/components/modal/Modal.tsx
@@ -8,6 +8,7 @@ export default function Modal(props: ModalProps){
display,
backgroundType = "blur",
backgroundClassName,
+ top = false,
close,
className,
children
@@ -34,7 +35,11 @@ export default function Modal(props: ModalProps){
{
display?: boolean;
backgroundType?: ModalBackgroundType;
backgroundClassName?: string;
+ top?: boolean;
close?: () => void;
children: React.ReactNode;
}
diff --git a/src/main.tsx b/src/main.tsx
index c43e879..02ae970 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -5,6 +5,7 @@ import App from './App.tsx'
import './index.css'
import { AuthProvider } from './providers/AuthProvider.tsx'
import { ThemeProvider } from './providers/ThemeProvider.tsx'
+import { TimedModalProvider } from "./providers/TimedModalProvider.tsx"
const queryClient = new QueryClient();
@@ -17,12 +18,14 @@ createRoot(document.getElementById('root')!).render(
defaultTheme="dark"
storageKey="vite-ui-theme"
>
-
-
-
+
+
+
+
+
diff --git a/src/providers/ThemeProvider.tsx b/src/providers/ThemeProvider.tsx
index ee50fd4..ea6b18c 100644
--- a/src/providers/ThemeProvider.tsx
+++ b/src/providers/ThemeProvider.tsx
@@ -1,5 +1,6 @@
import { createContext, useContext, useEffect, useMemo, useState } from "react";
+
type Theme = "dark" | "light" | "system";
type ThemeProviderProps = {
diff --git a/src/providers/TimedModalProvider.tsx b/src/providers/TimedModalProvider.tsx
new file mode 100644
index 0000000..a0b8040
--- /dev/null
+++ b/src/providers/TimedModalProvider.tsx
@@ -0,0 +1,86 @@
+import Modal from "@/components/modal/Modal";
+import ModalBody from "@/components/modal/ModalBody";
+import { createContext, useContext, useEffect, useRef, useState } from "react";
+
+
+type TimedModalProviderState = {
+ addMessage: (timeout: number, message: React.ReactNode) => void;
+}
+
+
+const initialState: TimedModalProviderState = {
+ addMessage: () => null
+}
+
+const TimedModalProviderContext = createContext
(initialState);
+
+
+export function TimedModalProvider({
+ children
+}:{
+ children: React.ReactNode;
+}){
+ const [ display, setDisplay ] = useState(false);
+ const [ messages, setMessages ] = useState([]);
+ const messagesRef = useRef(messages);
+ messagesRef.current = messages;
+
+
+ useEffect(() => {
+ console.log("effect");
+ console.log(messages);
+ if(messages.length > 0){
+ setDisplay(true);
+ }
+ else{
+ setDisplay(false);
+ }
+ }, [ messages ]);
+
+
+ const addMessage = (timeout: number, message: React.ReactNode) => {
+ setMessages([...messages, message]);
+ setTimeout(() => {
+ setMessages(messagesRef.current.filter((m) => m !== message));
+ }, timeout);
+ }
+
+
+ return (
+
+
+
+
+ {
+ messages.map((message, index) => (
+
+ {message}
+
+ ))
+ }
+
+
+
+ {children}
+
+ );
+}
+
+export const useTimedModal = () => {
+ const context = useContext(TimedModalProviderContext);
+
+ if(context === undefined){
+ throw new Error("useTimeModal must be used within a TimedModalProvider");
+ }
+
+ return context;
+}