import { Descriptions, Empty, Table, Tag, Typography } from 'antd';
function scalar(value: unknown) {
if (value === null || value === undefined) return '-';
if (typeof value === 'boolean') return value ? 是 : 否;
if (typeof value === 'object') return {JSON.stringify(value)};
return String(value);
}
function rowsFrom(payload: unknown): Record[] | null {
if (Array.isArray(payload)) return payload.filter((item) => item && typeof item === 'object') as Record[];
if (!payload || typeof payload !== 'object') return null;
const object = payload as Record;
for (const key of ['items', 'data', 'results']) {
if (Array.isArray(object[key])) return object[key] as Record[];
}
return null;
}
export function ResponseView({ payload }: { payload: unknown }) {
if (payload === undefined) return ;
if (payload === null) return ;
const rows = rowsFrom(payload);
if (rows) {
if (!rows.length) return ;
const keys = [...new Set(rows.flatMap((row) => Object.keys(row)))].slice(0, 8);
return (
String(row.id ?? row.code ?? row.userId ?? index)}
dataSource={rows}
scroll={{ x: 'max-content' }}
pagination={{ pageSize: 20, showSizeChanger: true }}
columns={keys.map((key) => ({
title: key,
dataIndex: key,
key,
ellipsis: true,
render: scalar,
}))}
/>
);
}
if (typeof payload === 'object') {
return (
{Object.entries(payload as Record).map(([key, value]) => (
{scalar(value)}
))}
);
}
return {String(payload)};
}