Skip to content

Commit a2491f5

Browse files
authored
Merge pull request #2795 from appwrite/fix-prefs
2 parents 528ac2e + 6c9dce4 commit a2491f5

File tree

3 files changed

+32
-15
lines changed

3 files changed

+32
-15
lines changed

src/lib/stores/preferences.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,13 +259,13 @@ function createPreferences() {
259259
getColumnOrder(tableId: string): TeamPreferences['order'] {
260260
const columnOrder = teamPreferences?.columnOrder?.[tableId] ?? [];
261261
safePrefsKeyForOrder(columnOrder, '$uid', '$id');
262-
return columnOrder;
262+
return Array.from(new Set(columnOrder));
263263
},
264264

265265
async saveColumnOrder(orgId: string, tableId: string, columnIds: TeamPreferences['order']) {
266266
teamPreferences = ensureObjectProperty(teamPreferences, 'columnOrder');
267267

268-
teamPreferences.columnOrder[tableId] = columnIds;
268+
teamPreferences.columnOrder[tableId] = Array.from(new Set(columnIds));
269269

270270
for (const tableOrder of Object.values(teamPreferences.columnOrder)) {
271271
safePrefsKeyForOrder(tableOrder, '$id', '$uid');

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

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,7 @@
141141
let selectedRowForDelete: Models.Row['$id'] | null = null;
142142
143143
onMount(async () => {
144-
columnsOrder.set(preferences.getColumnOrder(tableId));
145-
columnsWidth.set(preferences.getColumnWidths(tableId));
146-
144+
setupColumns();
147145
makeTableColumns();
148146
sortState.set(data.currentSort as SortState);
149147
@@ -160,6 +158,29 @@
160158
161159
onDestroy(() => ($showCreateColumnSheet.show = false));
162160
161+
function setupColumns() {
162+
const order = preferences.getColumnOrder(tableId);
163+
const systemColumns = new Set(['$id', 'actions']);
164+
165+
const validColumnKeys = new Set([
166+
...$table.columns.map((col) => col.key),
167+
'$createdAt' /* allowed for reordering */,
168+
'$updatedAt' /* allowed for reordering */
169+
]);
170+
171+
const seen = new Set<string>();
172+
const cleanOrder = order.filter((columnId) => {
173+
if (systemColumns.has(columnId)) return false;
174+
if (seen.has(columnId)) return false;
175+
if (!validColumnKeys.has(columnId)) return false;
176+
seen.add(columnId);
177+
return true;
178+
});
179+
180+
columnsOrder.set(cleanOrder);
181+
columnsWidth.set(preferences.getColumnWidths(tableId));
182+
}
183+
163184
function makeTableColumns() {
164185
const selectedColumnsToHide = preferences.getCustomTableColumns(tableId);
165186
@@ -225,17 +246,13 @@
225246
}
226247
];
227248
228-
const groupedColumns: Column[] = [
229-
staticColumns[0],
230-
...baseColumns,
231-
staticColumns[1],
232-
staticColumns[2]
233-
];
249+
const fixedLeftColumn = staticColumns[0];
250+
const fixedRightColumn = staticColumns[3];
234251
235-
const actionsColumn = staticColumns[3];
252+
const reorderableColumns = [...baseColumns, staticColumns[1], staticColumns[2]];
253+
const reorderedColumns = reorderItems(reorderableColumns, $columnsOrder);
236254
237-
const reorderedNonActions = reorderItems(groupedColumns, $columnsOrder);
238-
const finalColumns = [...reorderedNonActions, actionsColumn];
255+
const finalColumns = [fixedLeftColumn, ...reorderedColumns, fixedRightColumn];
239256
240257
tableColumns.set(finalColumns);
241258
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
allowSelection={$canWriteTables}
6767
{onDelete}>
6868
{#snippet header(root)}
69-
{#each $tableViewColumns as { id, title }}
69+
{#each $tableViewColumns as { id, title } (id)}
7070
<Table.Header.Cell column={id} {root}>{title}</Table.Header.Cell>
7171
{/each}
7272
{/snippet}

0 commit comments

Comments
 (0)