diff --git a/web/src/lib/errorBanners.ts b/web/src/lib/errorBanners.ts index c2945b9..ee8aa6f 100644 --- a/web/src/lib/errorBanners.ts +++ b/web/src/lib/errorBanners.ts @@ -114,7 +114,13 @@ export class ErrorBanners { return result } catch (error) { this.handler(uiMessage)(error) - return fallback as F + return fallback as F extends never[] + ? T extends [infer _First, ...infer _Rest] + ? [] + : T extends unknown[] + ? T[number][] + : F + : F } } diff --git a/web/src/lib/makeAdminApiCallInfo.ts b/web/src/lib/makeAdminApiCallInfo.ts new file mode 100644 index 0000000..113aaf2 --- /dev/null +++ b/web/src/lib/makeAdminApiCallInfo.ts @@ -0,0 +1,27 @@ +import type { Misc } from 'ts-toolbelt' + +export async function makeAdminApiCallInfo({ + method, + path, + input, + baseUrl, +}: { + method: 'POST' | 'QUERY' + path: `/${string}` + input: T + baseUrl: URL | string +}) { + const fullPath = new URL(`/api/v1${path}`, baseUrl).href + + return { + method, + path, + fullPath, + input, + output: await fetch(fullPath, { + method, + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(input), + }).then((res) => res.json() as Promise), + } +} diff --git a/web/src/pages/admin/services/[slug]/edit.astro b/web/src/pages/admin/services/[slug]/edit.astro index 889b64c..ca53435 100644 --- a/web/src/pages/admin/services/[slug]/edit.astro +++ b/web/src/pages/admin/services/[slug]/edit.astro @@ -33,6 +33,7 @@ import { verificationStepStatuses, } from '../../../../constants/verificationStepStatus' import BaseLayout from '../../../../layouts/BaseLayout.astro' +import { makeAdminApiCallInfo } from '../../../../lib/makeAdminApiCallInfo' import { pluralize } from '../../../../lib/pluralize' import { prisma } from '../../../../lib/prisma' @@ -181,6 +182,20 @@ const [service, categories, attributes] = await Astro.locals.banners.tryMany([ ]) if (!service) return Astro.rewrite('/404') + +const apiCalls = await Astro.locals.banners.try( + 'Error fetching api calls', + () => + Promise.all([ + makeAdminApiCallInfo({ + method: 'QUERY', + path: '/service/get', + input: { slug: service.slug }, + baseUrl: Astro.url, + }), + ]), + [] +) --- @@ -1100,5 +1115,25 @@ if (!service) return Astro.rewrite('/404') + + + { + apiCalls.map((call) => ( + +

Input:

+
+
+            

Output:

+
+          
+        ))
+      }
+