Path: blob/main/components/dashboard/src/org-admin/MaintenanceModeCard.tsx
2499 views
/**1* Copyright (c) 2025 Gitpod GmbH. All rights reserved.2* Licensed under the GNU Affero General Public License (AGPL).3* See License.AGPL.txt in the project root for license information.4*/56import { FC } from "react";7import { useToast } from "../components/toasts/Toasts";8import { Button } from "@podkit/buttons/Button";9import { useMaintenanceMode } from "../data/maintenance-mode/maintenance-mode-query";10import { useSetMaintenanceModeMutation } from "../data/maintenance-mode/maintenance-mode-mutation";11import { ConfigurationSettingsField } from "../repositories/detail/ConfigurationSettingsField";12import { Heading3 } from "@podkit/typography/Headings";1314export const MaintenanceModeCard: FC = () => {15const { isMaintenanceMode, isLoading } = useMaintenanceMode();16const setMaintenanceModeMutation = useSetMaintenanceModeMutation();17const toast = useToast();1819const toggleMaintenanceMode = async () => {20try {21const newState = !isMaintenanceMode;22const result = await setMaintenanceModeMutation.mutateAsync({ enabled: newState });2324toast.toast({25message: `Maintenance mode ${result ? "enabled" : "disabled"}`,26type: "success",27});28} catch (error) {29console.error("Failed to toggle maintenance mode", error);30toast.toast({ message: "Failed to toggle maintenance mode", type: "error" });31}32};3334return (35<ConfigurationSettingsField>36<div className="flex justify-between items-center">37<div>38<Heading3>Maintenance Mode</Heading3>39<p className="text-pk-content-tertiary">40When enabled, users cannot start new workspaces and a notification is displayed.41</p>42</div>43<Button44variant={isMaintenanceMode ? "secondary" : "default"}45onClick={toggleMaintenanceMode}46disabled={isLoading}47>48{isLoading ? "Loading..." : isMaintenanceMode ? "Disable" : "Enable"}49</Button>50</div>51</ConfigurationSettingsField>52);53};545556