diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/settings/api-keys/page.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/settings/api-keys/page.tsx
index fb13e34e96..967d451d82 100644
--- a/apps/app/src/app/[locale]/(app)/(dashboard)/settings/api-keys/page.tsx
+++ b/apps/app/src/app/[locale]/(app)/(dashboard)/settings/api-keys/page.tsx
@@ -20,7 +20,11 @@ export default async function ApiKeysPage({
return redirect("/");
}
- return ;
+ return (
+
+ );
}
export async function generateMetadata({
diff --git a/apps/app/src/components/integrations/integrations-card.tsx b/apps/app/src/components/integrations/integrations-card.tsx
index cb1ac26f2a..b45e765c2d 100644
--- a/apps/app/src/components/integrations/integrations-card.tsx
+++ b/apps/app/src/components/integrations/integrations-card.tsx
@@ -1,10 +1,10 @@
import { deleteIntegrationConnectionAction } from "@/actions/integrations/delete-integration-connection";
import { retrieveIntegrationSessionTokenAction } from "@/actions/integrations/retrieve-integration-session-token";
import {
- Accordion,
- AccordionContent,
- AccordionItem,
- AccordionTrigger,
+ Accordion,
+ AccordionContent,
+ AccordionItem,
+ AccordionTrigger,
} from "@bubba/ui/accordion";
import { Button } from "@bubba/ui/button";
import { Card, CardContent, CardHeader, CardTitle } from "@bubba/ui/card";
@@ -16,195 +16,197 @@ import { parseAsBoolean, parseAsString, useQueryStates } from "nuqs";
import { useState } from "react";
import { toast } from "sonner";
import {
- IntegrationSettings,
- type IntegrationSettingsItem,
+ IntegrationSettings,
+ type IntegrationSettingsItem,
} from "./integration-settings";
+import Image from "next/image";
+import type { StaticImageData } from "next/image";
export function IntegrationsCard({
- id,
- logo: Logo,
- name,
- short_description,
- description,
- settings,
- images,
- active,
- installed,
- category,
- installedSettings,
+ id,
+ logo,
+ name,
+ short_description,
+ description,
+ settings,
+ images,
+ active,
+ installed,
+ category,
+ installedSettings,
}: {
- id: string;
- logo: React.ComponentType;
- name: string;
- short_description: string;
- description: string;
- settings: Record;
- images: string[];
- active: boolean;
- installed: boolean;
- category: string;
- installedSettings: Record;
+ id: string;
+ logo: StaticImageData;
+ name: string;
+ short_description: string;
+ description: string;
+ settings: Record;
+ images: string[];
+ active: boolean;
+ installed: boolean;
+ category: string;
+ installedSettings: Record;
}) {
- const router = useRouter();
-
- const [params, setParams] = useQueryStates({
- app: parseAsString,
- settings: parseAsBoolean,
- });
-
- const retrieveIntegrationSessionToken = useAction(
- retrieveIntegrationSessionTokenAction,
- );
-
- const deleteIntegrationConnection = useAction(
- deleteIntegrationConnectionAction,
- {
- onSuccess: () => {
- toast.success("Integration disconnected successfully");
- },
- onError: () => {
- toast.error("Failed to disconnect integration");
- },
- },
- );
-
- const [isLoading, setLoading] = useState(false);
-
- const handleConnect = async () => {
- try {
- setLoading(true);
-
- const res = await retrieveIntegrationSessionToken.executeAsync({
- integrationId: id,
- });
- } catch (error) {
- console.error("Connection error:", error);
- toast.error("Failed to connect integration");
- setLoading(false);
- }
- };
-
- return (
-
- setParams(null)}>
-
-
-
- {installed && (
-
- Connected
-
- )}
-
-
-
-
-
- {name}
-
- {!active && (
-
- Coming soon
-
- )}
-
-
-
-
- {short_description}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{name}
- {installed && (
-
- )}
-
-
-
- {category} • Published by Comp AI
-
-
-
{" "}
-
- {installed && (
-
- )}
-
-
-
-
-
-
- How it works
-
- {description}
-
-
-
- {settings && settings.length > 0 && (
-
- Settings
-
-
-
-
- )}
-
-
-
-
-
- All integrations on the Comp AI store are open-source and
- peer-reviewed.
-
-
-
- Report an issue
-
-
-
-
-
- );
+ const router = useRouter();
+
+ const [params, setParams] = useQueryStates({
+ app: parseAsString,
+ settings: parseAsBoolean,
+ });
+
+ const retrieveIntegrationSessionToken = useAction(
+ retrieveIntegrationSessionTokenAction,
+ );
+
+ const deleteIntegrationConnection = useAction(
+ deleteIntegrationConnectionAction,
+ {
+ onSuccess: () => {
+ toast.success("Integration disconnected successfully");
+ },
+ onError: () => {
+ toast.error("Failed to disconnect integration");
+ },
+ },
+ );
+
+ const [isLoading, setLoading] = useState(false);
+
+ const handleConnect = async () => {
+ try {
+ setLoading(true);
+
+ const res = await retrieveIntegrationSessionToken.executeAsync({
+ integrationId: id,
+ });
+ } catch (error) {
+ console.error("Connection error:", error);
+ toast.error("Failed to connect integration");
+ setLoading(false);
+ }
+ };
+
+ return (
+
+ setParams(null)}>
+
+
+
+ {installed && (
+
+ Connected
+
+ )}
+
+
+
+
+
+ {name}
+
+ {!active && (
+
+ Coming soon
+
+ )}
+
+
+
+
+ {short_description}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{name}
+ {installed && (
+
+ )}
+
+
+
+ {category} • Published by Comp AI
+
+
+
{" "}
+
+ {installed && (
+
+ )}
+
+
+
+
+
+
+ How it works
+
+ {description}
+
+
+
+ {settings && settings.length > 0 && (
+
+ Settings
+
+
+
+
+ )}
+
+
+
+
+
+ All integrations on the Comp AI store are open-source and
+ peer-reviewed.
+
+
+
+ Report an issue
+
+
+
+
+
+ );
}
diff --git a/apps/app/src/components/tables/api-keys/create-api-key-dialog.tsx b/apps/app/src/components/tables/api-keys/create-api-key-dialog.tsx
index b6fd0f1e8c..c4f651b6fd 100644
--- a/apps/app/src/components/tables/api-keys/create-api-key-dialog.tsx
+++ b/apps/app/src/components/tables/api-keys/create-api-key-dialog.tsx
@@ -1,7 +1,6 @@
"use client";
import { createApiKeyAction } from "@/actions/organization/create-api-key-action";
-import { apiKeySchema } from "@/actions/schema";
import { useI18n } from "@/locales/client";
import { Button } from "@bubba/ui/button";
import {
@@ -99,7 +98,7 @@ export function CreateApiKeyDialog({
return (