From 98f27e9b26c3d6f16a6a21b0b1b2d995414a665c Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Mon, 26 Jan 2026 15:04:29 +0530 Subject: [PATCH] Improve UX for repositories modal --- src/lib/components/git/repositories.svelte | 25 +++++++++++++------ .../functions/create-function/+page.svelte | 15 ++++++----- .../create-site/repositories/+page.svelte | 9 ++++--- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/lib/components/git/repositories.svelte b/src/lib/components/git/repositories.svelte index d0dbaf8003..e277e45ad9 100644 --- a/src/lib/components/git/repositories.svelte +++ b/src/lib/components/git/repositories.svelte @@ -49,9 +49,12 @@ let isLoadingRepositories = $state(null); let installationsMap = $state(null); let offset = $state(0); + let connectingRepositoryId = $state(null); + let loadRepositoriesRequestId = 0; const limit = 5; onMount(() => { + isLoadingRepositories = true; loadInstallations(); }); @@ -115,6 +118,8 @@ } async function loadRepositories(installationId: string, search: string) { + const requestId = ++loadRepositoriesRequestId; + const result = await sdk .forProject(page.params.region, page.params.project) .vcs.listRepositories({ @@ -125,6 +130,11 @@ queries: [Query.limit(limit), Query.offset(offset)] }); + // Stale request + if (requestId !== loadRepositoriesRequestId) { + return; + } + $repositories.repositories = product === 'functions' ? (result as unknown as Models.ProviderRepositoryRuntimeList) @@ -186,10 +196,7 @@ debouncedLoadRepositories.cancel(); }} bind:value={selectedInstallation} /> - + {/if} @@ -266,7 +273,11 @@ size="xs" variant="secondary" style="flex-shrink: 0;" - on:click={() => connect(repo)}> + disabled={!!connectingRepositoryId} + on:click={() => { + connectingRepositoryId = repo.id; + connect(repo); + }}> Connect {/if} @@ -300,12 +311,12 @@ alignItems="center" wrap="wrap"> - Total results: {$repositories.total} + Total results: {isLoadingRepositories ? 0 : $repositories.total} diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/+page.svelte index e902c28569..7a5351a2a3 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/+page.svelte @@ -5,7 +5,7 @@ import { Click, trackEvent } from '$lib/actions/analytics'; import type { Models } from '@appwrite.io/console'; import { isSelfHosted } from '$lib/system'; - import { afterNavigate, goto } from '$app/navigation'; + import { goto } from '$app/navigation'; import { installation, repository } from '$lib/stores/vcs'; import { Repositories } from '$lib/components/git'; import { @@ -27,10 +27,6 @@ const isVcsEnabled = $regionalConsoleVariables?._APP_VCS_ENABLED === true; const wizardBase = `${base}/project-${page.params.region}-${page.params.project}/functions`; - let previousPage: string = wizardBase; - afterNavigate(({ from }) => { - previousPage = from?.url?.pathname || previousPage; - }); let selectedRepository: string; @@ -60,7 +56,7 @@ } - + @@ -105,10 +101,13 @@ }} {connect} /> - {#if data.installations.total} + {#if $installation} - + Missing a repository? check your permissions diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/+page.svelte index 2e15b0b3a0..a445811269 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/+page.svelte @@ -70,9 +70,12 @@ href="https://appwrite.io/docs/products/sites/deploy-from-git" external secondary>Docs - + {#if $installation} + + {/if} {/if}