From f4c36377df4052e4c0caf7c7b352da5f8e6fe90b Mon Sep 17 00:00:00 2001 From: Esa Firman Date: Mon, 24 Aug 2020 03:30:01 -0700 Subject: [PATCH] make body option persisted across request selection (#1448) Summary: This PR make the formatter body option persisted across request selection as mentioned in [here](https://github.com/facebook/flipper/issues/432) Close https://github.com/facebook/flipper/issues/432 ## Changelog Make request body option persisted across request selection Pull Request resolved: https://github.com/facebook/flipper/pull/1448 Test Plan: 1. Select the first request and change the body option from `parsed` to `formatted` Screen Shot 2020-08-10 at 19 00 07 2. Move to second request, still in `formatted` Screen Shot 2020-08-10 at 19 00 18 Reviewed By: cekkaewnumchai Differential Revision: D23264774 Pulled By: mweststrate fbshipit-source-id: aed97642d030fa8e01e63d115e79ffb7a702c5e6 --- desktop/plugins/network/RequestDetails.tsx | 31 +++++----------------- desktop/plugins/network/index.tsx | 15 ++++++++++- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/desktop/plugins/network/RequestDetails.tsx b/desktop/plugins/network/RequestDetails.tsx index e48e5e1e5..50d0d79aa 100644 --- a/desktop/plugins/network/RequestDetails.tsx +++ b/desktop/plugins/network/RequestDetails.tsx @@ -22,7 +22,7 @@ import { SmallText, } from 'flipper'; import {decodeBody, getHeaderValue} from './utils'; -import {formatBytes} from './index'; +import {formatBytes, BodyOptions} from './index'; import React from 'react'; import querystring from 'querystring'; @@ -54,26 +54,14 @@ const KeyValueColumns = { type RequestDetailsProps = { request: Request; response: Response | null | undefined; -}; - -type RequestDetailsState = { bodyFormat: string; + onSelectFormat: (bodyFormat: string) => void; }; - -export default class RequestDetails extends Component< - RequestDetailsProps, - RequestDetailsState -> { +export default class RequestDetails extends Component { static Container = styled(FlexColumn)({ height: '100%', overflow: 'auto', }); - static BodyOptions = { - formatted: 'formatted', - parsed: 'parsed', - }; - - state: RequestDetailsState = {bodyFormat: RequestDetails.BodyOptions.parsed}; urlColumns = (url: URL) => { return [ @@ -120,16 +108,11 @@ export default class RequestDetails extends Component< ]; }; - onSelectFormat = (bodyFormat: string) => { - this.setState(() => ({bodyFormat})); - }; - render() { - const {request, response} = this.props; + const {request, response, bodyFormat, onSelectFormat} = this.props; const url = new URL(request.url); - const {bodyFormat} = this.state; - const formattedText = bodyFormat == RequestDetails.BodyOptions.formatted; + const formattedText = bodyFormat == BodyOptions.formatted; return ( @@ -215,8 +198,8 @@ export default class RequestDetails extends Component< grow label="Body" selected={bodyFormat} - onChange={this.onSelectFormat} - options={RequestDetails.BodyOptions} + onChange={onSelectFormat} + options={BodyOptions} /> {response && response.insights ? ( diff --git a/desktop/plugins/network/index.tsx b/desktop/plugins/network/index.tsx index 0c7ad1e2a..e53ddbd3c 100644 --- a/desktop/plugins/network/index.tsx +++ b/desktop/plugins/network/index.tsx @@ -48,6 +48,11 @@ import {combineBase64Chunks} from './chunks'; const LOCALSTORAGE_MOCK_ROUTE_LIST_KEY = '__NETWORK_CACHED_MOCK_ROUTE_LIST'; +export const BodyOptions = { + formatted: 'formatted', + parsed: 'parsed', +}; + type State = { selectedIds: Array; searchTerm: string; @@ -55,6 +60,7 @@ type State = { nextRouteId: number; isMockResponseSupported: boolean; showMockResponseDialog: boolean; + detailBodyFormat: string; }; const COLUMN_SIZE = { @@ -321,6 +327,7 @@ export default class extends FlipperPlugin { nextRouteId: 0, isMockResponseSupported: false, showMockResponseDialog: false, + detailBodyFormat: BodyOptions.parsed, }; } @@ -486,9 +493,13 @@ export default class extends FlipperPlugin { this.setState({showMockResponseDialog: false}); }; + onSelectFormat = (bodyFormat: string) => { + this.setState({detailBodyFormat: bodyFormat}); + }; + renderSidebar = () => { const {requests, responses} = this.props.persistedState; - const {selectedIds} = this.state; + const {selectedIds, detailBodyFormat} = this.state; const selectedId = selectedIds.length === 1 ? selectedIds[0] : null; if (!selectedId) { @@ -503,6 +514,8 @@ export default class extends FlipperPlugin { key={selectedId} request={requestWithId} response={responses[selectedId]} + bodyFormat={detailBodyFormat} + onSelectFormat={this.onSelectFormat} /> ); };