import React from "react"; import { PatchEvent, set } from "sanity"; import { CheckmarkCircleIcon, EditIcon, ClockIcon } from "@sanity/icons"; import useProEnabled from "../../hooks/useProEnabled"; import ProGate from "./ProGate"; /* eslint-disable @typescript-eslint/no-explicit-any */ const STATUS_CONFIG = { draft: { label: "Draft", description: "Not yet submitted for SEO review", color: "var(--card-muted-fg-color)", bg: "var(--card-border-color)", Icon: EditIcon, }, review: { label: "Needs SEO Review", description: "Submitted and awaiting approval", color: "#f59e0b", bg: "rgba(245, 158, 11, 0.12)", Icon: ClockIcon, }, approved: { label: "SEO Approved", description: "Reviewed and cleared for publishing", color: "#22c55e", bg: "rgba(34, 197, 94, 0.12)", Icon: CheckmarkCircleIcon, }, }; export default function TeamWorkflowPanel({ value, onChange, }: { value: Record | undefined; onChange: (e: any) => void; }) { const status: keyof typeof STATUS_CONFIG = value?.seoStatus || "draft"; const cfg = STATUS_CONFIG[status] || STATUS_CONFIG.draft; const StatusIcon = cfg.Icon; const { isPro } = useProEnabled(); const patchStatus = (s: string) => onChange(PatchEvent.from(set(s, ["seoStatus"]))); return (
Team SEO Workflow
{cfg.label}
{cfg.description}
{(["draft", "review", "approved"] as const).map((s, i) => { const c = STATUS_CONFIG[s]; const isActive = status === s; const isPast = (s === "draft" && (status === "review" || status === "approved")) || (s === "review" && status === "approved"); let dotBg = "var(--card-bg-color)"; if (isActive) dotBg = c.bg; else if (isPast) dotBg = "var(--card-border-color)"; let dotBorder = "var(--card-border-color)"; if (isActive) dotBorder = c.color; else if (isPast) dotBorder = "var(--card-muted-fg-color)"; let iconColor = "var(--card-muted-fg-color)"; if (isActive) iconColor = c.color; else if (isPast) iconColor = "var(--card-muted-fg-color)"; const labelColor = isActive ? c.color : iconColor; const connectorActive = isPast || (i === 0 && status === "approved"); return ( {i < 2 && (
)} ); })}
{status !== "review" && status !== "approved" && ( )} {status !== "approved" && ( )} {status === "approved" && ( )}
); }