/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ import React, {useContext, useState} from 'react'; import { NetworkRouteContext, NetworkRouteManager, Route, } from './NetworkRouteManager'; import {RequestId} from '../types'; import {Button, Input, Select} from 'antd'; import {Layout, produce, Tabs, Tab, theme} from 'flipper-plugin'; import {CloseCircleOutlined, WarningOutlined} from '@ant-design/icons'; type Props = { id: RequestId; route: Route; isDuplicated: boolean; }; function HeaderInput(props: { initialValue: string; onUpdate: (newValue: string) => void; style?: React.CSSProperties; }) { const [value, setValue] = useState(props.initialValue); return ( { setValue(event.target.value); props.onUpdate(event.target.value); }} style={props.style} /> ); } function ResponseHeaders({ routeId, route, networkRouteManager, }: { routeId: string; route: Route; networkRouteManager: NetworkRouteManager; }) { return ( {Object.entries(route.responseHeaders).map(([id, header]) => ( { const newHeaders = produce( route.responseHeaders, (draftHeaders) => { draftHeaders[id].key = newValue; }, ); networkRouteManager.modifyRoute(routeId, { responseHeaders: newHeaders, }); }} style={{width: 300}} /> { const newHeaders = produce( route.responseHeaders, (draftHeaders) => { draftHeaders[id].value = newValue; }, ); networkRouteManager.modifyRoute(routeId, { responseHeaders: newHeaders, }); }} /> { const newHeaders = produce( route.responseHeaders, (draftHeaders) => { delete draftHeaders[id]; }, ); networkRouteManager.modifyRoute(routeId, { responseHeaders: newHeaders, }); }}> ))} ); } const httpMethods = [ 'GET', 'POST', 'PATCH', 'HEAD', 'PUT', 'DELETE', 'TRACE', 'OPTIONS', 'CONNECT', ].map((v) => ({value: v, label: v})); export function MockResponseDetails({id, route, isDuplicated}: Props) { const networkRouteManager = useContext(NetworkRouteContext); const [nextHeaderId, setNextHeaderId] = useState(0); const {requestUrl, requestMethod, responseData, responseStatus} = route; let formattedResponse = ''; try { formattedResponse = JSON.stringify(JSON.parse(responseData), null, 2); } catch (e) { formattedResponse = responseData; } return ( networkRouteManager.modifyRoute(id, { requestUrl: event.target.value, }) } style={{flex: 1}} /> networkRouteManager.modifyRoute(id, { responseStatus: event.target.value, }) } style={{width: 100}} /> {isDuplicated && ( Route is duplicated (Same URL and Method) )} networkRouteManager.modifyRoute(id, { responseData: event.target.value, }) } style={{flex: 1}} /> ); }