chore: bump version to 2.23.10 and enhance workspace loading logic (#447)

* chore: bump version to 2.23.10 and enhance workspace loading logic

- Updated application version from 2.23.9 to 2.23.10 in package.json.
- Refactored workspace loading functions to use async/await for improved error handling and added redirects for missing workspaces or users.
- Updated sidebar layout components to handle asynchronous data fetching and redirection more effectively.
- Minor adjustments to personal account dropdown styles for consistency.
This commit is contained in:
Giancarlo Buomprisco
2026-01-23 11:12:49 +01:00
committed by GitHub
parent 2835c163cb
commit 255ba19766
4 changed files with 28 additions and 7 deletions

View File

@@ -1,5 +1,7 @@
import { cache } from 'react'; import { cache } from 'react';
import { redirect } from 'next/navigation';
import { createAccountsApi } from '@kit/accounts/api'; import { createAccountsApi } from '@kit/accounts/api';
import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { getSupabaseServerClient } from '@kit/supabase/server-client';
import { createAccountCreationPolicyEvaluator } from '@kit/team-accounts/policies'; import { createAccountCreationPolicyEvaluator } from '@kit/team-accounts/policies';
@@ -35,6 +37,11 @@ async function workspaceLoader() {
requireUserInServerComponent(), requireUserInServerComponent(),
]); ]);
// If the user is not found or the workspace is not found, redirect to the home page - this may happen if the JWT is invalid or expired (ex. user deleted?)
if (!workspace || !user) {
redirect('/');
}
// Check if user can create team accounts (policy check) // Check if user can create team accounts (policy check)
const canCreateTeamAccount = shouldLoadAccounts const canCreateTeamAccount = shouldLoadAccounts
? await checkCanCreateTeamAccount(user.id) ? await checkCanCreateTeamAccount(user.id)

View File

@@ -1,6 +1,7 @@
import { use } from 'react'; import { use } from 'react';
import { cookies } from 'next/headers'; import { cookies } from 'next/headers';
import { redirect } from 'next/navigation';
import { z } from 'zod'; import { z } from 'zod';
@@ -30,9 +31,15 @@ function UserHomeLayout({ children }: React.PropsWithChildren) {
export default withI18n(UserHomeLayout); export default withI18n(UserHomeLayout);
function SidebarLayout({ children }: React.PropsWithChildren) { async function SidebarLayout({ children }: React.PropsWithChildren) {
const workspace = use(loadUserWorkspace()); const [workspace, state] = await Promise.all([
const state = use(getLayoutState()); loadUserWorkspace().catch(() => null),
getLayoutState(),
]);
if (!workspace) {
redirect('/');
}
return ( return (
<UserWorkspaceContextProvider value={workspace}> <UserWorkspaceContextProvider value={workspace}>

View File

@@ -1,6 +1,7 @@
import { use } from 'react'; import { use } from 'react';
import { cookies } from 'next/headers'; import { cookies } from 'next/headers';
import { redirect } from 'next/navigation';
import { z } from 'zod'; import { z } from 'zod';
@@ -33,14 +34,20 @@ function TeamWorkspaceLayout({ children, params }: TeamWorkspaceLayoutProps) {
return <HeaderLayout account={account}>{children}</HeaderLayout>; return <HeaderLayout account={account}>{children}</HeaderLayout>;
} }
function SidebarLayout({ async function SidebarLayout({
account, account,
children, children,
}: React.PropsWithChildren<{ }: React.PropsWithChildren<{
account: string; account: string;
}>) { }>) {
const data = use(loadTeamWorkspace(account)); const [data, state] = await Promise.all([
const state = use(getLayoutState(account)); loadTeamWorkspace(account),
getLayoutState(account),
]);
if (!data) {
redirect('/');
}
const accounts = data.accounts.map(({ name, slug, picture_url }) => ({ const accounts = data.accounts.map(({ name, slug, picture_url }) => ({
label: name, label: name,

View File

@@ -1,6 +1,6 @@
{ {
"name": "next-supabase-saas-kit-turbo", "name": "next-supabase-saas-kit-turbo",
"version": "2.23.9", "version": "2.23.10",
"private": true, "private": true,
"sideEffects": false, "sideEffects": false,
"engines": { "engines": {