From 856d13c603bb5e0e9da8d167be848513971bb18a Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Fri, 24 Feb 2023 16:09:19 -0800 Subject: [PATCH] Send request body --- src-tauri/src/main.rs | 11 ++++++++--- src-web/App.tsx | 14 +++++++++++--- src-web/components/Editor/Editor.tsx | 7 ++++++- src-web/hooks/useCodemirror.ts | 24 ++++++++++++++++++++---- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index e360bc77..5db5cb2c 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -119,6 +119,7 @@ async fn send_request( db_instance: State<'_, Mutex>>, url: &str, method: &str, + body: Option<&str>, ) -> Result { let start = std::time::Instant::now(); @@ -141,10 +142,14 @@ async fn send_request( ); let m = Method::from_bytes(method.to_uppercase().as_bytes()).unwrap(); - let req = client + let builder = client .request(m, abs_url.to_string()) - .headers(headers) - .build(); + .headers(headers); + + let req = match body { + Some(b) => builder.body(b.to_string()).build(), + None => builder.build(), + }; let req = match req { Ok(v) => v, diff --git a/src-web/App.tsx b/src-web/App.tsx index 4767cb60..d9313718 100644 --- a/src-web/App.tsx +++ b/src-web/App.tsx @@ -23,6 +23,7 @@ function App() { const [error, setError] = useState(null); const [response, setResponse] = useState(null); const [url, setUrl] = useState('https://go-server.schier.dev/debug'); + const [body, setBody] = useState(''); const [method, setMethod] = useState<{ label: string; value: string }>({ label: 'GET', value: 'GET', @@ -32,12 +33,15 @@ function App() { setError(null); try { - const resp = (await invoke('send_request', { method: method.value, url })) as Response; + const resp = (await invoke('send_request', { + method: method.value, + url, + body: body || undefined, + })) as Response; if (resp.body.includes('')) { resp.body = resp.body.replace(//gi, ``); } setResponse(resp); - console.log('Response', resp.status, resp.url, { resp }); } catch (err) { setError(`${err}`); } @@ -60,7 +64,11 @@ function App() { onUrlChange={setUrl} sendRequest={sendRequest} /> - + diff --git a/src-web/components/Editor/Editor.tsx b/src-web/components/Editor/Editor.tsx index 04f1254d..fc8d20a9 100644 --- a/src-web/components/Editor/Editor.tsx +++ b/src-web/components/Editor/Editor.tsx @@ -4,9 +4,14 @@ import './Editor.css'; interface Props { contentType: string; value: string; + onChange?: (value: string) => void; } export default function Editor(props: Props) { - const { ref } = useCodeMirror({ value: props.value, contentType: props.contentType }); + const { ref } = useCodeMirror({ + value: props.value, + contentType: props.contentType, + onChange: props.onChange, + }); return
; } diff --git a/src-web/hooks/useCodemirror.ts b/src-web/hooks/useCodemirror.ts index 5c93c35a..40a21890 100644 --- a/src-web/hooks/useCodemirror.ts +++ b/src-web/hooks/useCodemirror.ts @@ -98,9 +98,11 @@ const extensions = [ export default function useCodeMirror({ value, contentType, + onChange, }: { value: string; contentType: string; + onChange?: (value: string) => void; }) { const [cm, setCm] = useState(null); const ref = useRef(null); @@ -108,7 +110,7 @@ export default function useCodeMirror({ if (ref.current === null) return; const view = new EditorView({ - extensions: getExtensions(contentType), + extensions: getExtensions({ contentType, onChange }), parent: ref.current, }); @@ -122,7 +124,7 @@ export default function useCodeMirror({ const newState = EditorState.create({ doc: value, - extensions: getExtensions(contentType), + extensions: getExtensions({ contentType, onChange }), }); cm.setState(newState); }, [cm, value]); @@ -130,7 +132,21 @@ export default function useCodeMirror({ return { ref, cm }; } -function getExtensions(contentType: string) { +function getExtensions({ + contentType, + onChange, +}: { + contentType: string; + onChange?: (value: string) => void; +}) { const ext = syntaxExtensions[contentType]; - return ext ? [...extensions, ext] : extensions; + return ext + ? [ + ...extensions, + ...(onChange + ? [EditorView.updateListener.of((update) => onChange(update.state.doc.toString()))] + : []), + ext, + ] + : extensions; }