diff --git a/src/lib/components/git/repositories.svelte b/src/lib/components/git/repositories.svelte index d0dbaf8003..105ed8fb14 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} @@ -305,7 +316,7 @@ 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..42be5ca748 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 @@ -1,11 +1,11 @@ - + @@ -105,10 +109,13 @@ }} {connect} /> - {#if data.installations.total} + {#if $installation} - + Missing a repository? check your permissions @@ -140,7 +147,13 @@ runtime: template.name }); }} - href={`${wizardBase}/create-function/template-${starterTemplate.id}?runtime=${runtimeDetail.$id}`}> + href={resolveRoute( + '/(console)/project-[region]-[project]/functions/create-function/template-[template]', + { + ...page.params, + template: starterTemplate.id + } + ) + `?runtime=${runtimeDetail.$id}`}> @@ -168,7 +181,13 @@ { trackEvent('click_connect_template', { from: 'cover', @@ -198,7 +217,12 @@ {/each} - + Browse all templates @@ -212,7 +236,10 @@ on:click={() => { trackEvent('click_create_function_manual', { from: 'cover' }); }} - href={`${wizardBase}/create-function/manual`}>manually + href={resolveRoute( + '/(console)/project-[region]-[project]/functions/create-function/manual', + page.params + )}>manually or using the CLI. Learn more import { goto } from '$app/navigation'; - import { base } from '$app/paths'; import { page } from '$app/state'; import { Click, trackEvent } from '$lib/actions/analytics.js'; import Card from '$lib/components/card.svelte'; import { Repositories } from '$lib/components/git/index.js'; import Button from '$lib/elements/forms/button.svelte'; import { Wizard } from '$lib/layout'; + import { resolveRoute } from '$lib/stores/navigation.js'; import { installation, repository } from '$lib/stores/vcs.js'; import type { Models } from '@appwrite.io/console'; import { Fieldset, Layout, Typography } from '@appwrite.io/pink-svelte'; @@ -20,14 +20,21 @@ from: 'cover' }); repository.set(e); - const target = `${base}/project-${page.params.region}-${page.params.project}/sites/create-site/repositories/repository-${e.id}?installation=${$installation.$id}`; + const target = + resolveRoute( + '/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]', + { + ...page.params, + repository: e.id + } + ) + `?installation=${$installation.$id}`; goto(target); } {#if !!data?.installations?.total}
@@ -52,7 +59,10 @@ {:else} @@ -70,9 +80,12 @@ href="https://appwrite.io/docs/products/sites/deploy-from-git" external secondary>Docs - + {#if $installation} + + {/if} {/if}