Skip to content

Commit 2163f46

Browse files
committed
updates.
1 parent e93d498 commit 2163f46

File tree

16 files changed

+175
-110
lines changed

16 files changed

+175
-110
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"@appwrite.io/pink-icons": "0.25.0",
2727
"@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1",
2828
"@appwrite.io/pink-legacy": "^1.0.3",
29-
"@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@b023951",
29+
"@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@c467db8",
3030
"@faker-js/faker": "^9.9.0",
3131
"@popperjs/core": "^2.11.8",
3232
"@sentry/sveltekit": "^8.38.0",

pnpm-lock.yaml

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/lib/components/columnSelector.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
let search = $state('');
3434
let filteredColumns = $derived(
3535
$columns
36-
.filter((column) => !column.isAction)
36+
.filter((column) => !column.isAction && column.id !== '$sequence')
3737
.filter(
3838
(col) =>
3939
!col.exclude &&

src/lib/components/sortButton.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
}
4848
</script>
4949

50-
<Button extraCompact on:click={sort} class="hoverable-compact" {disabled}>
50+
<Button extraCompact on:click={sort} class="hoverable-compact {$state?.direction}" {disabled}>
5151
<Icon
5252
size="s"
5353
icon={$state?.column !== column || $state?.direction === 'default'

src/lib/helpers/faker.ts

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { faker } from '@faker-js/faker';
22
import type { Columns } from '$routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/store';
3-
import type { Models } from '@appwrite.io/console';
3+
import { ID, type Models } from '@appwrite.io/console';
44
import { sdk } from '$lib/stores/sdk';
55

66
export async function generateColumns(
@@ -20,31 +20,46 @@ export async function generateColumns(
2020
]);
2121
}
2222

23-
export function generateFakeRecords(columns: Columns[], count: number): object[] {
24-
if (count <= 0) return [];
23+
export function generateFakeRecords(
24+
columns: Columns[],
25+
count: number
26+
): {
27+
ids: string[];
28+
rows: Models.Row[];
29+
} {
30+
if (count <= 0) return { ids: [], rows: [] };
2531

2632
const filteredColumns = columns.filter((col) => col.type !== 'relationship');
2733

28-
if (filteredColumns.length === 0) {
29-
return Array.from({ length: count }, () => ({
30-
name: faker.person.fullName(),
31-
email: faker.internet.email(),
32-
age: faker.number.int({ min: 18, max: 80 }),
33-
city: faker.location.city(),
34-
description: faker.lorem.sentence(),
35-
active: faker.datatype.boolean()
36-
}));
37-
}
38-
39-
return Array.from({ length: count }, () => {
40-
const document: object = {};
41-
42-
for (const column of filteredColumns) {
43-
document[column.key] = generateValueForColumn(column);
34+
const ids: string[] = [];
35+
const rows: Models.Row[] = [];
36+
37+
for (let i = 0; i < count; i++) {
38+
const id = ID.unique();
39+
ids.push(id);
40+
41+
let row: Record<string, string | number | boolean> = { $id: id };
42+
43+
if (filteredColumns.length === 0) {
44+
row = {
45+
$id: id,
46+
name: faker.person.fullName(),
47+
email: faker.internet.email(),
48+
age: faker.number.int({ min: 18, max: 80 }),
49+
city: faker.location.city(),
50+
description: faker.lorem.sentence(),
51+
active: faker.datatype.boolean()
52+
};
53+
} else {
54+
for (const column of filteredColumns) {
55+
row[column.key] = generateValueForColumn(column);
56+
}
4457
}
4558

46-
return document;
47-
});
59+
rows.push(row as unknown as Models.Row);
60+
}
61+
62+
return { ids, rows };
4863
}
4964

5065
function generateStringValue(key: string, maxLength: number): string {

src/lib/layout/footer.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030
inline={$isTabletViewport}
3131
justifyContent="flex-start">
3232
<Typography.Caption variant="400">
33-
ⓒ {currentYear} Appwrite. All rights reserved.
33+
<span style:white-space="nowrap">
34+
ⓒ {currentYear} Appwrite. All rights reserved.
35+
</span>
3436
</Typography.Caption>
3537
<span class="divider-wrapper">
3638
<Divider vertical />

src/lib/stores/preferences.ts

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import type { View } from '$lib/helpers/load';
33
import type { Page } from '@sveltejs/kit';
44
import { get, writable } from 'svelte/store';
55
import { sdk } from './sdk';
6-
import type { Models } from '@appwrite.io/console';
76
import { page } from '$app/state';
87
import { user } from '$lib/stores/user';
98
import deepEqual from 'deep-equal';
@@ -88,7 +87,7 @@ function createPreferences() {
8887

8988
async function loadTeamPreferences(orgId: string) {
9089
try {
91-
const teamPrefs = await sdk.forConsole.teams.getPrefs(orgId);
90+
const teamPrefs = await sdk.forConsole.teams.getPrefs({ teamId: orgId });
9291
teamPreferences = teamPrefs ?? {};
9392
return teamPreferences;
9493
} catch (error) {
@@ -189,25 +188,16 @@ function createPreferences() {
189188
getDisplayNames: () => {
190189
return preferences?.displayNames ?? {};
191190
},
192-
setDisplayNames: async (
193-
orgId: string,
194-
tableId: string,
195-
names: TeamPreferences['names']
196-
) => {
197-
let teamPrefs: Models.Preferences;
191+
setDisplayNames: async (tableId: string, names: TeamPreferences['names']) => {
198192
await updateAndSync((n) => {
199193
if (!n?.displayNames) {
200194
n ??= {};
201195
n.displayNames ??= {};
202196
}
203197

204-
teamPrefs = n;
205198
n.displayNames[tableId] = names;
206-
207199
return n;
208200
});
209-
210-
await sdk.forConsole.teams.updatePrefs(orgId, teamPrefs);
211201
},
212202

213203
getColumnOrder(collectionId: string): TeamPreferences['order'] {
@@ -225,7 +215,10 @@ function createPreferences() {
225215

226216
teamPreferences.columnOrder[collectionId] = columnIds;
227217

228-
await sdk.forConsole.teams.updatePrefs(orgId, teamPreferences);
218+
await sdk.forConsole.teams.updatePrefs({
219+
teamId: orgId,
220+
prefs: teamPreferences
221+
});
229222
},
230223

231224
getColumnWidths(collectionId: string): TeamPreferences['widths'] {
@@ -246,11 +239,12 @@ function createPreferences() {
246239
...width
247240
};
248241

249-
await sdk.forConsole.teams.updatePrefs(orgId, teamPreferences);
242+
await sdk.forConsole.teams.updatePrefs({
243+
teamId: orgId,
244+
prefs: teamPreferences
245+
});
250246
}
251247
};
252248
}
253249

254250
export const preferences = createPreferences();
255-
256-
export type PreferencesType = ReturnType<typeof createPreferences>;

src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
showCreateAttributeSheet,
3232
showCreateIndexSheet,
3333
spreadsheetLoading,
34-
rowActivitySheet
34+
rowActivitySheet,
35+
spreadsheetRenderKey
3536
} from './store';
3637
import { addSubPanel, registerCommands, updateCommandGroupRanks } from '$lib/commandCenter';
3738
import CreateColumn from './createColumn.svelte';
@@ -52,6 +53,7 @@
5253
import { addNotification } from '$lib/stores/notifications';
5354
import { sleep } from '$lib/helpers/promises';
5455
import CreateIndex from './indexes/createIndex.svelte';
56+
import { hash } from '$lib/helpers/string';
5557
5658
let editRow: EditRow;
5759
let createIndex: CreateIndex;
@@ -258,11 +260,17 @@
258260
/* let the attributes be processed! */
259261
await sleep(1250);
260262
263+
let rowIds = [];
261264
try {
262-
const records = generateFakeRecords(attributes, $randomDataModalState.value);
263-
await sdk
264-
.forProject(page.params.region, page.params.project)
265-
.grids.createRows(page.params.database, page.params.table, records);
265+
const { rows, ids } = generateFakeRecords(attributes, $randomDataModalState.value);
266+
267+
rowIds = ids;
268+
269+
await sdk.forProject(page.params.region, page.params.project).grids.createRows({
270+
databaseId: page.params.database,
271+
tableId: page.params.table,
272+
rows
273+
});
266274
267275
addNotification({
268276
type: 'success',
@@ -284,6 +292,8 @@
284292
// await sleep(1250);
285293
$spreadsheetLoading = false;
286294
isWaterfallFromFaker = false;
295+
296+
spreadsheetRenderKey.set(hash(rowIds));
287297
}
288298
</script>
289299

src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+page.svelte

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,11 @@
6969
try {
7070
await sdk
7171
.forProject(page.params.region, page.params.project)
72-
.migrations.createCsvMigration(
73-
file.bucketId,
74-
file.$id,
75-
`${page.params.database}:${page.params.table}`
76-
);
72+
.migrations.createCsvMigration({
73+
bucketId: file.bucketId,
74+
fileId: file.$id,
75+
resourceId: `${page.params.database}:${page.params.table}`
76+
});
7777
7878
addNotification({
7979
type: 'success',
@@ -99,7 +99,6 @@
9999
<Container expanded expandHeightButton style="background: var(--bgcolor-neutral-primary)">
100100
<Layout.Stack direction="column" gap="xl">
101101
<Layout.Stack direction="row" justifyContent="space-between">
102-
<!-- TODO: verify later - columns={tableColumns} -->
103102
<Layout.Stack direction="row" gap="s">
104103
<ViewSelector
105104
onlyIcon

src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createRecord.svelte

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
} = $props();
2626
2727
let isSubmitting = $state(false);
28+
let columnFormWrapper: HTMLDivElement | null = $state(null);
2829
2930
type CreateRow = {
3031
id?: string;
@@ -52,12 +53,6 @@
5253
5354
let createRow = createRowWritable();
5455
55-
$effect(() => {
56-
if (showSheet) {
57-
createRow = createRowWritable();
58-
}
59-
});
60-
6156
async function create() {
6257
isSubmitting = true;
6358
@@ -92,6 +87,21 @@
9287
isSubmitting = false;
9388
}
9489
}
90+
91+
function focusFirstInput() {
92+
const firstInput = columnFormWrapper?.querySelector<HTMLInputElement | HTMLTextAreaElement>(
93+
'input:not([disabled]):not([readonly]), textarea:not([disabled]):not([readonly])'
94+
);
95+
96+
firstInput?.focus({ preventScroll: true });
97+
}
98+
99+
$effect(() => {
100+
if (showSheet) {
101+
focusFirstInput();
102+
createRow = createRowWritable();
103+
}
104+
});
95105
</script>
96106

97107
{#if $createRow}
@@ -108,10 +118,12 @@
108118
onClick: () => create()
109119
}}>
110120
<Layout.Stack gap="xxl">
111-
<ColumnForm
112-
columns={$createRow.columns}
113-
bind:customId={$createRow.id}
114-
bind:formValues={$createRow.row} />
121+
<div bind:this={columnFormWrapper}>
122+
<ColumnForm
123+
columns={$createRow.columns}
124+
bind:customId={$createRow.id}
125+
bind:formValues={$createRow.row} />
126+
</div>
115127

116128
<Layout.Stack gap="xl">
117129
<Typography.Text>

0 commit comments

Comments
 (0)