From afe4254f742bcb42086047d84dc7f8397114dd2f Mon Sep 17 00:00:00 2001 From: Anish Sarkar <104695310+AnishSarkar22@users.noreply.github.com> Date: Fri, 2 Jan 2026 01:17:53 +0530 Subject: [PATCH] refactor: reorganize connector tab layout and improve component logic - Swapped the sections for "Content Sources" and "More Integrations" in the AllConnectorsTab for better clarity. - Streamlined the mapping logic for filtered connectors and crawlers, enhancing readability and maintainability. - Updated the AppSidebar to replace the workspace switch icon for improved visual consistency. - Modified the submit button text in the localization file for better clarity in user actions. --- .../tabs/all-connectors-tab.tsx | 149 +++++++----------- .../components/sidebar/app-sidebar.tsx | 3 +- surfsense_web/messages/en.json | 2 +- 3 files changed, 60 insertions(+), 94 deletions(-) diff --git a/surfsense_web/components/assistant-ui/connector-popup/tabs/all-connectors-tab.tsx b/surfsense_web/components/assistant-ui/connector-popup/tabs/all-connectors-tab.tsx index 6f85b6b8f..bdec4dcb2 100644 --- a/surfsense_web/components/assistant-ui/connector-popup/tabs/all-connectors-tab.tsx +++ b/surfsense_web/components/assistant-ui/connector-popup/tabs/all-connectors-tab.tsx @@ -3,8 +3,8 @@ import type { FC } from "react"; import type { SearchSourceConnector } from "@/contracts/types/connector.types"; import type { LogActiveTask, LogSummary } from "@/contracts/types/log.types"; -import { OAUTH_CONNECTORS, CRAWLERS, OTHER_CONNECTORS } from "../constants/connector-constants"; import { ConnectorCard } from "../components/connector-card"; +import { CRAWLERS, OAUTH_CONNECTORS, OTHER_CONNECTORS } from "../constants/connector-constants"; import { getDocumentCountForConnector } from "../utils/connector-document-mapping"; interface AllConnectorsTabProps { @@ -118,6 +118,62 @@ export const AllConnectorsTab: FC = ({ )} + {/* More Integrations */} + {filteredOther.length > 0 && ( +
+
+

More Integrations

+
+
+ {filteredOther.map((connector) => { + const isConnected = connectedTypes.has(connector.connectorType); + const isConnecting = connectingId === connector.id; + + // Find the actual connector object if connected + const actualConnector = + isConnected && allConnectors + ? allConnectors.find( + (c: SearchSourceConnector) => c.connector_type === connector.connectorType + ) + : undefined; + + const documentCount = getDocumentCountForConnector( + connector.connectorType, + documentTypeCounts + ); + const isIndexing = actualConnector && indexingConnectorIds?.has(actualConnector.id); + const activeTask = actualConnector + ? getActiveTaskForConnector(actualConnector.id) + : undefined; + + const handleConnect = onConnectNonOAuth + ? () => onConnectNonOAuth(connector.connectorType) + : () => {}; // Fallback - connector popup should handle all connector types + + return ( + onManage(actualConnector) : undefined + } + /> + ); + })} +
+
+ )} + {/* Content Sources */} {filteredCrawlers.length > 0 && (
@@ -187,97 +243,6 @@ export const AllConnectorsTab: FC = ({
)} - - {/* More Integrations */} - {filteredOther.length > 0 && ( -
-
-

More Integrations

-
-
- {filteredOther.map((connector) => { - // Special handling for connectors that can be created in popup - const isTavily = connector.id === "tavily-api"; - const isSearxng = connector.id === "searxng"; - const isLinkup = connector.id === "linkup-api"; - const isBaidu = connector.id === "baidu-search-api"; - const isLinear = connector.id === "linear-connector"; - const isElasticsearch = connector.id === "elasticsearch-connector"; - const isSlack = connector.id === "slack-connector"; - const isDiscord = connector.id === "discord-connector"; - const isNotion = connector.id === "notion-connector"; - const isConfluence = connector.id === "confluence-connector"; - const isBookStack = connector.id === "bookstack-connector"; - const isGithub = connector.id === "github-connector"; - const isJira = connector.id === "jira-connector"; - const isClickUp = connector.id === "clickup-connector"; - const isLuma = connector.id === "luma-connector"; - const isCircleback = connector.id === "circleback-connector"; - - const isConnected = connectedTypes.has(connector.connectorType); - const isConnecting = connectingId === connector.id; - - // Find the actual connector object if connected - const actualConnector = - isConnected && allConnectors - ? allConnectors.find( - (c: SearchSourceConnector) => c.connector_type === connector.connectorType - ) - : undefined; - - const documentCount = getDocumentCountForConnector( - connector.connectorType, - documentTypeCounts - ); - const isIndexing = actualConnector && indexingConnectorIds?.has(actualConnector.id); - const activeTask = actualConnector - ? getActiveTaskForConnector(actualConnector.id) - : undefined; - - const handleConnect = - (isTavily || - isSearxng || - isLinkup || - isBaidu || - isLinear || - isElasticsearch || - isSlack || - isDiscord || - isNotion || - isConfluence || - isBookStack || - isGithub || - isJira || - isClickUp || - isLuma || - isCircleback) && - onConnectNonOAuth - ? () => onConnectNonOAuth(connector.connectorType) - : () => {}; // Fallback - connector popup should handle all connector types - - return ( - onManage(actualConnector) : undefined - } - /> - ); - })} -
-
- )} ); }; diff --git a/surfsense_web/components/sidebar/app-sidebar.tsx b/surfsense_web/components/sidebar/app-sidebar.tsx index d462b1feb..fb3bf3022 100644 --- a/surfsense_web/components/sidebar/app-sidebar.tsx +++ b/surfsense_web/components/sidebar/app-sidebar.tsx @@ -3,6 +3,7 @@ import { useAtomValue } from "jotai"; import { AlertCircle, + ArrowLeftRight, BookOpen, Cable, ChevronsUpDown, @@ -417,7 +418,7 @@ export const AppSidebar = memo(function AppSidebar({ )} router.push("/dashboard")}> - + Switch workspace diff --git a/surfsense_web/messages/en.json b/surfsense_web/messages/en.json index 151556d3a..fd655be6c 100644 --- a/surfsense_web/messages/en.json +++ b/surfsense_web/messages/en.json @@ -374,7 +374,7 @@ "tip_4": "Processing may take some time depending on video length", "preview": "Preview", "cancel": "Cancel", - "submit": "Submit YouTube Videos", + "submit": "Add", "processing": "Processing...", "error_no_video": "Please add at least one YouTube video URL", "error_invalid_urls": "Invalid YouTube URLs detected: {urls}",