From 49939c4d8d4b7112273ab03779d4ec0c9ad2a175 Mon Sep 17 00:00:00 2001
From: Adam <2363879+adamdotdevin@users.noreply.github.com>
Date: Thu, 15 Jan 2026 17:57:56 -0600
Subject: [PATCH] feat(app): skeleton loader for sessions
---
packages/app/src/pages/layout.tsx | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx
index bbc9e9aa0..f2a777fd3 100644
--- a/packages/app/src/pages/layout.tsx
+++ b/packages/app/src/pages/layout.tsx
@@ -885,7 +885,7 @@ export default function Layout(props: ParentProps) {
return (
@@ -902,7 +902,7 @@ export default function Layout(props: ParentProps) {
>
-
+
@@ -944,6 +944,17 @@ export default function Layout(props: ParentProps) {
)
}
+ const SessionSkeleton = (props: { count?: number }): JSX.Element => {
+ const items = Array.from({ length: props.count ?? 4 }, (_, index) => index)
+ return (
+
+ )
+ }
+
const SortableProject = (props: { project: LocalProject; mobile?: boolean }): JSX.Element => {
const sortable = createSortable(props.project.worktree)
const selected = createMemo(() => {
@@ -1105,6 +1116,7 @@ export default function Layout(props: ParentProps) {
return `${kind} : ${name}`
})
const open = createMemo(() => store.workspaceExpanded[props.directory] ?? true)
+ const loading = createMemo(() => open() && workspaceStore.status !== "complete" && sessions().length === 0)
const hasMore = createMemo(() => local() && workspaceStore.sessionTotal > workspaceStore.session.length)
const loadMore = async () => {
if (!local()) return
@@ -1166,6 +1178,9 @@ export default function Layout(props: ParentProps) {
>
New session
+
+
+
{(session) => }
@@ -1200,6 +1215,7 @@ export default function Layout(props: ParentProps) {
.filter((session) => !session.parentID)
.toSorted(sortSessions),
)
+ const loading = createMemo(() => workspaceStore.status !== "complete" && sessions().length === 0)
const hasMore = createMemo(() => workspaceStore.sessionTotal > workspaceStore.session.length)
const loadMore = async () => {
setWorkspaceStore("limit", (limit) => limit + 5)
@@ -1214,6 +1230,9 @@ export default function Layout(props: ParentProps) {
class="size-full flex flex-col py-2 overflow-y-auto no-scrollbar"
>