<script lang="ts">
import Code from "../components/Code.svelte";
import Dropdown from "../components/Dropdown.svelte";
import Copy from "../svgs/Copy.svelte";
import Copied from "../svgs/Copied.svelte";
import Logo from "../svgs/Logo.svelte";
import { requests } from "../requests";
import { vars } from "../store";
import { envs } from "../envs";
let requestStatus = "request-good";
export let key = "0";
export let title = "Get Institutions";
let code = $requests[key];
$: code = $requests[key];
let responseText = "";
let copied = false;
let copyToClipboard = async () => {
let copyText = document.getElementById(`copy-text-${key}`).innerText;
navigator.clipboard.writeText(copyText);
copied = true;
};
// This may look overcomplicated, but it's being used on every route and it covers many different
// failure possibilites, if the response body is json, it returns the formatted text.
// Raise a pull request if you can simplify this without using an external library.
let runCode = async () => {
let base_url = "";
if ("base_url" in $envs[$vars.environment]) {
base_url = $envs[$vars.environment].base_url;
}
if ("baseUrl" in $envs[$vars.environment]) {
base_url = $envs[$vars.environment].baseUrl;
}
console.log($requests[key].body);
let data: string = await fetch(`${base_url}${$requests[key].path}`, {
method: code.method,
headers: code.headers,
body: code.body,
})
.then((res) => {
if (res.status < 200 || res.status > 299) {
requestStatus = "request-bad";
} else {
requestStatus = "request-good";
}
return res.text();
})
.catch((err) => {
requestStatus = "request-bad";
if (err) {
return err.message + " - check console for more details";
}
});
console.log(data);
if (data == null) {
responseText = "No body returned";
return;
}
try {
let json = JSON.parse(data);
responseText = JSON.stringify(json, null, 2);
} catch (err) {
responseText = data;
}
};
// import "newman";
// newman.run({ collection: require("../../../collections/example.json"), reporters: "cli" }, () => console.log("collection run complete!"));
</script>
<div class="grid grid-cols-1 xl:grid-cols-2">
<div>
<h3 class="rest-headers" id={key}>{title}</h3>
<slot />
</div>
<div>
<div class="flex items-center justify-between px-10 xl:mt-8">
<div class="text-xl">Code Examples</div>
<div class="flex">
<Dropdown />
<button on:click={copyToClipboard}>
{#if copied}
<Copied />
{:else}
<Copy />
{/if}
</button>
<button on:click={runCode}>
<Logo />
</button>
</div>
</div>
<div class="border-primary-100 border rounded-xl p-4 mx-10 bg-primary-800 ">
<div class="scroll-horizontal overflow-auto ">
<Code codeKey={key} />
</div>
</div>
{#if responseText}
<div class="text-xl pl-10 py-4">Response</div>
<div class="{requestStatus} border rounded-xl p-4 mx-10">
<div class="scroll-horizontal overflow-auto ">
<pre>{responseText}</pre>
</div>
</div>
{/if}
</div>
</div>