diff --git a/src/lib/stores/oauth-providers.ts b/src/lib/stores/oauth-providers.ts index 44a1777f4..22df4b17b 100644 --- a/src/lib/stores/oauth-providers.ts +++ b/src/lib/stores/oauth-providers.ts @@ -27,7 +27,7 @@ export const oAuthProviders: Record = { apple: { name: 'Apple', icon: 'apple', - docs: 'https://developer.apple.com/', + docs: 'https://developer.apple.com/sign-in-with-apple/', component: Apple }, auth0: { diff --git a/src/lib/stores/uploader.ts b/src/lib/stores/uploader.ts index ef848232c..8a04eae8a 100644 --- a/src/lib/stores/uploader.ts +++ b/src/lib/stores/uploader.ts @@ -1,4 +1,4 @@ -import { Client, ID, type Models, Sites, Storage } from '@appwrite.io/console'; +import { Client, Functions, ID, type Models, Sites, Storage } from '@appwrite.io/console'; import { writable } from 'svelte/store'; import { getApiEndpoint } from '$lib/stores/sdk'; import { page } from '$app/state'; @@ -32,6 +32,13 @@ const temporarySites = (region: string, projectId: string) => { return new Sites(clientProject); }; +const temporaryFunctions = (region: string, projectId: string) => { + const clientProject = new Client().setMode('admin'); + const endpoint = getApiEndpoint(region); + clientProject.setEndpoint(endpoint).setProject(projectId); + return new Functions(clientProject); +}; + const createUploader = () => { const { subscribe, set, update } = writable({ isOpen: false, @@ -110,7 +117,19 @@ const createUploader = () => { newFile.status = 'success'; updateFile(newFile.$id, newFile); }, - uploadSiteDeployment: async (siteId: string, code: File) => { + uploadSiteDeployment: async ({ + siteId, + code, + buildCommand, + installCommand, + outputDirectory + }: { + siteId: string; + code: File; + buildCommand?: string; + installCommand?: string; + outputDirectory?: string; + }) => { const newDeployment: UploaderFile = { $id: '', resourceId: siteId, @@ -132,6 +151,49 @@ const createUploader = () => { siteId, code, activate: true, + buildCommand, + installCommand, + outputDirectory, + onProgress: (progress) => { + newDeployment.$id = progress.$id; + newDeployment.progress = progress.progress; + newDeployment.status = progress.progress === 100 ? 'success' : 'pending'; + updateFile(progress.$id, newDeployment); + } + }); + newDeployment.$id = uploadedFile.$id; + newDeployment.progress = 100; + newDeployment.status = 'success'; + updateFile(newDeployment.$id, newDeployment); + }, + uploadFunctionDeployment: async ({ + functionId, + code + }: { + functionId: string; + code: File; + }) => { + const newDeployment: UploaderFile = { + $id: '', + resourceId: functionId, + name: code.name, + size: code.size, + progress: 0, + status: 'pending' + }; + update((n) => { + n.isOpen = true; + n.isCollapsed = false; + n.files.unshift(newDeployment); + return n; + }); + const uploadedFile = await temporaryFunctions( + page.params.region, + page.params.project + ).createDeployment({ + functionId, + code, + activate: true, onProgress: (progress) => { newDeployment.$id = progress.$id; newDeployment.progress = progress.progress; diff --git a/src/routes/(console)/organization-[organization]/+page.ts b/src/routes/(console)/organization-[organization]/+page.ts index a0e3ccc3c..d05d1945e 100644 --- a/src/routes/(console)/organization-[organization]/+page.ts +++ b/src/routes/(console)/organization-[organization]/+page.ts @@ -1,4 +1,5 @@ import { Query } from '@appwrite.io/console'; +import { isCloud } from '$lib/system'; import { sdk } from '$lib/stores/sdk'; import { getLimit, getPage, getSearch, pageToOffset } from '$lib/helpers/load'; import { CARD_LIMIT, Dependencies } from '$lib/constants'; @@ -23,54 +24,56 @@ export const load: PageLoad = async ({ params, url, route, depends, parent }) => const archivedPage = Number.isFinite(archivedPageRaw) && archivedPageRaw > 0 ? archivedPageRaw : 1; const archivedOffset = pageToOffset(archivedPage, limit); - + const searchQueries = search - ? [Query.or([Query.search('search', search), Query.contains('labels', search)])] + ? [Query.or([Query.search('search', search), Query.contains('labels', search)])]; + const commonQueries = [Query.equal('teamId', params.organization)]; + const activeQueries = isCloud + ? [Query.or([Query.equal('status', 'active'), Query.isNull('status')])] : []; const [activeProjects, archivedProjects, activeTotal, archivedTotal] = await Promise.all([ sdk.forConsole.projects.list({ queries: [ Query.offset(offset), - Query.equal('teamId', params.organization), - Query.or([Query.equal('status', 'active'), Query.isNull('status')]), Query.limit(limit), Query.orderDesc(''), - ...searchQueries + ...commonQueries, + ...searchQueries, + ...activeQueries ] }), + isCloud + ? sdk.forConsole.projects.list({ + queries: [ + Query.offset(archivedOffset), + Query.limit(limit), + Query.orderDesc(''), + ...commonQueries, + ...searchQueries, + Query.equal('status', 'archived') + ] + }) + : Promise.resolve({ projects: [], total: 0 }), sdk.forConsole.projects.list({ - queries: [ - Query.offset(archivedOffset), - Query.equal('teamId', params.organization), - Query.equal('status', 'archived'), - Query.limit(limit), - Query.orderDesc(''), - ...searchQueries - ] + queries: [...commonQueries, ...activeQueries, ...searchQueries] }), - sdk.forConsole.projects.list({ - queries: [ - Query.equal('teamId', params.organization), - Query.or([Query.equal('status', 'active'), Query.isNull('status')]), - ...searchQueries - ] - }), - sdk.forConsole.projects.list({ - queries: [ - Query.equal('teamId', params.organization), - Query.equal('status', 'archived'), - ...searchQueries - ] - }) + isCloud + ? sdk.forConsole.projects.list({ + queries: [...commonQueries, ...searchQueries, Query.equal('status', 'archived')], + search: search || undefined + }) + : Promise.resolve({ projects: [], total: 0 }) ]); // set `default` if no region! for (const project of activeProjects.projects) { project.region ??= 'default'; } - for (const project of archivedProjects.projects) { - project.region ??= 'default'; + if (isCloud) { + for (const project of archivedProjects.projects) { + project.region ??= 'default'; + } } return { diff --git a/src/routes/(console)/project-[region]-[project]/+layout.svelte b/src/routes/(console)/project-[region]-[project]/+layout.svelte index 426821259..eeeff2dd7 100644 --- a/src/routes/(console)/project-[region]-[project]/+layout.svelte +++ b/src/routes/(console)/project-[region]-[project]/+layout.svelte @@ -124,7 +124,7 @@