{#if command.ctrl}
{isMac() ? '⌘' : 'ctrl'}
diff --git a/src/routes/console/+layout.svelte b/src/routes/console/+layout.svelte
index ebc8a9eba5..97155286fe 100644
--- a/src/routes/console/+layout.svelte
+++ b/src/routes/console/+layout.svelte
@@ -30,7 +30,8 @@
component: AI
});
},
- keys: ['a', 'i']
+ keys: ['a', 'i'],
+ icon: 'light-bulb'
},
{
label: 'Go to Account',
diff --git a/src/routes/console/organization-[organization]/+page.svelte b/src/routes/console/organization-[organization]/+page.svelte
index e7e31843ee..7eb42b7e24 100644
--- a/src/routes/console/organization-[organization]/+page.svelte
+++ b/src/routes/console/organization-[organization]/+page.svelte
@@ -2,7 +2,7 @@
import { goto } from '$app/navigation';
import { base } from '$app/paths';
import { page } from '$app/stores';
- import { Command, registerCommands } from '$lib/commandCenter';
+ import { type Command, registerCommands } from '$lib/commandCenter';
import { CardContainer, Empty, GridItem1, Heading, PaginationWithLimit } from '$lib/components';
import { Pill } from '$lib/elements';
import { Button } from '$lib/elements/forms';
@@ -63,7 +63,8 @@
},
keys: ['c'],
disabled: showCreate,
- group: 'project'
+ group: 'project',
+ icon: 'plus'
}
]);
diff --git a/src/routes/console/project-[project]/auth/+page.svelte b/src/routes/console/project-[project]/auth/+page.svelte
index 60ff10d36d..d244a7c1cf 100644
--- a/src/routes/console/project-[project]/auth/+page.svelte
+++ b/src/routes/console/project-[project]/auth/+page.svelte
@@ -45,7 +45,8 @@
},
keys: ['c'],
disabled: showCreate,
- group: 'auth'
+ group: 'auth',
+ icon: 'plus'
},
{
label: 'Go to Overview',
diff --git a/src/routes/console/project-[project]/databases/+page.svelte b/src/routes/console/project-[project]/databases/+page.svelte
index 6175f1a051..b76da7f29a 100644
--- a/src/routes/console/project-[project]/databases/+page.svelte
+++ b/src/routes/console/project-[project]/databases/+page.svelte
@@ -31,7 +31,8 @@
showCreate = true;
},
keys: ['c'],
- disabled: showCreate
+ disabled: showCreate,
+ icon: 'plus'
}
]);
diff --git a/src/routes/console/project-[project]/functions/+page.svelte b/src/routes/console/project-[project]/functions/+page.svelte
index 341eeec1b0..e043782d48 100644
--- a/src/routes/console/project-[project]/functions/+page.svelte
+++ b/src/routes/console/project-[project]/functions/+page.svelte
@@ -40,7 +40,8 @@
label: 'Create function',
callback: openWizard,
keys: ['c'],
- disabled: $wizard.show
+ disabled: $wizard.show,
+ icon: 'plus'
}
]);
diff --git a/src/routes/console/project-[project]/overview/platforms/+page.svelte b/src/routes/console/project-[project]/overview/platforms/+page.svelte
index 959aafe085..2930bbd445 100644
--- a/src/routes/console/project-[project]/overview/platforms/+page.svelte
+++ b/src/routes/console/project-[project]/overview/platforms/+page.svelte
@@ -76,7 +76,8 @@
{
label: 'Create Web App',
callback: () => addPlatform(Platform.Web),
- keys: ['c']
+ keys: ['c'],
+ icon: 'plus'
}
]);
diff --git a/src/routes/console/project-[project]/storage/+page.svelte b/src/routes/console/project-[project]/storage/+page.svelte
index 29eea87f50..527af84c49 100644
--- a/src/routes/console/project-[project]/storage/+page.svelte
+++ b/src/routes/console/project-[project]/storage/+page.svelte
@@ -37,7 +37,8 @@
showCreate = true;
},
keys: ['c'],
- disabled: showCreate
+ disabled: showCreate,
+ icon: 'plus'
}
]);
From 21de81de00dbd125235b84743f7b4863f58f6825 Mon Sep 17 00:00:00 2001
From: tglide <26071571+TGlide@users.noreply.github.com>
Date: Wed, 5 Jul 2023 17:21:40 +0100
Subject: [PATCH 038/128] refactor: details modal & self-hosted screens
---
package-lock.json | 8 +-
.../settings/migrations/+page.svelte | 220 +++++++-----------
.../settings/migrations/+page.ts | 4 +-
.../settings/migrations/details.svelte | 136 ++++++-----
4 files changed, 158 insertions(+), 210 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 2fd48112c1..5e9d34e1b5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,7 +7,7 @@
"name": "@appwrite/console",
"dependencies": {
"@analytics/google-analytics": "^1.0.5",
- "@appwrite.io/console": "0.1.0",
+ "@appwrite.io/console": "^0.1.1",
"@appwrite.io/pink": "^0.0.6-rc.14",
"@popperjs/core": "^2.11.6",
"@sentry/svelte": "^7.44.2",
@@ -147,9 +147,9 @@
"integrity": "sha512-1Yw7u/COtxx06BfwlI+kVhsa/upKYzmCNrT4c8QDeCY2KMYlnijkUjtHiPU08HxyTIVB5j6d75O0YWVIHwQS8g=="
},
"node_modules/@appwrite.io/console": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@appwrite.io/console/-/console-0.1.0.tgz",
- "integrity": "sha512-GzCRUmaXAVgpGwxBNI3PrtCLHz7CM+epBHDDTHw8B2u61KbijGBO3GrwreXy91fy00RJiEzGlMSRzDgwsF3Tsg==",
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@appwrite.io/console/-/console-0.1.1.tgz",
+ "integrity": "sha512-7aBh/8QxKmaMsP9tVJgNsrOBstuikKasSUoSyRNxblK3J/OdPXnQRInZELT9uaK+vqjZaCYspA3B+5UH+DZ9Dw==",
"dependencies": {
"cross-fetch": "3.1.5",
"isomorphic-form-data": "2.0.0"
diff --git a/src/routes/console/project-[project]/settings/migrations/+page.svelte b/src/routes/console/project-[project]/settings/migrations/+page.svelte
index 9b5f2be086..bfd1945612 100644
--- a/src/routes/console/project-[project]/settings/migrations/+page.svelte
+++ b/src/routes/console/project-[project]/settings/migrations/+page.svelte
@@ -16,14 +16,13 @@
import { isSameDay, toLocaleDate } from '$lib/helpers/date';
import { capitalize } from '$lib/helpers/string';
import { Container } from '$lib/layout';
- import { migrator } from '$lib/stores/migrator';
import { sdk } from '$lib/stores/sdk';
import { isSelfHosted } from '$lib/system';
import { openImportWizard } from './(import)';
import Details from './details.svelte';
export let data;
- let showDetails = false;
+ let details: (typeof data.migrations)[number] | null = null;
let showCloudExport = false;
const mockMigrate = async () => {
@@ -34,7 +33,7 @@
const getStatus = (status: string) => {
if (status === 'failed') {
- return { text: 'Failed', icon: 'clock', iconColor: 'blue' };
+ return { text: 'Failed', icon: 'exclamation', iconColor: 'danger' };
}
return { text: 'Pending', icon: 'clock', iconColor: 'blue' };
@@ -43,54 +42,93 @@
Migrations
- {#if isSelfHosted}
-
- Import project data
-
- Import project data from Cloud to your self-hosted project. Initiate the process of
- importing project data from the migrations settings of your Cloud project.
-
-
- {#if $migrator.status === 'idle'}
-
-
-
-
+
+
+ Import project data
+ Import data from other products or from a different Appwrite instance
+
+ {#if data.migrations.length}
+
-
-
- Date
- Source
- Status
-
-
-
- Today
- Heaven
- Awesome
-
-
-
-
-
- {:else}
-
-
-
-
+
+
+ Date
+ Source
+ Status
+
+
+
+ {#each data.migrations as entry}
+
+ {@const source = capitalize(JSON.parse(entry.source).type)}
+ {@const status = getStatus(entry.status)}
+
+ {isSameDay(new Date(), new Date(entry.$createdAt))
+ ? 'Today'
+ : toLocaleDate(entry.$createdAt)}
+
+ {source}
+
+
+
+ {status.text}
+
+
+
+
+
+
+ {/each}
+
+
+ {:else}
+
+
+ -
+
+
-
-
-
+
+
+
-
+
+
-
- No imported data yet
+
+
+ -
+
+

+
+
+
+ -
+
+

+
+
+
+
- {/if}
-
-
+
+
+
+
+
+ {/if}
+
+
+ {#if isSelfHosted}
Deploy to Cloud
Export data from your project to Appwrite Cloud
@@ -110,94 +148,6 @@
{:else}
-
- Import project data
-
- Import data from other products or from a different Appwrite instance
-
-
- {#if data.migrations.length}
-
-
-
-
- Date
- Source
- Status
-
-
-
- {#each data.migrations as entry}
-
- {@const source = capitalize(JSON.parse(entry.source).type)}
- {@const status = getStatus(entry.status)}
-
- {isSameDay(new Date(), new Date(entry.$createdAt))
- ? 'Today'
- : toLocaleDate(entry.$createdAt)}
-
- {source}
-
-
-
- {status.text}
-
-
-
-
-
-
- {/each}
-
-
- {:else}
-
-
- -
-
-

-
-
-
- -
-
-

-
-
-
- -
-
-

-
-
-
- -
-
-

-
-
-
-
-
-
-
-
-
- {/if}
-
-
Export to self-hosted instance
Export data from your project to a self-hosted instance
@@ -262,7 +212,7 @@
-
+
diff --git a/src/routes/console/+layout.svelte b/src/routes/console/+layout.svelte
index 97155286fe..3dcd1e167f 100644
--- a/src/routes/console/+layout.svelte
+++ b/src/routes/console/+layout.svelte
@@ -26,7 +26,7 @@
label: 'Ask AI',
callback: () => {
addSubPanel({
- name: 'Ask AI',
+ name: 'AI',
component: AI
});
},
From 60591ccc16ae36fb0a08ed38081bf02f596981c9 Mon Sep 17 00:00:00 2001
From: Bradley Schofield
Date: Mon, 10 Jul 2023 14:51:10 +0100
Subject: [PATCH 041/128] Implement new SDK Methods and Reporting
---
.../settings/migrations/(import)/index.ts | 1 +
.../settings/migrations/(import)/step2.svelte | 56 +++++++++++++++----
.../migrations/(import)/wizard.svelte | 29 +++++++++-
3 files changed, 74 insertions(+), 12 deletions(-)
diff --git a/src/routes/console/project-[project]/settings/migrations/(import)/index.ts b/src/routes/console/project-[project]/settings/migrations/(import)/index.ts
index acb8feba25..34eff1cb10 100644
--- a/src/routes/console/project-[project]/settings/migrations/(import)/index.ts
+++ b/src/routes/console/project-[project]/settings/migrations/(import)/index.ts
@@ -18,6 +18,7 @@ type AppwriteInput = {
type FirebaseInput = {
provider: 'firebase';
+ serviceAccount?: string;
};
type SupabaseInput = {
diff --git a/src/routes/console/project-[project]/settings/migrations/(import)/step2.svelte b/src/routes/console/project-[project]/settings/migrations/(import)/step2.svelte
index 9ded5affaa..ac7d74d06c 100644
--- a/src/routes/console/project-[project]/settings/migrations/(import)/step2.svelte
+++ b/src/routes/console/project-[project]/settings/migrations/(import)/step2.svelte
@@ -2,11 +2,13 @@
import { EyebrowHeading } from '$lib/components';
import { Button } from '$lib/elements/forms';
import { deepMap } from '$lib/helpers/object';
+ import { sdk } from '$lib/stores/sdk';
import type { DeepKeys, WritableValue } from '$lib/helpers/types';
import { WizardStep } from '$lib/layout';
+ import { onMount } from 'svelte';
- import { formData } from '.';
+ import { formData, formDataToResources, provider } from '.';
type FormData = WritableValue;
type FormKeys = DeepKeys;
@@ -59,6 +61,24 @@
return v;
});
}
+
+ let report: any;
+
+ onMount(async () => {
+ const resources = formDataToResources($formData);
+
+ switch ($provider.provider) {
+ case 'appwrite': {
+ const res = await sdk.forProject.migrations.generateAppwriteReport(
+ resources,
+ $provider.endpoint,
+ $provider.projectID,
+ $provider.apiKey
+ );
+ report = res;
+ }
+ }
+ });
@@ -116,7 +136,9 @@
on:change={handleInputChange('users.root')} />
Users
- 300
+ {#if report}
+ {report.user}
+ {/if}
Import all users
@@ -129,7 +151,9 @@
on:change={handleInputChange('users.teams')} />
Include teams
- 4
+ {#if report}
+ {report.team}
+ {/if}
Import all teams and the team memberships of your users
@@ -143,7 +167,9 @@
on:change={handleInputChange('databases.root')} />
Databases
- 300
+ {#if report}
+ {report.database}
+ {/if}
Import all databases, including collections, indexes and attributes
@@ -156,7 +182,9 @@
on:change={handleInputChange('databases.documents')} />
Include documents
- 4
+ {#if report}
+ {report.document}
+ {/if}
Import all of your documents
@@ -170,7 +198,9 @@
on:change={handleInputChange('functions.root')} />
Functions
- 30
+ {#if report}
+ {report.function}
+ {/if}
Import all functions and their active deployment
@@ -184,7 +214,7 @@
Include environment variables
-
Description here
+
Import all environment variables
Include inactive deployments
- Description here
+ Import all deployments that are not currently active
@@ -206,10 +236,16 @@
on:change={handleInputChange('storage.root')} />
Storage
- 30GB
+ {#if report}
+ {report.size.toFixed(2)}MB
+ {/if}
- Import all buckets (2) and files (3000)
+ {#if report}
+ Import all buckets ({report.bucket}) and files ({report.file})
+ {:else}
+ Import all buckets and files
+ {/if}
diff --git a/src/routes/console/project-[project]/settings/migrations/(import)/wizard.svelte b/src/routes/console/project-[project]/settings/migrations/(import)/wizard.svelte
index 3be65b14c5..c714187da3 100644
--- a/src/routes/console/project-[project]/settings/migrations/(import)/wizard.svelte
+++ b/src/routes/console/project-[project]/settings/migrations/(import)/wizard.svelte
@@ -18,7 +18,7 @@
const resources = formDataToResources($formData);
switch ($provider.provider) {
case 'appwrite': {
- const res = await sdk.forProject.migrations.migrationAppwrite(
+ const res = await sdk.forProject.migrations.migrateAppwrite(
resources,
$provider.endpoint,
$provider.projectID,
@@ -29,7 +29,7 @@
break;
}
case 'supabase': {
- const res = await sdk.forProject.migrations.migrationSupabase(
+ const res = await sdk.forProject.migrations.migrateSupabase(
resources,
$provider.endpoint,
$provider.apiKey,
@@ -40,6 +40,31 @@
);
console.log(res);
invalidate(Dependencies.MIGRATIONS);
+ break;
+ }
+ case 'firebase': {
+ const res = await sdk.forProject.migrations.migrateFirebase(
+ resources,
+ $provider.serviceAccount
+ );
+ console.log(res);
+ invalidate(Dependencies.MIGRATIONS);
+ break;
+ }
+ case 'nhost': {
+ const res = await sdk.forProject.migrations.migrateNHost(
+ resources,
+ $provider.subdomain,
+ $provider.region,
+ $provider.adminSecret,
+ $provider.database,
+ $provider.username,
+ $provider.password,
+ $provider.port
+ );
+ console.log(res);
+ invalidate(Dependencies.MIGRATIONS);
+ break;
}
}
resetImportStores();
From 0bbd82e84afa02470174be4768586b0b22c68e9d Mon Sep 17 00:00:00 2001
From: tglide <26071571+TGlide@users.noreply.github.com>
Date: Mon, 10 Jul 2023 15:06:32 +0100
Subject: [PATCH 042/128] feat: AI restyling and examples
---
src/lib/commandCenter/panels/ai.svelte | 258 ++++++++++++++-----
src/lib/commandCenter/panels/root.svelte | 22 +-
src/lib/commandCenter/panels/template.svelte | 227 +++++++++-------
src/lib/components/code.svelte | 9 +
src/lib/images/appwrite-cooler.svg | 31 +++
src/lib/system.ts | 2 +-
src/routes/console/+layout.svelte | 2 +-
7 files changed, 377 insertions(+), 174 deletions(-)
create mode 100644 src/lib/images/appwrite-cooler.svg
diff --git a/src/lib/commandCenter/panels/ai.svelte b/src/lib/commandCenter/panels/ai.svelte
index 0df6fd7290..113adfe905 100644
--- a/src/lib/commandCenter/panels/ai.svelte
+++ b/src/lib/commandCenter/panels/ai.svelte
@@ -1,82 +1,224 @@
-
-
-
-
diff --git a/src/lib/commandCenter/panels/template.svelte b/src/lib/commandCenter/panels/template.svelte
index 280de560bb..1c6907ad20 100644
--- a/src/lib/commandCenter/panels/template.svelte
+++ b/src/lib/commandCenter/panels/template.svelte
@@ -12,12 +12,12 @@
import { quadOut } from 'svelte/easing';
import { crossfade } from 'svelte/transition';
- import Breadcrumbs from '$lib/layout/breadcrumbs.svelte';
type BaseOption = { callback: () => void; group?: CommandGroup };
type Option = $$Generic;
export let options: Option[] | null = null;
export let search = '';
+ export let fullheight = false;
let selected = 0;
@@ -159,17 +159,21 @@
-
+
{#each breadcrumbs as crumb, i}
-
+
{/each}
-
+
- {#if groupsAndOptions}
-
-
+
{#if groupsAndOptions}
{#each groupsAndOptions as item}
@@ -222,7 +234,17 @@
@@ -347,23 +369,18 @@
.group {
color: hsl(var(--color-neutral-70));
margin-inline-start: 0.25rem;
- margin-block-start: 1rem;
margin-block-end: 0.25rem;
position: relative;
z-index: 10;
+
+ &:not(:first-child) {
+ margin-block-start: 1rem;
+ }
}
.result {
- transition: 150ms;
position: relative;
- opacity: 0.65;
- transition: 75ms cubic-bezier(0.5, 1, 0.89, 1);
- &[data-selected] {
- opacity: 1;
- transition: 150ms cubic-bezier(0.5, 1, 0.89, 1);
- }
-
.bg {
position: absolute;
inset: 0;
diff --git a/src/routes/console/+layout.svelte b/src/routes/console/+layout.svelte
index 477a9a8dcd..e3e6146c57 100644
--- a/src/routes/console/+layout.svelte
+++ b/src/routes/console/+layout.svelte
@@ -17,9 +17,9 @@
import { goto } from '$app/navigation';
- import { addSubPanel } from '$lib/commandCenter/subPanels';
- import { registerCommands, CommandCenter } from '$lib/commandCenter';
+ import { CommandCenter, registerCommands } from '$lib/commandCenter';
import { AI } from '$lib/commandCenter/panels';
+ import { addSubPanel } from '$lib/commandCenter/subPanels';
$: $registerCommands([
{
@@ -38,9 +38,7 @@
callback: () => {
goto('/console/account');
},
- keys: ['a'],
- ctrl: true,
- shift: true,
+ keys: ['g', 'i'],
group: 'navigation'
},
{
diff --git a/src/routes/console/+layout.ts b/src/routes/console/+layout.ts
index 65de11ecdd..f92e89834e 100644
--- a/src/routes/console/+layout.ts
+++ b/src/routes/console/+layout.ts
@@ -1,4 +1,5 @@
import { sdk } from '$lib/stores/sdk';
+
import type { LayoutLoad } from './$types';
export const load: LayoutLoad = async () => {
@@ -6,6 +7,9 @@ export const load: LayoutLoad = async () => {
const data = await response.json();
return {
- version: data?.version ?? null
+ version: data?.version ?? null,
+ promised: {
+ // We nest these so that layout doesn't have to wait for these promises to load
+ }
};
};
diff --git a/src/routes/console/organization-[organization]/+page.svelte b/src/routes/console/organization-[organization]/+page.svelte
index 7eb42b7e24..bc10cbd0ad 100644
--- a/src/routes/console/organization-[organization]/+page.svelte
+++ b/src/routes/console/organization-[organization]/+page.svelte
@@ -1,8 +1,8 @@
diff --git a/src/routes/console/project-[project]/overview/platforms/+page.svelte b/src/routes/console/project-[project]/overview/platforms/+page.svelte
index 2930bbd445..f9489cc0f3 100644
--- a/src/routes/console/project-[project]/overview/platforms/+page.svelte
+++ b/src/routes/console/project-[project]/overview/platforms/+page.svelte
@@ -36,7 +36,6 @@
import { toLocaleDateTime } from '$lib/helpers/date';
import { app } from '$lib/stores/app';
import type { PageData } from './$types';
- import { registerCommands } from '$lib/commandCenter';
export let data: PageData;
@@ -72,14 +71,14 @@
}
};
- $: $registerCommands([
- {
- label: 'Create Web App',
- callback: () => addPlatform(Platform.Web),
- keys: ['c'],
- icon: 'plus'
- }
- ]);
+ // $: $registerCommands([
+ // {
+ // label: 'Create Web App',
+ // callback: () => addPlatform(Platform.Web),
+ // keys: ['c'],
+ // icon: 'plus'
+ // }
+ // ]);
From e983413d53d22368b2747eddcc19db955763c0c6 Mon Sep 17 00:00:00 2001
From: tglide <26071571+TGlide@users.noreply.github.com>
Date: Tue, 11 Jul 2023 12:53:37 +0100
Subject: [PATCH 050/128] feat: streamed projects
---
src/lib/commandCenter/panels/projects.svelte | 8 ++++++--
.../console/organization-[organization]/+page.svelte | 1 +
src/routes/console/organization-[organization]/+page.ts | 9 ++++++++-
3 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/src/lib/commandCenter/panels/projects.svelte b/src/lib/commandCenter/panels/projects.svelte
index bbcc334c50..b1ebf6c5dd 100644
--- a/src/lib/commandCenter/panels/projects.svelte
+++ b/src/lib/commandCenter/panels/projects.svelte
@@ -9,8 +9,12 @@
let search = '';
- $: projects = $page.data.projects as Models.ProjectList;
- $: filteredProjects = projects.projects
+ let projects = [] as Models.ProjectList['projects'];
+ $page.data.streamed.projects.then((data) => {
+ projects = data.projects;
+ });
+
+ $: filteredProjects = projects
.filter((project) => project.name.toLowerCase().includes(search.toLowerCase()))
.map((project) => {
return {
diff --git a/src/routes/console/organization-[organization]/+page.svelte b/src/routes/console/organization-[organization]/+page.svelte
index bc10cbd0ad..0b416b0b76 100644
--- a/src/routes/console/organization-[organization]/+page.svelte
+++ b/src/routes/console/organization-[organization]/+page.svelte
@@ -56,6 +56,7 @@
component: Projects
});
},
+ keys: ['f'],
group: 'project',
icon: 'search'
},
diff --git a/src/routes/console/organization-[organization]/+page.ts b/src/routes/console/organization-[organization]/+page.ts
index 279a550845..46ad17cb61 100644
--- a/src/routes/console/organization-[organization]/+page.ts
+++ b/src/routes/console/organization-[organization]/+page.ts
@@ -17,6 +17,13 @@ export const load: PageLoad = async ({ params, url, route }) => {
Query.limit(limit),
Query.equal('teamId', params.organization),
Query.orderDesc('$createdAt')
- ])
+ ]),
+ streamed: {
+ // We nest these so that layout doesn't have to wait for these promises to load
+ projects: sdk.forConsole.projects.list([
+ Query.equal('teamId', params.organization),
+ Query.orderDesc('$createdAt')
+ ])
+ }
};
};
From dd0bc317cff669ecf028bc2f2acea2e1b3d8ef4b Mon Sep 17 00:00:00 2001
From: tglide <26071571+TGlide@users.noreply.github.com>
Date: Tue, 11 Jul 2023 12:59:15 +0100
Subject: [PATCH 051/128] refactor: minor cmdCenter changes
---
src/lib/commandCenter/commandCenter.svelte | 2 +-
src/lib/commandCenter/panels/template.svelte | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/lib/commandCenter/commandCenter.svelte b/src/lib/commandCenter/commandCenter.svelte
index 9d73cc5582..c347023ec0 100644
--- a/src/lib/commandCenter/commandCenter.svelte
+++ b/src/lib/commandCenter/commandCenter.svelte
@@ -31,7 +31,7 @@
clearSubPanels();
} else {
addSubPanel({
- name: 'commandPanel',
+ name: 'root',
component: Root
});
}
diff --git a/src/lib/commandCenter/panels/template.svelte b/src/lib/commandCenter/panels/template.svelte
index f80f671953..1dbee47fde 100644
--- a/src/lib/commandCenter/panels/template.svelte
+++ b/src/lib/commandCenter/panels/template.svelte
@@ -156,7 +156,7 @@
const castOption = (option: IndexedOption) => option as Option;
- $: breadcrumbs = $subPanels.slice(1).map((panel) => panel.name);
+ $: breadcrumbs = $subPanels.filter((panel) => panel.name !== 'root').map((panel) => panel.name);
const handleCrumbClick = (index: number) => {
if (index === breadcrumbs.length - 1) {
From 89255a12362fec625279d731c6b0075bcca0ac68 Mon Sep 17 00:00:00 2001
From: tglide <26071571+TGlide@users.noreply.github.com>
Date: Tue, 11 Jul 2023 18:49:53 +0100
Subject: [PATCH 052/128] feat: basic command prioritization
---
src/lib/commandCenter/commands.ts | 87 ++++++++++++++++---
src/lib/helpers/debounce.ts | 15 +++-
src/routes/console/+layout.svelte | 12 ++-
src/routes/console/+layout.ts | 2 +-
.../console/project-[project]/+layout.svelte | 12 +--
src/routes/store.ts | 8 +-
6 files changed, 106 insertions(+), 30 deletions(-)
diff --git a/src/lib/commandCenter/commands.ts b/src/lib/commandCenter/commands.ts
index cd3379de17..2e50916b21 100644
--- a/src/lib/commandCenter/commands.ts
+++ b/src/lib/commandCenter/commands.ts
@@ -7,7 +7,7 @@ export type CommandGroup =
| 'ungrouped'
| 'navigation'
| 'projects'
- | 'project'
+ | 'organizations'
| 'auth'
| 'help'
| 'account'
@@ -16,13 +16,7 @@ export type CommandGroup =
| 'functions'
| 'storage';
-export type Command = {
- keys?: string[];
- /* Ctrl on Windows/Linux, Meta on Mac */
- ctrl?: boolean;
- shift?: boolean;
- /* Alt on Windows/Linux, Option on Mac */
- alt?: boolean;
+type BaseCommand = {
callback: () => void;
label?: string;
disabled?: boolean;
@@ -31,6 +25,21 @@ export type Command = {
icon?: string;
};
+type KeyedCommand = BaseCommand & {
+ keys: string[];
+ /* Ctrl on Windows/Linux, Meta on Mac */
+ ctrl?: boolean;
+ shift?: boolean;
+ /* Alt on Windows/Linux, Option on Mac */
+ alt?: boolean;
+};
+
+function isKeyedCommand(command: Command): command is KeyedCommand {
+ return 'keys' in command;
+}
+
+export type Command = KeyedCommand | BaseCommand;
+
export const commandMap = writable
-
+
diff --git a/src/routes/console/project-[project]/settings/migrations/exportModal.svelte b/src/routes/console/project-[project]/settings/migrations/exportModal.svelte
index e3781c9c7e..19a2924e65 100644
--- a/src/routes/console/project-[project]/settings/migrations/exportModal.svelte
+++ b/src/routes/console/project-[project]/settings/migrations/exportModal.svelte
@@ -62,7 +62,6 @@
const { secret } = await sdk.forConsole.projects.createKey(
$project.$id,
`[AUTO-GENERATED] Migration ${new Date().toISOString()}`,
-
[
'users.read',
'teams.read',
From 08f020244bb13fbd4c8a86d3624e84033baea7ee Mon Sep 17 00:00:00 2001
From: tglide <26071571+TGlide@users.noreply.github.com>
Date: Mon, 17 Jul 2023 14:59:56 +0100
Subject: [PATCH 068/128] feat: deploy to cloud & export to self-hosted
---
src/lib/components/migrationBox.svelte | 6 +-
.../console/(migration-wizard)/step1.svelte | 136 ++++++++++++------
.../console/(migration-wizard)/wizard.svelte | 23 +--
.../organization-[organization]/+layout.ts | 15 +-
.../settings/migrations/+page.svelte | 24 ++--
5 files changed, 129 insertions(+), 75 deletions(-)
diff --git a/src/lib/components/migrationBox.svelte b/src/lib/components/migrationBox.svelte
index a4c4e0b12f..0fc0acfb4e 100644
--- a/src/lib/components/migrationBox.svelte
+++ b/src/lib/components/migrationBox.svelte
@@ -39,11 +39,11 @@
{ done: 0, processing: 0 } as TotalCounter
);
- console.log({ statusCounters, totalCounter });
-
- return Math.round(
+ const res = Math.round(
(totalCounter.done / (totalCounter.done + totalCounter.processing)) * 100
);
+
+ return Number.isNaN(res) ? 0 : res;
})();
const fetchMigrations = debounce(async () => {
diff --git a/src/routes/console/(migration-wizard)/step1.svelte b/src/routes/console/(migration-wizard)/step1.svelte
index 735d5e3124..b19d6b08b6 100644
--- a/src/routes/console/(migration-wizard)/step1.svelte
+++ b/src/routes/console/(migration-wizard)/step1.svelte
@@ -3,62 +3,112 @@
import { InputSelect } from '$lib/elements/forms';
import InputText from '$lib/elements/forms/inputText.svelte';
import { WizardStep } from '$lib/layout';
- import type { Models } from '@appwrite.io/console';
+ import { Query, type Models, ID } from '@appwrite.io/console';
import { selectedProject } from '.';
+ import { sdk } from '$lib/stores/sdk';
- const projects = $page.data.allProjects as Models.ProjectList;
- const hasProjects = projects.total > 0;
+ const organizations = $page.data.organizations
+ .teams as Models.TeamList
['teams'];
+ let selectedOrg = organizations.length ? organizations[0].$id : null;
+
+ let projects = [] as Models.ProjectList['projects'];
+ $: hasProjects = projects.length > 0;
+ let loadingProjects = false;
let projectType = 'existing';
+ let newProjName = '';
+
+ async function getProjects(orgId: string | null) {
+ if (!orgId) {
+ projects = [];
+ } else {
+ loadingProjects = true;
+ projects = await sdk.forConsole.projects
+ .list([Query.equal('teamId', orgId), Query.orderDesc('$createdAt')])
+ .then((res) => res.projects);
+ projectType = projects.length ? 'existing' : 'new';
+ loadingProjects = false;
+ }
+ }
+
+ $: {
+ getProjects(selectedOrg);
+ }
+
+ const beforeSubmit = async () => {
+ if (projectType === 'existing') return;
+ const project = await sdk.forConsole.projects.create(ID.unique(), newProjName, selectedOrg);
+ selectedProject.set(project.$id);
+ };
-
+
{hasProjects ? 'Select project' : 'Create project'}
-
-
-
-
-
-
-
-
-
-
-
- {#if projectType === 'existing'}
+
+ {#if organizations.length > 1}
({
+ id="organization"
+ bind:value={selectedOrg}
+ label="Select organization"
+ options={organizations.map((p) => ({
label: p.name,
value: p.$id
- }))} />
- {:else}
-
+ }))}
+ disabled={loadingProjects} />
+ {/if}
+
+ {#if selectedOrg && !loadingProjects}
+ {#if projects.length}
+
+
+
+
+
+
+
+
+
+
+ {/if}
+
+
+ {#if projectType === 'existing'}
+ ({
+ label: p.name,
+ value: p.$id
+ }))} />
+ {:else}
+
+ {/if}
+
{/if}
diff --git a/src/routes/console/(migration-wizard)/wizard.svelte b/src/routes/console/(migration-wizard)/wizard.svelte
index 7078166901..c52629d929 100644
--- a/src/routes/console/(migration-wizard)/wizard.svelte
+++ b/src/routes/console/(migration-wizard)/wizard.svelte
@@ -1,15 +1,15 @@
+
Auth - Appwrite
diff --git a/src/routes/console/project-[project]/auth/+page.svelte b/src/routes/console/project-[project]/auth/+page.svelte
index d244a7c1cf..246eb5a348 100644
--- a/src/routes/console/project-[project]/auth/+page.svelte
+++ b/src/routes/console/project-[project]/auth/+page.svelte
@@ -1,3 +1,7 @@
+
+
-
@@ -151,8 +132,8 @@
single
href="https://appwrite.io/docs/server/users"
target="user"
- on:click={() => (showCreate = true)} />
+ on:click={() => showCreateUser.set(true)} />
{/if}
-
+
diff --git a/src/routes/console/project-[project]/auth/+page.ts b/src/routes/console/project-[project]/auth/+page.ts
index 97b6ad3d30..af35b625b8 100644
--- a/src/routes/console/project-[project]/auth/+page.ts
+++ b/src/routes/console/project-[project]/auth/+page.ts
@@ -3,12 +3,16 @@ import { sdk } from '$lib/stores/sdk';
import { getLimit, getPage, getSearch, pageToOffset } from '$lib/helpers/load';
import { PAGE_LIMIT } from '$lib/constants';
import type { PageLoad } from './$types';
+import { showCreateUser } from './+page.svelte';
export const load: PageLoad = async ({ url, route }) => {
const page = getPage(url);
const search = getSearch(url);
const limit = getLimit(url, route, PAGE_LIMIT);
const offset = pageToOffset(page, limit);
+ if (typeof url.searchParams.get('create') === 'string') {
+ showCreateUser.set(true);
+ }
return {
offset,
diff --git a/src/routes/console/project-[project]/auth/teams/+page.svelte b/src/routes/console/project-[project]/auth/teams/+page.svelte
index 063b9bb731..5e6460b73d 100644
--- a/src/routes/console/project-[project]/auth/teams/+page.svelte
+++ b/src/routes/console/project-[project]/auth/teams/+page.svelte
@@ -1,3 +1,7 @@
+
+
-
(details = null)} size="big">
+ (migrationId = null)} size="big">
{#if details.status === 'failed'}
Resolve migration issues
From 9de3158786aa4dd77f895691e0362a6fae38db34 Mon Sep 17 00:00:00 2001
From: tglide <26071571+TGlide@users.noreply.github.com>
Date: Mon, 17 Jul 2023 15:42:43 +0100
Subject: [PATCH 073/128] refactor: small changes
---
src/lib/commandCenter/panels/ai.svelte | 2 +-
src/lib/commandCenter/panels/template.svelte | 4 ++--
src/lib/components/migrationBox.svelte | 3 +++
src/routes/console/+layout.svelte | 3 ++-
4 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/lib/commandCenter/panels/ai.svelte b/src/lib/commandCenter/panels/ai.svelte
index 48c557326d..6819c35f6d 100644
--- a/src/lib/commandCenter/panels/ai.svelte
+++ b/src/lib/commandCenter/panels/ai.svelte
@@ -79,7 +79,7 @@
$: answer = parseCompletion($completion);
-
+
diff --git a/src/lib/commandCenter/panels/template.svelte b/src/lib/commandCenter/panels/template.svelte
index 6d966f1851..1b82e170ec 100644
--- a/src/lib/commandCenter/panels/template.svelte
+++ b/src/lib/commandCenter/panels/template.svelte
@@ -320,7 +320,7 @@
flex-direction: column;
width: var(--command-panel-width, 42.5rem);
max-width: 100%;
- max-height: 32rem;
+ max-height: var(--command-panel-max-height, 32rem);
overflow: hidden;
padding: 0;
@@ -336,7 +336,7 @@
backdrop-filter: blur(6px);
&.fullheight {
- height: 32rem;
+ height: var(--command-panel-max-height, 32rem);
}
:global(.kbd) {
diff --git a/src/lib/components/migrationBox.svelte b/src/lib/components/migrationBox.svelte
index b33dde7471..32d68ec8bc 100644
--- a/src/lib/components/migrationBox.svelte
+++ b/src/lib/components/migrationBox.svelte
@@ -28,6 +28,9 @@
$: percentage = (function getPercentage() {
if (!migration) return 0;
+ if (migration.status === 'failed') return 100;
+ if (migration.status === 'completed') return 100;
+
const statusCounters = parseIfString(migration.statusCounters) as Record
;
const totalCounter: TotalCounter = Object.values(statusCounters).reduce(
(curr, acc) => {
diff --git a/src/routes/console/+layout.svelte b/src/routes/console/+layout.svelte
index d846fcde8e..645ea9ea7f 100644
--- a/src/routes/console/+layout.svelte
+++ b/src/routes/console/+layout.svelte
@@ -45,7 +45,8 @@
addSubPanel(OrganizationsPanel);
},
group: 'organizations',
- icon: 'search'
+ icon: 'search',
+ keys: ['f', 'o']
},
{
label: 'Create new Organization',
From e11b1777e3404bf5885bb6890e8dcc8a646661ff Mon Sep 17 00:00:00 2001
From: tglide <26071571+TGlide@users.noreply.github.com>
Date: Mon, 17 Jul 2023 15:59:33 +0100
Subject: [PATCH 074/128] ai examples kbd nav
---
src/lib/commandCenter/panels/ai.svelte | 47 +++++++++++---------
src/lib/commandCenter/panels/template.svelte | 7 +--
2 files changed, 29 insertions(+), 25 deletions(-)
diff --git a/src/lib/commandCenter/panels/ai.svelte b/src/lib/commandCenter/panels/ai.svelte
index 6819c35f6d..0b5b2b32a5 100644
--- a/src/lib/commandCenter/panels/ai.svelte
+++ b/src/lib/commandCenter/panels/ai.svelte
@@ -79,11 +79,31 @@
$: answer = parseCompletion($completion);
-
+ {
+ return {
+ label: e,
+ callback: () => {
+ $input = e;
+ complete($input);
+ },
+ group: 'Examples'
+ };
+ })}
+ clearOnCallback={false}
+ fullheight
+ --command-panel-max-height="40rem">
-
- {#if $isLoading || answer}
+
+
+ {option.label}
+
+
+ {#if $isLoading || answer}
+

@@ -104,25 +124,8 @@
{/if}
- {:else}
-
Examples
-
- {#each examples as example}
- -
- {
- $input = example;
- complete($input);
- }}>
-
- {example}
-
-
- {/each}
-
- {/if}
-
+
+ {/if}