diff --git a/src/components/AdminShell.tsx b/src/components/AdminShell.tsx index 6592a7d..b680877 100644 --- a/src/components/AdminShell.tsx +++ b/src/components/AdminShell.tsx @@ -12,6 +12,48 @@ type Tab = { href: string; label: string; exact?: boolean }; type SearchResult = { id: string; title: string; subtitle: string; href: string }; type SearchGroup = { label: string; viewAllHref: string; results: SearchResult[] }; +const PAGE_TITLES: Array<{ prefix: string; label: string; exact?: boolean }> = [ + { prefix: '/admin', label: 'Dashboard', exact: true }, + { prefix: '/admin/department', label: 'Department Management' }, + { prefix: '/admin/designation', label: 'Designation Management' }, + { prefix: '/admin/roles', label: 'Internal Role Management' }, + { prefix: '/admin/employees', label: 'Employee Management' }, + { prefix: '/admin/runtime-roles', label: 'External Role Management' }, + { prefix: '/admin/onboarding-management', label: 'Onboarding Management' }, + { prefix: '/admin/onboarding-schemas', label: 'Onboarding Management' }, + { prefix: '/admin/internal-dashboard-management', label: 'Internal Dashboard Management' }, + { prefix: '/admin/external-dashboard-management', label: 'External Dashboard Management' }, + { prefix: '/admin/role-ui-configs', label: 'External Dashboard Management' }, + { prefix: '/admin/verification-status', label: 'Verification Management' }, + { prefix: '/admin/approval', label: 'Approval Management' }, + { prefix: '/admin/users', label: 'Users Management' }, + { prefix: '/admin/company', label: 'Company Management' }, + { prefix: '/admin/candidate', label: 'Candidate Management' }, + { prefix: '/admin/customer', label: 'Customer Management' }, + { prefix: '/admin/photographer', label: 'Photographer Management' }, + { prefix: '/admin/makeup-artist', label: 'Makeup Artist Management' }, + { prefix: '/admin/tutors', label: 'Tutors Management' }, + { prefix: '/admin/developers', label: 'Developers Management' }, + { prefix: '/admin/video-editors', label: 'Video Editor Management' }, + { prefix: '/admin/fitness-trainers', label: 'Fitness Trainer Management' }, + { prefix: '/admin/catering-services', label: 'Catering Services Management' }, + { prefix: '/admin/graphic-designers', label: 'Graphic Designer Management' }, + { prefix: '/admin/social-media-managers', label: 'Social Media Manager Management' }, + { prefix: '/admin/jobs', label: 'Jobs Management' }, + { prefix: '/admin/leads', label: 'Leads Management' }, + { prefix: '/admin/pricing', label: 'Pricing Management' }, + { prefix: '/admin/credit', label: 'Credit Management' }, + { prefix: '/admin/coupon', label: 'Coupon Management' }, + { prefix: '/admin/discount', label: 'Discount Management' }, + { prefix: '/admin/tax', label: 'Tax Management' }, + { prefix: '/admin/order', label: 'Order Management' }, + { prefix: '/admin/invoice', label: 'Invoice Management' }, + { prefix: '/admin/review', label: 'Review Management' }, + { prefix: '/admin/support', label: 'Support Management' }, + { prefix: '/admin/report', label: 'Report Management' }, + { prefix: '/admin/ledger', label: 'Ledger Management' }, +]; + const TAB_SETS: Array<{ prefixes: string[]; tabs: Tab[] }> = [ { prefixes: ['/admin/runtime-roles'], @@ -138,7 +180,7 @@ function GlobalSearch() { handleInput(e.currentTarget.value)} onFocus={() => groups().length > 0 && setOpen(true)} onKeyDown={(e) => e.key === 'Escape' && close()} @@ -306,6 +348,16 @@ export default function AdminShell(props: { children: JSX.Element }) { void verify(); }); + const pageTitle = createMemo(() => { + const path = location.pathname; + for (const entry of PAGE_TITLES) { + if (entry.exact ? path === entry.prefix : (path === entry.prefix || path.startsWith(`${entry.prefix}/`))) { + return entry.label; + } + } + return 'Admin'; + }); + const adminInitials = createMemo(() => { if (adminName().trim().toLowerCase() === 'admin user') return 'AD'; const parts = adminName().split(' ').map((s) => s.trim()).filter(Boolean); @@ -320,10 +372,10 @@ export default function AdminShell(props: { children: JSX.Element }) { when={checkedSession()} fallback={
Checking session…
} > -
+
setSidebarOpen(false)} /> -
+
setSidebarCollapsed((v) => !v)} @@ -334,37 +386,38 @@ export default function AdminShell(props: { children: JSX.Element }) {
-
-
- -
- - -
- - -
-
+
+

{adminName()}

+

Super Admin

+
-
+
{props.children}
diff --git a/src/components/AdminSidebar.tsx b/src/components/AdminSidebar.tsx index 5c72ab7..6c5bd5f 100644 --- a/src/components/AdminSidebar.tsx +++ b/src/components/AdminSidebar.tsx @@ -83,10 +83,6 @@ export default function AdminSidebar(props: { adminInitials: string; }) { const location = useLocation(); - const isPreview = () => location.search.includes('_preview=1'); - const isDepartmentView = () => - location.pathname === '/admin/department' || location.pathname === '/admin/department-management'; - const visibleGroups = () => ((isPreview() || isDepartmentView()) ? GROUPS.slice(0, 3) : GROUPS); const isActive = (item: NavItem) => { if (location.pathname === '/admin') return item.href === '/admin'; @@ -97,50 +93,41 @@ export default function AdminSidebar(props: { return ( ); } diff --git a/src/routes/admin/department.tsx b/src/routes/admin/department.tsx index 5f6ea2f..3116f9f 100644 --- a/src/routes/admin/department.tsx +++ b/src/routes/admin/department.tsx @@ -66,10 +66,8 @@ function normalizeDepartment(item: any, idx: number): DepartmentRecord { function StatusBadge(props: { status: string }) { const active = () => props.status === 'ACTIVE'; return ( - - + + {active() ? 'Active' : 'Inactive'} ); @@ -77,16 +75,16 @@ function StatusBadge(props: { status: string }) { function FormInput(props: { label: string; required?: boolean; value: string; onInput: (v: string) => void; placeholder?: string; type?: string }) { return ( -