added spatial columns

This commit is contained in:
ArnabChatterjee20k
2025-08-29 19:15:37 +05:30
parent b2286a112f
commit 5b211bf50b
6 changed files with 340 additions and 9 deletions
+1 -1
View File
@@ -22,7 +22,7 @@
},
"dependencies": {
"@ai-sdk/svelte": "^1.1.24",
"@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@2428",
"@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@672b0e1",
"@appwrite.io/pink-icons": "0.25.0",
"@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1",
"@appwrite.io/pink-legacy": "^1.0.3",
+5 -5
View File
@@ -12,8 +12,8 @@ importers:
specifier: ^1.1.24
version: 1.1.24(svelte@5.25.3)(zod@3.24.3)
'@appwrite.io/console':
specifier: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@2428
version: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@2428
specifier: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@672b0e1
version: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@672b0e1
'@appwrite.io/pink-icons':
specifier: 0.25.0
version: 0.25.0
@@ -260,8 +260,8 @@ packages:
'@analytics/type-utils@0.6.2':
resolution: {integrity: sha512-TD+xbmsBLyYy/IxFimW/YL/9L2IEnM7/EoV9Aeh56U64Ify8o27HJcKjo38XY9Tcn0uOq1AX3thkKgvtWvwFQg==}
'@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@2428':
resolution: {tarball: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@2428}
'@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@672b0e1':
resolution: {tarball: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@672b0e1}
version: 1.10.0
'@appwrite.io/pink-icons-svelte@2.0.0-RC.1':
@@ -3700,7 +3700,7 @@ snapshots:
'@analytics/type-utils@0.6.2': {}
'@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@2428': {}
'@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@672b0e1': {}
'@appwrite.io/pink-icons-svelte@2.0.0-RC.1(svelte@5.25.3)':
dependencies:
@@ -0,0 +1,99 @@
<script context="module" lang="ts">
import { sdk } from '$lib/stores/sdk';
import { page } from '$app/state';
import type { Models } from '@appwrite.io/console';
export async function submitLine(
databaseId: string,
tableId: string,
key: string,
data: Partial<Models.ColumnBoolean>
) {
await sdk.forProject(page.params.region, page.params.project).tablesDB.createBooleanColumn({
databaseId,
tableId,
key,
required: data.required,
xdefault: data.default,
array: data.array
});
}
export async function updateLine(
databaseId: string,
tableId: string,
data: Partial<Models.ColumnBoolean>,
originalKey?: string
) {
await sdk.forProject(page.params.region, page.params.project).tablesDB.updateBooleanColumn({
databaseId,
tableId,
key: originalKey,
required: data.required,
xdefault: data.default,
newKey: data.key !== originalKey ? data.key : undefined
});
}
</script>
<script lang="ts">
import { InputSelect } from '$lib/elements/forms';
export let editing = false;
export let data: Partial<Models.ColumnBoolean> = {
required: false,
array: false,
default: null
};
import { createConservative } from '$lib/helpers/stores';
import { Selector } from '@appwrite.io/pink-svelte';
let savedDefault = data.default;
function handleDefaultState(hideDefault: boolean) {
if (hideDefault) {
savedDefault = data.default;
data.default = null;
} else {
data.default = savedDefault;
}
}
const {
stores: { required, array },
listen
} = createConservative<Partial<Models.ColumnBoolean>>({
required: false,
array: false,
...data
});
$: listen(data);
$: handleDefaultState($required || $array);
</script>
<InputSelect
id="default"
label="Default value"
placeholder="Select a value"
disabled={data.required || data.array}
options={[
{ label: 'NULL', value: null },
{ label: 'True', value: true },
{ label: 'False', value: false }
]}
bind:value={data.default} />
<Selector.Checkbox
size="s"
id="required"
label="Required"
bind:checked={data.required}
disabled={data.array}
description="Indicate whether this column is required" />
<Selector.Checkbox
size="s"
id="array"
label="Array"
bind:checked={data.array}
disabled={data.required || editing}
description="Indicate whether this column is an array. Defaults to an empty array." />
@@ -0,0 +1,99 @@
<script context="module" lang="ts">
import { sdk } from '$lib/stores/sdk';
import { page } from '$app/state';
import type { Models } from '@appwrite.io/console';
export async function submitPoint(
databaseId: string,
tableId: string,
key: string,
data: Partial<Models.ColumnBoolean>
) {
await sdk.forProject(page.params.region, page.params.project).tablesDB.createBooleanColumn({
databaseId,
tableId,
key,
required: data.required,
xdefault: data.default,
array: data.array
});
}
export async function updatePoint(
databaseId: string,
tableId: string,
data: Partial<Models.ColumnBoolean>,
originalKey?: string
) {
await sdk.forProject(page.params.region, page.params.project).tablesDB.updateBooleanColumn({
databaseId,
tableId,
key: originalKey,
required: data.required,
xdefault: data.default,
newKey: data.key !== originalKey ? data.key : undefined
});
}
</script>
<script lang="ts">
import { InputSelect } from '$lib/elements/forms';
export let editing = false;
export let data: Partial<Models.ColumnBoolean> = {
required: false,
array: false,
default: null
};
import { createConservative } from '$lib/helpers/stores';
import { Selector } from '@appwrite.io/pink-svelte';
let savedDefault = data.default;
function handleDefaultState(hideDefault: boolean) {
if (hideDefault) {
savedDefault = data.default;
data.default = null;
} else {
data.default = savedDefault;
}
}
const {
stores: { required, array },
listen
} = createConservative<Partial<Models.ColumnBoolean>>({
required: false,
array: false,
...data
});
$: listen(data);
$: handleDefaultState($required || $array);
</script>
<InputSelect
id="default"
label="Default value"
placeholder="Select a value"
disabled={data.required || data.array}
options={[
{ label: 'NULL', value: null },
{ label: 'True', value: true },
{ label: 'False', value: false }
]}
bind:value={data.default} />
<Selector.Checkbox
size="s"
id="required"
label="Required"
bind:checked={data.required}
disabled={data.array}
description="Indicate whether this column is required" />
<Selector.Checkbox
size="s"
id="array"
label="Array"
bind:checked={data.array}
disabled={data.required || editing}
description="Indicate whether this column is an array. Defaults to an empty array." />
@@ -0,0 +1,99 @@
<script context="module" lang="ts">
import { sdk } from '$lib/stores/sdk';
import { page } from '$app/state';
import type { Models } from '@appwrite.io/console';
export async function submitPolygon(
databaseId: string,
tableId: string,
key: string,
data: Partial<Models.ColumnBoolean>
) {
await sdk.forProject(page.params.region, page.params.project).tablesDB.createBooleanColumn({
databaseId,
tableId,
key,
required: data.required,
xdefault: data.default,
array: data.array
});
}
export async function updatePolygon(
databaseId: string,
tableId: string,
data: Partial<Models.ColumnBoolean>,
originalKey?: string
) {
await sdk.forProject(page.params.region, page.params.project).tablesDB.updateBooleanColumn({
databaseId,
tableId,
key: originalKey,
required: data.required,
xdefault: data.default,
newKey: data.key !== originalKey ? data.key : undefined
});
}
</script>
<script lang="ts">
import { InputSelect } from '$lib/elements/forms';
export let editing = false;
export let data: Partial<Models.ColumnBoolean> = {
required: false,
array: false,
default: null
};
import { createConservative } from '$lib/helpers/stores';
import { Selector } from '@appwrite.io/pink-svelte';
let savedDefault = data.default;
function handleDefaultState(hideDefault: boolean) {
if (hideDefault) {
savedDefault = data.default;
data.default = null;
} else {
data.default = savedDefault;
}
}
const {
stores: { required, array },
listen
} = createConservative<Partial<Models.ColumnBoolean>>({
required: false,
array: false,
...data
});
$: listen(data);
$: handleDefaultState($required || $array);
</script>
<InputSelect
id="default"
label="Default value"
placeholder="Select a value"
disabled={data.required || data.array}
options={[
{ label: 'NULL', value: null },
{ label: 'True', value: true },
{ label: 'False', value: false }
]}
bind:value={data.default} />
<Selector.Checkbox
size="s"
id="required"
label="Required"
bind:checked={data.required}
disabled={data.array}
description="Indicate whether this column is required" />
<Selector.Checkbox
size="s"
id="array"
label="Array"
bind:checked={data.array}
disabled={data.required || editing}
description="Indicate whether this column is an array. Defaults to an empty array." />
@@ -9,6 +9,9 @@ import Ip, { submitIp, updateIp } from './ip.svelte';
import String, { submitString, updateString } from './string.svelte';
import Url, { submitUrl, updateUrl } from './url.svelte';
import Datetime, { submitDatetime, updateDatetime } from './datetime.svelte';
import Point, { submitPoint, updatePoint } from './point.svelte';
import Line, { submitLine, updateLine } from './line.svelte';
import Polygon, { submitPolygon, updatePolygon } from './polygon.svelte';
import type { Columns } from '../store';
import Relationship, { submitRelationship, updateRelationship } from './relationship.svelte';
import {
@@ -20,7 +23,8 @@ import {
IconMail,
IconRelationship,
IconText,
IconToggle
IconToggle,
IconGlobe
} from '@appwrite.io/pink-icons-svelte';
import type { ComponentType } from 'svelte';
@@ -35,10 +39,13 @@ export type Option = {
| 'IP'
| 'URL'
| 'Enum'
| 'Relationship';
| 'Relationship'
| 'Point'
| 'Line'
| 'Polygon';
sentenceName: string;
component: Component;
type: 'string' | 'integer' | 'double' | 'boolean' | 'datetime' | 'relationship';
type: 'string' | 'integer' | 'double' | 'boolean' | 'datetime' | 'relationship' | 'point' | 'line' | 'polygon';
create: (
databaseId: string,
tableId: string,
@@ -101,6 +108,33 @@ export const columnOptions: Option[] = [
update: updateDatetime,
icon: IconCalendar
},
{
name: 'Point',
sentenceName: 'point',
component: Point,
type: 'point',
create: submitPoint,
update: updatePoint,
icon: IconGlobe
},
{
name: 'Line',
sentenceName: 'line',
component: Line,
type: 'line',
create: submitLine,
update: updateLine,
icon: IconGlobe
},
{
name: 'Polygon',
sentenceName: 'polygon',
component: Polygon,
type: 'polygon',
create: submitPolygon,
update: updatePolygon,
icon: IconGlobe
},
{
name: 'Email',
sentenceName: 'email',