Skip to content

Commit 070f2d0

Browse files
committed
refactor: user & teams fetching & remove: swr package
1 parent 2627877 commit 070f2d0

23 files changed

+116
-249
lines changed

bun.lock

Lines changed: 18 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"private": true,
55
"scripts": {
66
"<<<<<<< Next.js": "",
7-
"dev": "bun scripts:check-app-env && FORCE_COLOR=1 next dev --turbo",
7+
"dev": "bun scripts:check-app-env && next dev --turbo",
88
"build": "next build",
99
"start": "next start",
1010
"preview": "bun run build && bun start",
@@ -105,7 +105,6 @@
105105
"remark-math": "^6.0.0",
106106
"remark-mermaid": "^0.2.0",
107107
"shiki": "^2.3.2",
108-
"swr": "^2.3.0",
109108
"tailwind-merge": "^2.6.0",
110109
"usehooks-ts": "^3.1.0",
111110
"vaul": "^1.1.2",

src/app/api/teams/select/route.ts

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/app/api/teams/user/route.ts

Lines changed: 0 additions & 43 deletions
This file was deleted.

src/app/dashboard/layout.tsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import {
77
resolveTeamIdInServerComponent,
88
resolveTeamSlugInServerComponent,
99
} from '@/lib/utils/server'
10+
import { getUserTeams } from '@/server/team/get-team'
11+
import { getSessionInsecure } from '@/server/auth/get-session'
1012

1113
interface DashboardLayoutProps {
1214
children: React.ReactNode
@@ -23,8 +25,21 @@ export default async function DashboardLayout({
2325
const teamId = await resolveTeamIdInServerComponent(teamIdOrSlug)
2426
const teamSlug = await resolveTeamSlugInServerComponent()
2527

28+
const session = await getSessionInsecure()
29+
30+
const res = await getUserTeams()
31+
32+
if (!res?.data || res.serverError) {
33+
throw new Error(res?.serverError || 'Error loading teams.')
34+
}
35+
2636
return (
27-
<ServerContextProvider teamId={teamId} teamSlug={teamSlug}>
37+
<ServerContextProvider
38+
teamId={teamId}
39+
teamSlug={teamSlug}
40+
teams={res?.data}
41+
user={session!.user}
42+
>
2843
<div className="fixed inset-0 flex max-h-full w-full flex-col overflow-hidden">
2944
<NetworkStateBanner />
3045
<div className="flex h-full max-h-full w-full flex-1 overflow-hidden">

src/features/auth/user-details-tile.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,21 @@
22

33
import { LogOut } from 'lucide-react'
44
import { Avatar, AvatarFallback, AvatarImage } from '@/ui/primitives/avatar'
5-
import { User } from '@supabase/supabase-js'
65
import { cn } from '@/lib/utils'
76
import Link from 'next/link'
87
import { Button } from '@/ui/primitives/button'
98
import { PROTECTED_URLS } from '@/configs/urls'
109
import { useTransition } from 'react'
1110
import { signOutAction } from '@/server/auth/auth-actions'
1211
import { Loader } from '@/ui/loader'
12+
import { useUser } from '@/lib/hooks/use-user'
1313

1414
interface UserDetailsTileProps {
15-
user: User
1615
className?: string
1716
}
1817

19-
export default function UserDetailsTile({
20-
user,
21-
className,
22-
}: UserDetailsTileProps) {
18+
export default function UserDetailsTile({ className }: UserDetailsTileProps) {
19+
const { user } = useUser()
2320
const [isSigningOut, startTransition] = useTransition()
2421

2522
const handleSignOut = () => {

src/features/auth/user-menu.tsx

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,10 @@ import { signOutAction } from '@/server/auth/auth-actions'
1313
import Link from 'next/link'
1414
import { PROTECTED_URLS } from '@/configs/urls'
1515
import UserDetailsTile from './user-details-tile'
16-
import { useState } from 'react'
17-
import { User } from '@supabase/supabase-js'
16+
import { useUser } from '@/lib/hooks/use-user'
1817

19-
interface UserMenuProps {
20-
user: User
21-
apiDomain?: string
22-
}
23-
24-
export default function UserMenu({ user, apiDomain }: UserMenuProps) {
25-
const [developerSettingsOpen, setDeveloperSettingsOpen] = useState(false)
18+
export default function UserMenu() {
19+
const { user } = useUser()
2620

2721
return (
2822
<>
@@ -45,18 +39,12 @@ export default function UserMenu({ user, apiDomain }: UserMenuProps) {
4539
<DropdownMenuContent>
4640
<DropdownMenuItem asChild className="p-1">
4741
<Link href={PROTECTED_URLS.ACCOUNT_SETTINGS}>
48-
<UserDetailsTile user={user} />
42+
<UserDetailsTile />
4943
</Link>
5044
</DropdownMenuItem>
5145

5246
<DropdownMenuSeparator />
5347

54-
<DropdownMenuItem onClick={() => setDeveloperSettingsOpen(true)}>
55-
Developer Settings
56-
</DropdownMenuItem>
57-
58-
<DropdownMenuSeparator />
59-
6048
<DropdownMenuItem
6149
className="text-error"
6250
onClick={() => signOutAction()}

src/features/client-providers.tsx

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,17 @@
11
'use client'
22

3-
import { useState, useLayoutEffect } from 'react'
4-
import { preloadTeams } from '@/lib/hooks/use-teams'
53
import posthog from 'posthog-js'
64
import { PostHogProvider as PHProvider } from 'posthog-js/react'
75
import { useEffect } from 'react'
86
import { RootProvider } from 'fumadocs-ui/provider'
97
import { TooltipProvider } from '@/ui/primitives/tooltip'
108
import { ToastProvider } from '@/ui/primitives/toast'
11-
import { useUser } from '@/lib/hooks/use-user'
129

1310
interface ClientProvidersProps {
1411
children: React.ReactNode
1512
}
1613

1714
export default function ClientProviders({ children }: ClientProvidersProps) {
18-
const { user } = useUser()
19-
20-
useLayoutEffect(() => {
21-
if (!user) return
22-
23-
preloadTeams()
24-
}, [user])
25-
2615
return (
2716
<PostHogProvider>
2817
<RootProvider

src/features/dashboard/account/email-settings.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ interface EmailSettingsProps {
4141
export function EmailSettings({ className }: EmailSettingsProps) {
4242
'use no memo'
4343

44-
const { user, setUser, refetch: refetchUser } = useUser()
44+
const { user } = useUser()
4545
const searchParams = useSearchParams()
4646
const { toast } = useToast()
4747

@@ -81,18 +81,18 @@ export function EmailSettings({ className }: EmailSettingsProps) {
8181

8282
if (searchParams.get('type') === 'update_email') {
8383
if (searchParams.has('success')) {
84-
if (searchParams.has('new_email')) {
84+
/* if (searchParams.has('new_email')) {
8585
setUser((state) => ({
8686
...state!,
8787
email: searchParams.get('new_email')!,
8888
}))
89-
}
89+
} */
9090

9191
toast(
9292
defaultSuccessToast(decodeURIComponent(searchParams.get('success')!))
9393
)
9494

95-
refetchUser()
95+
/* refetchUser() */
9696
} else {
9797
toast(defaultErrorToast(decodeURIComponent(searchParams.get('error')!)))
9898
}

src/features/dashboard/account/name-settings.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ interface NameSettingsProps {
3939
export function NameSettings({ className }: NameSettingsProps) {
4040
'use no memo'
4141

42-
const { user, refetch: refetchUser } = useUser()
42+
const { user } = useUser()
4343
const { toast } = useToast()
4444

4545
const form = useForm<FormValues>({
@@ -54,7 +54,6 @@ export function NameSettings({ className }: NameSettingsProps) {
5454

5555
const { execute: updateName, isPending } = useAction(updateUserAction, {
5656
onSuccess: async () => {
57-
await refetchUser()
5857
toast(defaultSuccessToast('Name updated.'))
5958
},
6059
onError: (error) => {

0 commit comments

Comments
 (0)