Selaa lähdekoodia

fix(xray): clear dirty state after saving unchanged config

Editing an outbound and re-saving it without real changes left the top Save button stuck enabled, and clicking it never cleared it. The form re-normalizes values into deeply-equal config, so react-query keeps the same configQuery.data reference on refetch and the seed effect that resets the dirty baseline never re-runs. Advance the baseline to the persisted value in saveMut.onSuccess instead of relying solely on the refetch.
MHSanaei 1 päivä sitten
vanhempi
sitoutus
b9612f1326
1 muutettua tiedostoa jossa 15 lisäystä ja 7 poistoa
  1. 15 7
      frontend/src/hooks/useXraySetting.ts

+ 15 - 7
frontend/src/hooks/useXraySetting.ts

@@ -197,13 +197,21 @@ export function useXraySetting(): UseXraySettingResult {
   }, [queryClient]);
 
   const saveMut = useMutation({
-    mutationFn: async () =>
-      HttpUtil.post('/panel/xray/update', {
-        xraySetting: xraySettingRef.current,
-        outboundTestUrl: outboundTestUrlRef.current || DEFAULT_TEST_URL,
-      }),
-    onSuccess: (msg) => {
-      if (msg?.success) queryClient.invalidateQueries({ queryKey: keys.xray.config() });
+    mutationFn: async () => {
+      const sentXraySetting = xraySettingRef.current;
+      const sentTestUrl = outboundTestUrlRef.current || DEFAULT_TEST_URL;
+      const msg = await HttpUtil.post('/panel/xray/update', {
+        xraySetting: sentXraySetting,
+        outboundTestUrl: sentTestUrl,
+      });
+      return { msg, sentXraySetting, sentTestUrl };
+    },
+    onSuccess: ({ msg, sentXraySetting, sentTestUrl }) => {
+      if (!msg?.success) return;
+      oldXraySettingRef.current = sentXraySetting;
+      oldOutboundTestUrlRef.current = sentTestUrl;
+      setSaveDisabled(true);
+      queryClient.invalidateQueries({ queryKey: keys.xray.config() });
     },
   });