diff --git a/app/admin/_components/admin-menu-navigation.tsx b/app/admin/_components/admin-menu-navigation.tsx new file mode 100644 index 0000000..7a6185d --- /dev/null +++ b/app/admin/_components/admin-menu-navigation.tsx @@ -0,0 +1,27 @@ +import { AppLogo } from '@kit/shared/components/app-logo'; +import { ProfileAccountDropdownContainer } from '@kit/shared/components/personal-account-dropdown-container'; +import { SIDEBAR_WIDTH_PROPERTY } from '@/packages/ui/src/shadcn/constants'; + +import type { UserWorkspace } from '../../home/(user)/_lib/server/load-user-workspace'; + +export function AdminMenuNavigation(props: { + workspace: UserWorkspace; +}) { + const { accounts } = props.workspace; + + return ( +
+
+ +
+ +
+
+ +
+
+
+ ); +} diff --git a/app/admin/_components/admin-sidebar.tsx b/app/admin/_components/admin-sidebar.tsx index 2e777e7..20e6082 100644 --- a/app/admin/_components/admin-sidebar.tsx +++ b/app/admin/_components/admin-sidebar.tsx @@ -1,72 +1,25 @@ -'use client'; - -import Link from 'next/link'; -import { usePathname } from 'next/navigation'; - -import { UserWorkspace } from '@/app/home/(user)/_lib/server/load-user-workspace'; -import { LayoutDashboard, Users } from 'lucide-react'; - -import { AppLogo } from '@kit/shared/components/app-logo'; -import { ProfileAccountDropdownContainer } from '@kit/shared/components/personal-account-dropdown-container'; +import { adminNavigationConfig } from '@kit/shared/config'; import { Sidebar, SidebarContent, - SidebarFooter, - SidebarGroup, - SidebarGroupContent, - SidebarGroupLabel, SidebarHeader, - SidebarMenu, - SidebarMenuButton, - useSidebar, + SidebarNavigation, } from '@kit/ui/shadcn-sidebar'; -export function AdminSidebar({ - accounts, -}: { - accounts: UserWorkspace['accounts']; -}) { - const path = usePathname(); - const { open } = useSidebar(); +export function AdminSidebar() { + const collapsible = adminNavigationConfig.sidebarCollapsedStyle; + return ( - - - + + +
+
Superadmin
+
- - Super Admin - - - - - - - Dashboard - - - - - - - Accounts - - - - - + - - - -
); } diff --git a/app/admin/layout.tsx b/app/admin/layout.tsx index 8317da4..43bd5e1 100644 --- a/app/admin/layout.tsx +++ b/app/admin/layout.tsx @@ -6,6 +6,7 @@ import { Page, PageMobileNavigation, PageNavigation } from '@kit/ui/page'; import { SidebarProvider } from '@kit/ui/shadcn-sidebar'; import { AdminSidebar } from '~/admin/_components/admin-sidebar'; +import { AdminMenuNavigation } from '~/admin/_components/admin-menu-navigation'; import { AdminMobileNavigation } from '~/admin/_components/mobile-navigation'; import { loadUserWorkspace } from '../home/(user)/_lib/server/load-user-workspace'; @@ -21,19 +22,24 @@ export default function AdminLayout(props: React.PropsWithChildren) { const workspace = use(loadUserWorkspace()); return ( - - - - - + + + + - - - + + + - {props.children} - - + + + + + + {props.children} + + + ); } diff --git a/app/admin/page.tsx b/app/admin/page.tsx index 8be8bd8..60e8862 100644 --- a/app/admin/page.tsx +++ b/app/admin/page.tsx @@ -5,7 +5,7 @@ import { PageBody, PageHeader } from '@kit/ui/page'; function AdminPage() { return ( <> - + diff --git a/app/home/[account]/_components/team-account-layout-sidebar-navigation.tsx b/app/home/[account]/_components/team-account-layout-sidebar-navigation.tsx deleted file mode 100644 index 9e1eeb4..0000000 --- a/app/home/[account]/_components/team-account-layout-sidebar-navigation.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { z } from 'zod'; - -import { NavigationConfigSchema } from '@kit/ui/navigation-schema'; -import { SidebarNavigation } from '@kit/ui/shadcn-sidebar'; - -export function TeamAccountLayoutSidebarNavigation({ - config, -}: React.PropsWithChildren<{ - config: z.infer; -}>) { - return ; -} diff --git a/app/home/[account]/_components/team-account-layout-sidebar.tsx b/app/home/[account]/_components/team-account-layout-sidebar.tsx index 76dd94f..f2c9626 100644 --- a/app/home/[account]/_components/team-account-layout-sidebar.tsx +++ b/app/home/[account]/_components/team-account-layout-sidebar.tsx @@ -1,20 +1,12 @@ -import type { User } from '@supabase/supabase-js'; - import { ApplicationRole } from '@kit/accounts/types/accounts'; -import { ProfileAccountDropdownContainer } from '@kit/shared/components/personal-account-dropdown-container'; import { getTeamAccountSidebarConfig } from '@kit/shared/config'; import { Sidebar, SidebarContent, - SidebarFooter, SidebarHeader, + SidebarNavigation, } from '@kit/ui/shadcn-sidebar'; -import { TeamAccountNotifications } from '~/home/[account]/_components/team-account-notifications'; - -import { TeamAccountAccountsSelector } from '../_components/team-account-accounts-selector'; -import { TeamAccountLayoutSidebarNavigation } from './team-account-layout-sidebar-navigation'; - type AccountModel = { label: string | null; value: string | null; @@ -26,14 +18,12 @@ export function TeamAccountLayoutSidebar(props: { account: string; accountId: string; accounts: AccountModel[]; - user: User; }) { return ( ); } @@ -42,45 +32,27 @@ function SidebarContainer(props: { account: string; accountId: string; accounts: AccountModel[]; - user: User; }) { - const { account, accounts, user } = props; - const userId = user.id; + const { account, accounts } = props; const config = getTeamAccountSidebarConfig(account); const collapsible = config.sidebarCollapsedStyle; + const selectedAccount = accounts.find(({ value }) => value === account); + const accountName = selectedAccount?.label || account; + return ( - -
- - -
- -
+ +
+
{accountName}
- - + + - - - - - ); } diff --git a/app/home/[account]/layout.tsx b/app/home/[account]/layout.tsx index 104eb72..a98a8b7 100644 --- a/app/home/[account]/layout.tsx +++ b/app/home/[account]/layout.tsx @@ -15,7 +15,6 @@ import { SidebarProvider } from '@kit/ui/shadcn-sidebar'; import { withI18n } from '~/lib/i18n/with-i18n'; -// local imports import { TeamAccountLayoutMobileNavigation } from './_components/team-account-layout-mobile-navigation'; import { TeamAccountLayoutSidebar } from './_components/team-account-layout-sidebar'; import { TeamAccountNavigationMenu } from './_components/team-account-navigation-menu'; @@ -57,13 +56,12 @@ function SidebarLayout({ return ( - + @@ -129,23 +127,8 @@ function HeaderLayout({ account={account} accountId={data.account.id} accounts={accounts} - user={data.user} /> - - - -
- -
-
- {children}
diff --git a/packages/shared/src/config/admin-navigation.config.tsx b/packages/shared/src/config/admin-navigation.config.tsx new file mode 100644 index 0000000..405fe91 --- /dev/null +++ b/packages/shared/src/config/admin-navigation.config.tsx @@ -0,0 +1,33 @@ +import { LayoutDashboard, Users } from 'lucide-react'; +import { z } from 'zod'; + +import { pathsConfig } from '@kit/shared/config'; +import { NavigationConfigSchema } from '@kit/ui/navigation-schema'; + +const iconClasses = 'w-4 stroke-[1.5px]'; + +const routes = [ + { + children: [ + { + label: 'Dashboard', + path: pathsConfig.app.admin, + Icon: , + end: true, + }, + { + label: 'Accounts', + path: `${pathsConfig.app.admin}/accounts`, + Icon: , + end: true, + }, + ], + }, +] satisfies z.infer['routes']; + +export const adminNavigationConfig = NavigationConfigSchema.parse({ + routes, + style: 'custom', + sidebarCollapsed: false, + sidebarCollapsedStyle: 'icon', +}); diff --git a/packages/shared/src/config/index.ts b/packages/shared/src/config/index.ts index 84be8c1..224b890 100644 --- a/packages/shared/src/config/index.ts +++ b/packages/shared/src/config/index.ts @@ -1,6 +1,7 @@ import appConfig from './app.config'; import authConfig from './auth.config'; import billingConfig from './billing.config'; +import { adminNavigationConfig } from './admin-navigation.config'; import { DynamicAuthConfig, getCachedAuthConfig, @@ -15,6 +16,7 @@ import { } from './team-account-navigation.config'; export { + adminNavigationConfig, appConfig, authConfig, billingConfig, diff --git a/packages/shared/src/config/team-account-navigation.config.tsx b/packages/shared/src/config/team-account-navigation.config.tsx index b6f5e89..6f2c924 100644 --- a/packages/shared/src/config/team-account-navigation.config.tsx +++ b/packages/shared/src/config/team-account-navigation.config.tsx @@ -7,7 +7,6 @@ const iconClasses = 'w-4'; const getRoutes = (account: string) => [ { - label: 'common:routes.application', children: [ { label: 'common:routes.dashboard', @@ -15,12 +14,6 @@ const getRoutes = (account: string) => [ Icon: , end: true, }, - ], - }, - { - label: 'common:routes.settings', - collapsible: false, - children: [ { label: 'common:routes.settings', path: createPath(pathsConfig.app.accountSettings, account), diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 155d52b..5275611 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -80,7 +80,6 @@ "dashboard": "Dashboard", "settings": "Settings", "profile": "Profile", - "application": "Application", "pickTime": "Pick time", "preferences": "Preferences", "security": "Security" diff --git a/public/locales/et/common.json b/public/locales/et/common.json index 5da5993..32a8e6d 100644 --- a/public/locales/et/common.json +++ b/public/locales/et/common.json @@ -80,7 +80,6 @@ "dashboard": "Ülevaade", "settings": "Seaded", "profile": "Profiil", - "application": "Rakendus", "pickTime": "Vali aeg", "preferences": "Eelistused", "security": "Turvalisus" diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index a23f8a5..f6ccf65 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -80,7 +80,6 @@ "dashboard": "Обзор", "settings": "Настройки", "profile": "Профиль", - "application": "Приложение", "pickTime": "Выбрать время", "preferences": "Предпочтения", "security": "Безопасность"