From d240c6718ecc238a57059b0940912e190ae1e846 Mon Sep 17 00:00:00 2001 From: Harsh Mahajan <127186841+HarshMN2345@users.noreply.github.com> Date: Tue, 12 Aug 2025 18:59:27 +0530 Subject: [PATCH 1/7] feat: added create more functionality --- .../table-[table]/createRecord.svelte | 90 ++++++++++++------- 1 file changed, 58 insertions(+), 32 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte index 53cf2f8949..77650eb85f 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte @@ -9,10 +9,11 @@ import { Permissions } from '$lib/components/permissions'; import type { Columns } from './store'; import { ID, type Models } from '@appwrite.io/console'; - import { Alert, Layout, Typography } from '@appwrite.io/pink-svelte'; + import { Alert, Layout, Typography, Selector } from '@appwrite.io/pink-svelte'; import SideSheet from './layout/sidesheet.svelte'; import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; + import { tick } from 'svelte'; let { table, @@ -26,6 +27,8 @@ let isSubmitting = $state(false); let columnFormWrapper: HTMLDivElement | null = $state(null); + let createMore = $state(false); + let formResetKey = $state(0); type CreateRow = { id?: string; @@ -65,18 +68,23 @@ permissions: $createRow.permissions }); - showSheet = false; addNotification({ message: 'Row has been created', type: 'success' }); - // post op clear. - existingData = null; trackEvent(Submit.RowCreate, { customId: !!$createRow.id }); await invalidate(Dependencies.ROW); + + if (createMore) { + createRow = createRowWritable(); + existingData = null; + formResetKey += 1; + await tick(); + focusFirstInput(); + } } catch (error) { addNotification({ message: error.message, @@ -100,6 +108,8 @@ if (showSheet) { focusFirstInput(); createRow = createRowWritable(); + } else { + createMore = false; } }); @@ -115,36 +125,52 @@ submit={{ text: 'Create', disabled: isSubmitting, - onClick: () => create() + onClick: async () => { + await create(); + if (createMore) { + throw new Error('Keep open'); + } + } }}> -
- -
- - - - Choose which permission scopes to grant your application. It is best - practice to allow only the permissions you need to meet your project goals. - - {#if table.rowSecurity} - - Row security is enabled - Users will be able to access this row if they have been granted - either row or table permissions. - - - {:else} - - Row security is disabled - If you want to assign row permissions, navigate to Table settings and enable - row security. Otherwise, only table permissions will be used. - - {/if} - + {#key formResetKey} +
+ +
+ + + + Choose which permission scopes to grant your application. It is best + practice to allow only the permissions you need to meet your project goals. + + {#if table.rowSecurity} + + Row security is enabled + Users will be able to access this row if they have been granted + either row or table permissions. + + + {:else} + + Row security is disabled + If you want to assign row permissions, navigate to Table settings and enable + row security. Otherwise, only table permissions will be used. + + {/if} + + {/key} + + +
+ + From 92e6874818acdae23f369b61d5023e4bedbf3268 Mon Sep 17 00:00:00 2001 From: Harsh Mahajan <127186841+HarshMN2345@users.noreply.github.com> Date: Wed, 13 Aug 2025 19:17:26 +0530 Subject: [PATCH 2/7] fix: changed position of create more button --- .../table-[table]/createRecord.svelte | 30 +++++++++---------- .../table-[table]/layout/sidesheet.svelte | 14 +++++++-- .../table-[table]/spreadsheet.svelte | 3 +- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte index 77650eb85f..bf8c1c1ce5 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte @@ -117,6 +117,11 @@ {#if $createRow}
+ {#snippet footer()} + + + + {/snippet} + }} + {footer}> {#key formResetKey}
@@ -144,33 +150,27 @@ Choose which permission scopes to grant your application. It is best - practice to allow only the permissions you need to meet your project goals. + practice to allow only the permissions you need to meet your project + goals. {#if table.rowSecurity} - Row security is enabled + Row security is enabled Users will be able to access this row if they have been granted either row or table permissions. {:else} - Row security is disabled - If you want to assign row permissions, navigate to Table settings and enable - row security. Otherwise, only table permissions will be used. + Row security is disabled + If you want to assign row permissions, navigate to Table settings and + enable row security. Otherwise, only table permissions will be used. {/if} {/key} - - - - -
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte index 243c965e3c..213fa6cc9c 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte @@ -9,7 +9,8 @@ spaced = false, closeOnBlur = false, submit, - children = null + children = null, + footer = null }: { show: boolean; title: string; @@ -23,6 +24,7 @@ } | undefined; children?: Snippet; + footer?: Snippet | null; } = $props(); @@ -56,10 +58,16 @@ diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte index 213fa6cc9c..f5d93e7716 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte @@ -20,7 +20,7 @@ | { text: string; disabled?: boolean; - onClick?: () => void | Promise; + onClick?: () => boolean | void | Promise; } | undefined; children?: Snippet; @@ -42,8 +42,10 @@
{ try { - await submit?.onClick(); - show = false; + const keepOpen = await submit?.onClick?.(); + if (!keepOpen) { + show = false; + } } catch (error) { // error occurred, dont close the sidebar } From 26a2210c58510941e090b81f71b4a226eace4f89 Mon Sep 17 00:00:00 2001 From: Harsh Mahajan <127186841+HarshMN2345@users.noreply.github.com> Date: Mon, 18 Aug 2025 12:02:10 +0530 Subject: [PATCH 4/7] refactor: added a function instead of directly calling it --- .../database-[database]/table-[table]/createRecord.svelte | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte index dd10739a3c..c2c3d30d6b 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte @@ -53,6 +53,10 @@ }; } + function resetCreateRow(): void { + createRow.set(computeInitialCreateRow()); + } + let createRow = writable(computeInitialCreateRow()); async function create(): Promise { @@ -78,7 +82,7 @@ await invalidate(Dependencies.ROW); if (createMore) { - createRow.set(computeInitialCreateRow()); + resetCreateRow(); existingData = null; await tick(); focusFirstInput(); @@ -108,7 +112,7 @@ $effect(() => { if (showSheet) { focusFirstInput(); - createRow.set(computeInitialCreateRow()); + resetCreateRow(); } else { createMore = false; } From aa59ebc57ba48468bbe49240c086eb5bf7154243 Mon Sep 17 00:00:00 2001 From: Harsh Mahajan <127186841+HarshMN2345@users.noreply.github.com> Date: Mon, 18 Aug 2025 12:09:42 +0530 Subject: [PATCH 5/7] refactor: render footer directly --- .../table-[table]/createRecord.svelte | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte index c2c3d30d6b..cdcfea0432 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte @@ -122,11 +122,6 @@ {#if $createRow}
- {#snippet footer()} - - - - {/snippet} await create() - }} - {footer}> + }}> + {#snippet footer()} + + + + {/snippet} +
Date: Fri, 22 Aug 2025 17:28:04 +0530 Subject: [PATCH 6/7] lint error --- .../table-[table]/layout/sidesheet.svelte | 2 +- .../table-[table]/rows/create.svelte | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte index 18bb969fae..fdf17be7fd 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte @@ -18,7 +18,7 @@ | { text: string; disabled?: boolean; - onClick?: () => boolean | void | Promise; + onClick?: () => boolean | Promise; } | undefined; children?: Snippet; diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/create.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/create.svelte index f788927401..ebc46bbafa 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/create.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/create.svelte @@ -44,12 +44,12 @@ row: existingData ? existingData : availableColumns.reduce( - (acc, attr) => { - acc[attr.key] = attr.array ? [] : null; - return acc; - }, - {} as Record - ), + (acc, attr) => { + acc[attr.key] = attr.array ? [] : null; + return acc; + }, + {} as Record + ), permissions: [], columns: availableColumns }; From e32033c4aef24d6501d0eda224edbaccd689b6a9 Mon Sep 17 00:00:00 2001 From: Harsh Mahajan <127186841+HarshMN2345@users.noreply.github.com> Date: Fri, 22 Aug 2025 18:04:08 +0530 Subject: [PATCH 7/7] Update onClick type to allow void return --- .../database-[database]/table-[table]/layout/sidesheet.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte index fdf17be7fd..18bb969fae 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/layout/sidesheet.svelte @@ -18,7 +18,7 @@ | { text: string; disabled?: boolean; - onClick?: () => boolean | Promise; + onClick?: () => boolean | void | Promise; } | undefined; children?: Snippet;