diff --git a/frontend/app/settings/_components/s3-settings-dialog.tsx b/frontend/app/settings/_components/s3-settings-dialog.tsx index 942dcbdd0..5172be890 100644 --- a/frontend/app/settings/_components/s3-settings-dialog.tsx +++ b/frontend/app/settings/_components/s3-settings-dialog.tsx @@ -130,8 +130,8 @@ export default function S3SettingsDialog({ toast.success("Amazon S3 configured", { description: selectedBuckets.length > 0 - ? `Will ingest from: ${selectedBuckets.join(", ")}` - : "Will auto-discover and ingest all accessible buckets.", + ? `Filtered to: ${selectedBuckets.join(", ")}` + : "All accessible buckets are included.", icon: , }); diff --git a/frontend/app/settings/_components/s3-settings-form.tsx b/frontend/app/settings/_components/s3-settings-form.tsx index 523e8cf64..f8696a3f6 100644 --- a/frontend/app/settings/_components/s3-settings-form.tsx +++ b/frontend/app/settings/_components/s3-settings-form.tsx @@ -170,9 +170,9 @@ export function S3SettingsForm({
{buckets.length > 1 && ( diff --git a/frontend/components/connectors/aws-s3/bucket-view.tsx b/frontend/components/connectors/aws-s3/bucket-view.tsx index f2887084c..5e859828f 100644 --- a/frontend/components/connectors/aws-s3/bucket-view.tsx +++ b/frontend/components/connectors/aws-s3/bucket-view.tsx @@ -2,6 +2,7 @@ import type { useSyncConnector } from "@/app/api/mutations/useSyncConnector"; import { useS3BucketStatusQuery } from "@/app/api/queries/useS3BucketStatusQuery"; +import { useS3DefaultsQuery } from "@/app/api/queries/useS3DefaultsQuery"; import { SharedBucketView } from "../shared-bucket-view"; export interface S3BucketViewProps { @@ -25,6 +26,7 @@ export function S3BucketView({ error: bucketsError, refetch, } = useS3BucketStatusQuery(connector.connectionId, { enabled: true }); + const { data: defaults } = useS3DefaultsQuery({ enabled: true }); return ( ); } diff --git a/frontend/components/connectors/shared-bucket-view.tsx b/frontend/components/connectors/shared-bucket-view.tsx index e6b91b94e..013ede074 100644 --- a/frontend/components/connectors/shared-bucket-view.tsx +++ b/frontend/components/connectors/shared-bucket-view.tsx @@ -2,7 +2,7 @@ import { useQueryClient } from "@tanstack/react-query"; import { ArrowLeft, FileSearch, FolderOpen, RefreshCw } from "lucide-react"; -import { useState } from "react"; +import { useEffect, useRef, useState } from "react"; import { toast } from "sonner"; import type { useSyncConnector } from "@/app/api/mutations/useSyncConnector"; import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery"; @@ -28,6 +28,7 @@ export interface SharedBucketViewProps { ) => void; onBack: () => void; onDone: () => void; + initialSelectedBuckets?: string[]; } export function SharedBucketView({ @@ -41,6 +42,7 @@ export function SharedBucketView({ addTask, onBack, onDone, + initialSelectedBuckets, }: SharedBucketViewProps) { const queryClient = useQueryClient(); const { isAuthenticated, isNoAuthMode } = useAuth(); @@ -53,12 +55,31 @@ export function SharedBucketView({ const [selectedBuckets, setSelectedBuckets] = useState>( new Set(), ); + const hasAppliedInitial = useRef(false); const [ingestSettings, setIngestSettings] = useSessionIngestSettings(); const [isSettingsOpen, setIsSettingsOpen] = useState(false); const [browseDialogBucket, setBrowseDialogBucket] = useState( null, ); + useEffect(() => { + if ( + !hasAppliedInitial.current && + buckets?.length && + initialSelectedBuckets?.length + ) { + hasAppliedInitial.current = true; + if (selectedBuckets.size === 0) { + const valid = initialSelectedBuckets.filter((name) => + buckets.some((b) => b.name === name), + ); + if (valid.length) { + setSelectedBuckets(new Set(valid)); + } + } + } + }, [buckets, initialSelectedBuckets]); // eslint-disable-line react-hooks/exhaustive-deps + const invalidate = () => { queryClient.invalidateQueries({ queryKey: invalidateQueryKey }); }; diff --git a/frontend/enhancements/connectors/ibm-cos/components/bucket-view.tsx b/frontend/enhancements/connectors/ibm-cos/components/bucket-view.tsx index 326c38b3e..41f8eff2f 100644 --- a/frontend/enhancements/connectors/ibm-cos/components/bucket-view.tsx +++ b/frontend/enhancements/connectors/ibm-cos/components/bucket-view.tsx @@ -3,6 +3,7 @@ import type { useSyncConnector } from "@/app/api/mutations/useSyncConnector"; import { SharedBucketView } from "@/components/connectors/shared-bucket-view"; import { useIBMCOSBucketStatusQuery } from "../useIBMCOSBucketStatusQuery"; +import { useIBMCOSDefaultsQuery } from "../useIBMCOSDefaultsQuery"; export interface IBMCOSBucketViewProps { connector: any; @@ -25,6 +26,7 @@ export function IBMCOSBucketView({ error: bucketsError, refetch, } = useIBMCOSBucketStatusQuery(connector.connectionId, { enabled: true }); + const { data: defaults } = useIBMCOSDefaultsQuery({ enabled: true }); return ( ); } diff --git a/frontend/enhancements/connectors/ibm-cos/settings-dialog.tsx b/frontend/enhancements/connectors/ibm-cos/settings-dialog.tsx index 2dd31dcf9..dadd41c3d 100644 --- a/frontend/enhancements/connectors/ibm-cos/settings-dialog.tsx +++ b/frontend/enhancements/connectors/ibm-cos/settings-dialog.tsx @@ -136,8 +136,8 @@ export default function IBMCOSSettingsDialog({ toast.success("IBM Cloud Object Storage configured", { description: selectedBuckets.length > 0 - ? `Will ingest from: ${selectedBuckets.join(", ")}` - : "Will auto-discover and ingest all accessible buckets.", + ? `Filtered to: ${selectedBuckets.join(", ")}` + : "All accessible buckets are included.", icon: , }); diff --git a/frontend/enhancements/connectors/ibm-cos/settings-form.tsx b/frontend/enhancements/connectors/ibm-cos/settings-form.tsx index 179e4de76..71b60e7ff 100644 --- a/frontend/enhancements/connectors/ibm-cos/settings-form.tsx +++ b/frontend/enhancements/connectors/ibm-cos/settings-form.tsx @@ -275,9 +275,9 @@ export function IBMCOSSettingsForm({
{buckets.length > 1 && (