refactor(clone-dialog): generalize repository grouping and support gitea

Generalize the repository grouping logic so grouping is driven by a single
derived flag and not tied to a single provider. Replace the Azure-specific
group variable with a generic repositoryGroups value and use a shared
usesRepositoryGroups switch so grouping can be enabled for other providers.

- Add usesRepositoryGroups derived flag to centralize grouping logic
- Replace azure-only grouping with repositoryGroups and enable Gitea grouping
This commit is contained in:
2026-09-11 08:55:38 +02:00
parent d0dd79354a
commit 088cbc5e18
@@ -64,8 +64,9 @@
if (!query) return activeRepositories; if (!query) return activeRepositories;
return activeRepositories.filter((repository) => `${repository.fullName} ${repository.description}`.toLocaleLowerCase().includes(query)); return activeRepositories.filter((repository) => `${repository.fullName} ${repository.description}`.toLocaleLowerCase().includes(query));
}); });
const azureRepositoryGroups = $derived.by(() => { const usesRepositoryGroups = $derived(activeSource?.provider === "azure-devops" || activeSource?.provider === "gitea");
if (activeSource?.provider !== "azure-devops") return []; const repositoryGroups = $derived.by(() => {
if (!usesRepositoryGroups) return [];
const groups = new Map<string, GitIntegrationRepository[]>(); const groups = new Map<string, GitIntegrationRepository[]>();
for (const repository of filteredRepositories) { for (const repository of filteredRepositories) {
const separator = repository.fullName.indexOf("/"); const separator = repository.fullName.indexOf("/");
@@ -390,8 +391,8 @@
<div class="repository-state repository-state-error"><strong>{isGerman ? "Repositories konnten nicht geladen werden" : "Could not load repositories"}</strong><span>{repositoryError}</span></div> <div class="repository-state repository-state-error"><strong>{isGerman ? "Repositories konnten nicht geladen werden" : "Could not load repositories"}</strong><span>{repositoryError}</span></div>
{:else if filteredRepositories.length === 0} {:else if filteredRepositories.length === 0}
<div class="repository-state"><GitBranch size={20} /><span>{repositorySearch ? (isGerman ? "Keine passenden Repositories." : "No matching repositories.") : (isGerman ? "Keine Repositories gefunden." : "No repositories found.")}</span></div> <div class="repository-state"><GitBranch size={20} /><span>{repositorySearch ? (isGerman ? "Keine passenden Repositories." : "No matching repositories.") : (isGerman ? "Keine Repositories gefunden." : "No repositories found.")}</span></div>
{:else if activeSource?.provider === "azure-devops"} {:else if usesRepositoryGroups}
{#each azureRepositoryGroups as group (group.project)} {#each repositoryGroups as group (group.project)}
<section class="repository-project-group" aria-label={group.project}> <section class="repository-project-group" aria-label={group.project}>
<div class="repository-project-header"><span>{group.project}</span><em>{group.repositories.length}</em></div> <div class="repository-project-header"><span>{group.project}</span><em>{group.repositories.length}</em></div>
{#each group.repositories as repository (repository.id)} {#each group.repositories as repository (repository.id)}