@@ -122,8 +125,13 @@
size="s"
secondary
disabled={cancel?.disabled}
- on:click={() => (show = false)}
- >{cancel?.text ?? 'Cancel'}
+ on:click={() => {
+ if (cancel?.onClick) {
+ cancel.onClick();
+ } else {
+ show = false;
+ }
+ }}>{cancel?.text ?? 'Cancel'}
- Enable AI to suggest useful columns based on your table name
+ {subtitle}
- {#if $tableColumnSuggestions.enabled}
+ {#if !featureActive}
+
+
+
+ {/if}
+
+
+ {#if $tableColumnSuggestions.enabled && featureActive}
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+page.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+page.svelte
index b6d825c4f..4889cfe4d 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+page.svelte
@@ -31,6 +31,7 @@
import EmptySheet from './layout/emptySheet.svelte';
import CreateRow from './rows/create.svelte';
import { onDestroy } from 'svelte';
+ import { isCloud } from '$lib/system';
import { Empty as SuggestionsEmptySheet, tableColumnSuggestions } from '../(suggestions)';
export let data: PageData;
@@ -75,6 +76,12 @@
$: hasColumns = !!$table.columns.length;
$: hasValidColumns = $table?.columns?.some((col) => col.status === 'available');
+ $: canShowSuggestionsSheet =
+ // enabled, has table details
+ // and it matches current table
+ $tableColumnSuggestions.enabled &&
+ $tableColumnSuggestions.table &&
+ $tableColumnSuggestions.table.id === page.params.table;
async function onSelect(file: Models.File, localFile = false) {
$isCsvImportInProgress = true;
@@ -216,7 +223,7 @@
}
}} />
{/if}
- {:else if $tableColumnSuggestions.enabled && $tableColumnSuggestions.table && $tableColumnSuggestions.table.id === page.params.table}
+ {:else if isCloud && canShowSuggestionsSheet}
{:else}
Date: Mon, 29 Sep 2025 16:52:35 +0530
Subject: [PATCH 103/150] feat: Add relative time tooltips in tables; fix
Messaging Topics empty state
---
.../billing/paymentHistory.svelte | 7 +++--
.../domains/+page.svelte | 10 +++++--
.../auth/+page.svelte | 11 +++++--
.../teams/team-[team]/members/+page.svelte | 4 +--
.../auth/user-[user]/identities/table.svelte | 4 +--
.../auth/user-[user]/memberships/+page.svelte | 4 +--
.../auth/user-[user]/targets/table.svelte | 4 +--
.../database-[database]/delete.svelte | 6 ++--
.../database-[database]/table.svelte | 4 +--
.../messaging/+page.svelte | 4 +--
.../message-[message]/updateTopics.svelte | 29 +++++++++++--------
.../messaging/topics/table.svelte | 6 ++--
.../topics/topic-[topic]/table.svelte | 4 +--
.../overview/(components)/table.svelte | 15 ++++++++--
14 files changed, 70 insertions(+), 42 deletions(-)
diff --git a/src/routes/(console)/organization-[organization]/billing/paymentHistory.svelte b/src/routes/(console)/organization-[organization]/billing/paymentHistory.svelte
index e6c787b0d..d8085642a 100644
--- a/src/routes/(console)/organization-[organization]/billing/paymentHistory.svelte
+++ b/src/routes/(console)/organization-[organization]/billing/paymentHistory.svelte
@@ -3,7 +3,7 @@
import { onMount } from 'svelte';
import { CardGrid, PaginationInline } from '$lib/components';
import { Button } from '$lib/elements/forms';
- import { toLocaleDate } from '$lib/helpers/date';
+ import DualTimeView from '$lib/components/dualTimeView.svelte';
import { formatCurrency } from '$lib/helpers/numbers';
import type { Invoice, InvoiceList } from '$lib/sdk/billing';
import { getApiEndpoint, sdk } from '$lib/stores/sdk';
@@ -112,8 +112,9 @@
{#each invoiceList?.invoices as invoice (invoice.$id)}
{@const status = invoice.status}
- {toLocaleDate(invoice.dueAt)}
+
+
+
{@const isDanger =
status === 'overdue' ||
diff --git a/src/routes/(console)/organization-[organization]/domains/+page.svelte b/src/routes/(console)/organization-[organization]/domains/+page.svelte
index 4e98e3d80..ec6c271e0 100644
--- a/src/routes/(console)/organization-[organization]/domains/+page.svelte
+++ b/src/routes/(console)/organization-[organization]/domains/+page.svelte
@@ -4,7 +4,7 @@
import { EmptySearch, PaginationWithLimit, ViewSelector } from '$lib/components/index.js';
import { Button } from '$lib/elements/forms';
import Link from '$lib/elements/link.svelte';
- import { toLocaleDateTime } from '$lib/helpers/date';
+ import DualTimeView from '$lib/components/dualTimeView.svelte';
import Container from '$lib/layout/container.svelte';
import { protocol } from '$routes/(console)/store.js';
import {
@@ -103,9 +103,13 @@
{:else if column.id === 'nameservers'}
{domain.nameservers || '-'}
{:else if column.id === 'expiry_date'}
- {domain?.expire ? toLocaleDateTime(domain.expire) : '-'}
+ {#if domain?.expire}
+
+ {:else}-{/if}
{:else if column.id === 'renewal'}
- {domain?.renewal ? toLocaleDateTime(domain.renewal) : '-'}
+ {#if domain?.renewal}
+
+ {:else}-{/if}
{:else if column.id === 'auto_renewal'}
{domain?.autoRenewal ? 'On' : 'Off'}
{/if}
diff --git a/src/routes/(console)/project-[region]-[project]/auth/+page.svelte b/src/routes/(console)/project-[region]-[project]/auth/+page.svelte
index 2bc7fb4fa..24b959222 100644
--- a/src/routes/(console)/project-[region]-[project]/auth/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/auth/+page.svelte
@@ -15,7 +15,8 @@
SearchQuery
} from '$lib/components';
import { Button } from '$lib/elements/forms';
- import { toLocaleDate, toLocaleDateTime } from '$lib/helpers/date';
+ import { toLocaleDate } from '$lib/helpers/date';
+ import DualTimeView from '$lib/components/dualTimeView.svelte';
import { Container } from '$lib/layout';
import type { Models } from '@appwrite.io/console';
import { writable } from 'svelte/store';
@@ -196,9 +197,13 @@
{user.labels.join(', ')}
{:else if id === 'joined'}
- {toLocaleDateTime(user.registration)}
+
{:else if id === 'lastActivity'}
- {user.accessedAt ? toLocaleDate(user.accessedAt) : 'never'}
+ {#if user.accessedAt}
+
+ {:else}
+ never
+ {/if}
{:else}
{user[id]}
{/if}
diff --git a/src/routes/(console)/project-[region]-[project]/auth/teams/team-[team]/members/+page.svelte b/src/routes/(console)/project-[region]-[project]/auth/teams/team-[team]/members/+page.svelte
index 00d33151b..629c5bdda 100644
--- a/src/routes/(console)/project-[region]-[project]/auth/teams/team-[team]/members/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/auth/teams/team-[team]/members/+page.svelte
@@ -6,7 +6,7 @@
import type { Models } from '@appwrite.io/console';
import { invalidate } from '$app/navigation';
import { base } from '$app/paths';
- import { toLocaleDateTime } from '$lib/helpers/date';
+ import DualTimeView from '$lib/components/dualTimeView.svelte';
import type { PageData } from './$types';
import CreateMember from '../createMembership.svelte';
import DeleteMembership from '../deleteMembership.svelte';
@@ -117,7 +117,7 @@
{membership.roles}
- {toLocaleDateTime(membership.joined)}
+
{/if}
{:else}
{identity[column.id]}
diff --git a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/memberships/+page.svelte b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/memberships/+page.svelte
index ca235085a..0deaed8da 100644
--- a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/memberships/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/memberships/+page.svelte
@@ -7,7 +7,7 @@
import DeleteMembership from '../deleteMembership.svelte';
import type { Models } from '@appwrite.io/console';
import { trackEvent, Submit, trackError } from '$lib/actions/analytics';
- import { toLocaleDateTime } from '$lib/helpers/date';
+ import DualTimeView from '$lib/components/dualTimeView.svelte';
import {
Table,
Layout,
@@ -108,7 +108,7 @@
{membership.roles}
- {toLocaleDateTime(membership.joined)}
+
{/if}
{:else if column.id === '$createdAt'}
- {toLocaleDateTime(target[column.id])}
+
{:else}
{target[column.id]}
{/if}
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/delete.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/delete.svelte
index 47a70368a..be59aa9ab 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/delete.svelte
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/delete.svelte
@@ -8,7 +8,7 @@
import { addNotification } from '$lib/stores/notifications';
import { sdk } from '$lib/stores/sdk';
import { database } from './store';
- import { toLocaleDate } from '$lib/helpers/date';
+ import DualTimeView from '$lib/components/dualTimeView.svelte';
import { type Models, Query } from '@appwrite.io/console';
import { Spinner, Table } from '@appwrite.io/pink-svelte';
@@ -126,7 +126,9 @@
{#each tableItems as table}
{table.name}
- {toLocaleDate(table.updatedAt)}
+
+
+
{/each}
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table.svelte
index 76334874f..f5d09f380 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table.svelte
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table.svelte
@@ -6,7 +6,7 @@
import { Id } from '$lib/components';
import { Dependencies } from '$lib/constants';
import { Button } from '$lib/elements/forms';
- import { toLocaleDateTime } from '$lib/helpers/date';
+ import DualTimeView from '$lib/components/dualTimeView.svelte';
import { addNotification } from '$lib/stores/notifications';
import { canWriteTables } from '$lib/stores/roles';
import { sdk } from '$lib/stores/sdk';
@@ -76,7 +76,7 @@
{:else if column.id === 'name'}
{table.name}
{:else}
- {toLocaleDateTime(table[column.id])}
+
{/if}
{/each}
diff --git a/src/routes/(console)/project-[region]-[project]/messaging/+page.svelte b/src/routes/(console)/project-[region]-[project]/messaging/+page.svelte
index fcc732593..991d0ba6c 100644
--- a/src/routes/(console)/project-[region]-[project]/messaging/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/messaging/+page.svelte
@@ -4,7 +4,7 @@
import { Empty, EmptyFilter, EmptySearch, Id, PaginationWithLimit } from '$lib/components';
import { hasPageQueries } from '$lib/components/filters';
import { Button } from '$lib/elements/forms';
- import { toLocaleDateTime } from '$lib/helpers/date';
+ import DualTimeView from '$lib/components/dualTimeView.svelte';
import { Container, ResponsiveContainerHeader } from '$lib/layout';
import { MessagingProviderType } from '@appwrite.io/console';
import CreateMessageDropdown from './createMessageDropdown.svelte';
@@ -208,7 +208,7 @@
{#if !message[column.id]}
-
{:else}
- {toLocaleDateTime(message[column.id])}
+
{/if}
{:else}
{message[column.id]}
diff --git a/src/routes/(console)/project-[region]-[project]/messaging/message-[message]/updateTopics.svelte b/src/routes/(console)/project-[region]-[project]/messaging/message-[message]/updateTopics.svelte
index 2fb9b53c4..c7af348e6 100644
--- a/src/routes/(console)/project-[region]-[project]/messaging/message-[message]/updateTopics.svelte
+++ b/src/routes/(console)/project-[region]-[project]/messaging/message-[message]/updateTopics.svelte
@@ -1,6 +1,7 @@
-{#if shouldShowEmailBanner && isProduction}
+{#if shouldShowEmailBanner}
To avoid losing access to your projects, make sure
Date: Tue, 30 Sep 2025 13:03:23 +0530
Subject: [PATCH 117/150] update: stuff with title, subtitle, cta and overall
layout with suggestions input component.
---
.../(suggestions)/input.svelte | 52 +++++++++----------
1 file changed, 24 insertions(+), 28 deletions(-)
diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/(suggestions)/input.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/(suggestions)/input.svelte
index 0d43c74f0..842329a9c 100644
--- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/(suggestions)/input.svelte
+++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/(suggestions)/input.svelte
@@ -1,13 +1,11 @@
-
-
+
+
Smart column suggestions
-
-
-
-
+ >{title}
{subtitle}
+
+ {#if featureActive}
+
+
+
+ {/if}
{#if !featureActive}
-
-
- {
- customColumns = [];
- resetSuggestionsStore();
- }}>
- Are you sure you want to dismiss these columns suggested by AI? This action is irreversible.
-
-
- {
- customColumns = [];
- resetSuggestionsStore();
- confirmNavigation = false;
-
- if (pendingNavigationUrl) {
- if (pendingNavigationUrl === 'create-table') {
- executeCreateTable();
- } else {
- goto(pendingNavigationUrl);
- }
-
- pendingNavigationUrl = null;
- }
- }}>
- You have unsaved column suggestions. If you leave this page, you'll lose these suggestions. Are
- you sure you want to continue?
-
-