"use client"; import { Button } from "@openstatus/ui/components/ui/button"; import { Activity, ArrowRight, Bell, Calendar, CreditCard, LayoutGrid, PanelTop, UserPlus, } from "lucide-react"; import Link from "next/link"; import { useMemo } from "react"; import { OnboardingActions, OnboardingFormColumn, OnboardingResultColumn, type OnboardingStep, OnboardingStepDescription, OnboardingStepHeader, OnboardingStepTitle, OnboardingStepper, } from "@/components/layout/onboarding-layout"; import { FeatureBadgeWall, QuestionPanel, } from "@/components/onboarding/feature-badges"; export function Step3({ stepperSteps, monitorStatus, pageStatus, onQuestionnaireSubmit, }: { stepperSteps: OnboardingStep[]; monitorStatus: "skipped" | "completed" | null; pageStatus: "skipped" | "completed" | null; onQuestionnaireSubmit: (values: { source: string; other?: string; }) => Promise; }) { const monitorSkipped = monitorStatus === "skipped"; const pageSkipped = pageStatus === "skipped"; const quickLinks = useMemo(() => { type Link = { name: string; href: string; icon: React.ComponentType<{ className?: string }>; }; const priority: Link[] = []; if (monitorSkipped) { priority.push({ name: "Monitors", href: "/monitors", icon: Activity }); } if (pageSkipped) { priority.push({ name: "Status Pages", href: "/status-pages", icon: PanelTop, }); } const filler: Link[] = [ { name: "Invite team", href: "/settings/general", icon: UserPlus }, { name: "Notifiers", href: "/notifications", icon: Bell }, { name: "Overview", href: "/overview", icon: LayoutGrid }, { name: "Billing", href: "/settings/billing", icon: CreditCard }, ]; return [...priority, ...filler].slice(0, 4); }, [monitorSkipped, pageSkipped]); return ( <> You're live Jump into the product and explore what openstatus can do.
{quickLinks.map((link) => ( {link.name} ))}

SOC2 audit incoming? Ping us for a 14-day free trial.

); }