|
1 | | -import { useEffect, useMemo, useState } from "react"; |
| 1 | +import { useEffect, useMemo, useRef, useState } from "react"; |
2 | 2 | import type { Dispatch, SetStateAction } from "react"; |
3 | 3 | import type { AppSettings, WorkspaceInfo } from "@/types"; |
4 | 4 | import { normalizeWorktreeSetupScript } from "@settings/components/settingsViewHelpers"; |
@@ -54,6 +54,7 @@ export const useSettingsEnvironmentsSection = ({ |
54 | 54 | ); |
55 | 55 | const [worktreesFolderDraft, setWorktreesFolderDraft] = useState(""); |
56 | 56 | const [worktreesFolderSaved, setWorktreesFolderSaved] = useState<string | null>(null); |
| 57 | + const lastGlobalWorktreesFolderProp = useRef(appSettings.globalWorktreesFolder); |
57 | 58 |
|
58 | 59 | const environmentWorkspace = useMemo(() => { |
59 | 60 | if (mainWorkspaces.length === 0) return null; |
@@ -82,15 +83,16 @@ export const useSettingsEnvironmentsSection = ({ |
82 | 83 | const worktreesFolderDirty = (worktreesFolderDraft.trim() || null) !== worktreesFolderSaved; |
83 | 84 |
|
84 | 85 | useEffect(() => { |
85 | | - if (!globalWorktreesFolderDirty && globalWorktreesFolderSaved !== appSettings.globalWorktreesFolder) { |
| 86 | + const previousGlobalWorktreesFolder = lastGlobalWorktreesFolderProp.current; |
| 87 | + lastGlobalWorktreesFolderProp.current = appSettings.globalWorktreesFolder; |
| 88 | + if (previousGlobalWorktreesFolder === appSettings.globalWorktreesFolder) { |
| 89 | + return; |
| 90 | + } |
| 91 | + if (!globalWorktreesFolderDirty) { |
86 | 92 | setGlobalWorktreesFolderSaved(appSettings.globalWorktreesFolder); |
87 | 93 | setGlobalWorktreesFolderDraft(appSettings.globalWorktreesFolder ?? ""); |
88 | 94 | } |
89 | | - }, [ |
90 | | - appSettings.globalWorktreesFolder, |
91 | | - globalWorktreesFolderDirty, |
92 | | - globalWorktreesFolderSaved, |
93 | | - ]); |
| 95 | + }, [appSettings.globalWorktreesFolder, globalWorktreesFolderDirty]); |
94 | 96 |
|
95 | 97 | useEffect(() => { |
96 | 98 | if (!environmentWorkspace) { |
@@ -147,28 +149,29 @@ export const useSettingsEnvironmentsSection = ({ |
147 | 149 | const nextScript = environmentDraftNormalized; |
148 | 150 | const nextGlobalFolder = globalWorktreesFolderDraft.trim() || null; |
149 | 151 | const nextFolder = worktreesFolderDraft.trim() || null; |
| 152 | + const globalWorktreesFolderChanged = nextGlobalFolder !== globalWorktreesFolderSaved; |
150 | 153 | const workspaceSettingsDirty = environmentDirty || worktreesFolderDirty; |
151 | 154 | setEnvironmentSaving(true); |
152 | 155 | setEnvironmentError(null); |
153 | 156 | try { |
154 | | - if (nextGlobalFolder !== globalWorktreesFolderSaved) { |
| 157 | + if (globalWorktreesFolderChanged) { |
155 | 158 | await onUpdateAppSettings({ |
156 | 159 | ...appSettings, |
157 | 160 | globalWorktreesFolder: nextGlobalFolder, |
158 | 161 | }); |
| 162 | + setGlobalWorktreesFolderSaved(nextGlobalFolder); |
| 163 | + setGlobalWorktreesFolderDraft(nextGlobalFolder ?? ""); |
159 | 164 | } |
160 | 165 | if (environmentWorkspace && workspaceSettingsDirty) { |
161 | 166 | await onUpdateWorkspaceSettings(environmentWorkspace.id, { |
162 | 167 | worktreeSetupScript: nextScript, |
163 | 168 | worktreesFolder: nextFolder, |
164 | 169 | }); |
| 170 | + setEnvironmentSavedScript(nextScript); |
| 171 | + setEnvironmentDraftScript(nextScript ?? ""); |
| 172 | + setWorktreesFolderSaved(nextFolder); |
| 173 | + setWorktreesFolderDraft(nextFolder ?? ""); |
165 | 174 | } |
166 | | - setGlobalWorktreesFolderSaved(nextGlobalFolder); |
167 | | - setGlobalWorktreesFolderDraft(nextGlobalFolder ?? ""); |
168 | | - setEnvironmentSavedScript(nextScript); |
169 | | - setEnvironmentDraftScript(nextScript ?? ""); |
170 | | - setWorktreesFolderSaved(nextFolder); |
171 | | - setWorktreesFolderDraft(nextFolder ?? ""); |
172 | 175 | } catch (error) { |
173 | 176 | setEnvironmentError(error instanceof Error ? error.message : String(error)); |
174 | 177 | } finally { |
|
0 commit comments