import { TextInput } from 'react-native-paper'; import { Button, KeyboardAvoidingView, Platform, ScrollView, StyleSheet, Switch, Text, View } from 'react-native'; import React, { useCallback, useContext, useEffect, useState } from 'react'; import { ThemeContext } from '../../Theme'; import { NavBar } from '../NavBar'; import { extractURL, mockRequestWithResponse, MockResponse } from './utils'; export function EditMockResponse(props: { mockResponse: MockResponse; onPressBack: () => void; update: boolean }) { const theme = useContext(ThemeContext); const [url, setUrl] = useState(); const [method, setMethod] = useState(); // [GET, POST, PUT, PATCH, DELETE const [headers, setHeaders] = useState(); const [body, setBody] = useState(); const [code, setCode] = useState(); const [active, setActive] = useState(true); const [to, setTo] = useState(); useEffect(() => { setUrl(props.mockResponse.url); setMethod(props.mockResponse.method); setHeaders(props.mockResponse.headers); setBody(props.mockResponse.response); setCode(props.mockResponse.statusCode?.toString()); setTo(props.mockResponse.timeout?.toString()); setActive(props.update ? !!props.mockResponse.active : true); }, [ props.mockResponse.headers, props.mockResponse.method, props.mockResponse.response, props.mockResponse.statusCode, props.mockResponse.timeout, props.mockResponse.url, props.mockResponse.active, props.update, ]); const saveMockResponse = useCallback(() => { if (url) { mockRequestWithResponse({ url: extractURL(url), method, headers, response: body, statusCode: code ? parseInt(code, 10) : 0, timeout: to ? parseInt(to, 10) : 0, active, date: Date.now(), }); } }, [body, code, headers, method, to, url, active]); return ( } /> Leave blank entries to keep unchanged. Mock response active ); } const styles = StyleSheet.create({ container: { flex: 1, }, subheading: { paddingHorizontal: 16, paddingVertical: 8, marginBottom: 10, }, button: { justifyContent: 'center', alignItems: 'center', height: 56, width: 56, borderLeftWidth: 1, }, scrollView: { paddingTop: 26, paddingBottom: 20, }, textInput: { margin: 10, }, multiLine: { height: 200, }, });