Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions src/lib/components/git/repositories.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,12 @@
let isLoadingRepositories = $state(null);
let installationsMap = $state(null);
let offset = $state(0);
let connectingRepositoryId = $state<string | null>(null);
let loadRepositoriesRequestId = 0;
const limit = 5;

onMount(() => {
isLoadingRepositories = true;
loadInstallations();
});

Expand Down Expand Up @@ -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({
Expand All @@ -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)
Expand Down Expand Up @@ -186,10 +196,7 @@
debouncedLoadRepositories.cancel();
}}
bind:value={selectedInstallation} />
<InputSearch
placeholder="Search repositories"
bind:value={search}
disabled={!search && !$repositories?.repositories?.length} />
<InputSearch placeholder="Search repositories" bind:value={search} />
</Layout.Stack>
{/if}
</Layout.Stack>
Expand Down Expand Up @@ -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
</PinkButton.Button>
{/if}
Expand Down Expand Up @@ -305,7 +316,7 @@
<PaginationInline
{limit}
bind:offset
total={$repositories.total}
total={isLoadingRepositories ? 0 : $repositories.total}
hidePages={true}
on:change={loadRepositoryPage} />
</Layout.Stack>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<script lang="ts">
import { base } from '$app/paths';
import { SvgIcon } from '$lib/components';
import { page } from '$app/state';
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 { resolveRoute } from '$lib/stores/navigation';
import { installation, repository } from '$lib/stores/vcs';
import { Repositories } from '$lib/components/git';
import {
Expand All @@ -26,11 +26,7 @@
export let data;

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;
});
const wizardBase = resolveRoute('/(console)/project-[region]-[project]/functions', page.params);

let selectedRepository: string;

Expand All @@ -56,11 +52,19 @@
function connect(e: Models.ProviderRepository) {
trackEvent(Click.ConnectRepositoryClick, { from: 'cover' });
repository.set(e);
goto(`${wizardBase}/create-function/repository-${e.id}?installation=${$installation.$id}`);
goto(
resolveRoute(
'/(console)/project-[region]-[project]/functions/create-function/repository-[repository]',
{
...page.params,
repository: e.id
}
) + `?installation=${$installation.$id}`
);
}
</script>

<Wizard title="Create function" href={previousPage} column columnSize="l" hideFooter>
<Wizard title="Create function" href={wizardBase} column columnSize="l" hideFooter>
<Layout.Stack gap="l">
<Layout.GridFraction start={4} end={6} gap="l" rowSize="auto">
<Card.Base>
Expand Down Expand Up @@ -105,10 +109,13 @@
}}
{connect} />
</Layout.Stack>
{#if data.installations.total}
{#if $installation}
<Layout.Stack gap="l">
<Divider />
<Link variant="quiet" href="#/">
<Link
variant="quiet"
external
href={`https://github.com/settings/installations/${$installation.providerInstallationId}`}>
<Layout.Stack direction="row" gap="xs">
Missing a repository? check your permissions <Icon
icon={IconArrowSmRight} />
Expand Down Expand Up @@ -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}`}>
<Layout.Stack direction="row" gap="s" alignItems="center">
<Avatar size="xs" alt={template.name} empty={!template.name}>
<SvgIcon name={iconName} iconSize="small" />
Expand Down Expand Up @@ -168,7 +181,13 @@
<Card.Link
radius="s"
padding="xs"
href={`${wizardBase}/create-function/template-${template.id}`}
href={resolveRoute(
'/(console)/project-[region]-[project]/functions/create-function/template-[template]',
{
...page.params,
template: template.id
}
)}
on:click={() => {
trackEvent('click_connect_template', {
from: 'cover',
Expand Down Expand Up @@ -198,7 +217,12 @@
{/each}
</Layout.Grid>

<Link variant="quiet" href={`${wizardBase}/templates`}>
<Link
variant="quiet"
href={resolveRoute(
'/(console)/project-[region]-[project]/functions/templates',
page.params
)}>
<Layout.Stack direction="row" gap="xs">
Browse all templates <Icon icon={IconArrowSmRight} />
</Layout.Stack>
Expand All @@ -212,7 +236,10 @@
on:click={() => {
trackEvent('click_create_function_manual', { from: 'cover' });
}}
href={`${wizardBase}/create-function/manual`}>manually</Link>
href={resolveRoute(
'/(console)/project-[region]-[project]/functions/create-function/manual',
page.params
)}>manually</Link>
or using the CLI.
<Link href="https://appwrite.io/docs/products/functions/deployment" external
>Learn more</Link
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<script lang="ts">
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';
Expand All @@ -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);
}
</script>

<Wizard
title="Create site"
href={`${base}/project-${page.params.region}-${page.params.project}/sites/`}
href={resolveRoute('/(console)/project-[region]-[project]/sites', page.params)}
hideFooter>
{#if !!data?.installations?.total}
<Fieldset legend="Git repository">
Expand All @@ -52,7 +59,10 @@
</Typography.Text>
</Layout.Stack>
<Button
href={`${base}/project-${page.params.region}-${page.params.project}/sites/create-site/templates`}
href={resolveRoute(
'/(console)/project-[region]-[project]/sites/create-site/templates',
page.params
)}
secondary>View templates</Button>
{:else}
<Layout.Stack gap="s">
Expand All @@ -70,9 +80,12 @@
href="https://appwrite.io/docs/products/sites/deploy-from-git"
external
secondary>Docs</Button>
<Button
href={`https://github.com/${data.installations.installations[0].organization}`}
text>Go to GitHub</Button>
{#if $installation}
<Button
href={`https://github.com/settings/installations/${$installation.providerInstallationId}`}
external
text>Go to GitHub</Button>
{/if}
</Layout.Stack>
{/if}
</Layout.Stack>
Expand Down