diff --git a/web/src/feature/ApiServiceCredentialsModal/index.tsx b/web/src/feature/ApiServiceCredentialsModal/index.tsx
new file mode 100644
index 0000000..07e937b
--- /dev/null
+++ b/web/src/feature/ApiServiceCredentialsModal/index.tsx
@@ -0,0 +1,65 @@
+import { createPortal } from "react-dom";
+import { Button } from "@/components/ui/button";
+import { Input } from "@/components/ui/input";
+import { X } from "lucide-react";
+import { useAdmin } from "@/store/admin";
+import type { ApiServiceCredentials } from "@/types";
+
+const download = (credentials: ApiServiceCredentials) => {
+ const jsonStr = JSON.stringify(credentials, null, 2);
+ const blob = new Blob([jsonStr], { type: "application/json" });
+ const url = URL.createObjectURL(blob);
+
+ const a = document.createElement("a");
+ a.href = url;
+ a.download = `credentials.json`;
+ a.click();
+
+ URL.revokeObjectURL(url);
+};
+
+const ApiServiceCredentialsModal = () => {
+ const credentials = useAdmin((state) => state.createdCredentials);
+ const resetCredentials = useAdmin((state) => state.resetCredentials);
+
+ const portalRoot = document.getElementById("portal-root");
+ if (!portalRoot || !credentials) return null;
+
+ return createPortal(
+
+
+
+
New Credentials
+
+
+
+
+
+
+
+
+
+
+
+
,
+ portalRoot,
+ );
+};
+
+export default ApiServiceCredentialsModal;
diff --git a/web/src/pages/ApiServices/Create/index.tsx b/web/src/pages/ApiServices/Create/index.tsx
index 9ac8f7e..e580b8f 100644
--- a/web/src/pages/ApiServices/Create/index.tsx
+++ b/web/src/pages/ApiServices/Create/index.tsx
@@ -1,7 +1,9 @@
import Breadcrumbs from "@/components/ui/breadcrumbs";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
-import type { FC } from "react";
+import ApiServiceCredentialsModal from "@/feature/ApiServiceCredentialsModal";
+import { useAdmin } from "@/store/admin";
+import { useCallback, type FC } from "react";
import { useForm } from "react-hook-form";
import { Link } from "react-router";
@@ -26,13 +28,31 @@ const ApiServiceCreatePage: FC = () => {
},
});
- const onSubmit = (data: FormData) => {
- console.log("Form submitted:", data);
- // handle create logic here (e.g. API call)
- };
+ const createApiService = useAdmin((state) => state.createApiService);
+
+ const credentials = useAdmin((state) => state.createdCredentials);
+
+ const onSubmit = useCallback(
+ (data: FormData) => {
+ console.log("Form submitted:", data);
+ createApiService({
+ name: data.name,
+ description: data.description ?? "",
+ redirect_uris: data.redirectUris.trim().split("\n"),
+ scopes: data.scopes.trim().split(" "),
+ grant_types: data.grantTypes
+ ? data.grantTypes.trim().split(" ")
+ : ["authorization_code"],
+ is_active: data.enabled,
+ });
+ },
+ [createApiService],
+ );
return (
+ {credentials !== null &&
}
+