import React from 'react'; import { JSONTree, NoContent, Button, Tabs } from 'UI' import cn from 'classnames'; import stl from './fetchDetails.module.css'; import Headers from './components/Headers' import AnimatedSVG, { ICONS } from 'Shared/AnimatedSVG/AnimatedSVG'; const HEADERS = 'HEADERS'; const REQUEST = 'REQUEST'; const RESPONSE = 'RESPONSE'; const TABS = [ HEADERS, REQUEST, RESPONSE ].map(tab => ({ text: tab, key: tab })); export default class FetchDetails extends React.PureComponent { state = { activeTab: REQUEST, tabs: [] }; onTabClick = activeTab => this.setState({ activeTab }) componentDidMount() { this.checkTabs(); } renderActiveTab = tab => { const { resource: { payload, response = this.props.resource.body} } = this.props; let jsonPayload, jsonResponse, requestHeaders, responseHeaders = undefined; try { jsonPayload = typeof payload === 'string' ? JSON.parse(payload) : payload requestHeaders = jsonPayload.headers jsonPayload.body = typeof jsonPayload.body === 'string' ? JSON.parse(jsonPayload.body) : jsonPayload.body delete jsonPayload.headers } catch (e) {} try { jsonResponse = typeof response === 'string' ? JSON.parse(response) : response; responseHeaders = jsonResponse.headers jsonResponse.body = typeof jsonResponse.body === 'string' ? JSON.parse(jsonResponse.body) : jsonResponse.body delete jsonResponse.headers } catch (e) {} switch(tab) { case REQUEST: return (
Body is Empty.
} size="small" show={ !payload } // animatedIcon="no-results" >
{ jsonPayload === undefined ?
{ payload }
: }
) case RESPONSE: return (
Body is Empty.
} size="small" show={ !response } // animatedIcon="no-results" >
{ jsonResponse === undefined ?
{ response }
: }
) case HEADERS: return } } componentDidUpdate(prevProps) { if (prevProps.resource.index === this.props.resource.index) return; this.checkTabs(); } checkTabs() { const { resource: { payload, response, body }, isResult } = this.props; const _tabs = TABS // const _tabs = TABS.filter(t => { // if (t.key == REQUEST && !!payload) { // return true // } // if (t.key == RESPONSE && !!response) { // return true; // } // return false; // }) this.setState({ tabs: _tabs, activeTab: _tabs.length > 0 ? _tabs[0].key : null }) } render() { const { resource: { method, url, duration }, nextClick, prevClick, first = false, last = false, } = this.props; const { activeTab, tabs } = this.state; return (
{ 'URL'}
{ url }
Method
{method}
Duration
{parseInt(duration)} ms
{ this.renderActiveTab(activeTab) }
); } }