import { ProgramMetadata } from '@gear-js/api'; import { useAlert } from '@gear-js/react-hooks'; import { useMemo } from 'react'; import TablePlaceholderSVG from '@/shared/assets/images/placeholders/table.svg?react'; import { getFlatNamedTypeEntries, getNamedTypes } from '@/features/uploadMetadata'; import { TableRow, Table } from '@/shared/ui/table'; import { ContentLoader } from '@/shared/ui/contentLoader'; import tableStyles from '@/shared/ui/table/ui/Table.module.scss'; type Props = { metadata: ProgramMetadata | undefined; isLoading: boolean; }; const MetadataTable = ({ metadata, isLoading }: Props) => { const alert = useAlert(); const isEmpty = !(isLoading || metadata); const isLoaderShowing = isLoading || !metadata; // useMemo to prevent excessive error alerts const namedTypeEntries = useMemo(() => { if (!metadata) return []; const namedTypes = getNamedTypes(metadata, (message) => alert.error(message)); return getFlatNamedTypeEntries(namedTypes); // eslint-disable-next-line react-hooks/exhaustive-deps }, [metadata]); const renderRows = () => namedTypeEntries.map(([key, value]: any) => ( {String(value)} )); return isLoaderShowing ? ( ) : ( {renderRows()}
); }; export { MetadataTable };