diff --git a/frontend/src/app/settings/page.tsx b/frontend/src/app/settings/page.tsx index 325ee161..5200873e 100644 --- a/frontend/src/app/settings/page.tsx +++ b/frontend/src/app/settings/page.tsx @@ -101,34 +101,6 @@ interface Connection { created_at: string; last_sync?: string; } - -const DEFAULT_CONNECTORS: Connector[] = [ - { - id: "google_drive", - name: "Google Drive", - description: "Google Drive is not configured.", - icon: , - status: "not_connected", - type: "google_drive", - }, - { - id: "one_drive", - name: "OneDrive", - description: "OneDrive is not configured.", - icon: , - status: "not_connected", - type: "one_drive", - }, - { - id: "amazon_s3", - name: "SharePoint", - description: "SharePoint is not configured.", - icon: , - status: "not_connected", - type: "sharepoint", - }, -]; - function KnowledgeSourcesPage() { const { isAuthenticated, isNoAuthMode } = useAuth(); const { addTask, tasks } = useTask(); @@ -203,7 +175,7 @@ function KnowledgeSourcesPage() { onSuccess: () => { console.log("Setting updated successfully"); }, - onError: error => { + onError: (error) => { console.error("Failed to update setting:", error.message); }, }); @@ -304,16 +276,8 @@ function KnowledgeSourcesPage() { const getConnectorIcon = useCallback((iconName: string) => { const iconMap: { [key: string]: React.ReactElement } = { "google-drive": , - sharepoint: ( -
- SP -
- ), - onedrive: ( -
- -
- ), + sharepoint: , + onedrive: , }; return ( iconMap[iconName] || ( @@ -338,8 +302,8 @@ function KnowledgeSourcesPage() { // Initialize connectors list with metadata from backend const initialConnectors = connectorTypes - .filter(type => connectorsResult.connectors[type].available) // Only show available connectors - .map(type => ({ + .filter((type) => connectorsResult.connectors[type].available) // Only show available connectors + .map((type) => ({ id: type, name: connectorsResult.connectors[type].name, description: connectorsResult.connectors[type].description, @@ -362,8 +326,8 @@ function KnowledgeSourcesPage() { ); const isConnected = activeConnection !== undefined; - setConnectors(prev => - prev.map(c => + setConnectors((prev) => + prev.map((c) => c.type === connectorType ? { ...c, @@ -382,7 +346,7 @@ function KnowledgeSourcesPage() { const handleConnect = async (connector: Connector) => { setIsConnecting(connector.id); - setSyncResults(prev => ({ ...prev, [connector.id]: null })); + setSyncResults((prev) => ({ ...prev, [connector.id]: null })); try { // Use the shared auth callback URL, same as connectors page @@ -522,9 +486,9 @@ function KnowledgeSourcesPage() { // Watch for task completions and refresh stats useEffect(() => { // Find newly completed tasks by comparing with previous state - const newlyCompletedTasks = tasks.filter(task => { + const newlyCompletedTasks = tasks.filter((task) => { const wasCompleted = - prevTasks.find(prev => prev.task_id === task.task_id)?.status === + prevTasks.find((prev) => prev.task_id === task.task_id)?.status === "completed"; return task.status === "completed" && !wasCompleted; }); @@ -578,7 +542,7 @@ function KnowledgeSourcesPage() { fetch(`/api/reset-flow/retrieval`, { method: "POST", }) - .then(response => { + .then((response) => { if (response.ok) { return response.json(); } @@ -591,7 +555,7 @@ function KnowledgeSourcesPage() { handleModelChange(DEFAULT_AGENT_SETTINGS.llm_model); closeDialog(); // Close after successful completion }) - .catch(error => { + .catch((error) => { console.error("Error restoring retrieval flow:", error); closeDialog(); // Close even on error (could show error toast instead) }); @@ -601,7 +565,7 @@ function KnowledgeSourcesPage() { fetch(`/api/reset-flow/ingest`, { method: "POST", }) - .then(response => { + .then((response) => { if (response.ok) { return response.json(); } @@ -616,7 +580,7 @@ function KnowledgeSourcesPage() { setPictureDescriptions(false); closeDialog(); // Close after successful completion }) - .catch(error => { + .catch((error) => { console.error("Error restoring ingest flow:", error); closeDialog(); // Close even on error (could show error toast instead) }); @@ -735,11 +699,9 @@ function KnowledgeSourcesPage() { // // } - {/* Connectors Grid */}
- {DEFAULT_CONNECTORS.map(connector => { - const actualConnector = connectors.find(c => c.id === connector.id); + {connectors.map((connector) => { return ( @@ -748,7 +710,7 @@ function KnowledgeSourcesPage() {
{connector.icon} @@ -756,45 +718,66 @@ function KnowledgeSourcesPage() {
{connector.name} - {actualConnector && - getStatusBadge(actualConnector.status)} + {connector && getStatusBadge(connector.status)} - {actualConnector?.description - ? `${actualConnector.name} is configured.` + {connector?.description + ? `${connector.name} is configured.` : connector.description}
- {actualConnector?.status === "connected" ? ( + {connector?.available ? (
- - - {syncResults[connector.id] && ( -
-
- Processed:{" "} - {syncResults[connector.id]?.processed || 0} -
-
- Added: {syncResults[connector.id]?.added || 0} -
- {syncResults[connector.id]?.errors && ( -
- Errors: {syncResults[connector.id]?.errors} + {connector?.status === "connected" ? ( + <> + + {syncResults[connector.id] && ( +
+
+ Processed:{" "} + {syncResults[connector.id]?.processed || 0} +
+
+ Added: {syncResults[connector.id]?.added || 0} +
+ {syncResults[connector.id]?.errors && ( +
+ Errors: {syncResults[connector.id]?.errors} +
+ )}
)} -
+ + ) : ( + )}
) : ( @@ -882,7 +865,7 @@ function KnowledgeSourcesPage() { } confirmText="Proceed" confirmIcon={} - onConfirm={closeDialog => + onConfirm={(closeDialog) => handleEditInLangflow("chat", closeDialog) } variant="warning" @@ -918,7 +901,7 @@ function KnowledgeSourcesPage() { id="system-prompt" placeholder="Enter your agent instructions here..." value={systemPrompt} - onChange={e => setSystemPrompt(e.target.value)} + onChange={(e) => setSystemPrompt(e.target.value)} rows={6} className={`resize-none ${ systemPrompt.length > MAX_SYSTEM_PROMPT_CHARS @@ -1032,7 +1015,7 @@ function KnowledgeSourcesPage() { confirmText="Proceed" confirmIcon={} variant="warning" - onConfirm={closeDialog => + onConfirm={(closeDialog) => handleEditInLangflow("ingest", closeDialog) } /> @@ -1052,7 +1035,8 @@ function KnowledgeSourcesPage() { disabled={true} value={ settings.knowledge?.embedding_model || - modelsData?.embedding_models?.find(m => m.default)?.value || + modelsData?.embedding_models?.find((m) => m.default) + ?.value || "text-embedding-ada-002" } onValueChange={handleEmbeddingModelChange} @@ -1088,7 +1072,7 @@ function KnowledgeSourcesPage() { type="number" min="1" value={chunkSize} - onChange={e => handleChunkSizeChange(e.target.value)} + onChange={(e) => handleChunkSizeChange(e.target.value)} className="w-full pr-20 [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" />
@@ -1131,7 +1115,7 @@ function KnowledgeSourcesPage() { type="number" min="0" value={chunkOverlap} - onChange={e => handleChunkOverlapChange(e.target.value)} + onChange={(e) => handleChunkOverlapChange(e.target.value)} className="w-full pr-20 [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" />