From 508fcb9861d56f84d027fc8c456d8841486fdf72 Mon Sep 17 00:00:00 2001
From: Manuel <30572287+manuel-rw@users.noreply.github.com>
Date: Mon, 22 Jul 2024 21:00:14 +0200
Subject: [PATCH] feat: allow no secrets for integration (#856)
---
.../new/_integration-new-form.tsx | 20 ++++++++++++++++---
packages/translation/src/lang/en.ts | 4 ++++
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-form.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-form.tsx
index d7ab653e1..6d4ed9727 100644
--- a/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-form.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-form.tsx
@@ -3,7 +3,8 @@
import { useCallback } from "react";
import Link from "next/link";
import { useRouter } from "next/navigation";
-import { Button, Fieldset, Group, SegmentedControl, Stack, TextInput } from "@mantine/core";
+import { Alert, Button, Fieldset, Group, SegmentedControl, Stack, Text, TextInput } from "@mantine/core";
+import { IconInfoCircle } from "@tabler/icons-react";
import { clientApi } from "@homarr/api/client";
import type { IntegrationKind, IntegrationSecretKind } from "@homarr/definitions";
@@ -95,6 +96,11 @@ export const NewIntegrationForm = ({ searchParams }: NewIntegrationFormProps) =>
{...form.getInputProps(`secrets.${index}.value`)}
/>
))}
+ {form.values.secrets.length === 0 && (
+ } color={"blue"}>
+ {t("integration.secrets.noSecretsRequired.text")}
+
+ )}
@@ -120,12 +126,20 @@ const SecretKindsSegmentedControl = ({ secretKinds, form }: SecretKindsSegmented
const t = useScopedI18n("integration.secrets");
const secretKindGroups = secretKinds.map((kinds) => ({
- label: kinds.map((kind) => t(`kind.${kind}.label`)).join(" & "),
- value: kinds.join("-"),
+ label:
+ kinds.length === 0
+ ? t("noSecretsRequired.segmentTitle")
+ : kinds.map((kind) => t(`kind.${kind}.label`)).join(" & "),
+ value: kinds.length === 0 ? "empty" : kinds.join("-"),
}));
const onChange = useCallback(
(value: string) => {
+ if (value === "empty") {
+ form.setFieldValue("secrets", []);
+ return;
+ }
+
const kinds = value.split("-") as IntegrationSecretKind[];
const secrets = kinds.map((kind) => ({
kind,
diff --git a/packages/translation/src/lang/en.ts b/packages/translation/src/lang/en.ts
index 9a448e5b7..f46d6b7ba 100644
--- a/packages/translation/src/lang/en.ts
+++ b/packages/translation/src/lang/en.ts
@@ -470,6 +470,10 @@ export default {
title: "Reset secret",
message: "Are you sure you want to reset this secret?",
},
+ noSecretsRequired: {
+ segmentTitle: "No secrets",
+ text: "No secrets required for this integration",
+ },
kind: {
username: {
label: "Username",