diff --git a/job-tracker-ui/src/components/Attachments.tsx b/job-tracker-ui/src/components/Attachments.tsx index 664b422..6325a12 100644 --- a/job-tracker-ui/src/components/Attachments.tsx +++ b/job-tracker-ui/src/components/Attachments.tsx @@ -24,6 +24,7 @@ import VisibilityOutlinedIcon from "@mui/icons-material/VisibilityOutlined"; import { api } from "../api"; import { useToast } from "../toast"; +import { confirmAction, promptForValue } from "../dialogs"; interface AttachmentItem { id: number; @@ -82,7 +83,7 @@ export default function Attachments({ jobId }: { jobId: number }) { }, [preview?.url]); const rename = async (a: AttachmentItem) => { - const next = window.prompt("Rename attachment to:", a.fileName); + const next = promptForValue("Rename attachment to:", a.fileName); if (!next || next.trim() === a.fileName) return; try { await api.patch(`/attachments/${a.id}`, { fileName: next.trim() }); @@ -94,7 +95,7 @@ export default function Attachments({ jobId }: { jobId: number }) { }; const remove = async (a: AttachmentItem) => { - if (!window.confirm(`Delete attachment "${a.fileName}"?`)) return; + if (!confirmAction(`Delete attachment "${a.fileName}"?`)) return; try { await api.delete(`/attachments/${a.id}`); toast("Deleted attachment.", "success"); diff --git a/job-tracker-ui/src/components/Correspondence.tsx b/job-tracker-ui/src/components/Correspondence.tsx index bb4bbdd..d60ab65 100644 --- a/job-tracker-ui/src/components/Correspondence.tsx +++ b/job-tracker-ui/src/components/Correspondence.tsx @@ -235,7 +235,7 @@ export default function Correspondence({ jobId }: { jobId: number }) { const deleteMessage = async (messageId: number) => { - if (!window.confirm("Remove this correspondence message?")) return; + if (!confirmAction("Remove this correspondence message?")) return; try { await api.delete(`/correspondence/${messageId}`); await load(); @@ -527,3 +527,8 @@ export default function Correspondence({ jobId }: { jobId: number }) { ); } +tions> + + + ); +} diff --git a/job-tracker-ui/src/components/UserManagementCard.tsx b/job-tracker-ui/src/components/UserManagementCard.tsx index 365e59a..fc4e8fd 100644 --- a/job-tracker-ui/src/components/UserManagementCard.tsx +++ b/job-tracker-ui/src/components/UserManagementCard.tsx @@ -5,6 +5,7 @@ import { Box, Button, Paper, TextField, Typography } from "@mui/material"; import { api } from "../api"; import { getAuthToken } from "../auth"; import { useToast } from "../toast"; +import { confirmAction } from "../dialogs"; type UserDto = { id: string; diff --git a/job-tracker-ui/src/dialogs.ts b/job-tracker-ui/src/dialogs.ts new file mode 100644 index 0000000..f91983c --- /dev/null +++ b/job-tracker-ui/src/dialogs.ts @@ -0,0 +1,7 @@ +export function confirmAction(message: string): boolean { + return window.confirm(message); +} + +export function promptForValue(message: string, defaultValue = ""): string | null { + return window.prompt(message, defaultValue); +} diff --git a/job-tracker-ui/src/pages/AdminUsersPage.tsx b/job-tracker-ui/src/pages/AdminUsersPage.tsx index a3d7981..4ba8771 100644 --- a/job-tracker-ui/src/pages/AdminUsersPage.tsx +++ b/job-tracker-ui/src/pages/AdminUsersPage.tsx @@ -98,7 +98,7 @@ export default function AdminUsersPage() { }; const remove = async (u: UserDto) => { - if (!window.confirm(`Delete user ${u.email || u.userName || u.id}?`)) return; + if (!confirmAction(`Delete user ${u.email || u.userName || u.id}?`)) return; try { await api.delete(`/users/${u.id}`); toast("User deleted.", "info");