);
};
interface ViewMetasProps {
open: boolean
onOpenChange: (open: boolean) => void
form: TagTypeClassFormMappings | null
}
export function ViewMetas({ open, onOpenChange, form }: ViewMetasProps) {
// metadata & loading
const [metadata, setMetadata] = React.useState<{
formName: string
formCode: string
columns: FormColumn[]
} | null>(null)
const [loading, setLoading] = React.useState(false)
// Group columns by type for better organization
const groupedColumns = React.useMemo(() => {
if (!metadata?.columns) return {}
return metadata.columns.reduce((acc, column) => {
const type = column.type
if (!acc[type]) {
acc[type] = []
}
acc[type].push(column)
return acc
}, {} as Record)
}, [metadata])
// Types for the tabs
const columnTypes = React.useMemo(() => {
return Object.keys(groupedColumns)
}, [groupedColumns])
// Fetch metadata when form changes and dialog is opened
React.useEffect(() => {
async function fetchMeta() {
if (!form || !open) return
setLoading(true)
try {
// 서버 액션 호출
const metaData = await fetchFormMetadata(form.formCode, form.projectId)
if (metaData) {
setMetadata(metaData)
} else {
setMetadata(null)
}
} catch (error) {
console.error("Error fetching form metadata:", error)
setMetadata(null)
} finally {
setLoading(false)
}
}
fetchMeta()
}, [form, open])
if (!form) return null
return (
Register Metadata
{loading ? (
Loading metadata...
) : metadata ? (
Register ID:{metadata.formCode}
Register Description:{metadata.formName}
) : (
No metadata found for form code: {form.formCode}
)}
{loading ? (
) : metadata ? (
All ({metadata.columns.length})
{columnTypes.map((type) => (
{type} ({groupedColumns[type].length})
))}
All FieldsAll form fields and their properties