import React, { useState } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import {
IconX,
IconFileText,
IconArrowRight,
IconNetwork
} from '@tabler/icons';
import { clearSelectedRequest } from 'providers/ReduxStore/slices/logs';
import QueryResult from 'components/ResponsePane/QueryResult';
import Network from 'components/ResponsePane/Timeline/TimelineItem/Network';
import StyledWrapper from './StyledWrapper';
import { uuid } from 'utils/common/index';
const RequestTab = ({ request, response }) => {
const formatHeaders = (headers) => {
if (!headers) return [];
if (Array.isArray(headers)) return headers;
return Object.entries(headers).map(([key, value]) => ({ name: key, value }));
};
const formatBody = (body) => {
if (!body) return 'No body';
if (typeof body === 'string') return body;
return JSON.stringify(body, null, 2);
};
return (
General
Request URL:
{request?.url || 'N/A'}
Request Method:
{request?.method || 'GET'}
Request Headers
{formatHeaders(request?.headers).length > 0 ? (
| Name |
Value |
{formatHeaders(request.headers).map((header, index) => (
| {header.name} |
{header.value} |
))}
) : (
No headers
)}
{request?.body && (
Request Body
{formatBody(request.body)}
)}
);
};
const ResponseTab = ({ response, request, collection }) => {
const formatHeaders = (headers) => {
if (!headers) return [];
if (Array.isArray(headers)) return headers;
return Object.entries(headers).map(([key, value]) => ({ name: key, value }));
};
return (
Response Headers
{formatHeaders(response?.headers).length > 0 ? (
| Name |
Value |
{formatHeaders(response.headers).map((header, index) => (
| {header.name} |
{header.value} |
))}
) : (
No headers
)}
Response Body
{response?.data || response?.dataBuffer ? (
) : (
No response data
)}
);
};
const NetworkTab = ({ response }) => {
const timeline = response?.timeline || [];
return (
Network Logs
{timeline.length > 0 ? (
) : (
No network logs available
)}
);
};
const RequestDetailsPanel = () => {
const dispatch = useDispatch();
const { selectedRequest } = useSelector(state => state.logs);
const collections = useSelector(state => state.collections.collections);
const [activeTab, setActiveTab] = useState('request');
if (!selectedRequest) return null;
const { data } = selectedRequest;
const { request, response } = data;
const collection = collections.find(c => c.uid === selectedRequest.collectionUid);
const handleClose = () => {
dispatch(clearSelectedRequest());
};
const formatTime = (timestamp) => {
const date = new Date(timestamp);
return date.toLocaleString();
};
const getTabContent = () => {
switch (activeTab) {
case 'request':
return ;
case 'response':
return ;
case 'network':
return ;
default:
return ;
}
};
return (
Request Details
({formatTime(selectedRequest.timestamp)})
{getTabContent()}
);
};
export default RequestDetailsPanel;