feat: update session creation to hydrate data immediately

Update `createSession` to return the session ID, allowing the UI to
automatically set the active session and trigger a server hydration
immediately after creation. This ensures the UI reflects the new
session state without a manual refresh.
This commit is contained in:
2026-07-11 09:32:26 +08:00
parent f71af6a06d
commit e437d20d73
4 changed files with 21 additions and 7 deletions
+5 -1
View File
@@ -25,7 +25,11 @@ export const ConnectionBar: Component = () => {
const handleCreateSession = () => {
const name = newSessionName().trim();
if (!name) return;
createSession(name);
const id = createSession(name);
if (id) {
setSessionId(id);
hydrateFromServer(id).catch(() => {});
}
setNewSessionName("");
setShowNewSession(false);
};
+11 -3
View File
@@ -2,7 +2,7 @@
* CreateSessionDialog — modal for naming a new session
*/
import { Component, createSignal, onMount } from "solid-js";
import { createSession } from "../stores/journalStream";
import { createSession, setSessionId, hydrateFromServer } from "../stores/journalStream";
interface CreateSessionDialogProps {
onClose: () => void;
@@ -12,13 +12,21 @@ export const CreateSessionDialog: Component<CreateSessionDialogProps> = (
props,
) => {
const [name, setName] = createSignal("");
const [creating, setCreating] = createSignal(false);
let inputRef!: HTMLInputElement;
const handleCreate = () => {
const handleCreate = async () => {
const trimmed = name().trim();
if (!trimmed) return;
createSession(trimmed);
setCreating(true);
const id = createSession(trimmed);
if (id) {
setSessionId(id);
// Hydrate the new (empty) session so the UI reflects it immediately
await hydrateFromServer(id).catch(() => {});
}
setName("");
setCreating(false);
props.onClose();
};
+1 -1
View File
@@ -254,7 +254,7 @@ export const StatsView: Component = () => {
{/* Sheet picker — only show if sheets are available */}
<Show when={sheets().length > 0}>
<div class="absolute bottom-3 right-3">
<div class="sticky bottom-3 flex justify-end pr-3">
{/* Dropdown trigger */}
<button
class="bg-white border border-gray-300 rounded-full w-8 h-8 flex items-center justify-center shadow-sm hover:bg-gray-50 transition-colors text-gray-500"