diff --git a/surfsense_web/components/assistant-ui/connector-popup/components/connector-card.tsx b/surfsense_web/components/assistant-ui/connector-popup/components/connector-card.tsx index a9a33e8b3..fa4b8feb6 100644 --- a/surfsense_web/components/assistant-ui/connector-popup/components/connector-card.tsx +++ b/surfsense_web/components/assistant-ui/connector-popup/components/connector-card.tsx @@ -5,7 +5,6 @@ import { differenceInDays, differenceInMinutes, format, isToday, isYesterday } f import { FileText, Loader2 } from "lucide-react"; import type { FC } from "react"; import { Button } from "@/components/ui/button"; -import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { getConnectorIcon } from "@/contracts/enums/connectorIcons"; import type { LogActiveTask } from "@/contracts/types/log.types"; import { cn } from "@/lib/utils"; @@ -151,29 +150,21 @@ export const ConnectorCard: FC = ({ return description; }; - // Determine if we should show tooltip on the whole card (for disabled/maintenance) - const shouldShowCardTooltip = - statusMessage && (status.status === "disabled" || status.status === "maintenance"); - const cardContent = (
{connectorType ? ( @@ -239,17 +230,5 @@ export const ConnectorCard: FC = ({
); - // Wrap card in tooltip for disabled/maintenance status - if (shouldShowCardTooltip) { - return ( - - {cardContent} - - {statusMessage} - - - ); - } - return cardContent; }; diff --git a/surfsense_web/components/assistant-ui/connector-popup/components/connector-status-badge.tsx b/surfsense_web/components/assistant-ui/connector-popup/components/connector-status-badge.tsx index 4b83292bd..a5fd0c331 100644 --- a/surfsense_web/components/assistant-ui/connector-popup/components/connector-status-badge.tsx +++ b/surfsense_web/components/assistant-ui/connector-popup/components/connector-status-badge.tsx @@ -44,7 +44,7 @@ export const ConnectorStatusBadge: FC = ({ case "deprecated": return { icon: AlertTriangle, - className: "text-amber-500 dark:text-amber-400", + className: "ext-slate-500 dark:text-slate-400", defaultTitle: "Deprecated", }; default: @@ -56,12 +56,13 @@ export const ConnectorStatusBadge: FC = ({ if (!config) return null; const Icon = config.icon; - // Only show statusMessage in tooltip for warning status - // For disabled/maintenance, the card tooltip will show the statusMessage - const shouldUseTooltip = status === "warning" && statusMessage; + // Show statusMessage in tooltip for warning, deprecated, disabled, and maintenance statuses + const shouldUseTooltip = + (status === "warning" || status === "deprecated" || status === "disabled" || status === "maintenance") && + statusMessage; const tooltipTitle = shouldUseTooltip ? statusMessage : config.defaultTitle; - // Use Tooltip component for warning status with statusMessage, native title for others + // Use Tooltip component for statuses with statusMessage, native title for others if (shouldUseTooltip) { return ( diff --git a/surfsense_web/components/assistant-ui/connector-popup/config/connector-status-config.example.json b/surfsense_web/components/assistant-ui/connector-popup/config/connector-status-config.example.json new file mode 100644 index 000000000..e239e3e23 --- /dev/null +++ b/surfsense_web/components/assistant-ui/connector-popup/config/connector-status-config.example.json @@ -0,0 +1,29 @@ +{ + "connectorStatuses": { + "SLACK_CONNECTOR": { + "enabled": false, + "status": "disabled", + "statusMessage": "Unavailable due to API changes" + }, + "NOTION_CONNECTOR": { + "enabled": true, + "status": "warning", + "statusMessage": "Rate limits may apply" + }, + "TEAMS_CONNECTOR": { + "enabled": false, + "status": "maintenance", + "statusMessage": "Temporarily unavailable for maintenance" + }, + "JIRA_CONNECTOR": { + "enabled": false, + "status": "deprecated", + "statusMessage": "Deprecated" + } + }, + "globalSettings": { + "showWarnings": true, + "allowManualOverride": false + } +} + diff --git a/surfsense_web/components/assistant-ui/connector-popup/config/connector-status-config.json b/surfsense_web/components/assistant-ui/connector-popup/config/connector-status-config.json new file mode 100644 index 000000000..13b227a16 --- /dev/null +++ b/surfsense_web/components/assistant-ui/connector-popup/config/connector-status-config.json @@ -0,0 +1,10 @@ +{ + "connectorStatuses": { + + }, + "globalSettings": { + "showWarnings": true, + "allowManualOverride": false + } +} + diff --git a/surfsense_web/components/assistant-ui/connector-popup/config/connector-status-config.ts b/surfsense_web/components/assistant-ui/connector-popup/config/connector-status-config.ts index a3745df48..06e98d927 100644 --- a/surfsense_web/components/assistant-ui/connector-popup/config/connector-status-config.ts +++ b/surfsense_web/components/assistant-ui/connector-popup/config/connector-status-config.ts @@ -1,11 +1,13 @@ /** * Connector Status Configuration * - * This configuration allows managing connector statuses. - * Statuses control disabling connectors and displaying status messages. + * Manages connector statuses (disable/enable, status messages). Edit connector-status-config.json to configure. + * Valid status values: "active", "warning", "disabled", "deprecated", "maintenance". + * Unlisted connectors default to "active" and enabled. See connector-status-config.example.json for reference. */ import { z } from "zod"; +import rawConnectorStatusConfigData from "./connector-status-config.json"; // Zod schemas for runtime validation and type safety export const connectorStatusSchema = z.enum([ @@ -39,40 +41,10 @@ export type ConnectorStatusMap = z.infer; export type ConnectorStatusConfigFile = z.infer; /** - * Default status configuration for all connectors - * Connectors not listed here default to "active" and enabled - * - * This config is validated at runtime using the Zod schema above + * Validated at runtime via Zod schema; invalid JSON throws at module load time. */ -const rawConnectorStatusConfig = { - connectorStatuses: { - // Example configs to use - // SLACK_CONNECTOR: { - // enabled: false, - // status: "disabled", - // statusMessage: "Unavailable due to API changes", - // }, - // NOTION_CONNECTOR: { - // enabled: true, - // status: "warning", - // statusMessage: "Rate limits may apply", - // }, - // TEAMS_CONNECTOR: { - // enabled: false, - // status: "maintenance", - // statusMessage: "Temporarily unavailable for maintenance", - // }, - }, - globalSettings: { - showWarnings: true, - allowManualOverride: false, - }, -}; - -// Validate the config at module load time (development only) -// In production, this will throw if config is invalid export const connectorStatusConfig: ConnectorStatusConfigFile = - connectorStatusConfigFileSchema.parse(rawConnectorStatusConfig); + connectorStatusConfigFileSchema.parse(rawConnectorStatusConfigData); /** * Get default status config for a connector (when not in config file)