From 3905d1cb8163482056163a57fe40f0ca2e189477 Mon Sep 17 00:00:00 2001 From: Vikhyath Mondreti Date: Thu, 18 Sep 2025 11:40:36 -0700 Subject: [PATCH] fix(selectors): gdrive and slack selectors inf loops (#1376) * fix(selectors): gdrive and slack selectors inf loops * remove comment --- .../components/slack-channel-selector.tsx | 12 +++++++++++- .../file-selector/components/google-drive-picker.tsx | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/channel-selector/components/slack-channel-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/channel-selector/components/slack-channel-selector.tsx index 43dd60e1b5..fee66c7f94 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/channel-selector/components/slack-channel-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/channel-selector/components/slack-channel-selector.tsx @@ -58,12 +58,21 @@ export function SlackChannelSelector({ body: JSON.stringify({ credential, workflowId }), }) - if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`) + if (!res.ok) { + const errorData = await res + .json() + .catch(() => ({ error: `HTTP error! status: ${res.status}` })) + setError(errorData.error || `HTTP error! status: ${res.status}`) + setChannels([]) + setInitialFetchDone(true) + return + } const data = await res.json() if (data.error) { setError(data.error) setChannels([]) + setInitialFetchDone(true) } else { setChannels(data.channels) setInitialFetchDone(true) @@ -72,6 +81,7 @@ export function SlackChannelSelector({ if ((err as Error).name === 'AbortError') return setError((err as Error).message) setChannels([]) + setInitialFetchDone(true) } finally { setLoading(false) } diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx index 918bf24cd6..89d57563ca 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx @@ -100,7 +100,9 @@ export function GoogleDrivePicker({ if (response.ok) { const data = await response.json() setCredentials(data.credentials) - // Do not auto-select. Respect persisted credential via prop when provided. + if (credentialId && !data.credentials.some((c: any) => c.id === credentialId)) { + setSelectedCredentialId('') + } } } catch (error) { logger.error('Error fetching credentials:', { error }) @@ -151,6 +153,14 @@ export function GoogleDrivePicker({ onChange('') onFileInfoChange?.(null) } + + if (response.status === 401) { + logger.info('Credential unauthorized (401), clearing selection and prompting re-auth') + setSelectedFileId('') + onChange('') + onFileInfoChange?.(null) + setShowOAuthModal(true) + } } return null } catch (error) {