mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-02 23:06:36 +08:00
47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
'use client';
|
|
|
|
import { useCallback, useState } from 'react';
|
|
import { toast } from 'sonner';
|
|
|
|
import type {
|
|
ProxyRouteItem,
|
|
ProxyRouteMutationPayload,
|
|
} from '@/lib/services/openflare';
|
|
import { ProxyRouteService } from '@/lib/services/openflare';
|
|
|
|
import {
|
|
buildPayloadFromRoute,
|
|
getErrorMessage,
|
|
} from '../../components/helpers';
|
|
|
|
export function useRouteSectionSave(
|
|
route: ProxyRouteItem,
|
|
onRouteUpdate: (route: ProxyRouteItem) => void,
|
|
onSavingChange?: (saving: boolean) => void,
|
|
) {
|
|
const [saving, setSaving] = useState(false);
|
|
|
|
const save = useCallback(
|
|
async (overrides: Partial<ProxyRouteMutationPayload>, message: string) => {
|
|
setSaving(true);
|
|
onSavingChange?.(true);
|
|
try {
|
|
const updated = await ProxyRouteService.update(
|
|
route.id,
|
|
buildPayloadFromRoute(route, overrides),
|
|
);
|
|
onRouteUpdate(updated);
|
|
toast.success(message);
|
|
} catch (error) {
|
|
toast.error('保存失败', { description: getErrorMessage(error) });
|
|
} finally {
|
|
setSaving(false);
|
|
onSavingChange?.(false);
|
|
}
|
|
},
|
|
[onRouteUpdate, onSavingChange, route],
|
|
);
|
|
|
|
return { saving, save };
|
|
}
|