From 0d559c99d6b5ecbb8c16148e8240eb1e71783809 Mon Sep 17 00:00:00 2001 From: Till-JS <101404291+Till-JS@users.noreply.github.com> Date: Thu, 29 Jan 2026 14:56:28 +0100 Subject: [PATCH] feat(matrix): show DMs and rooms as sections instead of tabs Display direct messages and group rooms directly below each other with section headers instead of using a tab switcher. Co-Authored-By: Claude Opus 4.5 --- .../src/lib/components/chat/RoomList.svelte | 123 ++++++++++-------- 1 file changed, 68 insertions(+), 55 deletions(-) diff --git a/apps/matrix/apps/web/src/lib/components/chat/RoomList.svelte b/apps/matrix/apps/web/src/lib/components/chat/RoomList.svelte index d5bb1fce4..e1500e38f 100644 --- a/apps/matrix/apps/web/src/lib/components/chat/RoomList.svelte +++ b/apps/matrix/apps/web/src/lib/components/chat/RoomList.svelte @@ -10,10 +10,15 @@ let { onCreateRoom }: Props = $props(); let search = $state(''); - let showDMs = $state(true); - let filteredRooms = $derived( - (showDMs ? matrixStore.directRooms : matrixStore.groupRooms).filter((room) => + let filteredDirectRooms = $derived( + matrixStore.directRooms.filter((room) => + room.name.toLowerCase().includes(search.toLowerCase()) + ) + ); + + let filteredGroupRooms = $derived( + matrixStore.groupRooms.filter((room) => room.name.toLowerCase().includes(search.toLowerCase()) ) ); @@ -38,71 +43,79 @@ - -
- - -
- - +
- {#each filteredRooms as room (room.id)} - matrixStore.selectRoom(room.id)} - /> - {:else} -
- {#if search} - -

Keine Ergebnisse für "{search}"

+ + {#if filteredDirectRooms.length > 0 || !search} +
+
+ + Direktnachrichten + {#if matrixStore.directRooms.length > 0} + + {matrixStore.directRooms.length} + + {/if} +
+ {#each filteredDirectRooms as room (room.id)} + matrixStore.selectRoom(room.id)} + /> {:else} - -

Noch keine {showDMs ? 'Direktnachrichten' : 'Räume'}

- {/if} + {#if !search} +

Keine Direktnachrichten

+ {/if} + {/each}
- {/each} + {/if} + + + {#if filteredGroupRooms.length > 0 || !search} +
+
+ + Räume + {#if matrixStore.groupRooms.length > 0} + + {matrixStore.groupRooms.length} + + {/if} +
+ {#each filteredGroupRooms as room (room.id)} + matrixStore.selectRoom(room.id)} + /> + {:else} + {#if !search} +

Keine Räume

+ {/if} + {/each} +
+ {/if} + + + {#if search && filteredDirectRooms.length === 0 && filteredGroupRooms.length === 0} +
+ +

Keine Ergebnisse für "{search}"

+
+ {/if}