Merge remote-tracking branch 'origin/main' into fix-add-payment-method

This commit is contained in:
Damodar Lohani
2025-07-31 04:59:38 +00:00
10 changed files with 69 additions and 66 deletions
+5 -1
View File
@@ -85,7 +85,11 @@
</script>
<div>
<form on:submit|preventDefault={addFilterAndReset}>
<form
onsubmit={(e) => {
e.preventDefault();
addFilterAndReset();
}}>
<Layout.Stack gap="s" direction="row" alignItems="flex-start">
<InputSelect
id="column"
+23 -17
View File
@@ -8,27 +8,30 @@ import { page } from '$app/state';
import { user } from '$lib/stores/user';
import deepEqual from 'deep-equal';
type Preferences = {
type ConsolePreferences = {
limit?: number;
view?: View;
columns?: string[];
};
} /* support a strict + flexible preference type for TS compatibility */ & Record<
string,
string | number | boolean | object | null | unknown
>;
type TeamPreferences = {
names?: string[];
};
type PreferencesStore = {
[key: string]: Preferences;
type ConsolePreferencesStore = {
[key: string]: ConsolePreferences;
collections?: {
[key: string]: Preferences['columns'];
[key: string]: ConsolePreferences['columns'];
};
displayNames?: {
[key: string]: TeamPreferences['names'];
};
} & { hideAiDisclaimer?: boolean };
async function updateConsolePreferences(store: PreferencesStore): Promise<void> {
async function updateConsolePreferences(store: ConsolePreferencesStore): Promise<void> {
const currentPreferences = get(user)?.prefs ?? (await sdk.forConsole.account.getPrefs());
if (!currentPreferences?.console || Array.isArray(currentPreferences.console)) {
currentPreferences.console = {};
@@ -43,8 +46,8 @@ async function updateConsolePreferences(store: PreferencesStore): Promise<void>
}
function createPreferences() {
const { subscribe, set, update } = writable<PreferencesStore>({});
let preferences: PreferencesStore = {};
const { subscribe, set, update } = writable<ConsolePreferencesStore>({});
let preferences: ConsolePreferencesStore = {};
if (browser) {
// fresh fetch.
@@ -73,9 +76,9 @@ function createPreferences() {
/**
* Update the local store and then synchronizes them on user prefs.
*/
function updateAndSync(callback: (prefs: PreferencesStore) => void): Promise<void> {
let oldPrefsSnapshot: PreferencesStore;
let newPrefsSnapshot: PreferencesStore;
function updateAndSync(callback: (prefs: ConsolePreferencesStore) => void): Promise<void> {
let oldPrefsSnapshot: ConsolePreferencesStore;
let newPrefsSnapshot: ConsolePreferencesStore;
update((currentPrefs) => {
oldPrefsSnapshot = structuredClone(currentPrefs);
@@ -96,7 +99,7 @@ function createPreferences() {
subscribe,
set,
update,
get: (route?: Page['route']): Preferences => {
get: (route?: Page['route']): ConsolePreferences => {
const parsedRoute = route ?? page.route;
return (
preferences?.[parsedRoute.id] ?? {
@@ -106,10 +109,10 @@ function createPreferences() {
}
);
},
getCustomCollectionColumns: (collectionId: string): Preferences['columns'] => {
getCustomCollectionColumns: (collectionId: string): ConsolePreferences['columns'] => {
return preferences?.collections?.[collectionId] ?? [];
},
setLimit: (limit: Preferences['limit']) =>
setLimit: (limit: ConsolePreferences['limit']) =>
updateAndSync((n) => {
const path = page.route.id;
@@ -122,7 +125,7 @@ function createPreferences() {
return n;
}),
setView: (view: Preferences['view']) =>
setView: (view: ConsolePreferences['view']) =>
updateAndSync((n) => {
const path = page.route.id;
@@ -135,7 +138,7 @@ function createPreferences() {
return n;
}),
setColumns: (columns: Preferences['columns']) =>
setColumns: (columns: ConsolePreferences['columns']) =>
updateAndSync((n) => {
const path = page.route.id;
@@ -148,7 +151,10 @@ function createPreferences() {
return n;
}),
setCustomCollectionColumns: (collectionId: string, columns: Preferences['columns']) =>
setCustomCollectionColumns: (
collectionId: string,
columns: ConsolePreferences['columns']
) =>
updateAndSync((n) => {
if (!n?.collections?.[collectionId]) {
n ??= {};
@@ -61,7 +61,7 @@
group: 'databases',
icon: IconPlus,
rank: page.url.pathname.endsWith('backups') ? 10 : 0,
disabled: !isCloud || !$currentPlan.backupsEnabled
disabled: !isCloud || !$currentPlan?.backupsEnabled
},
{
label: 'Create manual backup',
@@ -77,7 +77,7 @@
group: 'databases',
icon: IconPlus,
rank: page.url.pathname.endsWith('backups') ? 10 : 0,
disabled: !isCloud || !$currentPlan.backupsEnabled
disabled: !isCloud || !$currentPlan?.backupsEnabled
},
{
label: 'Go to collections',
@@ -13,7 +13,7 @@
import { Dependencies } from '$lib/constants';
import { Submit, trackEvent, trackError } from '$lib/actions/analytics';
import { collection } from '../../store';
import { page } from '$app/stores';
import { page } from '$app/state';
import { Alert } from '@appwrite.io/pink-svelte';
let showDelete = false;
@@ -23,13 +23,15 @@
async function updatePermissions() {
try {
const { $databaseId, $collectionId, $id: documentId } = $doc;
await sdk
.forProject($page.params.region, $page.params.project)
.forProject(page.params.region, page.params.project)
.databases.updateDocument(
$doc.$databaseId,
$doc.$collectionId,
$doc.$id,
$doc.data,
$databaseId,
$collectionId,
documentId,
undefined,
permissions
);
await invalidate(Dependencies.DOCUMENT);
@@ -56,9 +56,17 @@
await goto(routeBase);
await invalidate(Dependencies.DOMAINS);
} else {
await goto(
`${routeBase}/add-domain/verify-${domainName}?rule=${rule.$id}&domain=${domain.$id}`
);
let redirect = `${routeBase}/add-domain/verify-${domainName}?rule=${rule.$id}`;
if (isCloud) {
/**
* Domains are only on cloud!
* Self-hosted instances have rules.
*/
redirect += `&domain=${domain.$id}`;
}
await goto(redirect);
await invalidate(Dependencies.DOMAINS);
}
} catch (error) {
@@ -1,25 +0,0 @@
import type { Column } from '$lib/helpers/types';
import { writable } from 'svelte/store';
export const columns = writable<Column[]>([
{
id: 'domain',
title: 'Domain',
type: 'string',
format: 'string',
width: { min: 200, max: 550 }
},
{
id: 'redirectUrl',
title: 'Redirect to',
type: 'string',
width: { min: 120, max: 400 }
},
{
id: 'deploymentVcsProviderBranch',
title: 'Production branch',
type: 'string',
width: { min: 90, max: 220 }
}
]);
@@ -15,7 +15,6 @@
} from '@appwrite.io/pink-svelte';
import DeleteDomainModal from './deleteDomainModal.svelte';
import RetryDomainModal from './retryDomainModal.svelte';
import { columns } from './store';
import { regionalProtocol } from '../../store';
let {
@@ -27,11 +26,21 @@
let showDelete = $state(false);
let showRetry = $state(false);
let selectedDomain: Models.ProxyRule = $state(null);
const columns = [
{
id: 'domain',
title: 'Domain',
type: 'string',
format: 'string',
width: { min: 200, max: 550 }
}
];
</script>
<Table.Root columns={[...$columns, { id: 'actions', width: 40 }]} let:root>
<Table.Root columns={[...columns, { id: 'actions', width: 40 }]} let:root>
<svelte:fragment slot="header" let:root>
{#each $columns as { id, title }}
{#each columns as { id, title }}
<Table.Header.Cell column={id} {root}>
{title}
</Table.Header.Cell>
@@ -40,7 +49,7 @@
</svelte:fragment>
{#each domains.rules as domain}
<Table.Row.Base {root}>
{#each $columns as column}
{#each columns as column}
<Table.Cell column={column.id} {root}>
{#if column.id === 'domain'}
<Layout.Stack direction="row" gap="xs">