diff --git a/src/app/(dashboard)/[portSlug]/admin/page.tsx b/src/app/(dashboard)/[portSlug]/admin/page.tsx index a8a17f88..ae1db070 100644 --- a/src/app/(dashboard)/[portSlug]/admin/page.tsx +++ b/src/app/(dashboard)/[portSlug]/admin/page.tsx @@ -1,4 +1,3 @@ -import Link from 'next/link'; import { Bell, BookOpen, @@ -23,21 +22,8 @@ import { Globe, } from 'lucide-react'; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { PageHeader } from '@/components/shared/page-header'; - -interface AdminSection { - href: string; - label: string; - description: string; - icon: typeof Settings; -} - -interface AdminGroup { - title: string; - description: string; - sections: AdminSection[]; -} +import { AdminSectionsBrowser, type AdminGroup } from '@/components/admin/admin-sections-browser'; const GROUPS: AdminGroup[] = [ { @@ -76,8 +62,9 @@ const GROUPS: AdminGroup[] = [ }, { href: 'documenso', - label: 'Documenso & EOI', - description: 'API credentials, EOI template, and default in-app vs Documenso pathway.', + label: 'EOI signing service', + description: + 'API credentials, EOI template, and default in-app vs external signing pathway.', icon: FileText, }, { @@ -279,43 +266,9 @@ export default async function AdminLandingPage({
{group.description}
-+ No settings match "{query}". +
+ ) : ( ++ {filteredMatches.length} match{filteredMatches.length === 1 ? '' : 'es'} +
+{group.description}
++ {groupTitle} +
+ ) : null} +Link this status change to the prospect (interest) it relates to. The change will appear on that interest's timeline, and the berth gets attached to the prospect @@ -252,27 +258,29 @@ export function BerthDetailHeader({ berth }: BerthDetailHeaderProps) { {/* Stacks vertically on phone widths so the action buttons don't squeeze the area subtitle into a two-line wrap. From sm up the title/area block sits side-by-side with the action buttons. */} -
+ Each pick becomes a company member with role=member. You can refine roles + afterwards on the Members tab. +
++ Adding a yacht transfers its ownership to this company (logged in the yacht's + audit trail). Skip if you only want to associate without changing ownership. +
++
{diffLine}
) : null} diff --git a/src/components/dashboard/berth-status-chart.tsx b/src/components/dashboard/berth-status-chart.tsx index 1479056f..973978da 100644 --- a/src/components/dashboard/berth-status-chart.tsx +++ b/src/components/dashboard/berth-status-chart.tsx @@ -81,8 +81,8 @@ export function BerthStatusChart() { const numeric = typeof value === 'number' ? value : Number(value ?? 0); const total = stats?.total ?? 0; const pct = total > 0 ? Math.round((numeric / total) * 100) : 0; - const label = (payload as { payload?: { label?: string } } | undefined) - ?.payload?.label; + const label = (payload as { payload?: { label?: string } } | undefined)?.payload + ?.label; return [`${numeric} (${pct}%)`, label ?? '']; }} /> diff --git a/src/components/dashboard/customize-widgets-menu.tsx b/src/components/dashboard/customize-widgets-menu.tsx index e05ec422..bada2462 100644 --- a/src/components/dashboard/customize-widgets-menu.tsx +++ b/src/components/dashboard/customize-widgets-menu.tsx @@ -35,9 +35,7 @@ export function CustomizeWidgetsMenu() { const allHidden = visibleCount === 0; // Reset is a no-op when state already matches the registry defaults — // disable in that case to avoid pointless API round-trips. - const matchesDefaults = allWidgets.every( - (w) => (visibility[w.id] ?? false) === w.defaultVisible, - ); + const matchesDefaults = allWidgets.every((w) => (visibility[w.id] ?? false) === w.defaultVisible); return (+ Editing name / nationality / yacht name above patches the underlying records + directly. For phone, address, or to manage linked berths, jump to the canonical + page: +
+- Generate the EOI to send it for signing — the signing service handles the signing chain. You can also - upload a paper-signed copy if it was signed outside the system. + Generate the EOI to send it for signing — the signing service handles the signing chain. You + can also upload a paper-signed copy if it was signed outside the system.
- Pick a client first to scope the interest and berth dropdowns to that - client's deals. + Pick a client first to scope the interest and berth dropdowns to that client's + deals.
- Search clients, yachts, interests, berths, invoices, documents — paste a UUID or - invoice number to jump directly. + Search clients, yachts, interests, berths, invoices, documents — paste a UUID or invoice + number to jump directly.