"use client"; import { useEffect, useState } from "react"; import { useParams } from "next/navigation"; import Image from "next/image"; import Markdown from "react-markdown"; export default function UVSettingDetailPage() { const { id } = useParams(); const [setting, setSetting] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { if (!id) return; fetch(`${process.env.NEXT_PUBLIC_API_BASE_URL}/items/settings_uv/${id}?fields=submission_id,setting_title,uploader,setting_notes,photo.filename_disk,mat.name,mat_coat.name,mat_color.name,mat_opacity.opacity,mat_thickness,source.model,lens.field_size,lens.focal_length,focus,fill_settings,line_settings,raster_settings`) .then((res) => { if (!res.ok) throw new Error("Failed to load"); return res.json(); }) .then((data) => { setSetting(data.data); setLoading(false); }) .catch(() => setLoading(false)); }, [id]); const openSearchInNewTab = (value) => { if (!value || typeof window === "undefined") return; const url = new URL("/uv-settings", window.location.origin); url.searchParams.set("query", value); window.open(url.toString(), "_blank", "noopener,noreferrer"); }; const renderRepeaterCard = (title, fields, data) => { if (!data || !Array.isArray(data) || data.length === 0) return null; return (
{field.label}:{" "} {item[field.key] !== undefined && item[field.key] !== null ? item[field.key].toString() : "—"}
) : null )}Uploaded by: {setting.uploader || "—"}
Material: openSearchInNewTab(setting.mat?.name)}>{setting.mat?.name || "—"}
Coating: openSearchInNewTab(setting.mat_coat?.name)}>{setting.mat_coat?.name || "—"}
Color: {setting.mat_color?.name || "—"}
Opacity: {setting.mat_opacity?.opacity || "—"}
Thickness: {setting.mat_thickness ? `${setting.mat_thickness} mm` : "—"}
Source Model: openSearchInNewTab(setting.source?.model)}>{setting.source?.model || "—"}
Lens: {setting.lens?.field_size || "—"} mm | {setting.lens?.focal_length || "—"} mm
Focus: {setting.focus || "—"}