New layout updates (#23)

* Remove redundant files and update pnpm lockfile

* Refactor and improve UI responsiveness

UI elements have been refactored for better responsiveness and a more consistent user interface. Changes include adjusting padding and margin in several components, altering sizes of variables like avatar and button, and repositioning notifications for better visibility. A more detailed breakdown can be found in the diffs.

* Updated UI components and page layout configurations

Enhanced UI components among different modules, adjusting their behavior and appearance. Also added logic to get layout style from cookies if available. This enables persistent interface configuration across sessions. Modified the PageStyle type renaming it as PageLayoutStyle and exported it, allowing use throughout the application.
This commit is contained in:
Giancarlo Buomprisco
2024-05-01 02:18:04 +07:00
committed by GitHub
parent 5e8e01e340
commit 861b2130a7
10 changed files with 63 additions and 36 deletions

View File

@@ -1,10 +1,4 @@
import {
Page,
PageBody,
PageHeader,
PageMobileNavigation,
PageNavigation,
} from '@kit/ui/page';
import { Page, PageMobileNavigation, PageNavigation } from '@kit/ui/page';
import { AdminSidebar } from '~/admin/_components/admin-sidebar';
import { AdminMobileNavigation } from '~/admin/_components/mobile-navigation';
@@ -16,11 +10,6 @@ export const metadata = {
export default function AdminLayout(props: React.PropsWithChildren) {
return (
<Page style={'sidebar'}>
<PageHeader
title={'Super Admin'}
description={`Your SaaS stats at a glance`}
/>
<PageNavigation>
<AdminSidebar />
</PageNavigation>
@@ -29,7 +18,7 @@ export default function AdminLayout(props: React.PropsWithChildren) {
<AdminMobileNavigation />
</PageMobileNavigation>
<PageBody>{props.children}</PageBody>
{props.children}
</Page>
);
}

View File

@@ -1,10 +1,18 @@
import { AdminDashboard } from '@kit/admin/components/admin-dashboard';
import { AdminGuard } from '@kit/admin/components/admin-guard';
import { PageBody, PageHeader } from '@kit/ui/page';
function AdminPage() {
return (
<>
<AdminDashboard />
<PageHeader
title={'Super Admin'}
description={`Your SaaS stats at a glance`}
/>
<PageBody>
<AdminDashboard />
</PageBody>
</>
);
}

View File

@@ -17,7 +17,7 @@ export function HomeSidebar(props: { workspace: UserWorkspace }) {
return (
<Sidebar>
<SidebarContent className={'h-16 justify-center'}>
<div className={'flex items-center justify-between'}>
<div className={'flex items-center justify-between space-x-2'}>
<If
condition={featuresFlagConfig.enableTeamAccounts}
fallback={<AppLogo className={'py-2'} />}

View File

@@ -1,7 +1,14 @@
import { use } from 'react';
import { cookies } from 'next/headers';
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 { 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 { loadUserWorkspace } from './_lib/server/load-user-workspace';
const style = personalAccountNavigationConfig.style;
function UserHomeLayout({ children }: React.PropsWithChildren) {
const workspace = use(loadUserWorkspace());
const style = getLayoutStyle();
return (
<Page style={style}>
@@ -41,3 +47,10 @@ function UserHomeLayout({ children }: React.PropsWithChildren) {
}
export default withI18n(UserHomeLayout);
function getLayoutStyle() {
return (
(cookies().get('layout-style')?.value as PageLayoutStyle) ??
personalAccountNavigationConfig.style
);
}

View File

@@ -60,8 +60,8 @@ function SidebarContainer(props: {
return (
<>
<SidebarContent className={'mt-4'}>
<div className={'flex items-center justify-between'}>
<SidebarContent className={'h-16 justify-center'}>
<div className={'flex max-w-full items-center space-x-2'}>
<TeamAccountAccountsSelector
selectedAccount={account}
accounts={accounts}

View File

@@ -1,7 +1,14 @@
import { use } from 'react';
import { cookies } from 'next/headers';
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 { getTeamAccountSidebarConfig } from '~/config/team-account-navigation.config';
@@ -24,7 +31,7 @@ function TeamWorkspaceLayout({
params: Params;
}>) {
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 }) => ({
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);

View File

@@ -85,7 +85,7 @@ export function AccountSelector({
pictureUrl ? (
<UserAvatar pictureUrl={pictureUrl} />
) : (
<PersonIcon className="h-4 w-4" />
<PersonIcon className="h-4 min-h-4 w-4 min-w-4" />
);
return (
@@ -98,19 +98,22 @@ export function AccountSelector({
variant="ghost"
role="combobox"
aria-expanded={open}
className={cn('dark:shadow-primary/10 group px-2', {
'justify-between': !collapsed,
'justify-center': collapsed,
})}
className={cn(
'dark:shadow-primary/10 group w-full min-w-0 max-w-full px-2',
{
'justify-between': !collapsed,
'justify-center': collapsed,
},
)}
>
<If
condition={selected}
fallback={
<span className={'flex items-center space-x-2'}>
<span className={'flex max-w-full items-center space-x-2'}>
<PersonalAccountAvatar />
<span
className={cn({
className={cn('truncate', {
hidden: collapsed,
})}
>
@@ -120,7 +123,7 @@ export function AccountSelector({
}
>
{(account) => (
<span className={'flex items-center space-x-2'}>
<span className={'flex max-w-full items-center space-x-2'}>
<Avatar
className={
'group-hover:border-border h-6 w-6 border border-transparent'
@@ -134,7 +137,7 @@ export function AccountSelector({
</Avatar>
<span
className={cn({
className={cn('truncate', {
hidden: collapsed,
})}
>
@@ -144,7 +147,7 @@ export function AccountSelector({
)}
</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>
</PopoverTrigger>

View File

@@ -100,7 +100,7 @@ function AccountsTableFilters(props: {
return (
<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'}>
<Form {...form}>

View File

@@ -112,7 +112,7 @@ export function NotificationsPopover(params: {
<Popover modal open={open} onOpenChange={setOpen}>
<PopoverTrigger asChild>
<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
className={cn(

View File

@@ -2,10 +2,10 @@ import * as React from 'react';
import { cn } from '../utils';
type PageStyle = 'sidebar' | 'header' | 'custom';
export type PageLayoutStyle = 'sidebar' | 'header' | 'custom';
type PageProps = React.PropsWithChildren<{
style?: PageStyle;
style?: PageLayoutStyle;
contentContainerClassName?: string;
className?: string;
sticky?: boolean;