Skip to content

Commit e1210bb

Browse files
committed
added debounce compoent instead of creating fix
1 parent 6f7a10e commit e1210bb

File tree

1 file changed

+16
-31
lines changed

1 file changed

+16
-31
lines changed

src/lib/components/git/repositories.svelte

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import Card from '../card.svelte';
2525
import SkeletonRepoList from './skeletonRepoList.svelte';
2626
import { onMount, untrack, onDestroy } from 'svelte';
27+
import { debounce } from '$lib/helpers/debounce';
2728
2829
let {
2930
action = $bindable('select'),
@@ -48,44 +49,30 @@
4849
let isLoadingRepositories = $state(null);
4950
let installationsMap = $state(null);
5051
51-
// Debounce and race condition handling
52-
let searchTimeout: ReturnType<typeof setTimeout> | null = null;
53-
let currentRequestId = 0;
54-
let lastResolvedRequestId = 0;
55-
5652
onMount(() => {
5753
loadInstallations();
5854
});
5955
56+
const debouncedLoadRepositories = debounce(
57+
async (installationId: string, searchTerm: string) => {
58+
isLoadingRepositories = true;
59+
try {
60+
await loadRepositories(installationId, searchTerm);
61+
} finally {
62+
isLoadingRepositories = false;
63+
}
64+
},
65+
300
66+
);
67+
6068
$effect(() => {
6169
if (selectedInstallation && search !== undefined) {
62-
if (searchTimeout) {
63-
clearTimeout(searchTimeout);
64-
}
65-
searchTimeout = setTimeout(() => {
66-
if (selectedInstallation) {
67-
isLoadingRepositories = true;
68-
const requestId = ++currentRequestId;
69-
loadRepositories(selectedInstallation, search)
70-
.then(() => {
71-
if (requestId > lastResolvedRequestId) {
72-
lastResolvedRequestId = requestId;
73-
isLoadingRepositories = false;
74-
}
75-
})
76-
.catch(() => {
77-
if (requestId > lastResolvedRequestId) {
78-
lastResolvedRequestId = requestId;
79-
isLoadingRepositories = false;
80-
}
81-
});
82-
}
83-
}, 300);
70+
debouncedLoadRepositories(selectedInstallation, search);
8471
}
8572
});
8673
8774
onDestroy(() => {
88-
if (searchTimeout) clearTimeout(searchTimeout);
75+
debouncedLoadRepositories.cancel?.();
8976
});
9077
9178
async function loadInstallations() {
@@ -188,9 +175,7 @@
188175
installationsMap.find((entry) => entry.$id === selectedInstallation)
189176
);
190177

191-
if (searchTimeout) {
192-
clearTimeout(searchTimeout);
193-
}
178+
debouncedLoadRepositories.cancel?.();
194179
}}
195180
bind:value={selectedInstallation} />
196181
<InputSearch

0 commit comments

Comments
 (0)