Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -1,10 +1,4 @@
|
|||||||
import {
|
import { Page, PageMobileNavigation, PageNavigation } from '@kit/ui/page';
|
||||||
Page,
|
|
||||||
PageBody,
|
|
||||||
PageHeader,
|
|
||||||
PageMobileNavigation,
|
|
||||||
PageNavigation,
|
|
||||||
} from '@kit/ui/page';
|
|
||||||
|
|
||||||
import { AdminSidebar } from '~/admin/_components/admin-sidebar';
|
import { AdminSidebar } from '~/admin/_components/admin-sidebar';
|
||||||
import { AdminMobileNavigation } from '~/admin/_components/mobile-navigation';
|
import { AdminMobileNavigation } from '~/admin/_components/mobile-navigation';
|
||||||
@@ -16,11 +10,6 @@ export const metadata = {
|
|||||||
export default function AdminLayout(props: React.PropsWithChildren) {
|
export default function AdminLayout(props: React.PropsWithChildren) {
|
||||||
return (
|
return (
|
||||||
<Page style={'sidebar'}>
|
<Page style={'sidebar'}>
|
||||||
<PageHeader
|
|
||||||
title={'Super Admin'}
|
|
||||||
description={`Your SaaS stats at a glance`}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<PageNavigation>
|
<PageNavigation>
|
||||||
<AdminSidebar />
|
<AdminSidebar />
|
||||||
</PageNavigation>
|
</PageNavigation>
|
||||||
@@ -29,7 +18,7 @@ export default function AdminLayout(props: React.PropsWithChildren) {
|
|||||||
<AdminMobileNavigation />
|
<AdminMobileNavigation />
|
||||||
</PageMobileNavigation>
|
</PageMobileNavigation>
|
||||||
|
|
||||||
<PageBody>{props.children}</PageBody>
|
{props.children}
|
||||||
</Page>
|
</Page>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,18 @@
|
|||||||
import { AdminDashboard } from '@kit/admin/components/admin-dashboard';
|
import { AdminDashboard } from '@kit/admin/components/admin-dashboard';
|
||||||
import { AdminGuard } from '@kit/admin/components/admin-guard';
|
import { AdminGuard } from '@kit/admin/components/admin-guard';
|
||||||
|
import { PageBody, PageHeader } from '@kit/ui/page';
|
||||||
|
|
||||||
function AdminPage() {
|
function AdminPage() {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AdminDashboard />
|
<PageHeader
|
||||||
|
title={'Super Admin'}
|
||||||
|
description={`Your SaaS stats at a glance`}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<PageBody>
|
||||||
|
<AdminDashboard />
|
||||||
|
</PageBody>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export function HomeSidebar(props: { workspace: UserWorkspace }) {
|
|||||||
return (
|
return (
|
||||||
<Sidebar>
|
<Sidebar>
|
||||||
<SidebarContent className={'h-16 justify-center'}>
|
<SidebarContent className={'h-16 justify-center'}>
|
||||||
<div className={'flex items-center justify-between'}>
|
<div className={'flex items-center justify-between space-x-2'}>
|
||||||
<If
|
<If
|
||||||
condition={featuresFlagConfig.enableTeamAccounts}
|
condition={featuresFlagConfig.enableTeamAccounts}
|
||||||
fallback={<AppLogo className={'py-2'} />}
|
fallback={<AppLogo className={'py-2'} />}
|
||||||
|
|||||||
@@ -1,7 +1,14 @@
|
|||||||
import { use } from 'react';
|
import { use } from 'react';
|
||||||
|
|
||||||
|
import { cookies } from 'next/headers';
|
||||||
|
|
||||||
import { If } from '@kit/ui/if';
|
import { If } from '@kit/ui/if';
|
||||||
import { Page, PageMobileNavigation, PageNavigation } from '@kit/ui/page';
|
import {
|
||||||
|
Page,
|
||||||
|
PageLayoutStyle,
|
||||||
|
PageMobileNavigation,
|
||||||
|
PageNavigation,
|
||||||
|
} from '@kit/ui/page';
|
||||||
|
|
||||||
import { AppLogo } from '~/components/app-logo';
|
import { AppLogo } from '~/components/app-logo';
|
||||||
import { personalAccountNavigationConfig } from '~/config/personal-account-navigation.config';
|
import { personalAccountNavigationConfig } from '~/config/personal-account-navigation.config';
|
||||||
@@ -13,10 +20,9 @@ import { HomeMobileNavigation } from './_components/home-mobile-navigation';
|
|||||||
import { HomeSidebar } from './_components/home-sidebar';
|
import { HomeSidebar } from './_components/home-sidebar';
|
||||||
import { loadUserWorkspace } from './_lib/server/load-user-workspace';
|
import { loadUserWorkspace } from './_lib/server/load-user-workspace';
|
||||||
|
|
||||||
const style = personalAccountNavigationConfig.style;
|
|
||||||
|
|
||||||
function UserHomeLayout({ children }: React.PropsWithChildren) {
|
function UserHomeLayout({ children }: React.PropsWithChildren) {
|
||||||
const workspace = use(loadUserWorkspace());
|
const workspace = use(loadUserWorkspace());
|
||||||
|
const style = getLayoutStyle();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Page style={style}>
|
<Page style={style}>
|
||||||
@@ -41,3 +47,10 @@ function UserHomeLayout({ children }: React.PropsWithChildren) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default withI18n(UserHomeLayout);
|
export default withI18n(UserHomeLayout);
|
||||||
|
|
||||||
|
function getLayoutStyle() {
|
||||||
|
return (
|
||||||
|
(cookies().get('layout-style')?.value as PageLayoutStyle) ??
|
||||||
|
personalAccountNavigationConfig.style
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -60,8 +60,8 @@ function SidebarContainer(props: {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<SidebarContent className={'mt-4'}>
|
<SidebarContent className={'h-16 justify-center'}>
|
||||||
<div className={'flex items-center justify-between'}>
|
<div className={'flex max-w-full items-center space-x-2'}>
|
||||||
<TeamAccountAccountsSelector
|
<TeamAccountAccountsSelector
|
||||||
selectedAccount={account}
|
selectedAccount={account}
|
||||||
accounts={accounts}
|
accounts={accounts}
|
||||||
|
|||||||
@@ -1,7 +1,14 @@
|
|||||||
import { use } from 'react';
|
import { use } from 'react';
|
||||||
|
|
||||||
|
import { cookies } from 'next/headers';
|
||||||
|
|
||||||
import { If } from '@kit/ui/if';
|
import { If } from '@kit/ui/if';
|
||||||
import { Page, PageMobileNavigation, PageNavigation } from '@kit/ui/page';
|
import {
|
||||||
|
Page,
|
||||||
|
PageLayoutStyle,
|
||||||
|
PageMobileNavigation,
|
||||||
|
PageNavigation,
|
||||||
|
} from '@kit/ui/page';
|
||||||
|
|
||||||
import { AppLogo } from '~/components/app-logo';
|
import { AppLogo } from '~/components/app-logo';
|
||||||
import { getTeamAccountSidebarConfig } from '~/config/team-account-navigation.config';
|
import { getTeamAccountSidebarConfig } from '~/config/team-account-navigation.config';
|
||||||
@@ -24,7 +31,7 @@ function TeamWorkspaceLayout({
|
|||||||
params: Params;
|
params: Params;
|
||||||
}>) {
|
}>) {
|
||||||
const data = use(loadTeamWorkspace(params.account));
|
const data = use(loadTeamWorkspace(params.account));
|
||||||
const style = getTeamAccountSidebarConfig(params.account).style;
|
const style = getLayoutStyle(params.account);
|
||||||
|
|
||||||
const accounts = data.accounts.map(({ name, slug, picture_url }) => ({
|
const accounts = data.accounts.map(({ name, slug, picture_url }) => ({
|
||||||
label: name,
|
label: name,
|
||||||
@@ -62,4 +69,11 @@ function TeamWorkspaceLayout({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getLayoutStyle(account: string) {
|
||||||
|
return (
|
||||||
|
(cookies().get('layout-style')?.value as PageLayoutStyle) ??
|
||||||
|
getTeamAccountSidebarConfig(account).style
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export default withI18n(TeamWorkspaceLayout);
|
export default withI18n(TeamWorkspaceLayout);
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ export function AccountSelector({
|
|||||||
pictureUrl ? (
|
pictureUrl ? (
|
||||||
<UserAvatar pictureUrl={pictureUrl} />
|
<UserAvatar pictureUrl={pictureUrl} />
|
||||||
) : (
|
) : (
|
||||||
<PersonIcon className="h-4 w-4" />
|
<PersonIcon className="h-4 min-h-4 w-4 min-w-4" />
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -98,19 +98,22 @@ export function AccountSelector({
|
|||||||
variant="ghost"
|
variant="ghost"
|
||||||
role="combobox"
|
role="combobox"
|
||||||
aria-expanded={open}
|
aria-expanded={open}
|
||||||
className={cn('dark:shadow-primary/10 group px-2', {
|
className={cn(
|
||||||
'justify-between': !collapsed,
|
'dark:shadow-primary/10 group w-full min-w-0 max-w-full px-2',
|
||||||
'justify-center': collapsed,
|
{
|
||||||
})}
|
'justify-between': !collapsed,
|
||||||
|
'justify-center': collapsed,
|
||||||
|
},
|
||||||
|
)}
|
||||||
>
|
>
|
||||||
<If
|
<If
|
||||||
condition={selected}
|
condition={selected}
|
||||||
fallback={
|
fallback={
|
||||||
<span className={'flex items-center space-x-2'}>
|
<span className={'flex max-w-full items-center space-x-2'}>
|
||||||
<PersonalAccountAvatar />
|
<PersonalAccountAvatar />
|
||||||
|
|
||||||
<span
|
<span
|
||||||
className={cn({
|
className={cn('truncate', {
|
||||||
hidden: collapsed,
|
hidden: collapsed,
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
@@ -120,7 +123,7 @@ export function AccountSelector({
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
{(account) => (
|
{(account) => (
|
||||||
<span className={'flex items-center space-x-2'}>
|
<span className={'flex max-w-full items-center space-x-2'}>
|
||||||
<Avatar
|
<Avatar
|
||||||
className={
|
className={
|
||||||
'group-hover:border-border h-6 w-6 border border-transparent'
|
'group-hover:border-border h-6 w-6 border border-transparent'
|
||||||
@@ -134,7 +137,7 @@ export function AccountSelector({
|
|||||||
</Avatar>
|
</Avatar>
|
||||||
|
|
||||||
<span
|
<span
|
||||||
className={cn({
|
className={cn('truncate', {
|
||||||
hidden: collapsed,
|
hidden: collapsed,
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
@@ -144,7 +147,7 @@ export function AccountSelector({
|
|||||||
)}
|
)}
|
||||||
</If>
|
</If>
|
||||||
|
|
||||||
<CaretSortIcon className="ml-2 h-4 w-4 shrink-0 opacity-50" />
|
<CaretSortIcon className="ml-1 h-4 w-4 shrink-0 opacity-50" />
|
||||||
</Button>
|
</Button>
|
||||||
</PopoverTrigger>
|
</PopoverTrigger>
|
||||||
|
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ function AccountsTableFilters(props: {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={'flex items-center justify-between space-x-4'}>
|
<div className={'flex items-center justify-between space-x-4'}>
|
||||||
<Heading level={4}>Accounts</Heading>
|
<Heading level={3}>Accounts</Heading>
|
||||||
|
|
||||||
<div className={'flex space-x-4'}>
|
<div className={'flex space-x-4'}>
|
||||||
<Form {...form}>
|
<Form {...form}>
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ export function NotificationsPopover(params: {
|
|||||||
<Popover modal open={open} onOpenChange={setOpen}>
|
<Popover modal open={open} onOpenChange={setOpen}>
|
||||||
<PopoverTrigger asChild>
|
<PopoverTrigger asChild>
|
||||||
<Button className={'h-9 w-9'} variant={'ghost'}>
|
<Button className={'h-9 w-9'} variant={'ghost'}>
|
||||||
<Bell className={'min-h-5 min-w-5'} />
|
<Bell className={'min-h-4 min-w-4'} />
|
||||||
|
|
||||||
<span
|
<span
|
||||||
className={cn(
|
className={cn(
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ import * as React from 'react';
|
|||||||
|
|
||||||
import { cn } from '../utils';
|
import { cn } from '../utils';
|
||||||
|
|
||||||
type PageStyle = 'sidebar' | 'header' | 'custom';
|
export type PageLayoutStyle = 'sidebar' | 'header' | 'custom';
|
||||||
|
|
||||||
type PageProps = React.PropsWithChildren<{
|
type PageProps = React.PropsWithChildren<{
|
||||||
style?: PageStyle;
|
style?: PageLayoutStyle;
|
||||||
contentContainerClassName?: string;
|
contentContainerClassName?: string;
|
||||||
className?: string;
|
className?: string;
|
||||||
sticky?: boolean;
|
sticky?: boolean;
|
||||||
|
|||||||
Reference in New Issue
Block a user