import React from "react"; import { connect } from "react-redux"; import { withRouter, RouteComponentProps } from "react-router"; import FormRow from "./FormRow"; import { BaseText } from "components/designSystems/blueprint/TextComponent"; import { BaseTabbedView } from "components/designSystems/appsmith/TabbedView"; import styled from "styled-components"; import { AppState } from "reducers"; import { ActionResponse } from "api/ActionAPI"; import { formatBytes } from "utils/helpers"; import { APIEditorRouteParams } from "constants/routes"; import { ApiPaneReduxState } from "reducers/uiReducers/apiPaneReducer"; import LoadingOverlayScreen from "components/editorComponents/LoadingOverlayScreen"; import CodeEditor from "components/editorComponents/CodeEditor"; import { getActionResponses } from "selectors/entitiesSelector"; const ResponseWrapper = styled.div` position: relative; flex: 1; height: 100%; overflow-y: scroll; `; const ResponseMetaInfo = styled.div` display: flex; ${BaseText} { color: #768896; margin: 0 5px; } `; const StatusCodeText = styled(BaseText)<{ code: string }>` color: ${props => props.code.match(/2\d\d/) ? props.theme.colors.primary : "red"}; `; const TableWrapper = styled.div` &&& { table { table-layout: fixed; width: 100%; td { font-size: 12px; width: 50%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } } } `; interface ReduxStateProps { responses: Record; apiPane: ApiPaneReduxState; } const ResponseHeadersView = (props: { data: Record }) => { if (!props.data) return
; return ( {Object.keys(props.data).map(k => ( ))}
Key Value
{k} {props.data[k].join(", ")}
); }; type Props = ReduxStateProps & RouteComponentProps; const EMPTY_RESPONSE = { statusCode: "", duration: "", body: {}, headers: {}, size: "", }; const ApiResponseView = (props: Props) => { const { match: { params: { apiId }, }, responses, apiPane, } = props; let response: ActionResponse = EMPTY_RESPONSE; let isRunning = false; if (apiId && apiId in responses) { response = responses[apiId] || EMPTY_RESPONSE; isRunning = apiPane.isRunning[apiId]; } return ( {isRunning && ( Sending Request )} {response.statusCode && ( Status: {response.statusCode} )} {response.duration && ( Time: {response.duration} ms )} {response.size && ( Size: {formatBytes(parseInt(response.size))} )} ), }, { key: "headers", title: "Response Headers", panelComponent: , }, ]} /> ); }; const mapStateToProps = (state: AppState): ReduxStateProps => ({ responses: getActionResponses(state), apiPane: state.ui.apiPane, }); export default connect(mapStateToProps)(withRouter(ApiResponseView));