11import { useEffect , useMemo , useState } from "react" ;
22import type { Dispatch , SetStateAction } from "react" ;
3- import type { WorkspaceInfo } from "@/types" ;
3+ import type { AppSettings , WorkspaceInfo } from "@/types" ;
44import { normalizeWorktreeSetupScript } from "@settings/components/settingsViewHelpers" ;
55
66type UseSettingsEnvironmentsSectionArgs = {
7+ appSettings : AppSettings ;
8+ onUpdateAppSettings : ( next : AppSettings ) => Promise < void > ;
79 mainWorkspaces : WorkspaceInfo [ ] ;
810 onUpdateWorkspaceSettings : (
911 id : string ,
@@ -19,16 +21,22 @@ export type SettingsEnvironmentsSectionProps = {
1921 environmentDraftScript : string ;
2022 environmentSavedScript : string | null ;
2123 environmentDirty : boolean ;
24+ globalWorktreesFolderDraft : string ;
25+ globalWorktreesFolderSaved : string | null ;
26+ globalWorktreesFolderDirty : boolean ;
2227 worktreesFolderDraft : string ;
2328 worktreesFolderSaved : string | null ;
2429 worktreesFolderDirty : boolean ;
2530 onSetEnvironmentWorkspaceId : Dispatch < SetStateAction < string | null > > ;
2631 onSetEnvironmentDraftScript : Dispatch < SetStateAction < string > > ;
32+ onSetGlobalWorktreesFolderDraft : Dispatch < SetStateAction < string > > ;
2733 onSetWorktreesFolderDraft : Dispatch < SetStateAction < string > > ;
2834 onSaveEnvironmentSetup : ( ) => Promise < void > ;
2935} ;
3036
3137export const useSettingsEnvironmentsSection = ( {
38+ appSettings,
39+ onUpdateAppSettings,
3240 mainWorkspaces,
3341 onUpdateWorkspaceSettings,
3442} : UseSettingsEnvironmentsSectionArgs ) : SettingsEnvironmentsSectionProps => {
@@ -38,6 +46,12 @@ export const useSettingsEnvironmentsSection = ({
3846 const [ environmentLoadedWorkspaceId , setEnvironmentLoadedWorkspaceId ] = useState < string | null > ( null ) ;
3947 const [ environmentError , setEnvironmentError ] = useState < string | null > ( null ) ;
4048 const [ environmentSaving , setEnvironmentSaving ] = useState ( false ) ;
49+ const [ globalWorktreesFolderDraft , setGlobalWorktreesFolderDraft ] = useState (
50+ appSettings . globalWorktreesFolder ?? "" ,
51+ ) ;
52+ const [ globalWorktreesFolderSaved , setGlobalWorktreesFolderSaved ] = useState < string | null > (
53+ appSettings . globalWorktreesFolder ,
54+ ) ;
4155 const [ worktreesFolderDraft , setWorktreesFolderDraft ] = useState ( "" ) ;
4256 const [ worktreesFolderSaved , setWorktreesFolderSaved ] = useState < string | null > ( null ) ;
4357
@@ -63,8 +77,21 @@ export const useSettingsEnvironmentsSection = ({
6377 } , [ environmentDraftScript ] ) ;
6478
6579 const environmentDirty = environmentDraftNormalized !== environmentSavedScript ;
80+ const globalWorktreesFolderDirty =
81+ ( globalWorktreesFolderDraft . trim ( ) || null ) !== globalWorktreesFolderSaved ;
6682 const worktreesFolderDirty = ( worktreesFolderDraft . trim ( ) || null ) !== worktreesFolderSaved ;
6783
84+ useEffect ( ( ) => {
85+ if ( ! globalWorktreesFolderDirty && globalWorktreesFolderSaved !== appSettings . globalWorktreesFolder ) {
86+ setGlobalWorktreesFolderSaved ( appSettings . globalWorktreesFolder ) ;
87+ setGlobalWorktreesFolderDraft ( appSettings . globalWorktreesFolder ?? "" ) ;
88+ }
89+ } , [
90+ appSettings . globalWorktreesFolder ,
91+ globalWorktreesFolderDirty ,
92+ globalWorktreesFolderSaved ,
93+ ] ) ;
94+
6895 useEffect ( ( ) => {
6996 if ( ! environmentWorkspace ) {
7097 setEnvironmentWorkspaceId ( null ) ;
@@ -73,14 +100,16 @@ export const useSettingsEnvironmentsSection = ({
73100 setEnvironmentDraftScript ( "" ) ;
74101 setEnvironmentError ( null ) ;
75102 setEnvironmentSaving ( false ) ;
103+ setGlobalWorktreesFolderDraft ( appSettings . globalWorktreesFolder ?? "" ) ;
104+ setGlobalWorktreesFolderSaved ( appSettings . globalWorktreesFolder ) ;
76105 setWorktreesFolderDraft ( "" ) ;
77106 setWorktreesFolderSaved ( null ) ;
78107 return ;
79108 }
80109 if ( environmentWorkspaceId !== environmentWorkspace . id ) {
81110 setEnvironmentWorkspaceId ( environmentWorkspace . id ) ;
82111 }
83- } , [ environmentWorkspace , environmentWorkspaceId ] ) ;
112+ } , [ appSettings . globalWorktreesFolder , environmentWorkspace , environmentWorkspaceId ] ) ;
84113
85114 useEffect ( ( ) => {
86115 if ( ! environmentWorkspace ) return ;
@@ -114,16 +143,27 @@ export const useSettingsEnvironmentsSection = ({
114143 ] ) ;
115144
116145 const handleSaveEnvironmentSetup = async ( ) => {
117- if ( ! environmentWorkspace || environmentSaving ) return ;
146+ if ( environmentSaving ) return ;
118147 const nextScript = environmentDraftNormalized ;
148+ const nextGlobalFolder = globalWorktreesFolderDraft . trim ( ) || null ;
119149 const nextFolder = worktreesFolderDraft . trim ( ) || null ;
120150 setEnvironmentSaving ( true ) ;
121151 setEnvironmentError ( null ) ;
122152 try {
123- await onUpdateWorkspaceSettings ( environmentWorkspace . id , {
124- worktreeSetupScript : nextScript ,
125- worktreesFolder : nextFolder ,
126- } ) ;
153+ if ( nextGlobalFolder !== globalWorktreesFolderSaved ) {
154+ await onUpdateAppSettings ( {
155+ ...appSettings ,
156+ globalWorktreesFolder : nextGlobalFolder ,
157+ } ) ;
158+ }
159+ if ( environmentWorkspace ) {
160+ await onUpdateWorkspaceSettings ( environmentWorkspace . id , {
161+ worktreeSetupScript : nextScript ,
162+ worktreesFolder : nextFolder ,
163+ } ) ;
164+ }
165+ setGlobalWorktreesFolderSaved ( nextGlobalFolder ) ;
166+ setGlobalWorktreesFolderDraft ( nextGlobalFolder ?? "" ) ;
127167 setEnvironmentSavedScript ( nextScript ) ;
128168 setEnvironmentDraftScript ( nextScript ?? "" ) ;
129169 setWorktreesFolderSaved ( nextFolder ) ;
@@ -143,11 +183,15 @@ export const useSettingsEnvironmentsSection = ({
143183 environmentDraftScript,
144184 environmentSavedScript,
145185 environmentDirty,
186+ globalWorktreesFolderDraft,
187+ globalWorktreesFolderSaved,
188+ globalWorktreesFolderDirty,
146189 worktreesFolderDraft,
147190 worktreesFolderSaved,
148191 worktreesFolderDirty,
149192 onSetEnvironmentWorkspaceId : setEnvironmentWorkspaceId ,
150193 onSetEnvironmentDraftScript : setEnvironmentDraftScript ,
194+ onSetGlobalWorktreesFolderDraft : setGlobalWorktreesFolderDraft ,
151195 onSetWorktreesFolderDraft : setWorktreesFolderDraft ,
152196 onSaveEnvironmentSetup : handleSaveEnvironmentSetup ,
153197 } ;
0 commit comments