feat: doc status & share status (#14426)

#### PR Dependency Tree


* **PR #14426** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Admin dashboard: view workspace analytics (storage, sync activity, top
shared links) with charts and configurable windows.
* Document analytics tab: see total/unique/guest views and trends over
selectable time windows.
* Last-accessed members: view who last accessed a document, with
pagination.
* Shared links analytics: browse and paginate all shared links with
view/unique/guest metrics and share URLs.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
DarkSky
2026-02-13 01:01:29 +08:00
committed by GitHub
parent b46bf91575
commit b4be9118ad
44 changed files with 5701 additions and 86 deletions
@@ -1,8 +1,13 @@
import { buttonVariants } from '@affine/admin/components/ui/button';
import { cn } from '@affine/admin/utils';
import { ROUTES } from '@affine/routes';
import { AccountIcon, SelfhostIcon } from '@blocksuite/icons/rc';
import { cssVarV2 } from '@toeverything/theme/v2';
import { LayoutDashboardIcon, ListChecksIcon } from 'lucide-react';
import {
BarChart3Icon,
LayoutDashboardIcon,
ListChecksIcon,
} from 'lucide-react';
import { NavLink } from 'react-router-dom';
import { ServerVersion } from './server-version';
@@ -85,22 +90,30 @@ export function Nav({ isCollapsed = false }: NavProps) {
isCollapsed && 'items-center px-0 gap-1 overflow-visible'
)}
>
{environment.isSelfHosted ? null : (
<NavItem
to={ROUTES.admin.dashboard}
icon={<BarChart3Icon size={18} />}
label="Dashboard"
isCollapsed={isCollapsed}
/>
)}
<NavItem
to="/admin/accounts"
to={ROUTES.admin.accounts}
icon={<AccountIcon fontSize={20} />}
label="Accounts"
isCollapsed={isCollapsed}
/>
{environment.isSelfHosted ? null : (
<NavItem
to="/admin/workspaces"
to={ROUTES.admin.workspaces}
icon={<LayoutDashboardIcon size={18} />}
label="Workspaces"
isCollapsed={isCollapsed}
/>
)}
<NavItem
to="/admin/queue"
to={ROUTES.admin.queue}
icon={<ListChecksIcon size={18} />}
label="Queue"
isCollapsed={isCollapsed}
@@ -113,7 +126,7 @@ export function Nav({ isCollapsed = false }: NavProps) {
/> */}
<SettingsItem isCollapsed={isCollapsed} />
<NavItem
to="/admin/about"
to={ROUTES.admin.about}
icon={<SelfhostIcon fontSize={20} />}
label="About"
isCollapsed={isCollapsed}