import { Dialog } from "@kobalte/core/dialog" import { Component, Show, createEffect, createSignal } from "solid-js" interface SessionRenameDialogProps { open: boolean currentTitle: string sessionLabel?: string isSubmitting?: boolean onRename: (nextTitle: string) => Promise | void onClose: () => void } const SessionRenameDialog: Component = (props) => { const [title, setTitle] = createSignal("") const inputId = `session-rename-${Math.random().toString(36).slice(2)}` let inputRef: HTMLInputElement | undefined createEffect(() => { if (!props.open) return setTitle(props.currentTitle ?? "") }) createEffect(() => { if (!props.open) return if (typeof window === "undefined" || typeof window.requestAnimationFrame !== "function") return window.requestAnimationFrame(() => { inputRef?.focus() inputRef?.select() }) }) const isSubmitting = () => Boolean(props.isSubmitting) const isRenameDisabled = () => isSubmitting() || !title().trim() async function handleRename(event?: Event) { event?.preventDefault() if (isRenameDisabled()) return await props.onRename(title().trim()) } const description = () => { if (props.sessionLabel && props.sessionLabel.trim()) { return `Update the title for "${props.sessionLabel}".` } return "Set a new title for this session." } return ( { if (!open && !isSubmitting()) { props.onClose() } }} >
Rename Session {description()}
{ inputRef = element }} type="text" value={title()} onInput={(event) => setTitle(event.currentTarget.value)} placeholder="Enter a session name" class="w-full px-3 py-2 text-sm bg-surface-base border border-base rounded text-primary focus-ring-accent" />
) } export default SessionRenameDialog