Skip to content

Commit 2ac948b

Browse files
committed
fix(settings): moves focus listener cleanup to component lifecycle
1 parent ed386dc commit 2ac948b

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/app/components/settings/SettingsPage.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ export default function SettingsPage() {
161161
// Save indicator
162162
const [showSaved, setShowSaved] = createSignal(false);
163163
let saveTimer: ReturnType<typeof setTimeout> | undefined;
164+
let pendingFocusHandler: (() => void) | undefined;
164165

165166
function saveWithFeedback(patch: Parameters<typeof updateConfig>[0]) {
166167
updateConfig(patch);
@@ -169,7 +170,12 @@ export default function SettingsPage() {
169170
saveTimer = setTimeout(() => setShowSaved(false), 1500);
170171
}
171172

172-
onCleanup(() => clearTimeout(saveTimer));
173+
onCleanup(() => {
174+
clearTimeout(saveTimer);
175+
if (pendingFocusHandler) {
176+
window.removeEventListener("focus", pendingFocusHandler);
177+
}
178+
});
173179

174180
// Local copies for org/repo editing (committed on blur/change)
175181
const [localOrgs, setLocalOrgs] = createSignal<string[]>(config.selectedOrgs);
@@ -222,13 +228,17 @@ export default function SettingsPage() {
222228

223229
function handleGrantOrgs() {
224230
window.open(buildOrgAccessUrl(), "_blank", "noopener");
225-
// Auto-merge newly accessible orgs when user returns from GitHub settings
231+
// Remove any prior focus listener before adding a new one (dedup on rapid clicks)
232+
if (pendingFocusHandler) {
233+
window.removeEventListener("focus", pendingFocusHandler);
234+
}
226235
const onFocus = () => {
227236
window.removeEventListener("focus", onFocus);
237+
pendingFocusHandler = undefined;
228238
void mergeNewOrgs();
229239
};
240+
pendingFocusHandler = onFocus;
230241
window.addEventListener("focus", onFocus);
231-
onCleanup(() => window.removeEventListener("focus", onFocus));
232242
}
233243

234244
function handleOrgsChange(orgs: string[]) {

0 commit comments

Comments
 (0)