From fe7ea4113b79ebfeb9b0eaae1e06d6e35e00f1ac Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Sat, 6 Sep 2025 14:58:32 +0530 Subject: [PATCH] Add InputPolygon component and enhance spatial input handling - Introduced InputPolygon component for polygon spatial data input. - Updated InputLine and InputPoint components to support index-based point addition and deletion. - Modified line and point components to handle default spatial data more effectively. - Enhanced column components to manage spatial data types including polygon. --- src/lib/elements/forms/index.ts | 1 + src/lib/elements/forms/inputLine.svelte | 15 +++---- src/lib/elements/forms/inputPolygon.svelte | 18 ++++++--- .../table-[table]/columns/line.svelte | 31 +++++++++------ .../table-[table]/columns/point.svelte | 9 ++++- .../table-[table]/columns/polygon.svelte | 39 +++++++++++++++++-- .../table-[table]/rows/columns/column.svelte | 4 +- .../rows/columns/types/line.svelte | 11 +++++- .../rows/columns/types/polygon.svelte | 27 +++++++++++++ 9 files changed, 121 insertions(+), 34 deletions(-) create mode 100644 src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/polygon.svelte diff --git a/src/lib/elements/forms/index.ts b/src/lib/elements/forms/index.ts index bae2ceff5..8dcb7e5aa 100644 --- a/src/lib/elements/forms/index.ts +++ b/src/lib/elements/forms/index.ts @@ -33,3 +33,4 @@ export { default as InputFilePicker } from './inputFilePicker.svelte'; export { default as Seekbar } from './Seekbar.svelte'; export { default as InputPoint } from './inputPoint.svelte'; export { default as InputLine } from './inputLine.svelte'; +export { default as InputPolygon } from './inputPolygon.svelte'; diff --git a/src/lib/elements/forms/inputLine.svelte b/src/lib/elements/forms/inputLine.svelte index a89af29b6..5fc0089e7 100644 --- a/src/lib/elements/forms/inputLine.svelte +++ b/src/lib/elements/forms/inputLine.svelte @@ -6,28 +6,29 @@ export let values: number[][]; export let nullable: boolean; - export let onAddPoint: () => void; - export let onDeletePoint: () => void = undefined; + export let disableDeletePointsCountPerLine: number = 2; + export let onAddPoint: (index: number) => void; + export let onDeletePoint: (index: number) => void = undefined; let required = true; $: required = nullable; - - $: disableDeletePoints = !values || values.length <= 2; + let disableDeletePoints = false; + $: disableDeletePoints = !values || values.length <= disableDeletePointsCountPerLine; - {#each values as value} + {#each values as value, index} + onDeletePoint={() => onDeletePoint(index)} /> {/each} - diff --git a/src/lib/elements/forms/inputPolygon.svelte b/src/lib/elements/forms/inputPolygon.svelte index 169c09d0c..e21cfb01c 100644 --- a/src/lib/elements/forms/inputPolygon.svelte +++ b/src/lib/elements/forms/inputPolygon.svelte @@ -7,9 +7,10 @@ export let values: NestedNumberArray; export let nullable; - export let onAddPoint: () => void; - export let onAddLine: () => void; - export let onDeletePoint: () => void = undefined; + export let onAddPoint: (index: number) => void; + export let onAddLine: (index: number) => void; + export let onDeletePoint: (index: number) => void = undefined; + export let disableDeletePointsCountPerLine: number = 4; let required = true; @@ -17,12 +18,17 @@ - {#each values as value} - + {#each values as value, index} + onAddPoint(index)} + nullable={required} + onDeletePoint={() => onDeletePoint(index)} + {disableDeletePointsCountPerLine} /> {/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 4d1233264..b811f07c3 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,19 +35,23 @@ + onDeletePoint={deleteCoordinate} + {disableDeletePoints} /> diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/point.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/point.svelte index 663a5b2fb..503e930ed 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/point.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/point.svelte @@ -39,12 +39,13 @@ import { getDefaultSpatialData } from '../store'; import { createConservative } from '$lib/helpers/stores'; import { Selector, Typography, Layout } from '@appwrite.io/pink-svelte'; + import { onMount } from 'svelte'; const defaultData = getDefaultSpatialData('point') as number[]; export let data: Partial = { required: false, - default: defaultData + default: null }; let savedDefault = data.default; @@ -68,6 +69,10 @@ }); $: listen(data); + onMount(() => { + data.default = data.required ? null : defaultData; + }); + $: handleDefaultState($required); $: showDefaultPointDummyData = $required ? true : false; @@ -86,5 +91,5 @@ Default Optional - + diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/polygon.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/polygon.svelte index cde0ede51..6f3f7bbfc 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/polygon.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/polygon.svelte @@ -37,13 +37,14 @@ @@ -34,5 +36,10 @@ >optional {/if} - + diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/polygon.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/polygon.svelte new file mode 100644 index 000000000..216394c00 --- /dev/null +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/polygon.svelte @@ -0,0 +1,27 @@ + + + + + {label} + {#if nullable} + optional + {/if} + + +