From 8a5eca914cd4c18bf4f92d3cb8f69f93ebf022a2 Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Sat, 6 Sep 2025 14:01:56 +0530 Subject: [PATCH] Refactor spatial input components to use nullable properties and default spatial data --- src/lib/elements/forms/inputLine.svelte | 22 +++--- src/lib/elements/forms/inputPoint.svelte | 10 +-- src/lib/elements/forms/inputPolygon.svelte | 29 ++++++++ .../table-[table]/columns/line.svelte | 23 +++--- .../table-[table]/columns/point.svelte | 16 +++-- .../table-[table]/columns/polygon.svelte | 70 +++++++++---------- .../rows/columns/types/line.svelte | 25 ++++--- .../rows/columns/types/point.svelte | 10 ++- .../table-[table]/store.ts | 28 +++++++- 9 files changed, 139 insertions(+), 94 deletions(-) create mode 100644 src/lib/elements/forms/inputPolygon.svelte diff --git a/src/lib/elements/forms/inputLine.svelte b/src/lib/elements/forms/inputLine.svelte index 4e3f9915f..a89af29b6 100644 --- a/src/lib/elements/forms/inputLine.svelte +++ b/src/lib/elements/forms/inputLine.svelte @@ -4,36 +4,30 @@ import Button from './button.svelte'; import { IconPlus } from '@appwrite.io/pink-icons-svelte'; - let defaultValues: number[][] = [ - [0, 0], - [0, 0] - ]; export let values: number[][]; - export let showDefaults; + export let nullable: boolean; export let onAddPoint: () => void; export let onDeletePoint: () => void = undefined; let required = true; - $: required = showDefaults; + $: required = nullable; $: disableDeletePoints = !values || values.length <= 2; - + - {#each values || defaultValues as value} + {#each values as value} {/each} - - - + diff --git a/src/lib/elements/forms/inputPoint.svelte b/src/lib/elements/forms/inputPoint.svelte index 7fb61d4f6..387ee3283 100644 --- a/src/lib/elements/forms/inputPoint.svelte +++ b/src/lib/elements/forms/inputPoint.svelte @@ -4,9 +4,9 @@ import Button from './button.svelte'; import { IconX } from '@appwrite.io/pink-icons-svelte'; - let defaultValues: number[] = [0, 0]; + let nullableSkeletonShape: number[] = [0, 0]; export let values: number[]; - export let showDefaults; + export let nullable = false; export let deletePoints = false; export let onDeletePoint: () => void = undefined; export let disableDelete = false; @@ -14,8 +14,8 @@ - {#if showDefaults} - {#each defaultValues as _, index} + {#if nullable} + {#each nullableSkeletonShape as _, index} {/each} {:else} @@ -28,7 +28,7 @@ {/each} {/if} {#if deletePoints} - {/if} diff --git a/src/lib/elements/forms/inputPolygon.svelte b/src/lib/elements/forms/inputPolygon.svelte new file mode 100644 index 000000000..169c09d0c --- /dev/null +++ b/src/lib/elements/forms/inputPolygon.svelte @@ -0,0 +1,29 @@ + + + + {#each values as value} + + {/each} + + + + + diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/line.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/line.svelte index 588229e23..4d1233264 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/line.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/line.svelte @@ -35,33 +35,26 @@ - - + + + + Default + Optional + + {}} + onAddPoint={() => {}} /> + diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/line.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/line.svelte index d230c5523..99435757c 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/line.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/line.svelte @@ -2,18 +2,17 @@ import { InputLine } from '$lib/elements/forms'; import type { Models } from '@appwrite.io/console'; import { Layout, Typography } from '@appwrite.io/pink-svelte'; + import { getDefaultSpatialData } from '../../../store'; export let id: string; export let label: string; - export let value: number[][] | null = null; + export let value: number[][]; export let limited: boolean = false; - export let column: Models.ColumnInteger; - const defaultShape = [ - [0, 0], - [0, 0] - ]; + export let column: Models.ColumnLine; + + const defaultData = getDefaultSpatialData('linestring') as number[][]; function onAddPoint() { - value = [...(value || defaultShape), [0, 0]]; + value = [...(value || defaultData), getDefaultSpatialData('point') as number[]]; } function onDeletePoint() { @@ -21,15 +20,19 @@ } $: nullable = !limited ? !column.required : false; + + $: value = nullable ? null : defaultData; + + $: console.log({ name: column.key, column, nullable }); - {label} + {label} {#if nullable} - optional + optional {/if} - - + diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/point.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/point.svelte index 3bc780172..216394c00 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/point.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/point.svelte @@ -2,6 +2,7 @@ import { InputPoint } from '$lib/elements/forms'; import type { Models } from '@appwrite.io/console'; import { Layout, Typography } from '@appwrite.io/pink-svelte'; + import { getDefaultSpatialData } from '../../../store'; export let id: string; export let label: string; @@ -10,14 +11,17 @@ export let column: Models.ColumnInteger; $: nullable = !limited ? !column.required : false; + + $: value = nullable ? null : (getDefaultSpatialData('point') as number[]); - {label} + {label} {#if nullable} - optional + optional {/if} - + diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/store.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/store.ts index 293eeef8f..be8b019f7 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/store.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/store.ts @@ -1,5 +1,5 @@ import { page } from '$app/stores'; -import type { Column } from '$lib/helpers/types'; +import type { Column, ColumnType } from '$lib/helpers/types'; import type { Models } from '@appwrite.io/console'; import { derived, writable } from 'svelte/store'; import type { SortDirection } from '$lib/components'; @@ -191,3 +191,29 @@ export const PROHIBITED_ROW_KEYS = [ ]; export const sheetHeightStore = writable('74.5vh'); + +export const getDefaultSpatialData = ( + type: Extract +) => { + if (type === 'point') return [0, 0]; + else if (type === 'linestring') + return [ + [0, 0], + [0, 0] + ]; + else if (type === 'polygon') + return [ + [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ] + ]; +};