aboutsummaryrefslogtreecommitdiffstats
path: root/src/api.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/api.ts')
-rw-r--r--src/api.ts36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/api.ts b/src/api.ts
index 226e213..be0c7a1 100644
--- a/src/api.ts
+++ b/src/api.ts
@@ -1,5 +1,6 @@
import useSWR, { SWRResponse } from "swr"
import { RunnerApi, ExampleApi } from "slam-types"
+import { useState } from "react"
const RUNNER_API_URL = String(import.meta.env.VITE_RUNNER_API_URL)
const EXAMPLE_API_URL = String(import.meta.env.VITE_EXAMPLE_API_URL)
@@ -77,7 +78,7 @@ export const useExamples = () => mapSWRResult<ExampleApi.ListResponse.Body, Erro
export type SubmitResult = APIResult<RunnerApi.SubmitResponse.Body["result"], Error>
-export const submitSource = async (text: string): Promise<SubmitResult> => {
+const postSource = async (text: string): Promise<SubmitResult> => {
const apiResult = await postRequest<RunnerApi.SubmitRequest.Body, RunnerApi.SubmitResponse.Body, Error>(
{
baseUrl: RUNNER_API_URL,
@@ -98,3 +99,36 @@ export const submitSource = async (text: string): Promise<SubmitResult> => {
return apiResult
}
}
+
+export const useSubmitSource = () => {
+ const [result, setResult] = useState<SubmitResult>({ type: "not_yet_requested" })
+
+ const submitSource = async (text: string) => {
+ try {
+ setResult({ type: "loading" })
+ const apiResult = await postRequest<RunnerApi.SubmitRequest.Body, RunnerApi.SubmitResponse.Body, Error>(
+ {
+ baseUrl: RUNNER_API_URL,
+ path: RunnerApi.SubmitRequest.path,
+ body: {
+ source: text,
+ },
+ },
+ )
+ switch (apiResult.type) {
+ case "success":
+ setResult({ type: "success", data: apiResult.data.result })
+ break
+ case "failed":
+ setResult({ type: "failed", error: apiResult.error })
+ break
+ default:
+ break
+ }
+ } catch (err: any) {
+ setResult({ type: "failed", error: err })
+ }
+ }
+
+ return { result, submitSource }
+} \ No newline at end of file