Skip to content

Commit 6344127

Browse files
authored
Merge pull request #2654 from appwrite/ser-504
2 parents 1b7299e + 1ab59eb commit 6344127

File tree

13 files changed

+172
-135
lines changed

13 files changed

+172
-135
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
},
2323
"dependencies": {
2424
"@ai-sdk/svelte": "^1.1.24",
25-
"@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@406d8be",
25+
"@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@9b32107",
2626
"@appwrite.io/pink-icons": "0.25.0",
2727
"@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@865e2fc",
2828
"@appwrite.io/pink-legacy": "^1.0.3",

pnpm-lock.yaml

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/lib/components/git/repositories.svelte

Lines changed: 126 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script lang="ts">
2-
import { EmptySearch, Paginator } from '$lib/components';
2+
import { EmptySearch, PaginationInline } from '$lib/components';
33
import { Button, InputSearch, InputSelect } from '$lib/elements/forms';
44
import { timeFromNow } from '$lib/helpers/date';
55
import { sdk } from '$lib/stores/sdk';
@@ -17,7 +17,7 @@
1717
import { IconLockClosed, IconPlus } from '@appwrite.io/pink-icons-svelte';
1818
import ConnectGit from './connectGit.svelte';
1919
import SvgIcon from '../svgIcon.svelte';
20-
import { VCSDetectionType, type Models } from '@appwrite.io/console';
20+
import { Query, VCSDetectionType, type Models } from '@appwrite.io/console';
2121
import { getFrameworkIcon } from '$lib/stores/sites';
2222
import { connectGitHub } from '$lib/stores/git';
2323
import { page } from '$app/state';
@@ -48,6 +48,8 @@
4848
let selectedInstallation = $state(null);
4949
let isLoadingRepositories = $state(null);
5050
let installationsMap = $state(null);
51+
let offset = $state(0);
52+
const limit = 5;
5153
5254
onMount(() => {
5355
loadInstallations();
@@ -65,8 +67,18 @@
6567
300
6668
);
6769
70+
const loadRepositoryPage = async () => {
71+
isLoadingRepositories = true;
72+
try {
73+
await loadRepositories(selectedInstallation, search);
74+
} finally {
75+
isLoadingRepositories = false;
76+
}
77+
};
78+
6879
$effect(() => {
6980
if (selectedInstallation && search !== undefined) {
81+
offset = 0; // reset offset to 0 when search changes
7082
debouncedLoadRepositories(selectedInstallation, search);
7183
}
7284
});
@@ -103,27 +115,23 @@
103115
}
104116
105117
async function loadRepositories(installationId: string, search: string) {
106-
if (product === 'functions') {
107-
$repositories.repositories = (
108-
(await sdk
109-
.forProject(page.params.region, page.params.project)
110-
.vcs.listRepositories({
111-
installationId,
112-
type: VCSDetectionType.Runtime,
113-
search: search || undefined
114-
})) as unknown as Models.ProviderRepositoryRuntimeList
115-
).runtimeProviderRepositories; //TODO: remove forced cast after backend fixes
116-
} else {
117-
$repositories.repositories = (
118-
(await sdk
119-
.forProject(page.params.region, page.params.project)
120-
.vcs.listRepositories({
121-
installationId,
122-
type: VCSDetectionType.Framework,
123-
search: search || undefined
124-
})) as unknown as Models.ProviderRepositoryFrameworkList
125-
).frameworkProviderRepositories;
126-
}
118+
const result = await sdk
119+
.forProject(page.params.region, page.params.project)
120+
.vcs.listRepositories({
121+
installationId,
122+
type:
123+
product === 'functions' ? VCSDetectionType.Runtime : VCSDetectionType.Framework,
124+
search: search || undefined,
125+
queries: [Query.limit(limit), Query.offset(offset)]
126+
});
127+
128+
$repositories.repositories =
129+
product === 'functions'
130+
? (result as unknown as Models.ProviderRepositoryRuntimeList)
131+
.runtimeProviderRepositories
132+
: (result as unknown as Models.ProviderRepositoryFrameworkList)
133+
.frameworkProviderRepositories; //TODO: remove forced cast after backend fixes
134+
$repositories.total = result.total;
127135
$repositories.search = search;
128136
$repositories.installationId = installationId;
129137
return $repositories.repositories;
@@ -188,94 +196,85 @@
188196
{#if selectedInstallation}
189197
<!-- manual installation change -->
190198
{#if isLoadingRepositories}
191-
<SkeletonRepoList />
192-
{:else if $repositories?.repositories?.length}
193-
<Paginator
194-
items={$repositories.repositories}
195-
hideFooter={$repositories.repositories?.length <= 6}
196-
limit={6}>
197-
{#snippet children(
198-
paginatedItems: Models.ProviderRepositoryRuntime[] &
199-
Models.ProviderRepositoryFramework[]
200-
)}
201-
<Table.Root columns={1} let:root>
202-
{#each paginatedItems as repo}
203-
<Table.Row.Base {root}>
204-
<Table.Cell {root}>
205-
<Layout.Stack direction="row" alignItems="center" gap="s">
206-
{#if action === 'select'}
207-
<input
208-
class="is-small u-margin-inline-end-8"
209-
type="radio"
210-
name="repositories"
211-
bind:group={selectedRepository}
212-
onchange={() => repository.set(repo)}
213-
value={repo.id} />
199+
<SkeletonRepoList count={limit} />
200+
{:else if $repositories.total > 0}
201+
<Table.Root columns={1} let:root>
202+
{#each $repositories.repositories as repo}
203+
<Table.Row.Base {root}>
204+
<Table.Cell {root}>
205+
<Layout.Stack direction="row" alignItems="center" gap="s">
206+
{#if action === 'select'}
207+
<input
208+
class="is-small u-margin-inline-end-8"
209+
type="radio"
210+
name="repositories"
211+
bind:group={selectedRepository}
212+
onchange={() => repository.set(repo)}
213+
value={repo.id} />
214+
{/if}
215+
{#if product === 'sites'}
216+
{#if 'framework' in repo && repo?.framework && repo.framework !== 'other'}
217+
<Avatar size="xs" alt={repo.name}>
218+
<SvgIcon
219+
name={getFrameworkIcon(repo.framework)}
220+
iconSize="small" />
221+
</Avatar>
222+
{:else}
223+
<Avatar size="xs" alt={repo.name} empty />
224+
{/if}
225+
{:else}
226+
{@const iconName =
227+
'runtime' in repo && repo?.runtime
228+
? repo.runtime.split('-')[0]
229+
: undefined}
230+
<Avatar size="xs" alt={repo.name} empty={!iconName}>
231+
{#if iconName}
232+
<SvgIcon name={iconName} iconSize="small" />
214233
{/if}
215-
{#if product === 'sites'}
216-
{#if repo?.framework && repo.framework !== 'other'}
217-
<Avatar size="xs" alt={repo.name}>
218-
<SvgIcon
219-
name={getFrameworkIcon(repo.framework)}
220-
iconSize="small" />
221-
</Avatar>
222-
{:else}
223-
<Avatar size="xs" alt={repo.name} empty />
224-
{/if}
225-
{:else}
226-
{@const iconName = repo?.runtime
227-
? repo.runtime.split('-')[0]
228-
: undefined}
229-
<Avatar size="xs" alt={repo.name} empty={!iconName}>
230-
{#if iconName}
231-
<SvgIcon name={iconName} iconSize="small" />
232-
{/if}
233-
</Avatar>
234-
{/if}
235-
<Layout.Stack
236-
direction="row"
237-
alignItems="center"
238-
gap="s"
239-
style="flex: 1; min-width: 0;">
240-
<Typography.Text
234+
</Avatar>
235+
{/if}
236+
<Layout.Stack
237+
direction="row"
238+
alignItems="center"
239+
gap="s"
240+
style="flex: 1; min-width: 0;">
241+
<Typography.Text
242+
truncate
243+
color="--fgcolor-neutral-secondary"
244+
style="flex: 1; min-width: 0;">
245+
{repo.name}
246+
</Typography.Text>
247+
{#if repo.private}
248+
<Icon
249+
size="s"
250+
icon={IconLockClosed}
251+
color="--fgcolor-neutral-tertiary" />
252+
{/if}
253+
{#if !$isSmallViewport}
254+
<time datetime={repo.pushedAt}>
255+
<Typography.Caption
256+
variant="400"
241257
truncate
242-
color="--fgcolor-neutral-secondary"
243-
style="flex: 1; min-width: 0;">
244-
{repo.name}
245-
</Typography.Text>
246-
{#if repo.private}
247-
<Icon
248-
size="s"
249-
icon={IconLockClosed}
250-
color="--fgcolor-neutral-tertiary" />
251-
{/if}
252-
{#if !$isSmallViewport}
253-
<time datetime={repo.pushedAt}>
254-
<Typography.Caption
255-
variant="400"
256-
truncate
257-
color="--fgcolor-neutral-tertiary">
258-
{timeFromNow(repo.pushedAt)}
259-
</Typography.Caption>
260-
</time>
261-
{/if}
262-
</Layout.Stack>
263-
{#if action === 'button'}
264-
<PinkButton.Button
265-
size="xs"
266-
variant="secondary"
267-
style="flex-shrink: 0;"
268-
on:click={() => connect(repo)}>
269-
Connect
270-
</PinkButton.Button>
271-
{/if}
272-
</Layout.Stack>
273-
</Table.Cell>
274-
</Table.Row.Base>
275-
{/each}
276-
</Table.Root>
277-
{/snippet}
278-
</Paginator>
258+
color="--fgcolor-neutral-tertiary">
259+
{timeFromNow(repo.pushedAt)}
260+
</Typography.Caption>
261+
</time>
262+
{/if}
263+
</Layout.Stack>
264+
{#if action === 'button'}
265+
<PinkButton.Button
266+
size="xs"
267+
variant="secondary"
268+
style="flex-shrink: 0;"
269+
on:click={() => connect(repo)}>
270+
Connect
271+
</PinkButton.Button>
272+
{/if}
273+
</Layout.Stack>
274+
</Table.Cell>
275+
</Table.Row.Base>
276+
{/each}
277+
</Table.Root>
279278
{:else if search}
280279
<EmptySearch hidePages hidePagination bind:search target="repositories">
281280
<svelte:fragment slot="actions">
@@ -293,6 +292,24 @@
293292
</Layout.Stack>
294293
</Card>
295294
{/if}
295+
296+
{#if isLoadingRepositories || $repositories.total > 0}
297+
<Layout.Stack
298+
direction="row"
299+
justifyContent="space-between"
300+
alignItems="center"
301+
wrap="wrap">
302+
<Typography.Text variant="m-400" color="--fgcolor-neutral-secondary">
303+
Total results: {$repositories.total}
304+
</Typography.Text>
305+
<PaginationInline
306+
{limit}
307+
bind:offset
308+
total={$repositories.total}
309+
hidePages={true}
310+
on:change={loadRepositoryPage} />
311+
</Layout.Stack>
312+
{/if}
296313
{/if}
297314
</Layout.Stack>
298315
{:else}

src/lib/components/git/skeletonRepoList.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
<script lang="ts">
22
import { Layout, Table, Skeleton } from '@appwrite.io/pink-svelte';
3+
4+
const { count = 4 }: { count?: number } = $props();
35
</script>
46

57
<Table.Root columns={1} let:root>
6-
{#each Array(4) as _}
8+
{#each Array(count) as _}
79
<Table.Row.Base {root}>
810
<Table.Cell {root}>
911
<Layout.Stack direction="row" alignItems="center">

src/routes/(console)/project-[region]-[project]/functions/create-function/deploy/+page.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import { Fieldset, Layout, Icon, Input, Tag } from '@appwrite.io/pink-svelte';
1212
import { IconGithub, IconPencil } from '@appwrite.io/pink-icons-svelte';
1313
import { onMount } from 'svelte';
14-
import { ID, Runtime, Type } from '@appwrite.io/console';
14+
import { ID, Runtime, TemplateReferenceType } from '@appwrite.io/console';
1515
import { CustomId } from '$lib/components';
1616
import { getIconFromRuntime } from '$lib/stores/runtimes';
1717
import { regionalConsoleVariables } from '$routes/(console)/project-[region]-[project]/store';
@@ -134,7 +134,7 @@
134134
repository: data.repository.name,
135135
owner: data.repository.owner,
136136
rootDirectory: rootDir || '.',
137-
type: Type.Tag,
137+
type: TemplateReferenceType.Tag,
138138
reference: latestTag ?? '1.0.0',
139139
activate: true
140140
});

src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import { installation, repository } from '$lib/stores/vcs';
1111
import { Layout } from '@appwrite.io/pink-svelte';
1212
import { writable } from 'svelte/store';
13-
import { ID, Runtime, VCSDeploymentType, VCSDetectionType } from '@appwrite.io/console';
13+
import { ID, Runtime, VCSReferenceType, VCSDetectionType } from '@appwrite.io/console';
1414
import type { Models } from '@appwrite.io/console';
1515
import { onMount } from 'svelte';
1616
import Details from '../(components)/details.svelte';
@@ -132,7 +132,7 @@
132132
.forProject(page.params.region, page.params.project)
133133
.functions.createVcsDeployment({
134134
functionId: func.$id,
135-
type: VCSDeploymentType.Branch,
135+
type: VCSReferenceType.Branch,
136136
reference: branch,
137137
activate: true
138138
});

0 commit comments

Comments
 (0)