"use client"; import { cn } from "@/lib/utils"; import type { FullTake } from "./TakeEditorPanel"; // Fields to compare (label → key) const COMPARE_FIELDS: { label: string; key: keyof FullTake; format?: (v: unknown) => string }[] = [ { label: "Scene", key: "scene" }, { label: "Shot", key: "shotLabel" }, { label: "Camera", key: "cameraLetter" }, { label: "Clip Name", key: "clipName" }, { label: "Camera Model", key: "cameraModel" }, { label: "Resolution", key: "resolution" }, { label: "Codec", key: "codec" }, { label: "FPS", key: "fps" }, { label: "Shutter", key: "shutter" }, { label: "ISO", key: "iso" }, { label: "White Balance", key: "whiteBalance" }, { label: "Colour Space", key: "colourSpace" }, { label: "Lens Set", key: "lensSet" }, { label: "Lens", key: "lens" }, { label: "T Stop", key: "tStop" }, { label: "Filters", key: "filters" }, { label: "Anamorphic", key: "isAnamorphic", format: (v) => (v ? "Yes" : "No") }, { label: "Weather", key: "weather" }, { label: "Sun Direction", key: "sunDirection" }, ]; function display(value: unknown, format?: (v: unknown) => string): string { if (value === null || value === undefined || value === "") return "—"; if (format) return format(value); return String(value); } function isChanged(a: unknown, b: unknown): boolean { if (a === null || a === undefined) a = ""; if (b === null || b === undefined) b = ""; return String(a) !== String(b); } interface Props { current: FullTake; previous: FullTake; } export function PreviousTakePanel({ current, previous }: Props) { const changedFields = COMPARE_FIELDS.filter(({ key, format }) => isChanged(display(current[key], format), display(previous[key], format)) ); const unchangedFields = COMPARE_FIELDS.filter(({ key, format }) => !isChanged(display(current[key], format), display(previous[key], format)) ); return (
Field
T{previous.takeNumber} (prev)
T{current.takeNumber} (current)
{/* Changed fields — highlighted */} {changedFields.map(({ label, key, format }) => (
{label}
{display(previous[key], format)}
{display(current[key], format)}
))} {/* Unchanged fields */} {unchangedFields.map(({ label, key, format }) => { const val = display(current[key], format); if (val === "—") return null; return (
{label}
{val}
{val}
); })} {changedFields.length === 0 && (
No changes from previous take.
)}
); }