// Object Field Template - renders nested object fields import type { ObjectFieldTemplateProps } from "@rjsf/utils"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible"; import { Button } from "@/components/ui/button"; import { useState } from "react"; import { LuChevronDown, LuChevronRight } from "react-icons/lu"; export function ObjectFieldTemplate(props: ObjectFieldTemplateProps) { const { title, description, properties } = props; // Check if this is a root-level object const isRoot = !title; const [isOpen, setIsOpen] = useState(true); // Check for advanced section grouping const advancedProps = properties.filter( (p) => p.content.props.uiSchema?.["ui:options"]?.advanced === true, ); const regularProps = properties.filter( (p) => p.content.props.uiSchema?.["ui:options"]?.advanced !== true, ); const [showAdvanced, setShowAdvanced] = useState(false); // Root level renders children directly if (isRoot) { return (
{regularProps.map((element) => (
{element.content}
))} {advancedProps.length > 0 && ( {advancedProps.map((element) => (
{element.content}
))}
)}
); } // Nested objects render as collapsible cards return (
{title} {description && (

{description}

)}
{isOpen ? ( ) : ( )}
{regularProps.map((element) => (
{element.content}
))} {advancedProps.length > 0 && ( {advancedProps.map((element) => (
{element.content}
))}
)}
); }