"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { CheckIcon, CrosshairIcon, EyeIcon, EyeOffIcon, Loader2Icon, XIcon } from "lucide-react"; import { Item, ItemContent, ItemHeader, ItemTitle } from "@/components/ui/item"; import { Button } from "@/components/ui/button"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import { toggleObjectiveRedacted } from "@/app/(frontend)/intelligence/missions/objectives/actions"; import { redactText } from "@/lib/redaction"; interface Objective { title: string; description?: string | null; missionCritical?: boolean | null; successOrFailConditions?: string | null; redacted?: boolean | null; } interface MissionObjectivesProps { objectives: Objective[] | null; missionId?: number; isEditable?: boolean; canReveal?: boolean; } function ObjectiveText({ text, redacted, canReveal, className, }: { text: string | null | undefined; redacted: boolean; canReveal: boolean; className?: string; }) { if (!redacted) { return {text ?? "-"}; } const display = redactText(text) ?? "-"; if (!canReveal) { return {display}; } return ( {display} {text ?? "-"} ); } export function MissionObjectives({ objectives, missionId, isEditable = false, canReveal = false, }: MissionObjectivesProps) { const router = useRouter(); const [togglingIndex, setTogglingIndex] = useState(null); const [toggleError, setToggleError] = useState(null); if (!objectives || objectives.length === 0) { return (
Objectives

No objectives defined.

); } return (

Objectives

{isEditable && ( )} {objectives.map((obj, index) => ( {isEditable && ( )} ))}
Title Description Critical Success / Fail Conditions Actions
{obj.missionCritical ? ( ) : ( )}
{toggleError &&

{toggleError}

}
); }