Add instance tab session status indicator

Aggregate session states per instance so tabs reflect permission, compaction, and working activity.
This commit is contained in:
Shantur Rathore
2026-01-05 20:09:13 +00:00
parent 2db62b1d17
commit 06416a9eb3
2 changed files with 69 additions and 2 deletions

View File

@@ -1,5 +1,6 @@
import { Component } from "solid-js"
import { Component, createMemo } from "solid-js"
import type { Instance } from "../types/instance"
import { getInstanceSessionIndicatorStatus } from "../stores/session-status"
import { FolderOpen, X } from "lucide-solid"
interface InstanceTabProps {
@@ -26,6 +27,24 @@ function formatFolderName(path: string, instances: Instance[], currentInstance:
}
const InstanceTab: Component<InstanceTabProps> = (props) => {
const aggregatedStatus = createMemo(() => getInstanceSessionIndicatorStatus(props.instance.id))
const statusClassName = createMemo(() => {
const status = aggregatedStatus()
return status === "permission" ? "session-permission" : `session-${status}`
})
const statusTitle = createMemo(() => {
switch (aggregatedStatus()) {
case "permission":
return "Waiting on permission"
case "compacting":
return "Compacting"
case "working":
return "Working"
default:
return "Idle"
}
})
return (
<div class="group">
<button
@@ -40,7 +59,14 @@ const InstanceTab: Component<InstanceTabProps> = (props) => {
{props.instance.folder.split("/").pop() || props.instance.folder}
</span>
<span
class="tab-close ml-auto"
class={`status-indicator session-status ml-auto ${statusClassName()}`}
title={statusTitle()}
aria-label={`Instance status: ${statusTitle()}`}
>
<span class="status-dot" />
</span>
<span
class="tab-close"
onClick={(e) => {
e.stopPropagation()
props.onClose()