From beaad9a5696663480de9db69e16f224bfd5ff022 Mon Sep 17 00:00:00 2001 From: fkb032 <249513614+fkb032@users.noreply.github.com> Date: Thu, 7 May 2026 22:46:52 -0700 Subject: [PATCH] ENG-467 Add Support Nixmac settings link --- .../widget/settings/general-tab.test.tsx | 58 +++++++++++++++++++ .../widget/settings/general-tab.tsx | 43 +++++++++++--- 2 files changed, 92 insertions(+), 9 deletions(-) create mode 100644 apps/native/src/components/widget/settings/general-tab.test.tsx diff --git a/apps/native/src/components/widget/settings/general-tab.test.tsx b/apps/native/src/components/widget/settings/general-tab.test.tsx new file mode 100644 index 000000000..09b32a513 --- /dev/null +++ b/apps/native/src/components/widget/settings/general-tab.test.tsx @@ -0,0 +1,58 @@ +import { fireEvent, render, screen } from "@testing-library/react"; +import { open } from "@tauri-apps/plugin-shell"; +import { describe, expect, it, vi } from "vitest"; +import { GeneralTab } from "./general-tab"; + +vi.mock("@tauri-apps/api/app", () => ({ + getVersion: vi.fn().mockResolvedValue("0.0.0-test"), +})); + +vi.mock("@tauri-apps/plugin-shell", () => ({ + open: vi.fn().mockResolvedValue(undefined), +})); + +vi.mock("@/components/widget/controls/directory-picker", () => ({ + DirectoryPicker: ({ label }: { label: string }) =>
{label}
, +})); + +vi.mock("@/components/widget/controls/bootstrap-config", () => ({ + BootstrapConfig: ({ label }: { label: string }) =>
{label}
, +})); + +vi.mock("@/tauri-api", () => ({ + darwinAPI: { + ui: { + setPrefs: vi.fn().mockResolvedValue(undefined), + }, + }, +})); + +const sendDiagnosticsField = { + state: { value: false }, + handleChange: vi.fn(), +}; + +describe("GeneralTab", () => { + it("opens the Support Nixmac page from settings", async () => { + render( + , + ); + + await screen.findByText("0.0.0-test"); + expect(screen.getByText("Support Nixmac")).toBeInTheDocument(); + expect(screen.getByText("Help fund continued development.")).toBeInTheDocument(); + + fireEvent.click(screen.getByRole("button", { name: "Open Support Nixmac" })); + + expect(open).toHaveBeenCalledWith("https://nixmac.com/support"); + }); +}); diff --git a/apps/native/src/components/widget/settings/general-tab.tsx b/apps/native/src/components/widget/settings/general-tab.tsx index 722b27822..787eee589 100644 --- a/apps/native/src/components/widget/settings/general-tab.tsx +++ b/apps/native/src/components/widget/settings/general-tab.tsx @@ -13,8 +13,9 @@ import { getWebSiteUrl } from "@/lib/env"; import { useWidgetStore } from "@/stores/widget-store"; import { darwinAPI } from "@/tauri-api"; import { getVersion } from "@tauri-apps/api/app"; -import { open } from '@tauri-apps/plugin-shell'; +import { open } from "@tauri-apps/plugin-shell"; import type { AnyFieldApi } from "@tanstack/react-form"; +import { ExternalLink } from "lucide-react"; import { useEffect, useRef, useState } from "react"; interface GeneralTabProps { @@ -29,6 +30,18 @@ interface GeneralTabProps { sendDiagnosticsField: AnyFieldApi; } +// Support should always land on the public website, even in local app builds. +const SUPPORT_NIXMAC_URL = "https://nixmac.com/support"; + +async function openExternalUrl(url: string) { + try { + await open(url); + } catch (error) { + console.warn("Failed to open external URL with Tauri shell; falling back to browser window.", error); + window.open(url, "_blank"); + } +} + export function GeneralTab({ configDir, hasFlake, @@ -87,15 +100,9 @@ export function GeneralTab({
+
+
+
Support Nixmac
+
+ Help fund continued development. +
+
+ +
+