From 10acb7783f2e5e495c9bb272ac308fd141d8e671 Mon Sep 17 00:00:00 2001
From: tglide <26071571+TGlide@users.noreply.github.com>
Date: Sat, 22 Jul 2023 13:03:04 +0100
Subject: [PATCH] more commands
---
src/lib/commandCenter/commands.ts | 6 +-
src/lib/commandCenter/panels/ai.svelte | 2 +-
.../panels/createAttribute.svelte | 27 ++++++++
src/lib/commandCenter/panels/index.ts | 6 ++
.../commandCenter/panels/organizations.svelte | 2 +-
src/lib/commandCenter/panels/projects.svelte | 2 +-
.../commandCenter/searchers/collections.ts | 22 +++---
.../databases/+layout.svelte | 4 +-
.../database-[database]/+layout.svelte | 69 +++++++++++++++++++
.../collection-[collection]/+layout.svelte | 20 ++++++
10 files changed, 144 insertions(+), 16 deletions(-)
create mode 100644 src/lib/commandCenter/panels/createAttribute.svelte
diff --git a/src/lib/commandCenter/commands.ts b/src/lib/commandCenter/commands.ts
index fdf0e6ebd..7c1a00c3f 100644
--- a/src/lib/commandCenter/commands.ts
+++ b/src/lib/commandCenter/commands.ts
@@ -19,7 +19,9 @@ const groups = [
'webhooks',
'integrations',
'migrations',
- 'users'
+ 'users',
+ 'collections',
+ 'attributes'
] as const;
export type CommandGroup = (typeof groups)[number];
@@ -104,7 +106,7 @@ export const commandCenterKeyDownHandler = derived(
const reset = debounce(() => {
recentKeyCodes = [];
validCommands = [];
- }, 2000);
+ }, 1000);
const getHighestPriorityCommand = () => {
if (!validCommands.length) return;
diff --git a/src/lib/commandCenter/panels/ai.svelte b/src/lib/commandCenter/panels/ai.svelte
index 0b5b2b32a..3cc6a5409 100644
--- a/src/lib/commandCenter/panels/ai.svelte
+++ b/src/lib/commandCenter/panels/ai.svelte
@@ -6,8 +6,8 @@
import { useCompletion } from 'ai/svelte';
import { subPanels } from '../subPanels';
- import CoolerAppwrite from '$lib/images/appwrite-cooler.svg';
import { isLanguage, type Language } from '$lib/components/code.svelte';
+ import CoolerAppwrite from '$lib/images/appwrite-cooler.svg';
import { VARS } from '$lib/system';
const { input, handleSubmit, completion, isLoading, complete } = useCompletion({
diff --git a/src/lib/commandCenter/panels/createAttribute.svelte b/src/lib/commandCenter/panels/createAttribute.svelte
new file mode 100644
index 000000000..fe8587f22
--- /dev/null
+++ b/src/lib/commandCenter/panels/createAttribute.svelte
@@ -0,0 +1,27 @@
+
+
+
+
+
+ {option.label}
+
+
diff --git a/src/lib/commandCenter/panels/index.ts b/src/lib/commandCenter/panels/index.ts
index d3b8a87de..89da8f74a 100644
--- a/src/lib/commandCenter/panels/index.ts
+++ b/src/lib/commandCenter/panels/index.ts
@@ -36,3 +36,9 @@ export const DatabasesPanel: SubPanel = {
name: 'Databases',
component: Databases
};
+
+import Collections from './collections.svelte';
+export const CollectionsPanel: SubPanel = {
+ name: 'Collections',
+ component: Collections
+};
diff --git a/src/lib/commandCenter/panels/organizations.svelte b/src/lib/commandCenter/panels/organizations.svelte
index 3401f6b18..260933327 100644
--- a/src/lib/commandCenter/panels/organizations.svelte
+++ b/src/lib/commandCenter/panels/organizations.svelte
@@ -7,5 +7,5 @@
- {option.label}
+ {option.label}
diff --git a/src/lib/commandCenter/panels/projects.svelte b/src/lib/commandCenter/panels/projects.svelte
index 56120c7a9..faaed59a8 100644
--- a/src/lib/commandCenter/panels/projects.svelte
+++ b/src/lib/commandCenter/panels/projects.svelte
@@ -7,5 +7,5 @@
- {option.label}
+ {option.label}
diff --git a/src/lib/commandCenter/searchers/collections.ts b/src/lib/commandCenter/searchers/collections.ts
index 1328e8685..adeb0baac 100644
--- a/src/lib/commandCenter/searchers/collections.ts
+++ b/src/lib/commandCenter/searchers/collections.ts
@@ -1,22 +1,26 @@
import { goto } from '$app/navigation';
-import { sdk } from '$lib/stores/sdk';
+import { database } from '$routes/console/project-[project]/databases/database-[database]/store';
+import { project } from '$routes/console/project-[project]/store';
import { get } from 'svelte/store';
import type { Searcher } from '../commands';
-import { project } from '$routes/console/project-[project]/store';
+import { sdk } from '$lib/stores/sdk';
export const collectionsSearcher = (async (query: string) => {
- const { databases } = await sdk.forProject.databases.list();
+ const databaseId = get(database).$id;
+ const { collections } = await sdk.forProject.databases.listCollections(databaseId);
const projectId = get(project).$id;
- return databases
- .filter((db) => db.name.toLowerCase().includes(query.toLowerCase()))
+ return collections
+ .filter((col) => col.name.toLowerCase().includes(query.toLowerCase()))
.map(
- (db) =>
+ (col) =>
({
- group: 'databases',
- label: db.name,
+ group: 'collections',
+ label: col.name,
callback: () => {
- goto(`/console/project-${projectId}/databases/database-${db.$id}`);
+ goto(
+ `/console/project-${projectId}/databases/database-${databaseId}/collection-${col.$id}`
+ );
}
} as const)
);
diff --git a/src/routes/console/project-[project]/databases/+layout.svelte b/src/routes/console/project-[project]/databases/+layout.svelte
index 287d4c667..1f72a2fdf 100644
--- a/src/routes/console/project-[project]/databases/+layout.svelte
+++ b/src/routes/console/project-[project]/databases/+layout.svelte
@@ -22,8 +22,8 @@
goto(`/console/project-${$project.$id}/databases/usage`);
},
keys: ['g', 'u'],
- disabled: $page.url.pathname.includes('usage'),
-
+ disabled:
+ $page.url.pathname.includes('usage') || $page.url.pathname.includes('database-'),
group: 'databases'
}
]);
diff --git a/src/routes/console/project-[project]/databases/database-[database]/+layout.svelte b/src/routes/console/project-[project]/databases/database-[database]/+layout.svelte
index 0663ea0f6..6ac88a4f8 100644
--- a/src/routes/console/project-[project]/databases/database-[database]/+layout.svelte
+++ b/src/routes/console/project-[project]/databases/database-[database]/+layout.svelte
@@ -6,6 +6,14 @@
import { base } from '$app/paths';
import { page } from '$app/stores';
import { Dependencies } from '$lib/constants';
+ import {
+ addSubPanel,
+ registerCommands,
+ registerSearchers,
+ updateCommandGroupRanks
+ } from '$lib/commandCenter';
+ import { collectionsSearcher } from '$lib/commandCenter/searchers';
+ import { CollectionsPanel } from '$lib/commandCenter/panels';
const project = $page.params.project;
const databaseId = $page.params.database;
@@ -17,6 +25,67 @@
`${base}/console/project-${project}/databases/database-${databaseId}/collection-${event.detail.$id}`
);
}
+
+ $: $registerCommands([
+ {
+ label: 'Find Collections',
+ callback() {
+ addSubPanel(CollectionsPanel);
+ },
+ keys: ['f', 'c'],
+ group: 'collections',
+ icon: 'search'
+ },
+ {
+ label: 'Create Collection',
+ callback() {
+ $showCreate = true;
+ if (!$page.url.pathname.endsWith(databaseId)) {
+ goto(`/console/project-${project}/databases/database-${databaseId}`);
+ }
+ },
+ keys: $page.url.pathname.endsWith(databaseId) ? ['c'] : ['c', 'c'],
+ disabled: $page.url.pathname.includes('collection-'),
+ group: 'collections',
+ icon: 'plus'
+ },
+ {
+ label: 'Go to collections',
+ callback() {
+ goto(`/console/project-${project}/databases/database-${databaseId}`);
+ },
+ disabled:
+ $page.url.pathname.endsWith(databaseId) ||
+ $page.url.pathname.includes('collection-'),
+ keys: ['g', 'c'],
+ group: 'collections'
+ },
+ {
+ label: 'Go to usage',
+ callback() {
+ goto(`/console/project-${project}/databases/database-${databaseId}/usage`);
+ },
+ disabled:
+ $page.url.pathname.includes('/usage') || $page.url.pathname.includes('collection-'),
+ keys: ['g', 'u'],
+ group: 'collections'
+ },
+ {
+ label: 'Go to settings',
+ callback() {
+ goto(`/console/project-${project}/databases/database-${databaseId}/settings`);
+ },
+ disabled:
+ $page.url.pathname.includes('/settings') ||
+ $page.url.pathname.includes('collection-'),
+ keys: ['g', 's'],
+ group: 'collections'
+ }
+ ]);
+
+ $registerSearchers(collectionsSearcher);
+
+ $: $updateCommandGroupRanks((p) => ({ ...p, collections: 10 }));
diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+layout.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+layout.svelte
index e8c0d8ccc..024a9679e 100644
--- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+layout.svelte
+++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+layout.svelte
@@ -4,6 +4,7 @@
import { sdk } from '$lib/stores/sdk';
import { onDestroy, onMount } from 'svelte';
import { collection } from './store';
+ import { registerCommands, updateCommandGroupRanks } from '$lib/commandCenter';
let unsubscribe: { (): void };
@@ -23,6 +24,25 @@
unsubscribe();
}
});
+
+ $: $registerCommands([
+ {
+ label: 'Create Attribute',
+ keys: ['c', 'a'],
+ callback() {
+ // no-op
+ },
+ icon: 'plus',
+ group: 'attributes'
+ }
+ ]);
+
+ $updateCommandGroupRanks((p) => ({
+ ...p,
+ attributes: 1000,
+ documents: 900,
+ collections: 800
+ }));