Skip to content

Commit 8adc74d

Browse files
committed
chore(ui): hide empty activities
1 parent 50d9b1e commit 8adc74d

File tree

2 files changed

+59
-17
lines changed

2 files changed

+59
-17
lines changed

ee/tabby-ui/app/(home)/components/thread-feeds/index.tsx

+58-16
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
'use-client'
2+
3+
import { useEffect } from 'react'
14
import { motion } from 'framer-motion'
25
import { useQuery } from 'urql'
36

@@ -6,7 +9,7 @@ import {
69
setThreadsTab,
710
useAnswerEngineStore
811
} from '@/lib/stores/answer-engine-store'
9-
import { contextInfoQuery } from '@/lib/tabby/query'
12+
import { contextInfoQuery, listMyThreads, listThreads } from '@/lib/tabby/query'
1013
import { cn } from '@/lib/utils'
1114
import { IconSpinner } from '@/components/ui/icons'
1215
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
@@ -25,13 +28,49 @@ export function ThreadFeeds({
2528
className,
2629
onNavigateToThread
2730
}: ThreadFeedsProps) {
28-
// FIXME rename
2931
const threadsTab = useAnswerEngineStore(state => state.threadsTab)
3032
const [allUsers, fetchingUsers] = useAllMembers()
3133
const [{ data: contextInfoData, fetching: fetchingSources }] = useQuery({
3234
query: contextInfoQuery
3335
})
3436

37+
const [{ data: persistedThreads, fetching: fetchingPersistedThreads }] =
38+
useQuery({
39+
query: listThreads,
40+
variables: {
41+
last: 1,
42+
isEphemeral: false
43+
}
44+
})
45+
const [{ data: myThreads, fetching: fetchingMyThreads }] = useQuery({
46+
query: listMyThreads,
47+
variables: {
48+
last: 1
49+
}
50+
})
51+
52+
const loading =
53+
fetchingPersistedThreads ||
54+
fetchingMyThreads ||
55+
fetchingSources ||
56+
fetchingUsers
57+
const hasPersistedThreads = !!persistedThreads?.threads?.edges?.length
58+
const hasMyThreads = !!myThreads?.myThreads.edges.length
59+
60+
useEffect(() => {
61+
if (loading) return
62+
if (!hasPersistedThreads && !hasMyThreads) return
63+
64+
if (!hasPersistedThreads && threadsTab === 'all') {
65+
setThreadsTab('mine')
66+
} else if (!hasMyThreads && threadsTab === 'mine') {
67+
setThreadsTab('all')
68+
}
69+
}, [loading, hasPersistedThreads, hasMyThreads, threadsTab])
70+
71+
// if there's no thread, hide the section
72+
if (!hasPersistedThreads && !hasMyThreads) return null
73+
3574
return (
3675
<ThreadFeedsContext.Provider
3776
value={{
@@ -55,8 +94,7 @@ export function ThreadFeeds({
5594
}}
5695
>
5796
<LoadingWrapper
58-
// FIXME fetching threads
59-
loading={fetchingSources || fetchingUsers}
97+
loading={loading}
6098
fallback={
6199
<div className="flex justify-center">
62100
<IconSpinner className="h-8 w-8" />
@@ -71,18 +109,22 @@ export function ThreadFeeds({
71109
>
72110
<div className="flex items-center justify-between pb-3">
73111
<TabsList className="w-full justify-start border-b bg-transparent p-0">
74-
<TabsTrigger
75-
value="all"
76-
className="rounded-none border-b-2 border-b-transparent bg-transparent px-3 py-2 text-base font-medium shadow-none data-[state=active]:border-b-primary data-[state=active]:text-foreground data-[state=active]:shadow-none"
77-
>
78-
Recent Activities
79-
</TabsTrigger>
80-
<TabsTrigger
81-
value="mine"
82-
className="rounded-none border-b-2 border-b-transparent bg-transparent px-3 py-2 text-base font-medium shadow-none data-[state=active]:border-b-primary data-[state=active]:text-foreground data-[state=active]:shadow-none"
83-
>
84-
My Activities
85-
</TabsTrigger>
112+
{!!hasPersistedThreads && (
113+
<TabsTrigger
114+
value="all"
115+
className="rounded-none border-b-2 border-b-transparent bg-transparent px-3 py-2 text-base font-medium shadow-none data-[state=active]:border-b-primary data-[state=active]:text-foreground data-[state=active]:shadow-none"
116+
>
117+
Recent Activities
118+
</TabsTrigger>
119+
)}
120+
{!!hasMyThreads && (
121+
<TabsTrigger
122+
value="mine"
123+
className="rounded-none border-b-2 border-b-transparent bg-transparent px-3 py-2 text-base font-medium shadow-none data-[state=active]:border-b-primary data-[state=active]:text-foreground data-[state=active]:shadow-none"
124+
>
125+
My Activities
126+
</TabsTrigger>
127+
)}
86128
</TabsList>
87129
</div>
88130
<TabsContent value="all">

ee/tabby-ui/lib/stores/answer-engine-store.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export interface AnswerEngineState {
99
const initialState: AnswerEngineState = {
1010
threadsPageNo: 1,
1111
myThreadsPageNo: 1,
12-
threadsTab: 'all'
12+
threadsTab: 'mine'
1313
}
1414

1515
export const useAnswerEngineStore = create<AnswerEngineState>()(() => {

0 commit comments

Comments
 (0)