diff --git a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/airtable-connector/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/airtable-connector/page.tsx index 7ebbeec3f..cc4330203 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/airtable-connector/page.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/airtable-connector/page.tsx @@ -123,7 +123,7 @@ export default function AirtableConnectorPage() { diff --git a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/baidu-search-api/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/baidu-search-api/page.tsx index e1a84a8ab..3e9f4898e 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/baidu-search-api/page.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/baidu-search-api/page.tsx @@ -126,7 +126,7 @@ export default function BaiduSearchApiPage() { diff --git a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/google-gmail-connector/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/google-gmail-connector/page.tsx index 41b9e42f8..8659d937c 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/google-gmail-connector/page.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/google-gmail-connector/page.tsx @@ -133,7 +133,7 @@ export default function GoogleGmailConnectorPage() { diff --git a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/jira-connector/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/jira-connector/page.tsx index 132c58521..6f4e31114 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/jira-connector/page.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/jira-connector/page.tsx @@ -125,7 +125,7 @@ export default function JiraConnectorPage() { diff --git a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/notion-connector/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/notion-connector/page.tsx index 5cfd16a5f..310c31811 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/notion-connector/page.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/notion-connector/page.tsx @@ -105,7 +105,7 @@ export default function NotionConnectorPage() { diff --git a/surfsense_web/components/assistant-ui/thread.tsx b/surfsense_web/components/assistant-ui/thread.tsx index 1296ab28f..30e2a42d9 100644 --- a/surfsense_web/components/assistant-ui/thread.tsx +++ b/surfsense_web/components/assistant-ui/thread.tsx @@ -36,7 +36,6 @@ import { activeSearchSpaceIdAtom } from "@/atoms/search-spaces/search-space-quer import { useSearchSourceConnectors } from "@/hooks/use-search-source-connectors"; import { getConnectorIcon } from "@/contracts/enums/connectorIcons"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; -import { connectorCategories } from "@/components/sources/connector-data"; import { ComposerAddAttachment, ComposerAttachments, @@ -326,57 +325,10 @@ const ConnectorIndicator: FC = () => { const searchSpaceId = useAtomValue(activeSearchSpaceIdAtom); const { connectors, isLoading } = useSearchSourceConnectors(false, searchSpaceId ? Number(searchSpaceId) : undefined); const [isOpen, setIsOpen] = useState(false); - const [searchQuery, setSearchQuery] = useState(""); const closeTimeoutRef = useRef(null); const hasConnectors = connectors.length > 0; - // Get connected connector types for comparison - const connectedTypes = new Set(connectors.map(c => c.connector_type)); - - // Flatten all available connectors from categories - const allAvailableConnectors = connectorCategories.flatMap(category => - category.connectors.filter(c => c.status === "available") - ); - - // Filter connectors based on search query - const filteredConnectors = allAvailableConnectors.filter(connector => - connector.title.toLowerCase().includes(searchQuery.toLowerCase()) - ); - - // Filter connected connectors based on search query - const filteredConnectedConnectors = connectors.filter(connector => - connector.name.toLowerCase().includes(searchQuery.toLowerCase()) - ); - - // Filter available (not connected) connectors - const filteredAvailableConnectors = filteredConnectors.filter(connector => { - // Map connector id to connector_type for comparison - const connectorTypeMap: Record = { - "webcrawler-connector": "WEBCRAWLER_CONNECTOR", - "tavily-api": "TAVILY_API", - "searxng": "SEARXNG_API", - "linkup-api": "LINKUP_API", - "baidu-search-api": "BAIDU_SEARCH_API", - "slack-connector": "SLACK_CONNECTOR", - "discord-connector": "DISCORD_CONNECTOR", - "linear-connector": "LINEAR_CONNECTOR", - "jira-connector": "JIRA_CONNECTOR", - "clickup-connector": "CLICKUP_CONNECTOR", - "notion-connector": "NOTION_CONNECTOR", - "confluence-connector": "CONFLUENCE_CONNECTOR", - "bookstack-connector": "BOOKSTACK_CONNECTOR", - "github-connector": "GITHUB_CONNECTOR", - "elasticsearch-connector": "ELASTICSEARCH_CONNECTOR", - "airtable-connector": "AIRTABLE_CONNECTOR", - "google-calendar-connector": "GOOGLE_CALENDAR_CONNECTOR", - "google-gmail-connector": "GOOGLE_GMAIL_CONNECTOR", - "luma-connector": "LUMA_CONNECTOR", - }; - const connectorType = connectorTypeMap[connector.id]; - return !connectorType || !connectedTypes.has(connectorType); - }); - const handleMouseEnter = useCallback(() => { // Clear any pending close timeout if (closeTimeoutRef.current) { @@ -390,7 +342,6 @@ const ConnectorIndicator: FC = () => { // Delay closing by 150ms for better UX closeTimeoutRef.current = setTimeout(() => { setIsOpen(false); - setSearchQuery(""); // Reset search when closing }, 150); }, []); @@ -425,75 +376,48 @@ const ConnectorIndicator: FC = () => { -
- {/* Search input - sticky at top */} -
-
- - setSearchQuery(e.target.value)} - className="w-full pl-8 pr-3 py-1.5 text-sm bg-transparent border-none outline-none focus:ring-0 placeholder:text-muted-foreground" - /> -
-
- - {/* Connectors list - scrollable */} -
- {/* Connected connectors first */} - {filteredConnectedConnectors.length > 0 && ( - <> - {filteredConnectedConnectors.map((connector) => ( - -
-
- {getConnectorIcon(connector.connector_type, "size-5")} -
- {connector.name} -
- - - ))} - {filteredAvailableConnectors.length > 0 && ( -
- )} - - )} - - {/* Available connectors */} - {filteredAvailableConnectors.length > 0 ? ( - filteredAvailableConnectors.map((connector) => ( - +

+ Connected Sources ({connectors.length}) +

+
+ {connectors.map((connector) => ( +
-
-
- {connector.icon} -
- {connector.title} -
- - - )) - ) : filteredConnectedConnectors.length === 0 ? ( -
- No connectors found -
- ) : null} + {getConnectorIcon(connector.connector_type, "size-3")} + {connector.name} +
+ ))} +
+ + Manage connectors → +
-
+ ) : ( +
+

No connectors yet

+

+ Connect your first data source to enhance search results. +

+ + + Add Connector + +
+ )} );