diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.ts
index 45f8ef087..0bf7018c2 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.ts
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.ts
@@ -4,10 +4,13 @@ import { sdk } from '$lib/stores/sdk';
import { Query } from '@appwrite.io/console';
import type { PageLoad } from './$types';
import { queries, queryParamToMap } from '$lib/components/filters';
+import { buildWildcardAttributesQuery } from './document-[document]/attributes/store';
-export const load: PageLoad = async ({ params, depends, url, route }) => {
+export const load: PageLoad = async ({ params, depends, url, route, parent }) => {
+ const { collection } = await parent();
depends(Dependencies.DOCUMENT); /* TODO: we could just invalidate the documents maybe*/
depends(Dependencies.DOCUMENTS);
+
const page = getPage(url);
// TODO: apply pagination
const limit = getLimit(url, route, 96 /*PAGE_LIMIT*/);
@@ -17,6 +20,7 @@ export const load: PageLoad = async ({ params, depends, url, route }) => {
const paramQueries = url.searchParams.get('query');
const parsedQueries = queryParamToMap(paramQueries || '[]');
+
queries.set(parsedQueries);
return {
@@ -30,7 +34,8 @@ export const load: PageLoad = async ({ params, depends, url, route }) => {
Query.limit(limit),
Query.offset(offset),
Query.orderDesc(''),
- ...parsedQueries.values()
+ ...parsedQueries.values(),
+ ...buildWildcardAttributesQuery(collection)
])
};
};
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+layout.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+layout.ts
index 0c83436f4..5e9479dc0 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+layout.ts
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+layout.ts
@@ -4,14 +4,20 @@ import type { LayoutLoad } from './$types';
import Breadcrumbs from './breadcrumbs.svelte';
import Header from './header.svelte';
import type { Attributes } from '../store';
+import { buildWildcardAttributesQuery } from './attributes/store';
export const load: LayoutLoad = async ({ params, parent, depends }) => {
- depends(Dependencies.DOCUMENT);
const { collection } = await parent();
+ depends(Dependencies.DOCUMENT);
const document = await sdk
.forProject(params.region, params.project)
- .databases.getDocument(params.database, params.collection, params.document);
+ .databases.getDocument(
+ params.database,
+ params.collection,
+ params.document,
+ buildWildcardAttributesQuery(collection)
+ );
/**
* Sanitize DateTime to remove UTC Timezone section.
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/boolean.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/boolean.svelte
index a25e6f4c1..7be1202e2 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/boolean.svelte
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/boolean.svelte
@@ -12,6 +12,7 @@
+ ].filter(Boolean)} />
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/email.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/email.svelte
index cf93d4b5f..5d7b9989f 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/email.svelte
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/email.svelte
@@ -6,14 +6,12 @@
export let label: string;
export let value: string | null;
export let attribute: Models.AttributeUrl;
-
- $: nullable = attribute.required ? false : !value;
+ nullable={!attribute.required} />
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/integer.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/integer.svelte
index 00ee6a2af..a0725df98 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/integer.svelte
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/integer.svelte
@@ -6,16 +6,14 @@
export let label: string;
export let value: number;
export let attribute: Models.AttributeInteger;
-
- $: nullable = attribute.required ? false : !value;
+ required={attribute.required}
+ nullable={!attribute.required}
+ step={attribute.type === 'double' ? 'any' : 1} />
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/relationship.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/relationship.svelte
index ceae619eb..f93090172 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/relationship.svelte
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/relationship.svelte
@@ -39,8 +39,6 @@
}
}
- documentList = await getDocuments();
-
if (editing && $doc?.[attribute.key]) {
if ($doc[attribute.key]?.length) {
relatedList =
@@ -59,7 +57,10 @@
});
async function getDocuments(search: string = null) {
- const queries = search ? [Query.startsWith('$id', search), Query.orderDesc('')] : [];
+ const queries = search
+ ? [Query.select(['$id']), Query.startsWith('$id', search), Query.orderDesc('')]
+ : [Query.select(['$id'])];
+
return await sdk
.forProject(page.params.region, page.params.project)
.databases.listDocuments(databaseId, attribute.relatedCollection, queries);
@@ -103,7 +104,7 @@
showInput = false;
}
- //Reactive statements
+ // Reactive statements
$: getDocuments(search).then((res) => (documentList = res));
$: paginatedItems = editing
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/store.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/store.ts
index 3fb3c64de..a599246c4 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/store.ts
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/store.ts
@@ -1,4 +1,4 @@
-import type { Models } from '@appwrite.io/console';
+import { type Models, Query } from '@appwrite.io/console';
import type { Attributes } from '../../store';
export function isRelationshipToMany(attribute: Models.AttributeRelationship) {
@@ -20,3 +20,18 @@ export function isString(attribute: Attributes): attribute is Models.AttributeSt
if (!attribute) return false;
return attribute?.type === 'string';
}
+
+/**
+ * Returns select queries for all main and related fields in a collection.
+ */
+export function buildWildcardAttributesQuery(
+ collection: Models.Collection | null = null
+): string[] {
+ return [
+ ...(collection?.attributes
+ ?.filter((attr) => isRelationship(attr))
+ ?.map((attr) => Query.select([`${attr.key}.*`])) ?? []),
+
+ Query.select(['*'])
+ ];
+}
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/string.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/string.svelte
index 94b18799e..901555a9b 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/string.svelte
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/string.svelte
@@ -6,26 +6,24 @@
export let label: string;
export let value: string;
export let attribute: Models.AttributeString;
-
- $: nullable = attribute.required ? false : !value;
{#if attribute.size >= 50}
+ required={attribute.required}
+ nullable={!attribute.required} />
{:else}
+ required={attribute.required}
+ nullable={!attribute.required} />
{/if}
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/url.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/url.svelte
index d8c74bca7..9a035a067 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/url.svelte
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/url.svelte
@@ -6,14 +6,12 @@
export let label: string;
export let value: string | null;
export let attribute: Models.AttributeUrl;
-
- $: nullable = attribute.required ? false : !value;
+ nullable={!attribute.required} />