diff --git a/client/src/Pages/StatusPage/Create/Components/Tabs/index.jsx b/client/src/Pages/StatusPage/Create/Components/Tabs/index.jsx index 936a22130..60d86e1c9 100644 --- a/client/src/Pages/StatusPage/Create/Components/Tabs/index.jsx +++ b/client/src/Pages/StatusPage/Create/Components/Tabs/index.jsx @@ -1,6 +1,6 @@ // Components import { TabContext } from "@mui/lab"; -import { Tab, useTheme } from "@mui/material"; +import { Tab } from "@mui/material"; import Settings from "./Settings"; import Content from "./Content"; @@ -22,8 +22,12 @@ const Tabs = ({ tab, setTab, TAB_LIST, + handleDelete, + isDeleteOpen, + setIsDeleteOpen, + isDeleting, + isLoading, }) => { - const theme = useTheme(); return ( - {TAB_LIST.map((tabLabel, idx) => ( + {TAB_LIST.map((tabLabel) => ( ) : ( { //Local state const [tab, setTab] = useState(0); const [progress, setProgress] = useState({ value: 0, isLoading: false }); + const [isDeleteOpen, setIsDeleteOpen] = useState(false); const [form, setForm] = useState({ isPublished: false, companyName: "", @@ -52,13 +54,13 @@ const CreateStatusPage = () => { //Utils const theme = useTheme(); const [monitors, isLoading, networkError] = useMonitorsFetch(); - const [createStatusPage, createStatusIsLoading, createStatusPageNetworkError] = - useCreateStatusPage(isCreate); + const [createStatusPage] = useCreateStatusPage(isCreate); const navigate = useNavigate(); const { t } = useTranslation(); - const [statusPage, statusPageMonitors, statusPageIsLoading, statusPageNetworkError] = + const [statusPage, statusPageMonitors, statusPageIsLoading, , fetchStatusPage] = useStatusPageFetch(isCreate, url); + const [deleteStatusPage, isDeleting] = useStatusPageDelete(fetchStatusPage, url); console.log(JSON.stringify(form, null, 2)); // Handlers @@ -124,6 +126,19 @@ const CreateStatusPage = () => { setProgress({ value: 0, isLoading: false }); }; + /** + * Handle status page deletion with optimistic UI update + * Immediately navigates away without waiting for the deletion to complete + * to prevent unnecessary network requests for the deleted page + */ + const handleDelete = async () => { + setIsDeleteOpen(false); + // Start deletion process but don't wait for it + deleteStatusPage(); + // Immediately navigate away to prevent additional fetches for the deleted page + navigate("/status"); + }; + const handleSubmit = async () => { let toSubmit = { ...form, @@ -137,9 +152,7 @@ const CreateStatusPage = () => { const success = await createStatusPage({ form }); if (success) { createToast({ - body: isCreate - ? "Status page created successfully" - : "Status page updated successfully", + body: isCreate ? t("statusPage.createSuccess") : t("statusPage.updateSuccess"), }); navigate(`/status/uptime/${form.url}`); } @@ -162,7 +175,7 @@ const CreateStatusPage = () => { // If we get -1, there's an unknown error if (errorTabs[0] === -1) { - createToast({ body: "Unknown error" }); + createToast({ body: t("common.toasts.unknownError") }); return; } @@ -223,6 +236,37 @@ const CreateStatusPage = () => { // Load fields return ( + + {!isCreate && ( + + + setIsDeleteOpen(false)} + open={isDeleteOpen} + confirmationButtonLabel={t("deleteStatusPageConfirm")} + description={t("deleteStatusPageDescription")} + isLoading={isDeleting || statusPageIsLoading} + /> + + )} { removeLogo={removeLogo} tab={tab} setTab={setTab} - TAB_LIST={TAB_LIST} + TAB_LIST={[ + t("statusPage.generalSettings", "General settings"), + t("statusPage.contents", "Contents"), + ]} isCreate={isCreate} + handleDelete={handleDelete} + isDeleteOpen={isDeleteOpen} + setIsDeleteOpen={setIsDeleteOpen} + isDeleting={isDeleting} + isLoading={statusPageIsLoading} /> { +const Controls = ({ url, type }) => { const theme = useTheme(); const { t } = useTranslation(); const location = useLocation(); @@ -27,16 +27,6 @@ const Controls = ({ isDeleteOpen, setIsDeleteOpen, isDeleting, url, type }) => { direction="row" gap={theme.spacing(2)} > - - -