From 719e4dba7fac317977f11f3f7e73e25961408629 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Thu, 29 Feb 2024 16:53:29 +0530 Subject: [PATCH 1/7] chore: add missing command centers --- src/lib/commandCenter/commands.ts | 2 + .../commandCenter/panels/createMessage.svelte | 76 +++++++++++++++++++ src/lib/commandCenter/panels/index.ts | 6 ++ src/lib/commandCenter/searchers/messages.ts | 40 ++++++++++ src/lib/commandCenter/searchers/providers.ts | 26 +++++++ src/lib/commandCenter/searchers/topics.ts | 25 ++++++ src/routes/console/+layout.svelte | 2 +- .../console/project-[project]/+layout.svelte | 24 ++++-- .../collection-[collection]/+layout.svelte | 33 ++++++++ .../settings/displayName.svelte | 2 +- .../settings/updatePermissions.svelte | 2 +- .../settings/updateSecurity.svelte | 2 +- .../messaging/+layout.svelte | 44 +++++------ .../topics/topic-[topic]/+layout.svelte | 34 +++++++++ 14 files changed, 280 insertions(+), 38 deletions(-) create mode 100644 src/lib/commandCenter/panels/createMessage.svelte create mode 100644 src/lib/commandCenter/searchers/messages.ts create mode 100644 src/lib/commandCenter/searchers/providers.ts create mode 100644 src/lib/commandCenter/searchers/topics.ts diff --git a/src/lib/commandCenter/commands.ts b/src/lib/commandCenter/commands.ts index 470a61012..304ccf603 100644 --- a/src/lib/commandCenter/commands.ts +++ b/src/lib/commandCenter/commands.ts @@ -18,6 +18,8 @@ const groups = [ 'databases', 'functions', 'messaging', + 'providers', + 'topics', 'storage', 'domains', 'webhooks', diff --git a/src/lib/commandCenter/panels/createMessage.svelte b/src/lib/commandCenter/panels/createMessage.svelte new file mode 100644 index 000000000..e1f61c879 --- /dev/null +++ b/src/lib/commandCenter/panels/createMessage.svelte @@ -0,0 +1,76 @@ + + + diff --git a/src/lib/commandCenter/panels/index.ts b/src/lib/commandCenter/panels/index.ts index c1d8a59f1..b527b2340 100644 --- a/src/lib/commandCenter/panels/index.ts +++ b/src/lib/commandCenter/panels/index.ts @@ -78,3 +78,9 @@ export const FilesPanel: SubPanel = { name: 'Files', component: Files }; + +import CreateMessage from './createMessage.svelte'; +export const CreateMessagePanel: SubPanel = { + name: 'Create Message', + component: CreateMessage +}; \ No newline at end of file diff --git a/src/lib/commandCenter/searchers/messages.ts b/src/lib/commandCenter/searchers/messages.ts new file mode 100644 index 000000000..42f871337 --- /dev/null +++ b/src/lib/commandCenter/searchers/messages.ts @@ -0,0 +1,40 @@ +import { goto } from '$app/navigation'; +import { project } from '$routes/console/project-[project]/store'; +import { get } from 'svelte/store'; +import type { Searcher } from '../commands'; +import { sdk } from '$lib/stores/sdk'; +import { MessagingProviderType } from '@appwrite.io/console'; + +const getLabel = (message) => { + switch (message.providerType) { + case MessagingProviderType.Push: + return message.data.title; + case MessagingProviderType.Sms: + return message.data.content; + case MessagingProviderType.Email: + return message.data.subject; + default: + return 'null'; + } +}; + +export const messagesSearcher = (async (query: string) => { + const { messages } = await sdk.forProject.messaging.listMessages([], query || undefined); + + console.log(messages); + const projectId = get(project).$id; + + return messages + .filter((message) => getLabel(message).toLowerCase().includes(query.toLowerCase())) + .map( + (message) => + ({ + group: 'messaging', + label: getLabel(message), + callback: () => { + goto(`/console/project-${projectId}/messaging/message-${message.$id}`); + }, + icon: 'send', + }) as const + ); +}) satisfies Searcher; diff --git a/src/lib/commandCenter/searchers/providers.ts b/src/lib/commandCenter/searchers/providers.ts new file mode 100644 index 000000000..289bbe826 --- /dev/null +++ b/src/lib/commandCenter/searchers/providers.ts @@ -0,0 +1,26 @@ +import { goto } from '$app/navigation'; +import { project } from '$routes/console/project-[project]/store'; +import { get } from 'svelte/store'; +import type { Searcher } from '../commands'; +import { sdk } from '$lib/stores/sdk'; + +export const providersSearcher = (async (query: string) => { + const { providers } = await sdk.forProject.messaging.listProviders([], query || undefined); + + console.log(providers); + const projectId = get(project).$id; + + return providers + .filter((provider) => provider.name.toLowerCase().includes(query.toLowerCase())) + .map( + (provider) => + ({ + group: 'providers', + label: provider.name, + callback: () => { + goto(`/console/project-${projectId}/messaging/providers/provider-${provider.$id}`); + }, + icon: 'cloud', + }) as const + ); +}) satisfies Searcher; diff --git a/src/lib/commandCenter/searchers/topics.ts b/src/lib/commandCenter/searchers/topics.ts new file mode 100644 index 000000000..2f28f3d61 --- /dev/null +++ b/src/lib/commandCenter/searchers/topics.ts @@ -0,0 +1,25 @@ +import { goto } from '$app/navigation'; +import { project } from '$routes/console/project-[project]/store'; +import { get } from 'svelte/store'; +import type { Searcher } from '../commands'; +import { sdk } from '$lib/stores/sdk'; + +export const topicsSearcher = (async (query: string) => { + const { topics } = await sdk.forProject.messaging.listTopics([], query || undefined); + + const projectId = get(project).$id; + + return topics + .filter((topic) => topic.name.toLowerCase().includes(query.toLowerCase())) + .map( + (topic) => + ({ + group: 'topics', + label: topic.name, + callback: () => { + goto(`/console/project-${projectId}/messaging/topics/topic-${topic.$id}`); + }, + icon: 'archive', + }) as const + ); +}) satisfies Searcher; diff --git a/src/routes/console/+layout.svelte b/src/routes/console/+layout.svelte index dccfe71a4..98ce25767 100644 --- a/src/routes/console/+layout.svelte +++ b/src/routes/console/+layout.svelte @@ -66,7 +66,7 @@ $page.url.pathname.includes('/console/organization-') && !$page.url.pathname.endsWith('/members') && !$page.url.pathname.endsWith('/settings'), - rank: -1 + rank: -1 }, { label: 'Ask the AI', diff --git a/src/routes/console/project-[project]/+layout.svelte b/src/routes/console/project-[project]/+layout.svelte index d8f26f01b..f025da2ec 100644 --- a/src/routes/console/project-[project]/+layout.svelte +++ b/src/routes/console/project-[project]/+layout.svelte @@ -27,14 +27,6 @@ }); $: $registerCommands([ - { - label: 'Go to Databases', - callback: () => { - goto(`/console/project-${$project.$id}/databases`); - }, - keys: ['d'], - group: 'navigation' - }, { label: 'Go to Auth', callback: () => { @@ -43,6 +35,14 @@ keys: ['a'], group: 'navigation' }, + { + label: 'Go to Databases', + callback: () => { + goto(`/console/project-${$project.$id}/databases`); + }, + keys: ['d'], + group: 'navigation' + }, { label: 'Go to Functions', callback: () => { @@ -51,6 +51,14 @@ keys: ['f'], group: 'navigation' }, + { + label: 'Go to Messaging', + callback: () => { + goto(`/console/project-${$project.$id}/messaging`); + }, + keys: ['m'], + group: 'navigation' + }, { label: 'Go to Storage', callback: () => { 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 ce8c1071f..2543f11fc 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 @@ -136,6 +136,39 @@ disabled: $page.url.pathname.endsWith('settings'), group: 'collections' }, + { + label: 'Display Name', + async callback() { + await goto( + `/console/project-${$project.$id}/databases/database-${$database.$id}/collection-${$collection.$id}/settings#display-name` + ); + }, + group: 'collections', + disabled: $page.url.pathname.endsWith('display-name') || $page.url.pathname.endsWith('settings'), + icon: 'eye' + }, + { + label: 'Permissions', + async callback() { + await goto( + `/console/project-${$project.$id}/databases/database-${$database.$id}/collection-${$collection.$id}/settings#permissions` + ); + }, + group: 'collections', + disabled: $page.url.pathname.endsWith('permissions') || $page.url.pathname.endsWith('settings'), + icon: 'puzzle', + }, + { + label: 'Document security', + async callback() { + await goto( + `/console/project-${$project.$id}/databases/database-${$database.$id}/collection-${$collection.$id}/settings#document-security` + ); + }, + group: 'collections', + disabled: $page.url.pathname.endsWith('document-security') || $page.url.pathname.endsWith('settings'), + icon: 'lock-closed' + }, { label: 'Create index', keys: $page.url.pathname.endsWith('indexes') ? ['c'] : ['c', 'i'], diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/displayName.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/displayName.svelte index ed2e408a5..e98f77d31 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/displayName.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/displayName.svelte @@ -55,7 +55,7 @@
- Display name + Display name

Select string attributes as display names for your documents. The selected names will be used as short forms to identify documents in the Appwrite console, like when creating diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/updatePermissions.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/updatePermissions.svelte index 686aca1d8..b32bb7723 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/updatePermissions.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/updatePermissions.svelte @@ -56,7 +56,7 @@ - Permissions + Permissions

Choose who can access your collection and documents. For more about - Document security + Document security import { goto } from '$app/navigation'; import { page } from '$app/stores'; - import { registerCommands, updateCommandGroupRanks } from '$lib/commandCenter'; + import { addSubPanel, registerCommands, registerSearchers, updateCommandGroupRanks } from '$lib/commandCenter'; + import { CreateMessagePanel } from '$lib/commandCenter/panels'; + import { messagesSearcher } from '$lib/commandCenter/searchers/messages'; + import { providersSearcher } from '$lib/commandCenter/searchers/providers'; + import { topicsSearcher } from '$lib/commandCenter/searchers/topics'; import { project } from '../store'; - import { showCreate } from './store'; - - // TODO: finalize the commands $: $registerCommands([ { label: 'Create message', - callback: () => { - if (!$page.url.pathname.endsWith('messaging')) { - goto(`/console/project-${$project.$id}/messaging`); - } - $showCreate = true; - }, keys: $page.url.pathname.endsWith('messaging') ? ['c'] : ['c', 'm'], + callback() { + addSubPanel(CreateMessagePanel); + }, icon: 'plus', group: 'messaging' }, { - label: 'Go to topics', + label: 'Go to Topics', + keys: ['g', 't'], callback() { goto(`/console/project-${$project.$id}/messaging/topics`); }, - keys: ['g', 't'], disabled: $page.url.pathname.endsWith('topics') || $page.url.pathname.includes('message-'), group: 'navigation', - rank: 10 + rank: 1, }, { - label: 'Go to providers', + label: 'Go to Providers', + keys: ['g', 'k'], callback() { goto(`/console/project-${$project.$id}/messaging/providers`); }, - keys: ['g', 'p'], disabled: - $page.url.pathname.endsWith('topics') || $page.url.pathname.includes('message-'), + $page.url.pathname.endsWith('providers') || $page.url.pathname.includes('message-'), group: 'navigation', - rank: 10 + rank: 2, } - // { - // label: 'Find messages', - // callback: () => { - // addSubPanel(BucketsPanel); - // }, - // group: 'messaging', - // rank: -1 - // } ]); - $: $updateCommandGroupRanks({ messaging: 200, navigation: 100 }); + $registerSearchers(messagesSearcher, providersSearcher, topicsSearcher); + + $: $updateCommandGroupRanks({ messaging: 400, providers: 300, topics: 200, navigation: 100 }); diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+layout.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+layout.svelte index 525eedb90..68777b1b6 100644 --- a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+layout.svelte +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+layout.svelte @@ -1,3 +1,37 @@ + + Topic - Appwrite From c35ff02df79cf0180dc8ba254510bc1de9856347 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Thu, 29 Feb 2024 21:12:00 +0530 Subject: [PATCH 2/7] chore: add prefix keys --- src/lib/commandCenter/commands.ts | 1 + src/lib/commandCenter/searchers/messages.ts | 17 +++++++++++++-- src/lib/commandCenter/searchers/providers.ts | 15 ++++++++++++- src/routes/auth/+layout.svelte | 21 ------------------- src/routes/console/+layout.svelte | 8 +++---- .../console/project-[project]/+layout.svelte | 19 +++++++++-------- .../project-[project]/auth/+layout.svelte | 19 ++++++++++++++++- .../messaging/+layout.svelte | 7 ++++--- .../topics/topic-[topic]/+layout.svelte | 18 ++++++++++++---- 9 files changed, 80 insertions(+), 45 deletions(-) diff --git a/src/lib/commandCenter/commands.ts b/src/lib/commandCenter/commands.ts index 304ccf603..c24491b6d 100644 --- a/src/lib/commandCenter/commands.ts +++ b/src/lib/commandCenter/commands.ts @@ -18,6 +18,7 @@ const groups = [ 'databases', 'functions', 'messaging', + 'messages', 'providers', 'topics', 'storage', diff --git a/src/lib/commandCenter/searchers/messages.ts b/src/lib/commandCenter/searchers/messages.ts index 42f871337..a9d8fc54f 100644 --- a/src/lib/commandCenter/searchers/messages.ts +++ b/src/lib/commandCenter/searchers/messages.ts @@ -18,6 +18,19 @@ const getLabel = (message) => { } }; +const getIcon = (message) => { + switch (message.providerType) { + case MessagingProviderType.Push: + return 'device-mobile'; + case MessagingProviderType.Sms: + return 'annotation'; + case MessagingProviderType.Email: + return 'mail'; + default: + return 'send'; + } +} + export const messagesSearcher = (async (query: string) => { const { messages } = await sdk.forProject.messaging.listMessages([], query || undefined); @@ -29,12 +42,12 @@ export const messagesSearcher = (async (query: string) => { .map( (message) => ({ - group: 'messaging', + group: 'messages', label: getLabel(message), callback: () => { goto(`/console/project-${projectId}/messaging/message-${message.$id}`); }, - icon: 'send', + icon: getIcon(message), }) as const ); }) satisfies Searcher; diff --git a/src/lib/commandCenter/searchers/providers.ts b/src/lib/commandCenter/searchers/providers.ts index 289bbe826..d52877db9 100644 --- a/src/lib/commandCenter/searchers/providers.ts +++ b/src/lib/commandCenter/searchers/providers.ts @@ -4,6 +4,19 @@ import { get } from 'svelte/store'; import type { Searcher } from '../commands'; import { sdk } from '$lib/stores/sdk'; +const getIcon = (provider) => { + switch (provider.type) { + case MessagingProviderType.Push: + return 'device-mobile'; + case MessagingProviderType.Sms: + return 'annotation'; + case MessagingProviderType.Email: + return 'mail'; + default: + return 'send'; + } +} + export const providersSearcher = (async (query: string) => { const { providers } = await sdk.forProject.messaging.listProviders([], query || undefined); @@ -20,7 +33,7 @@ export const providersSearcher = (async (query: string) => { callback: () => { goto(`/console/project-${projectId}/messaging/providers/provider-${provider.$id}`); }, - icon: 'cloud', + icon: getIcon(provider), }) as const ); }) satisfies Searcher; diff --git a/src/routes/auth/+layout.svelte b/src/routes/auth/+layout.svelte index 68866be64..f2ffcf1d2 100644 --- a/src/routes/auth/+layout.svelte +++ b/src/routes/auth/+layout.svelte @@ -1,29 +1,8 @@ diff --git a/src/routes/console/+layout.svelte b/src/routes/console/+layout.svelte index 98ce25767..cca3baecb 100644 --- a/src/routes/console/+layout.svelte +++ b/src/routes/console/+layout.svelte @@ -56,7 +56,7 @@ $: $registerCommands([ { - label: 'Go to projects', + label: 'Go to Projects', callback: () => { goto('/console'); }, @@ -66,7 +66,7 @@ $page.url.pathname.includes('/console/organization-') && !$page.url.pathname.endsWith('/members') && !$page.url.pathname.endsWith('/settings'), - rank: -1 + rank: -1 }, { label: 'Ask the AI', @@ -78,11 +78,11 @@ disabled: !isAssistantEnabled }, { - label: 'Go to account', + label: 'Go to Account', callback: () => { goto('/console/account'); }, - keys: ['i'], + keys: ['g', 'i'], group: 'navigation', rank: -2 }, diff --git a/src/routes/console/project-[project]/+layout.svelte b/src/routes/console/project-[project]/+layout.svelte index f025da2ec..11c9ba940 100644 --- a/src/routes/console/project-[project]/+layout.svelte +++ b/src/routes/console/project-[project]/+layout.svelte @@ -15,6 +15,7 @@ userSearcher } from '$lib/commandCenter/searchers'; import { MigrationBox } from '$lib/components'; + import { page } from '$app/stores'; onMount(() => { return sdk.forConsole.client.subscribe(['project', 'console'], (response) => { @@ -32,7 +33,7 @@ callback: () => { goto(`/console/project-${$project.$id}/auth`); }, - keys: ['a'], + keys: ['g', 'a'], group: 'navigation' }, { @@ -40,7 +41,7 @@ callback: () => { goto(`/console/project-${$project.$id}/databases`); }, - keys: ['d'], + keys: ['g', 'd'], group: 'navigation' }, { @@ -48,7 +49,7 @@ callback: () => { goto(`/console/project-${$project.$id}/functions`); }, - keys: ['f'], + keys: ['g', 'f'], group: 'navigation' }, { @@ -56,7 +57,7 @@ callback: () => { goto(`/console/project-${$project.$id}/messaging`); }, - keys: ['m'], + keys: $page.url.pathname.includes('messaging') ? ['m'] : ['g', 'm'], group: 'navigation' }, { @@ -64,23 +65,23 @@ callback: () => { goto(`/console/project-${$project.$id}/storage`); }, - keys: ['s'], + keys: ['g', 's'], group: 'navigation' }, { - label: 'Go to settings', + label: 'Go to Settings', callback: () => { goto(`/console/project-${$project.$id}/settings`); }, - keys: ['p'], + keys: ['g', 'e'], group: 'navigation' }, { - label: 'Go to overview', + label: 'Go to Overview', callback: () => { goto(`/console/project-${$project.$id}`); }, - keys: ['o'], + keys: ['g', 'o'], group: 'navigation' } ]); diff --git a/src/routes/console/project-[project]/auth/+layout.svelte b/src/routes/console/project-[project]/auth/+layout.svelte index cfb6a198b..ca114d653 100644 --- a/src/routes/console/project-[project]/auth/+layout.svelte +++ b/src/routes/console/project-[project]/auth/+layout.svelte @@ -1,7 +1,8 @@