diff --git a/apps/nextjs/src/components/board/items/item-select-modal.tsx b/apps/nextjs/src/components/board/items/item-select-modal.tsx
index 59bfced2e..df0ca4d85 100644
--- a/apps/nextjs/src/components/board/items/item-select-modal.tsx
+++ b/apps/nextjs/src/components/board/items/item-select-modal.tsx
@@ -27,7 +27,7 @@ import {
} from "@mantine/core";
import { notifications } from "@mantine/notifications";
import { useElementSize } from "@mantine/hooks";
-import { IconApi, IconBuildingStore, IconPlus, IconSearch, IconSparkles } from "@tabler/icons-react";
+import { IconApi, IconBuildingStore, IconPlus, IconSearch } from "@tabler/icons-react";
import { QueryErrorResetBoundary } from "@tanstack/react-query";
import { ErrorBoundary } from "react-error-boundary";
@@ -848,40 +848,6 @@ const WidgetLivePreviewAndConfigContent = ({
return [];
}, [validIntegrationIds, supportsMock, mockIntegration]);
- const { mutateAsync: createMockIntegration, isPending: isCreatingMock } = clientApi.integration.create.useMutation({
- async onSuccess(data) {
- await utils.integration.all.invalidate();
- if (data && "integration" in data && data.integration) {
- const nextIds = [...(maxIntegrations > 1 ? form.values.integrationIds : []), data.integration.id].slice(
- -maxIntegrations,
- );
- form.setFieldValue("integrationIds", nextIds);
- setShowInlineConnect(false);
- showSuccessNotification({
- title: "Demo Service Connected",
- message: "A mock integration was created and connected for testing.",
- });
- }
- },
- });
-
- const handleCreateMockService = async () => {
- try {
- await createMockIntegration({
- name: "Demo Service",
- url: "https://demo.homarr.dev",
- kind: "mock",
- secrets: [],
- attemptSearchEngineCreation: false,
- });
- } catch (error) {
- showErrorNotification({
- title: t("common.error"),
- message: error instanceof Error ? error.message : String(error),
- });
- }
- };
-
const handleInlineCreateSuccess = (result?: CreatedIntegrationResult) => {
void utils.integration.all.invalidate();
if (result?.integration?.id) {
@@ -1100,25 +1066,11 @@ const WidgetLivePreviewAndConfigContent = ({
Connect {getIntegrationName(inlineConnectKind ?? supportedKinds[0]!)}
-
- {supportsMock && (
- }
- loading={isCreatingMock}
- onClick={handleCreateMockService}
- >
- Use Demo Service
-
- )}
- {compatibleIntegrations.length > 0 && (
-
- )}
-
+ {compatibleIntegrations.length > 0 && (
+
+ )}
{/* Multiple choice selector if widget supports >1 integration kind */}
diff --git a/e2e/specs/board/advanced-add-app.spec.ts b/e2e/specs/board/advanced-add-app.spec.ts
index 3ae61415d..a8fa2bba8 100644
--- a/e2e/specs/board/advanced-add-app.spec.ts
+++ b/e2e/specs/board/advanced-add-app.spec.ts
@@ -329,26 +329,23 @@ describe("Advanced Add App & Widget Modal E2E", () => {
});
// =========================================================================
- // 5. In-place / inline integration connection and mock demo service fallback
+ // 5. In-place / inline integration connection form
// =========================================================================
- test("supports in-place demo service fallback and mock integration connection", async () => {
+ test("supports in-place integration connection form within widget settings", async () => {
await actions.openItemSelectModalAsync();
const modal = page.getByRole("dialog").filter({ hasText: "Choose item to add" }).first();
- // Search and select Media releases widget (supports mock integration)
+ // Search and select Sonarr widget
await actions.searchWidgetsAsync("Media releases");
const mediaReleasesCard = modal.locator('button[aria-label*="Media releases" i]').first();
if (await mediaReleasesCard.isVisible()) {
await mediaReleasesCard.click();
await modal.locator('text="Live Preview & Options"').waitFor({ state: "visible", timeout: 15_000 });
- // Verify "Use Demo Service" button is available when no integration is connected
- const demoBtn = modal.getByRole("button", { name: "Use Demo Service", exact: false }).first();
- if (await demoBtn.isVisible()) {
- await demoBtn.click();
-
- // Verify demo / mock data badge appears in preview frame header
- await expect(modal.getByText("Showing Demo / Mock Data")).toBeVisible({ timeout: 15_000 });
+ // Check if inline connect form is visible
+ const connectHeader = modal.locator('text="Connect"').first();
+ if (await connectHeader.isVisible()) {
+ await expect(connectHeader).toBeVisible();
}
}
});
diff --git a/packages/ui/src/integration-select-grid/integration-select-grid.tsx b/packages/ui/src/integration-select-grid/integration-select-grid.tsx
index a6fb1de33..909fb7d75 100644
--- a/packages/ui/src/integration-select-grid/integration-select-grid.tsx
+++ b/packages/ui/src/integration-select-grid/integration-select-grid.tsx
@@ -144,13 +144,6 @@ const IntegrationCard = ({
)
}
- footerRight={
- connectedCount > 0 ? (
-
- ) : (
-
- )
- }
>
Tied Widgets