diff --git a/surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts b/surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts index 2693013ef..fcce90e9c 100644 --- a/surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts +++ b/surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts @@ -79,6 +79,12 @@ export const useConnectorDialog = () => { connectorType: string; connectorTitle: string; } | null>(null); + + // Track if we came from accounts list when entering edit mode + const [cameFromAccountsList, setCameFromAccountsList] = useState<{ + connectorType: string; + connectorTitle: string; + } | null>(null); // Helper function to get frequency label const getFrequencyLabel = useCallback((minutes: string): string => { @@ -960,6 +966,14 @@ export const useConnectorDialog = () => { return; } + // Track if we came from accounts list view + // If viewingAccountsType matches this connector type, preserve it + if (viewingAccountsType && viewingAccountsType.connectorType === connector.connector_type) { + setCameFromAccountsList(viewingAccountsType); + } else { + setCameFromAccountsList(null); + } + // Track index with date range opened event if (connector.is_indexable) { trackIndexWithDateRangeOpened( @@ -989,7 +1003,7 @@ export const useConnectorDialog = () => { url.searchParams.set("connectorId", connector.id.toString()); window.history.pushState({ modal: true }, "", url.toString()); }, - [searchSpaceId] + [searchSpaceId, viewingAccountsType] ); // Handle saving connector changes @@ -1252,13 +1266,30 @@ export const useConnectorDialog = () => { // Handle going back from edit view const handleBackFromEdit = useCallback(() => { - const url = new URL(window.location.href); - url.searchParams.set("modal", "connectors"); - url.searchParams.set("tab", "all"); - url.searchParams.delete("view"); - url.searchParams.delete("connectorId"); - router.replace(url.pathname + url.search, { scroll: false }); - }, [router]); + // If we came from accounts list view, go back there + if (cameFromAccountsList && editingConnector) { + // Restore accounts list view + setViewingAccountsType(cameFromAccountsList); + setCameFromAccountsList(null); + const url = new URL(window.location.href); + url.searchParams.set("modal", "connectors"); + url.searchParams.set("view", "accounts"); + url.searchParams.set("connectorType", cameFromAccountsList.connectorType); + url.searchParams.delete("connectorId"); + router.replace(url.pathname + url.search, { scroll: false }); + } else { + // Otherwise, go back to main connector popup + const url = new URL(window.location.href); + url.searchParams.set("modal", "connectors"); + url.searchParams.set("tab", "all"); + url.searchParams.delete("view"); + url.searchParams.delete("connectorId"); + router.replace(url.pathname + url.search, { scroll: false }); + } + setEditingConnector(null); + setConnectorName(null); + setConnectorConfig(null); + }, [router, cameFromAccountsList, editingConnector]); // Handle dialog open/close const handleOpenChange = useCallback( @@ -1289,6 +1320,7 @@ export const useConnectorDialog = () => { setConnectorConfig(null); setConnectingConnectorType(null); setViewingAccountsType(null); + setCameFromAccountsList(null); setStartDate(undefined); setEndDate(undefined); setPeriodicEnabled(false); diff --git a/surfsense_web/components/assistant-ui/connector-popup/views/connector-accounts-list-view.tsx b/surfsense_web/components/assistant-ui/connector-popup/views/connector-accounts-list-view.tsx index e45f24d11..141de0848 100644 --- a/surfsense_web/components/assistant-ui/connector-popup/views/connector-accounts-list-view.tsx +++ b/surfsense_web/components/assistant-ui/connector-popup/views/connector-accounts-list-view.tsx @@ -71,27 +71,30 @@ export const ConnectorAccountsListView: FC = ({ return (
{/* Header */} -
-
-
- -
-
- {getConnectorIcon(connectorType, "size-5")} -
-
-

{connectorTitle} Accounts

-

- {typeConnectors.length} connected account{typeConnectors.length !== 1 ? "s" : ""} -

-
+
+ {/* Back button */} + + + {/* Connector header */} +
+
+
+ {getConnectorIcon(connectorType, "size-7")} +
+
+

+ {connectorTitle} +

+

+ Manage your connector settings and sync configuration +

{/* Add Account Button with dashed border */} @@ -100,7 +103,7 @@ export const ConnectorAccountsListView: FC = ({ onClick={onAddAccount} disabled={isConnecting} className={cn( - "flex items-center gap-2 px-3 py-2 rounded-lg mr-4 border-2 border-dashed border-border/70 text-left transition-all duration-200", + "flex items-center gap-2 px-3 py-2 rounded-lg border-2 border-dashed border-border/70 text-left transition-all duration-200 shrink-0 self-center sm:self-auto sm:w-auto", "border-primary/50 hover:bg-primary/5", isConnecting && "opacity-50 cursor-not-allowed" )} @@ -120,7 +123,7 @@ export const ConnectorAccountsListView: FC = ({
{/* Content */} -
+
{/* Connected Accounts Grid */}
{typeConnectors.map((connector) => {