Skip to content
This repository was archived by the owner on Sep 21, 2026. It is now read-only.

Commit 596ec41

Browse files
committed
Merge branch 'feat-documentsdb' of https://github.com/appwrite/console into feat-documentsdb
2 parents 711efc6 + ad0b98c commit 596ec41

33 files changed

Lines changed: 1847 additions & 561 deletions

File tree

‎bun.lock‎

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

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
"immutable": "^5.1.5",
107107
"flatted": "^3.4.2",
108108
"yaml": "^1.10.3",
109-
"picomatch": "^2.3.2",
109+
"picomatch": "^4.0.4",
110110
"cookie": "^0.7.0"
111111
}
112112
}

‎src/lib/flags.ts‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import type { Models } from '@appwrite.io/console';
55
// Parse feature flags from env as a string array (exact match only)
66
const flagsRaw = (env.PUBLIC_CONSOLE_FEATURE_FLAGS ?? '').split(',');
77

8-
// @ts-expect-error: unused method!
98
function isFlagEnabled(name: string) {
109
// loose generic to allow safe access while retaining type safety
1110
return <T extends { account?: Account; organization?: Models.Organization }>(data: T) => {
@@ -19,4 +18,6 @@ function isFlagEnabled(name: string) {
1918
};
2019
}
2120

22-
export const flags = {};
21+
export const flags = {
22+
multiDb: isFlagEnabled('multi-db')
23+
};

‎src/routes/(console)/project-[region]-[project]/databases/(assets)/dark/documents-db.svg‎

Lines changed: 39 additions & 62 deletions
Loading

‎src/routes/(console)/project-[region]-[project]/databases/(assets)/dark/tables-db.svg‎

Lines changed: 102 additions & 97 deletions
Loading

‎src/routes/(console)/project-[region]-[project]/databases/(assets)/dark/vectors-db.svg‎

Lines changed: 65 additions & 0 deletions
Loading

‎src/routes/(console)/project-[region]-[project]/databases/(assets)/documents-db.svg‎

Lines changed: 38 additions & 61 deletions
Loading

‎src/routes/(console)/project-[region]-[project]/databases/(assets)/tables-db.svg‎

Lines changed: 105 additions & 100 deletions
Loading

‎src/routes/(console)/project-[region]-[project]/databases/(assets)/vectors-db.svg‎

Lines changed: 70 additions & 0 deletions
Loading

‎src/routes/(console)/project-[region]-[project]/databases/+page.svelte‎

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
<script lang="ts">
22
import { goto } from '$app/navigation';
33
import { page } from '$app/state';
4-
import { PaginationWithLimit } from '$lib/components';
4+
import { Empty, PaginationWithLimit } from '$lib/components';
55
import { Button } from '$lib/elements/forms';
66
import { Container, ResponsiveContainerHeader } from '$lib/layout';
7+
import type { Models } from '@appwrite.io/console';
78
9+
import Create from './create.svelte';
810
import Grid from './grid.svelte';
911
import { columns } from './store';
1012
import Table from './table.svelte';
@@ -23,23 +25,47 @@
2325
2426
import { resolveRoute, withPath } from '$lib/stores/navigation';
2527
import EmptyDatabaseCloud from './empty.svelte';
28+
import { flags } from '$lib/flags';
29+
import { user } from '$lib/stores/user';
30+
import { project } from '../store';
2631
2732
const { data }: PageProps = $props();
2833
34+
let showCreate = $state(false);
35+
36+
const isMultiDb = $derived(flags.multiDb({ account: $user, organization: $organization }));
2937
const isLimited = $derived(isServiceLimited('databases', $organization, data.databases.total));
3038
39+
async function handleCreate(event: CustomEvent<Models.Database>) {
40+
showCreate = false;
41+
await goto(
42+
resolveRoute('/(console)/project-[region]-[project]/databases/database-[database]', {
43+
...page.params,
44+
database: event.detail.$id
45+
})
46+
);
47+
}
48+
3149
async function goToCreateDatabaseWizard() {
3250
await goto(
3351
resolveRoute('/(console)/project-[region]-[project]/databases/create', page.params)
3452
);
3553
}
3654
55+
function triggerCreate() {
56+
if (isMultiDb) {
57+
goToCreateDatabaseWizard();
58+
} else {
59+
showCreate = true;
60+
}
61+
}
62+
3763
$effect(() => {
3864
$registerCommands([
3965
{
4066
label: 'Create database',
4167
callback: () => {
42-
goToCreateDatabaseWizard();
68+
triggerCreate();
4369
},
4470
keys: ['c'],
4571
disabled: !$canWriteDatabases || isLimited,
@@ -56,7 +82,7 @@
5682

5783
{#if data.databases.total}
5884
{#if data.view === 'grid'}
59-
<Grid {data} onCreateDatabaseClick={goToCreateDatabaseWizard} />
85+
<Grid {data} onCreateDatabaseClick={triggerCreate} />
6086
{:else}
6187
<Table
6288
entities={data.entities}
@@ -77,7 +103,7 @@
77103
size="s"
78104
secondary>Clear Search</Button>
79105
</EmptySearch>
80-
{:else}
106+
{:else if isMultiDb}
81107
<EmptyDatabaseCloud
82108
disabled={$canWriteDatabases}
83109
onDatabaseTypeSelected={async (type) => {
@@ -91,9 +117,17 @@
91117
)
92118
);
93119
}} />
120+
{:else}
121+
<Empty
122+
single
123+
target="database"
124+
allowCreate={$canWriteDatabases}
125+
on:click={() => (showCreate = true)} />
94126
{/if}
95127
</Container>
96128

129+
<Create bind:showCreate project={$project} on:created={handleCreate} />
130+
97131
{#snippet containerHeader()}
98132
<ResponsiveContainerHeader
99133
hasSearch
@@ -103,10 +137,7 @@
103137
{#if $canWriteDatabases}
104138
<Tooltip disabled={!isLimited} maxWidth={BODY_TOOLTIP_MAX_WIDTH}>
105139
<div>
106-
<Button
107-
disabled={isLimited}
108-
event="create_database"
109-
on:click={goToCreateDatabaseWizard}>
140+
<Button disabled={isLimited} event="create_database" on:click={triggerCreate}>
110141
<Icon icon={IconPlus} slot="start" size="s" />
111142
Create database
112143
</Button>

0 commit comments

Comments
 (0)