session-tab-avatar.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. import type { LocalProject } from "@/context/layout"
  2. import { getProjectAvatarVariant } from "@/context/layout"
  3. import { displayName, getProjectAvatarSource } from "@/pages/layout/helpers"
  4. import { useSessionTabAvatarState } from "@/pages/layout/project-avatar-state"
  5. import { ProjectAvatar } from "@opencode-ai/ui/v2/project-avatar-v2"
  6. import { SessionProgressIndicatorV2 } from "@opencode-ai/session-ui/v2/session-progress-indicator-v2"
  7. import { Show } from "solid-js"
  8. export function SessionTabAvatar(props: {
  9. project?: LocalProject
  10. directory: string
  11. sessionId: string
  12. activeServer: boolean
  13. }) {
  14. const directory = () => props.directory
  15. const sessionId = () => props.sessionId
  16. const state = useSessionTabAvatarState(directory, sessionId, () => props.activeServer)
  17. return (
  18. <Show
  19. when={state.loading()}
  20. fallback={
  21. <ProjectAvatar
  22. fallback={displayName(props.project ?? { worktree: props.directory })}
  23. src={getProjectAvatarSource(props.project?.id, props.project?.icon)}
  24. variant={getProjectAvatarVariant(props.project?.icon?.color)}
  25. unread={state.unread()}
  26. />
  27. }
  28. >
  29. <SessionProgressIndicatorV2 class="shrink-0" />
  30. </Show>
  31. )
  32. }