Path: blob/main/components/dashboard/src/data/maintenance-mode/maintenance-notification-mutation.ts
2501 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 { useMutation, useQueryClient } from "@tanstack/react-query";7import { useCurrentOrg } from "../organizations/orgs-query";8import { organizationClient } from "../../service/public-api";9import { MaintenanceNotification } from "@gitpod/gitpod-protocol";10import { maintenanceNotificationQueryKey } from "./maintenance-notification-query";1112export interface SetMaintenanceNotificationArgs {13isEnabled: boolean;14customMessage?: string;15}1617export const useSetMaintenanceNotificationMutation = () => {18const { data: org } = useCurrentOrg();19const queryClient = useQueryClient();20const organizationId = org?.id ?? "";2122return useMutation<MaintenanceNotification, Error, SetMaintenanceNotificationArgs>({23mutationFn: async ({ isEnabled, customMessage }) => {24if (!organizationId) {25throw new Error("No organization selected");26}2728try {29const response = await organizationClient.setMaintenanceNotification({30organizationId,31isEnabled,32customMessage,33});3435const result: MaintenanceNotification = {36enabled: response.isEnabled,37message: response.message,38};3940return result;41} catch (error) {42console.error("Failed to set maintenance notification", error);43throw error;44}45},46onSuccess: (result) => {47// Update the cache48queryClient.setQueryData(maintenanceNotificationQueryKey(organizationId), result);49},50});51};525354