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:
committed by
GitHub
parent
2835c163cb
commit
255ba19766
@@ -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)
|
||||||
|
|||||||
@@ -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}>
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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": {
|
||||||
|
|||||||
Reference in New Issue
Block a user