From 8c8edfc9c8bb1a0fa3d1e02aab576044857f1c95 Mon Sep 17 00:00:00 2001 From: Wolfboy248 <105884620+Wolfboy248@users.noreply.github.com> Date: Sun, 20 Oct 2024 00:27:38 +0200 Subject: refactor: custom modals --- frontend/src/components/ConfirmDialog.tsx | 31 +++++++++++++++++++ frontend/src/components/MapDeleteConfirmDialog.tsx | 28 ----------------- frontend/src/components/MessageDialog.tsx | 29 +++++++++++++++++ frontend/src/components/UseConfirm.tsx | 36 ++++++++++++++++++++++ frontend/src/components/UseMessage.tsx | 27 ++++++++++++++++ 5 files changed, 123 insertions(+), 28 deletions(-) create mode 100644 frontend/src/components/ConfirmDialog.tsx delete mode 100644 frontend/src/components/MapDeleteConfirmDialog.tsx create mode 100644 frontend/src/components/MessageDialog.tsx create mode 100644 frontend/src/components/UseConfirm.tsx create mode 100644 frontend/src/components/UseMessage.tsx (limited to 'frontend/src/components') diff --git a/frontend/src/components/ConfirmDialog.tsx b/frontend/src/components/ConfirmDialog.tsx new file mode 100644 index 0000000..c4299fd --- /dev/null +++ b/frontend/src/components/ConfirmDialog.tsx @@ -0,0 +1,31 @@ +import React from 'react'; + +import "../css/Dialog.css" + +interface ConfirmDialogProps { + title: string; + subtitle: string; + onConfirm: () => void; + onCancel: () => void; +}; + +const ConfirmDialog: React.FC = ({ title, subtitle, onConfirm, onCancel }) => { + return ( +
+
+
+ {title} +
+
+ {subtitle} +
+
+ + +
+
+
+ ) +}; + +export default ConfirmDialog; diff --git a/frontend/src/components/MapDeleteConfirmDialog.tsx b/frontend/src/components/MapDeleteConfirmDialog.tsx deleted file mode 100644 index 1518a14..0000000 --- a/frontend/src/components/MapDeleteConfirmDialog.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react'; - -import "../css/MapDeleteConfirmDialog.css" - -interface MapDeleteConfirmDialogProps { - open: boolean; - onClose: () => void; - map_id: number; - record_id: number; -}; - -const MapDeleteConfirmDialog: React.FC = ({ open, onClose, map_id, record_id }) => { - if (open) { - return ( -
-
- -
-
- ) - } - - return ( - <> - ) -}; - -export default MapDeleteConfirmDialog; diff --git a/frontend/src/components/MessageDialog.tsx b/frontend/src/components/MessageDialog.tsx new file mode 100644 index 0000000..0a8db42 --- /dev/null +++ b/frontend/src/components/MessageDialog.tsx @@ -0,0 +1,29 @@ +import React from 'react'; + +import "../css/Dialog.css" + +interface MessageDialogProps { + title: string; + subtitle: string; + onClose: () => void; +}; + +const MessageDialog: React.FC = ({ title, subtitle, onClose }) => { + return ( +
+
+
+ {title} +
+
+ {subtitle} +
+
+ +
+
+
+ ) +} + +export default MessageDialog; diff --git a/frontend/src/components/UseConfirm.tsx b/frontend/src/components/UseConfirm.tsx new file mode 100644 index 0000000..2fe0e12 --- /dev/null +++ b/frontend/src/components/UseConfirm.tsx @@ -0,0 +1,36 @@ +import React, { useState } from 'react'; +import ConfirmDialog from './ConfirmDialog'; + +const useConfirm = ( title: string, subtitle: string ) => { + const [isOpen, setIsOpen] = useState(false); + const [resolvePromise, setResolvePromise] = useState<((value: boolean) => void) | null>(null); + + const confirm = () => { + setIsOpen(true); + return new Promise((resolve) => { + setResolvePromise(() => resolve); + }); + }; + + const handleConfirm = () => { + setIsOpen(false); + if (resolvePromise) { + resolvePromise(true); + } + } + + const handleCancel = () => { + setIsOpen(false); + if (resolvePromise) { + resolvePromise(false); + } + } + + const ConfirmDialogComponent = isOpen && ( + + ); + + return { confirm, ConfirmDialogComponent }; +} + +export default useConfirm; diff --git a/frontend/src/components/UseMessage.tsx b/frontend/src/components/UseMessage.tsx new file mode 100644 index 0000000..fbd3c82 --- /dev/null +++ b/frontend/src/components/UseMessage.tsx @@ -0,0 +1,27 @@ +import React, { useState } from 'react'; +import MessageDialog from "./MessageDialog"; + +const useMessage = () => { + const [isOpen, setIsOpen] = useState(false); + + const [title, setTitle] = useState(""); + const [subtitle, setSubtitle] = useState(""); + + const message = (title: string, subtitle: string) => { + setIsOpen(true); + setTitle(title); + setSubtitle(subtitle); + }; + + const handleClose = () => { + setIsOpen(false); + }; + + const MessageDialogComponent = isOpen && ( + + ); + + return { message, MessageDialogComponent }; +} + +export default useMessage; -- cgit v1.2.3