alpha
Login
or
Join now
nandi.uk
/
semble
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
This repository has no description
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
Merge branch 'development'
author
pdelfan
date
2 months ago
(May 22, 2026, 10:40 AM -0700)
commit
53b40755
53b40755135d12ef4d5c087d575a51c002659c38
parent
6669a4f2
6669a4f23b6f029aba9b000abdef38609b61325e
+11
-27
18 changed files
Expand all
Collapse all
Unified
Split
src
webapp
components
navigation
navbar
Skeleton.Navbar.tsx
features
collections
components
collectionsNavList
Skeleton.CollectionsNavList.tsx
feeds
lib
queries
useFollowingFeed.tsx
useGemsFeed.tsx
useGlobalFeed.tsx
follows
lib
queries
useCollectionFollowersCount.tsx
useFollowersCount.tsx
useFollowingCollectionsCount.tsx
useFollowingCount.tsx
graph
lib
queries
useGraphData.tsx
useGraphNodeCollection.tsx
useGraphNodeUrl.tsx
useGraphNodeUser.tsx
useUrlGraphData.tsx
useUserGraphData.tsx
notifications
lib
queries
useMyNotifications.tsx
hooks
useAuth.tsx
providers
tanstack.tsx
+5
-8
src/webapp/components/navigation/navbar/Skeleton.Navbar.tsx
View file
Reviewed
···
16
16
17
17
import SembleLogo from '@/assets/semble-logo.svg';
18
18
import NavbarToggle from '../NavbarToggle';
19
19
+
import CollectionsNavListSkeleton from '@/features/collections/components/collectionsNavList/Skeleton.CollectionsNavList';
19
20
20
21
export default function NavbarSkeleton() {
21
22
return (
···
35
36
</Group>
36
37
37
38
<AppShellSection grow component={ScrollArea}>
38
38
-
<Stack mt={'xl'}>
39
39
+
<Stack gap={'md'} mt={'xl'}>
39
40
{/* Profile Menu Skeleton */}
40
41
<Group gap="sm" m={5} wrap="nowrap">
41
42
<Skeleton h={38} w={38} />
···
43
44
</Group>
44
45
45
46
{/* Nav Items Skeleton */}
46
46
-
<Stack gap={5} mt="xs">
47
47
+
<Stack gap={5}>
47
48
{[...Array(6)].map((_, i) => (
48
49
<Skeleton key={i} height={40} radius="md" />
49
50
))}
50
51
</Stack>
51
52
</Stack>
52
53
53
53
-
<Divider my={'sm'} />
54
54
+
<Divider mb={'sm'} mt={'18'} />
54
55
55
56
{/* Collections List Skeleton */}
56
56
-
<Stack gap={5}>
57
57
-
{[...Array(3)].map((_, i) => (
58
58
-
<Skeleton key={i} height={36} radius="md" />
59
59
-
))}
60
60
-
</Stack>
57
57
+
<CollectionsNavListSkeleton />
61
58
</AppShellSection>
62
59
63
60
<AppShellSection>
+3
-3
src/webapp/features/collections/components/collectionsNavList/Skeleton.CollectionsNavList.tsx
View file
Reviewed
···
4
4
return (
5
5
<Stack gap={'xs'}>
6
6
<Group justify="space-between">
7
7
-
<Text fw={600} c={'gray'}>
7
7
+
<Text fw={600} fz={'sm'} c={'gray'}>
8
8
Collections
9
9
</Text>
10
10
11
11
<Group gap={'xs'}>
12
12
-
<Skeleton radius={'xl'} h={26} w={73} />
13
13
-
<Skeleton radius={'xl'} h={26} w={26} />
12
12
+
<Skeleton radius={'xl'} h={30} w={73} />
13
13
+
<Skeleton radius={'xl'} h={30} w={26} />
14
14
</Group>
15
15
</Group>
16
16
-1
src/webapp/features/feeds/lib/queries/useFollowingFeed.tsx
View file
Reviewed
···
26
26
),
27
27
staleTime: 10000,
28
28
initialPageParam: 1,
29
29
-
refetchOnWindowFocus: false,
30
29
enabled,
31
30
queryFn: ({ pageParam = 1 }) => {
32
31
return getFollowingFeed({
-1
src/webapp/features/feeds/lib/queries/useGemsFeed.tsx
View file
Reviewed
···
22
22
),
23
23
staleTime: 10000,
24
24
initialPageParam: 1,
25
25
-
refetchOnWindowFocus: false,
26
25
queryFn: ({ pageParam = 1 }) => {
27
26
return getGemsActivityFeed({
28
27
limit,
-1
src/webapp/features/feeds/lib/queries/useGlobalFeed.tsx
View file
Reviewed
···
24
24
),
25
25
staleTime: 10000,
26
26
initialPageParam: 1,
27
27
-
refetchOnWindowFocus: false,
28
27
queryFn: ({ pageParam = 1 }) => {
29
28
return getGlobalFeed({
30
29
limit,
-1
src/webapp/features/follows/lib/queries/useCollectionFollowersCount.tsx
View file
Reviewed
···
11
11
queryKey: followKeys.collectionFollowersCount(collectionId),
12
12
queryFn: () => getCollectionFollowersCount(collectionId),
13
13
staleTime: 10000,
14
14
-
refetchOnWindowFocus: false,
15
14
});
16
15
17
16
return query;
-1
src/webapp/features/follows/lib/queries/useFollowersCount.tsx
View file
Reviewed
···
11
11
queryKey: followKeys.followersCount(identifier),
12
12
queryFn: () => getFollowersCount(identifier),
13
13
staleTime: 10000,
14
14
-
refetchOnWindowFocus: false,
15
14
});
16
15
17
16
return query;
-1
src/webapp/features/follows/lib/queries/useFollowingCollectionsCount.tsx
View file
Reviewed
···
11
11
queryKey: followKeys.followingCollectionsCount(identifier),
12
12
queryFn: () => getFollowingCollectionsCount(identifier),
13
13
staleTime: 10000,
14
14
-
refetchOnWindowFocus: false,
15
14
});
16
15
17
16
return query;
-1
src/webapp/features/follows/lib/queries/useFollowingCount.tsx
View file
Reviewed
···
11
11
queryKey: followKeys.followingCount(identifier),
12
12
queryFn: () => getFollowingCount(identifier),
13
13
staleTime: 10000,
14
14
-
refetchOnWindowFocus: false,
15
14
});
16
15
17
16
return query;
-1
src/webapp/features/graph/lib/queries/useGraphData.tsx
View file
Reviewed
···
37
37
queryKey: graphKeys.page(page),
38
38
queryFn: () => getGraphDataPage(page),
39
39
staleTime: 5 * 60 * 1000, // 5 minutes
40
40
-
refetchOnWindowFocus: false,
41
40
})),
42
41
});
43
42
-1
src/webapp/features/graph/lib/queries/useGraphNodeCollection.tsx
View file
Reviewed
···
34
34
enabled: enabled && !!handle && !!rkey,
35
35
staleTime: 5 * 60 * 1000, // 5 minutes - collections don't change often
36
36
retry: 1, // Only retry once for popup data
37
37
-
refetchOnWindowFocus: false, // Don't refetch on focus for popup data
38
37
});
39
38
}
-2
src/webapp/features/graph/lib/queries/useGraphNodeUrl.tsx
View file
Reviewed
···
24
24
enabled: enabled && !!url,
25
25
staleTime: 3 * 60 * 1000, // 3 minutes - URLs change more often
26
26
retry: 1,
27
27
-
refetchOnWindowFocus: false,
28
27
},
29
28
{
30
29
queryKey: url
···
37
36
enabled: enabled && !!url,
38
37
staleTime: 3 * 60 * 1000,
39
38
retry: 1,
40
40
-
refetchOnWindowFocus: false,
41
39
},
42
40
],
43
41
});
-1
src/webapp/features/graph/lib/queries/useGraphNodeUser.tsx
View file
Reviewed
···
21
21
enabled: enabled && !!handle,
22
22
staleTime: 5 * 60 * 1000, // 5 minutes - profiles don't change often
23
23
retry: 1, // Only retry once for popup data
24
24
-
refetchOnWindowFocus: false, // Don't refetch on focus for popup data
25
24
});
26
25
}
-1
src/webapp/features/graph/lib/queries/useUrlGraphData.tsx
View file
Reviewed
···
20
20
queryKey: graphKeys.url(url, depth),
21
21
queryFn: () => apiClient.getUrlGraphData({ url, depth }),
22
22
staleTime: 5 * 60 * 1000, // 5 minutes
23
23
-
refetchOnWindowFocus: false,
24
23
enabled: !!url, // Only fetch if URL is provided
25
24
});
26
25
-1
src/webapp/features/graph/lib/queries/useUserGraphData.tsx
View file
Reviewed
···
37
37
queryKey: graphKeys.userPage(identifier, page),
38
38
queryFn: () => apiClient.getUserGraphData({ identifier, page }),
39
39
staleTime: 5 * 60 * 1000, // 5 minutes
40
40
-
refetchOnWindowFocus: false,
41
40
})),
42
41
});
43
42
-1
src/webapp/features/notifications/lib/queries/useMyNotifications.tsx
View file
Reviewed
···
15
15
queryKey: notificationKeys.infinite(limit),
16
16
staleTime: 10000,
17
17
initialPageParam: 1,
18
18
-
refetchOnWindowFocus: false,
19
18
queryFn: ({ pageParam = 1 }) => {
20
19
return getMyNotifications({ limit, page: pageParam, unreadOnly });
21
20
},
-1
src/webapp/hooks/useAuth.tsx
View file
Reviewed
···
61
61
return session;
62
62
},
63
63
staleTime: 5 * 60 * 1000, // cache for 5 minutes
64
64
-
refetchOnWindowFocus: false,
65
64
retry: false,
66
65
});
67
66
+3
src/webapp/providers/tanstack.tsx
View file
Reviewed
···
12
12
defaultOptions: {
13
13
queries: {
14
14
staleTime: 60 * 1000,
15
15
+
gcTime: 5 * 60 * 1000,
16
16
+
refetchOnWindowFocus: false,
17
17
+
retry: 1,
15
18
},
16
19
dehydrate: {
17
20
// include pending queries in dehydration