diff --git a/backend/onyx/background/indexing/run_indexing.py b/backend/onyx/background/indexing/run_indexing.py index 94f8cb01be7..83cda85a660 100644 --- a/backend/onyx/background/indexing/run_indexing.py +++ b/backend/onyx/background/indexing/run_indexing.py @@ -532,6 +532,31 @@ def _run_indexing( f"elapsed={elapsed_time:.2f}s" ) + cc_pair = get_connector_credential_pair_from_id( + db_session=db_session_temp, + cc_pair_id=ctx.cc_pair_id, + ) + + if cc_pair: + logger.info( + f"Checking FILE connector status: source={cc_pair.connector.source}, " + f"status={cc_pair.status}, cc_pair_id={ctx.cc_pair_id}" + ) + + if ( + cc_pair.connector.source == DocumentSource.FILE + and cc_pair.status == ConnectorCredentialPairStatus.ACTIVE + ): + logger.info( + f"Pausing FILE connector after successful indexing: cc_pair_id={ctx.cc_pair_id}" + ) + update_connector_credential_pair( + db_session=db_session, + connector_id=ctx.connector_id, + credential_id=ctx.credential_id, + status=ConnectorCredentialPairStatus.PAUSED, + ) + if ctx.is_primary: update_connector_credential_pair( db_session=db_session_temp, diff --git a/web/src/app/admin/connector/[ccPairId]/ModifyStatusButtonCluster.tsx b/web/src/app/admin/connector/[ccPairId]/ModifyStatusButtonCluster.tsx index b5b4e7ecbf2..08d16929475 100644 --- a/web/src/app/admin/connector/[ccPairId]/ModifyStatusButtonCluster.tsx +++ b/web/src/app/admin/connector/[ccPairId]/ModifyStatusButtonCluster.tsx @@ -8,6 +8,7 @@ import { buildCCPairInfoUrl } from "./lib"; import { setCCPairStatus } from "@/lib/ccPair"; import { useState } from "react"; import { LoadingAnimation } from "@/components/Loading"; +import { ValidSources } from "@/lib/types"; export function ModifyStatusButtonCluster({ ccPair, @@ -48,39 +49,45 @@ export function ModifyStatusButtonCluster({ ? "Click to start indexing again!" : "When paused, the connector's documents will still be visible. However, no new documents will be indexed."; + const isPausedFileConnector = + ccPair.connector.source === ValidSources.File && + ccPair.status === ConnectorCredentialPairStatus.PAUSED; + return ( <> {popup} - - handleStatusChange( + {!isPausedFileConnector && ( + - {isUpdating ? ( - + handleStatusChange( ccPair.status === ConnectorCredentialPairStatus.PAUSED - ? "Resuming" - : "Pausing" - } - size="text-md" - /> - ) : ( - buttonText - )} - + ? ConnectorCredentialPairStatus.ACTIVE + : ConnectorCredentialPairStatus.PAUSED + ) + } + tooltip={tooltip} + > + {isUpdating ? ( + + ) : ( + buttonText + )} + + )} > ); } diff --git a/web/src/components/ui/button.tsx b/web/src/components/ui/button.tsx index 650694dbee7..42ab0839678 100644 --- a/web/src/components/ui/button.tsx +++ b/web/src/components/ui/button.tsx @@ -1,6 +1,7 @@ import * as React from "react"; import { Slot } from "@radix-ui/react-slot"; import { cva, type VariantProps } from "class-variance-authority"; +import React, { useRef, useEffect, useState } from "react"; import { cn } from "@/lib/utils"; @@ -91,20 +92,19 @@ const Button = React.forwardRef( asChild = false, icon: Icon, tooltip, + reverse, ...props }, ref ) => { const Comp = asChild ? Slot : "button"; - const button = ( + const tooltipRef = useRef(null); + const [tooltipOffset, setTooltipOffset] = useState(0); + + // Define the button element first + const buttonElement = ( @@ -113,18 +113,36 @@ const Button = React.forwardRef( ); + useEffect(() => { + if (tooltip && tooltipRef.current) { + const handleResize = () => { + const rect = tooltipRef.current!.getBoundingClientRect(); + const overflow = rect.right - window.innerWidth; + setTooltipOffset(overflow > 0 ? overflow : 0); + }; + + handleResize(); + window.addEventListener("resize", handleResize); + return () => window.removeEventListener("resize", handleResize); + } + }, [tooltip]); + if (tooltip) { return ( - {button} - + {buttonElement} + {tooltip} ); } - return button; + return buttonElement; } ); Button.displayName = "Button";