feat: space sidebar drag-and-drop reordering with folder system
Add user_space_layout table and PUT /api/users/@me/space-layout endpoint for persisting per-user sidebar ordering. Spaces can be freely reordered via drag-and-drop, folders created by dragging one space onto another, and folders auto-dissolve when they have fewer than 2 members. Includes folder context menu (rename, color, ungroup), collapsed folder mini-grid icons, multi-tab sync via WebSocket, and localStorage collapse state. Removes the rigid native/federated split — federated spaces now intermix freely while keeping their globe badge.
This commit is contained in:
@@ -107,7 +107,7 @@ function handleEvent(origin: string, event: ServerEvent): void {
|
||||
}
|
||||
}
|
||||
|
||||
populateFromReady(origin, event.spaces, event.folders, event.dmChannels);
|
||||
populateFromReady(origin, event.spaces, event.folders, event.dmChannels, event.spaceLayout);
|
||||
|
||||
// Cache authoritative identity for this origin (federation-safe)
|
||||
if (!isHome) {
|
||||
@@ -697,6 +697,14 @@ function handleEvent(origin: string, event: ServerEvent): void {
|
||||
break;
|
||||
}
|
||||
|
||||
case 'space_layout_updated': {
|
||||
if (!isHome) break;
|
||||
const { setSpaceLayout } = useSpaceStore.getState();
|
||||
setSpaceLayout(event.layout);
|
||||
useSpaceStore.setState({ folders: event.folders });
|
||||
break;
|
||||
}
|
||||
|
||||
// ─── Join request events (home-only) ────────────────────────────────
|
||||
|
||||
case 'join_request_received': {
|
||||
|
||||
Reference in New Issue
Block a user