import { json, action, useParams, useSubmission, createAsync, query } from "@solidjs/router" import { createEffect, Show } from "solid-js" import { createStore } from "solid-js/store" import { withActor } from "~/context/auth.withActor" import { Workspace } from "@opencode-ai/console-core/workspace.js" import styles from "./settings-section.module.css" import { Database, eq } from "@opencode-ai/console-core/drizzle/index.js" import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" const getWorkspaceInfo = query(async (workspaceID: string) => { "use server" return withActor( () => Database.use((tx) => tx .select({ id: WorkspaceTable.id, name: WorkspaceTable.name, slug: WorkspaceTable.slug, }) .from(WorkspaceTable) .where(eq(WorkspaceTable.id, workspaceID)) .then((rows) => rows[0] || null), ), workspaceID, ) }, "workspace.get") const updateWorkspace = action(async (form: FormData) => { "use server" const name = form.get("name")?.toString().trim() if (!name) return { error: "Workspace name is required." } if (name.length > 255) return { error: "Name must be 255 characters or less." } const workspaceID = form.get("workspaceID")?.toString() if (!workspaceID) return { error: "Workspace ID is required." } return json( await withActor( () => Workspace.update({ name }) .then(() => ({ error: undefined })) .catch((e) => ({ error: e.message as string })), workspaceID, ), ) }, "workspace.update") export function SettingsSection() { const params = useParams() const workspaceInfo = createAsync(() => getWorkspaceInfo(params.id)) const submission = useSubmission(updateWorkspace) const [store, setStore] = createStore({ show: false }) let input: HTMLInputElement createEffect(() => { if (!submission.pending && submission.result && !submission.result.error) { hide() } }) function show() { while (true) { submission.clear() if (!submission.result) break } setStore("show", true) input.focus() } function hide() { setStore("show", false) } return (

Settings

Update your workspace name and preferences.

Workspace Name

{workspaceInfo()?.name}

(input = r)} data-component="input" name="name" type="text" placeholder="Workspace name" value={workspaceInfo()?.name ?? "Default"} /> {(err) =>
{err()}
}
} >
) }