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 && ( - - )} - {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