import React, { useEffect, useState } from 'react';
const MyTable = () => {
const [data, setData] = useState(null);
const [selectedGroup, setSelectedGroup] = useState('summary');
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
const fetchData = async () => {
try {
const response = await fetch('http://5.34.198.87:8000/api/options/intradatacols');
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const contentType = response.headers.get('content-type');
if (!contentType || !contentType.includes('application/json')) {
throw new Error('Invalid content type. Expected JSON.');
}
const jsonData = await response.json();
console.log(jsonData);
setData(jsonData);
} catch (error) {
console.error('Error fetching data:', error);
setError(error.message || 'An error occurred while fetching data.');
} finally {
setLoading(false);
}
};
fetchData();
}, []);
if (loading) {
return <div>Loading...</div>;
}
if (error) {
return <div>Error: {error}</div>;
}
if (!data || !data.groups || !data.groupscolumn) {
return <div>No data available</div>;
}
const validGroups = Object.keys(data.groups);
if (!validGroups.includes(selectedGroup)) {
console.error(`Invalid selectedGroup: ${selectedGroup}`);
return <div>No data available</div>;
}
const columns = data.groupscolumn[selectedGroup] || [];
const groupData = data[selectedGroup] || {};
return (
<div className="container mt-4">
<div className="btn-group mb-3">
{validGroups.map((groupKey) => (
<button
key={groupKey}
type="button"
className={`btn ${selectedGroup === groupKey ? 'btn-primary' : 'btn-secondary'}`}
onClick={() => setSelectedGroup(groupKey)}
>
{data.groups[groupKey]}
</button>
))}
</div>
<div className="table-container" style={{ overflowY: 'auto', maxHeight: '500px' }}>
<table className="table table-bordered table-striped">
{/* Table headers */}
<thead className="thead-dark">
<tr>
{columns.map((column, index) => (
<th key={index}>{data.fields[column]}</th>
))}
</tr>
</thead>
{/* Table body */}
<tbody>
{Object.values(groupData).map((group, groupIndex) => (
<tr key={groupIndex}>
{Array.isArray(group) ? (
group.map((item, itemIndex) => (
<td key={itemIndex}>{item}</td>
))
) : (
<td>{group}</td>
)}
</tr>
))}
</tbody>
</table>
</div>
</div>
);
};
export default MyTable;