mirror of
https://github.com/get-drexa/drive.git
synced 2025-12-01 05:51:39 +00:00
40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
|
|
import { useRef, type FormEvent } from "react";
|
||
|
|
|
||
|
|
export function APITester() {
|
||
|
|
const responseInputRef = useRef<HTMLTextAreaElement>(null);
|
||
|
|
|
||
|
|
const testEndpoint = async (e: FormEvent<HTMLFormElement>) => {
|
||
|
|
e.preventDefault();
|
||
|
|
|
||
|
|
try {
|
||
|
|
const form = e.currentTarget;
|
||
|
|
const formData = new FormData(form);
|
||
|
|
const endpoint = formData.get("endpoint") as string;
|
||
|
|
const url = new URL(endpoint, location.href);
|
||
|
|
const method = formData.get("method") as string;
|
||
|
|
const res = await fetch(url, { method });
|
||
|
|
|
||
|
|
const data = await res.json();
|
||
|
|
responseInputRef.current!.value = JSON.stringify(data, null, 2);
|
||
|
|
} catch (error) {
|
||
|
|
responseInputRef.current!.value = String(error);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
return (
|
||
|
|
<div className="api-tester">
|
||
|
|
<form onSubmit={testEndpoint} className="endpoint-row">
|
||
|
|
<select name="method" className="method">
|
||
|
|
<option value="GET">GET</option>
|
||
|
|
<option value="PUT">PUT</option>
|
||
|
|
</select>
|
||
|
|
<input type="text" name="endpoint" defaultValue="/api/hello" className="url-input" placeholder="/api/hello" />
|
||
|
|
<button type="submit" className="send-button">
|
||
|
|
Send
|
||
|
|
</button>
|
||
|
|
</form>
|
||
|
|
<textarea ref={responseInputRef} readOnly placeholder="Response will appear here..." className="response-area" />
|
||
|
|
</div>
|
||
|
|
);
|
||
|
|
}
|