gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/nodes/api/settings.mutate.ts · nightly
Source
1 78a3e64 Dawsh 2y ago import type { NodeType } from "@marzneshin/modules/nodes";
2 b15ff05 Mrdn 2y ago import { useMutation } from "@tanstack/react-query";
3 d636f3f Dawsh 2y ago import { fetch, queryClient } from "@marzneshin/common/utils";
4 b15ff05 Mrdn 2y ago import { toast } from "sonner";
5 b15ff05 Mrdn 2y ago import i18n from "@marzneshin/features/i18n";
6 f5c168d Mardin 2y ago import {
7 f5c168d Mardin 2y ago type NodeBackendSettingConfigFormat,
8 f5c168d Mardin 2y ago NodesSettingsQueryFetchKey,
9 f5c168d Mardin 2y ago } from "./settings.query";
10 b15ff05 Mrdn 2y ago
11 097061d Mrdn 2y ago interface UpdateNodesSettings {
12 f5c168d Mardin 2y ago node: NodeType;
13 f5c168d Mardin 2y ago backend: string;
14 f5c168d Mardin 2y ago config: string;
15 f5c168d Mardin 2y ago format: NodeBackendSettingConfigFormat;
16 097061d Mrdn 2y ago }
17 097061d Mrdn 2y ago
18 f5c168d Mardin 2y ago export async function fetchUpdateNodesSettings({
19 f5c168d Mardin 2y ago node,
20 f5c168d Mardin 2y ago backend,
21 f5c168d Mardin 2y ago config,
22 f5c168d Mardin 2y ago format,
23 f5c168d Mardin 2y ago }: UpdateNodesSettings): Promise<NodeType> {
24 f5c168d Mardin 2y ago return fetch(`/nodes/${node.id}/${backend}/config`, {
25 f5c168d Mardin 2y ago method: "put",
26 f5c168d Mardin 2y ago body: { config, format },
27 f5c168d Mardin 2y ago }).then((node) => {
28 b15ff05 Mrdn 2y ago return node;
29 b15ff05 Mrdn 2y ago });
30 b15ff05 Mrdn 2y ago }
31 b15ff05 Mrdn 2y ago
32 097061d Mrdn 2y ago const handleError = (error: Error, value: UpdateNodesSettings) => {
33 f5c168d Mardin 2y ago toast.error(i18n.t("events.update.error", { name: value.node.name }), {
34 f5c168d Mardin 2y ago description: error.message,
35 f5c168d Mardin 2y ago });
36 f5c168d Mardin 2y ago };
37 b15ff05 Mrdn 2y ago
38 b15ff05 Mrdn 2y ago const handleSuccess = (value: NodeType) => {
39 f5c168d Mardin 2y ago toast.success(i18n.t("events.update.success.title", { name: value.name }), {
40 f5c168d Mardin 2y ago description: i18n.t("events.update.success.desc"),
41 f5c168d Mardin 2y ago });
42 f5c168d Mardin 2y ago queryClient.invalidateQueries({ queryKey: [NodesSettingsQueryFetchKey] });
43 f5c168d Mardin 2y ago };
44 b15ff05 Mrdn 2y ago
45 f5c168d Mardin 2y ago const NodesSettingsUpdateFetchKey = ["nodes", "config"];
46 b15ff05 Mrdn 2y ago
47 b15ff05 Mrdn 2y ago export const useNodesSettingsMutation = () => {
48 b15ff05 Mrdn 2y ago return useMutation({
49 b15ff05 Mrdn 2y ago mutationKey: NodesSettingsUpdateFetchKey,
50 b15ff05 Mrdn 2y ago mutationFn: fetchUpdateNodesSettings,
51 b15ff05 Mrdn 2y ago onError: handleError,
52 b15ff05 Mrdn 2y ago onSuccess: handleSuccess,
53 f5c168d Mardin 2y ago });
54 f5c168d Mardin 2y ago };