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:
parent
f71af6a06d
commit
e437d20d73
|
|
@ -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);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -370,8 +370,8 @@ export async function connectStream(
|
|||
* Create a new session by publishing retained metadata to its meta topic.
|
||||
* The server picks it up and adds it to the $SESSIONS manifest.
|
||||
*/
|
||||
export function createSession(name: string, players: string[] = []): void {
|
||||
if (!_mqttClient || !_mqttConnected) return;
|
||||
export function createSession(name: string, players: string[] = []): string | null {
|
||||
if (!_mqttClient || !_mqttConnected) return null;
|
||||
|
||||
const id =
|
||||
name
|
||||
|
|
@ -385,6 +385,8 @@ export function createSession(name: string, players: string[] = []): void {
|
|||
qos: 1,
|
||||
retain: true,
|
||||
});
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue