feat(uat-b1): ship Wave A-E of Bucket 1 audit findings
Wave A (Interest+EOI form quick wins): - Auto-select yacht after inline-create from interest form - EOI generate dialog: "View EOI" action toast - Interest form berth picker: formatBerthRange compact label - Remove "Generate EOI" button from Documents tab (clean removal) - Interest auto-assign: only sales_agent/sales_manager auto-claim ownership on create (explicit role check via user_port_roles join) - LinkedBerthRowItem dims: drop "D" suffix + "L × W" format - ExternalEoiUploadDialog: prefillSignatories prop threaded from active EOI signers - EOI signature progress on Overview milestone card footer Wave B (a11y + i18n sweeps): - aria-live on supplemental-info error state - text-[10px] -> text-xs in client-pipeline-summary - Currency formatter: locale default removed (Intl uses runtime) - en-US/en-GB hardcoded toLocaleString swept across 13 components Wave C (Primary berth always in EOI bundle): - Service guard strengthened on update path - Migration 0083 backfills historical primary rows Wave D (Onboarding super_admin discoverability): - /api/v1/admin/onboarding/status endpoint + shared service - Topbar OnboardingBanner (super_admin, session-dismissible) - OnboardingTile dashboard widget (rail group, self-hides at 100%) - Celebration toast + invalidate of shared status on last tick Wave E (Branded post-completion email idempotency): - Verified handleDocumentCompleted already owns the email fan-out - Added regression test for the polling path + idempotency Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,7 @@ import dynamic from 'next/dynamic';
|
||||
|
||||
import { ActiveDealsTile } from './active-deals-tile';
|
||||
import { ActivityFeed } from './activity-feed';
|
||||
import { OnboardingTile } from './onboarding-tile';
|
||||
import { BerthHeatWidget } from './berth-heat-widget';
|
||||
import { ClientsByCountryWidget } from './clients-by-country-widget';
|
||||
import { HotDealsCard } from './hot-deals-card';
|
||||
@@ -105,6 +106,19 @@ export interface DashboardWidget {
|
||||
}
|
||||
|
||||
export const DASHBOARD_WIDGETS: readonly DashboardWidget[] = [
|
||||
// ── Onboarding (rail, super_admin-only) ─────────────────────────────
|
||||
// Self-collapses when the checklist hits 100% and self-hides for
|
||||
// non-super-admin users so most reps never see this tile at all.
|
||||
{
|
||||
id: 'onboarding_checklist',
|
||||
label: 'Setup checklist',
|
||||
description:
|
||||
'Progress + next-step nudge while the org is still going through Documenso / branding / users setup. Hidden once 100% complete.',
|
||||
render: () => <OnboardingTile />,
|
||||
group: 'rail',
|
||||
defaultVisible: true,
|
||||
},
|
||||
|
||||
// ── KPI tiles (rail) ────────────────────────────────────────────────
|
||||
// Off by default - keep the existing dashboard layout unchanged for
|
||||
// users on first paint after the upgrade; reps can flip them on from
|
||||
|
||||
Reference in New Issue
Block a user