Skip to content

Commit 9436833

Browse files
committed
fix: resolve useEffect dependency order issue in useGitRepository
Move event listener useEffects after callback definitions to prevent 'Cannot access before initialization' error. Event listeners now correctly reference refreshRepo and triggerDiffRefresh callbacks.
1 parent 2d2e9a6 commit 9436833

1 file changed

Lines changed: 46 additions & 45 deletions

File tree

apps/desktop/src/hooks/useGitRepository.ts

Lines changed: 46 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -60,51 +60,6 @@ export function useGitRepository(setAppStatus?: (s: AppStatus) => void) {
6060
[]
6161
)
6262

63-
// Listen for working directory file changes
64-
useEffect(() => {
65-
if (!currentDir) return
66-
67-
let unlisten: UnlistenFn | null = null
68-
const setup = async () => {
69-
unlisten = await listen<{ repoPath: string; changedFiles: string[] }>(
70-
'workdir-changed',
71-
(event) => {
72-
// Only react if WORKDIR is currently selected
73-
if (baseBranch === '__WORKDIR__' || compareBranch === '__WORKDIR__') {
74-
console.log('Working directory changed, refreshing diff...', event.payload.changedFiles)
75-
triggerDiffRefresh()
76-
}
77-
}
78-
)
79-
}
80-
void setup()
81-
82-
return () => {
83-
if (unlisten) void unlisten()
84-
}
85-
}, [currentDir, baseBranch, compareBranch, triggerDiffRefresh])
86-
87-
// Listen for branch/refs changes
88-
useEffect(() => {
89-
if (!currentDir) return
90-
91-
let unlisten: UnlistenFn | null = null
92-
const setup = async () => {
93-
unlisten = await listen<{ repoPath: string }>(
94-
'refs-changed',
95-
(event) => {
96-
console.log('Git refs changed, refreshing branch list...', event.payload)
97-
void refreshRepo()
98-
}
99-
)
100-
}
101-
void setup()
102-
103-
return () => {
104-
if (unlisten) void unlisten()
105-
}
106-
}, [currentDir, refreshRepo])
107-
10863
const loadRepoFromHandle = useCallback(async (path: string) => {
10964
setRepoStatus({ state: 'loading', message: 'Loading repository...' })
11065
setAppStatus?.({ state: 'LOADING', task: 'repo', message: 'Loading repository...', progress: 'indeterminate' })
@@ -189,6 +144,52 @@ export function useGitRepository(setAppStatus?: (s: AppStatus) => void) {
189144
setAppStatus?.({ state: 'IDLE' })
190145
}, [gitClient, setAppStatus])
191146

147+
// Listen for working directory file changes
148+
useEffect(() => {
149+
if (!currentDir) return
150+
151+
let unlisten: UnlistenFn | null = null
152+
const setup = async () => {
153+
unlisten = await listen<{ repoPath: string; changedFiles: string[] }>(
154+
'workdir-changed',
155+
(event) => {
156+
// Only react if WORKDIR is currently selected
157+
if (baseBranch === '__WORKDIR__' || compareBranch === '__WORKDIR__') {
158+
console.log('Working directory changed, refreshing diff...', event.payload.changedFiles)
159+
triggerDiffRefresh()
160+
}
161+
}
162+
)
163+
}
164+
void setup()
165+
166+
return () => {
167+
if (unlisten) void unlisten()
168+
}
169+
}, [currentDir, baseBranch, compareBranch, triggerDiffRefresh])
170+
171+
// Listen for branch/refs changes
172+
useEffect(() => {
173+
if (!currentDir) return
174+
175+
let unlisten: UnlistenFn | null = null
176+
const setup = async () => {
177+
unlisten = await listen<{ repoPath: string }>(
178+
'refs-changed',
179+
(event) => {
180+
console.log('Git refs changed, refreshing branch list...', event.payload)
181+
// Use refreshRepo to reload branches
182+
void refreshRepo()
183+
}
184+
)
185+
}
186+
void setup()
187+
188+
return () => {
189+
if (unlisten) void unlisten()
190+
}
191+
}, [currentDir, refreshRepo])
192+
192193
return {
193194
currentDir,
194195
repoStatus,

0 commit comments

Comments
 (0)