Skip to content

Commit 54cc937

Browse files
v0.5.14: fix issue with teams, google selectors + cleanup code
2 parents 8c32ad4 + d22b21c commit 54cc937

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+181
-265
lines changed

apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/channel-selector/channel-selector-input.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { useEffect, useMemo, useState } from 'react'
44
import { useParams } from 'next/navigation'
55
import { Tooltip } from '@/components/emcn'
6+
import { getProviderIdFromServiceId } from '@/lib/oauth/oauth'
67
import { SelectorCombobox } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/selector-combobox/selector-combobox'
78
import { useDependsOnGate } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-depends-on-gate'
89
import { useForeignCredential } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-foreign-credential'
@@ -41,8 +42,11 @@ export function ChannelSelectorInput({
4142
const effectiveCredential = previewContextValues?.credential ?? connectedCredential
4243
const [_channelInfo, setChannelInfo] = useState<string | null>(null)
4344

44-
const provider = subBlock.provider || 'slack'
45-
const isSlack = provider === 'slack'
45+
// Use serviceId to identify the service and derive providerId for credential lookup
46+
const serviceId = subBlock.serviceId || ''
47+
const effectiveProviderId = useMemo(() => getProviderIdFromServiceId(serviceId), [serviceId])
48+
const isSlack = serviceId === 'slack'
49+
4650
// Central dependsOn gating
4751
const { finalDisabled, dependsOn } = useDependsOnGate(blockId, subBlock, {
4852
disabled,
@@ -58,7 +62,7 @@ export function ChannelSelectorInput({
5862

5963
// Determine if connected OAuth credential is foreign (not applicable for bot tokens)
6064
const { isForeignCredential } = useForeignCredential(
61-
'slack',
65+
effectiveProviderId,
6266
(effectiveAuthMethod as string) === 'bot_token' ? '' : (effectiveCredential as string) || ''
6367
)
6468

@@ -87,11 +91,11 @@ export function ChannelSelectorInput({
8791
<Tooltip.Root>
8892
<Tooltip.Trigger asChild>
8993
<div className='w-full rounded border border-dashed p-4 text-center text-muted-foreground text-sm'>
90-
Channel selector not supported for provider: {provider}
94+
Channel selector not supported for service: {serviceId || 'unknown'}
9195
</div>
9296
</Tooltip.Trigger>
9397
<Tooltip.Content side='top'>
94-
<p>This channel selector is not yet implemented for {provider}</p>
98+
<p>This channel selector is not yet implemented for {serviceId || 'unknown'}</p>
9599
</Tooltip.Content>
96100
</Tooltip.Root>
97101
)

apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/credential-selector/credential-selector.tsx

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { createLogger } from '@/lib/logs/console/logger'
77
import {
88
getCanonicalScopesForProvider,
99
getProviderIdFromServiceId,
10-
getServiceIdFromScopes,
1110
OAUTH_PROVIDERS,
1211
type OAuthProvider,
1312
parseProvider,
@@ -42,23 +41,19 @@ export function CredentialSelector({
4241
const { activeWorkflowId } = useWorkflowRegistry()
4342
const [storeValue, setStoreValue] = useSubBlockValue<string | null>(blockId, subBlock.id)
4443

45-
const provider = subBlock.provider as OAuthProvider
4644
const requiredScopes = subBlock.requiredScopes || []
4745
const label = subBlock.placeholder || 'Select credential'
48-
const serviceId = subBlock.serviceId
46+
const serviceId = subBlock.serviceId || ''
4947

5048
const effectiveValue = isPreview && previewValue !== undefined ? previewValue : storeValue
5149
const selectedId = typeof effectiveValue === 'string' ? effectiveValue : ''
5250

53-
const effectiveServiceId = useMemo(
54-
() => serviceId || getServiceIdFromScopes(provider, requiredScopes),
55-
[provider, requiredScopes, serviceId]
56-
)
57-
51+
// serviceId is now the canonical identifier - derive provider from it
5852
const effectiveProviderId = useMemo(
59-
() => getProviderIdFromServiceId(effectiveServiceId),
60-
[effectiveServiceId]
53+
() => getProviderIdFromServiceId(serviceId) as OAuthProvider,
54+
[serviceId]
6155
)
56+
const provider = effectiveProviderId
6257

6358
const {
6459
data: credentials = [],
@@ -259,7 +254,7 @@ export function CredentialSelector({
259254
toolName={getProviderName(provider)}
260255
requiredScopes={getCanonicalScopesForProvider(effectiveProviderId)}
261256
newScopes={missingRequiredScopes}
262-
serviceId={effectiveServiceId}
257+
serviceId={serviceId}
263258
/>
264259
)}
265260
</>

apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/file-selector/file-selector-input.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { useMemo } from 'react'
44
import { useParams } from 'next/navigation'
55
import { Tooltip } from '@/components/emcn'
6+
import { getProviderIdFromServiceId } from '@/lib/oauth'
67
import { SelectorCombobox } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/selector-combobox/selector-combobox'
78
import { useDependsOnGate } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-depends-on-gate'
89
import { useForeignCredential } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-foreign-credential'
@@ -59,10 +60,11 @@ export function FileSelectorInput({
5960
? ((connectedCredential as Record<string, any>).id ?? '')
6061
: ''
6162

62-
const { isForeignCredential } = useForeignCredential(
63-
subBlock.serviceId || subBlock.provider,
64-
normalizedCredentialId
65-
)
63+
// Derive provider from serviceId using OAuth config (same pattern as credential-selector)
64+
const serviceId = subBlock.serviceId || ''
65+
const effectiveProviderId = useMemo(() => getProviderIdFromServiceId(serviceId), [serviceId])
66+
67+
const { isForeignCredential } = useForeignCredential(effectiveProviderId, normalizedCredentialId)
6668

6769
const selectorResolution = useMemo<SelectorResolution | null>(() => {
6870
return resolveSelectorForSubBlock(subBlock, {
@@ -109,11 +111,11 @@ export function FileSelectorInput({
109111
<Tooltip.Root>
110112
<Tooltip.Trigger asChild>
111113
<div className='w-full rounded border border-dashed p-4 text-center text-muted-foreground text-sm'>
112-
File selector not supported for provider: {subBlock.provider || subBlock.serviceId}
114+
File selector not supported for service: {serviceId || 'unknown'}
113115
</div>
114116
</Tooltip.Trigger>
115117
<Tooltip.Content side='top'>
116-
<p>This file selector is not implemented for {subBlock.provider || subBlock.serviceId}</p>
118+
<p>This file selector is not implemented for {serviceId || 'unknown'}</p>
117119
</Tooltip.Content>
118120
</Tooltip.Root>
119121
)

apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/folder-selector/components/folder-selector-input.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use client'
22

33
import { useCallback, useEffect, useMemo, useState } from 'react'
4+
import { getProviderIdFromServiceId } from '@/lib/oauth'
45
import { SelectorCombobox } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/selector-combobox/selector-combobox'
56
import { useDependsOnGate } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-depends-on-gate'
67
import { useForeignCredential } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-foreign-credential'
@@ -30,14 +31,18 @@ export function FolderSelectorInput({
3031
const { collaborativeSetSubblockValue } = useCollaborativeWorkflow()
3132
const { activeWorkflowId } = useWorkflowRegistry()
3233
const [selectedFolderId, setSelectedFolderId] = useState<string>('')
33-
const providerKey = (subBlock.provider ?? subBlock.serviceId ?? '').toLowerCase()
34-
const credentialProvider = subBlock.serviceId ?? subBlock.provider
34+
35+
// Derive provider from serviceId using OAuth config (same pattern as credential-selector)
36+
const serviceId = subBlock.serviceId || ''
37+
const effectiveProviderId = useMemo(() => getProviderIdFromServiceId(serviceId), [serviceId])
38+
const providerKey = serviceId.toLowerCase()
39+
3540
const isCopyDestinationSelector =
3641
subBlock.canonicalParamId === 'copyDestinationId' ||
3742
subBlock.id === 'copyDestinationFolder' ||
3843
subBlock.id === 'manualCopyDestinationFolder'
3944
const { isForeignCredential } = useForeignCredential(
40-
credentialProvider,
45+
effectiveProviderId,
4146
(connectedCredential as string) || ''
4247
)
4348

apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/project-selector/project-selector-input.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { useEffect, useMemo, useState } from 'react'
44
import { useParams } from 'next/navigation'
55
import { Tooltip } from '@/components/emcn'
6+
import { getProviderIdFromServiceId } from '@/lib/oauth'
67
import { SelectorCombobox } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/selector-combobox/selector-combobox'
78
import { useDependsOnGate } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-depends-on-gate'
89
import { useForeignCredential } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-foreign-credential'
@@ -46,8 +47,13 @@ export function ProjectSelectorInput({
4647
const linearTeamId = previewContextValues?.teamId ?? linearTeamIdFromStore
4748
const jiraDomain = previewContextValues?.domain ?? jiraDomainFromStore
4849

50+
// Derive provider from serviceId using OAuth config
51+
const serviceId = subBlock.serviceId || ''
52+
const effectiveProviderId = useMemo(() => getProviderIdFromServiceId(serviceId), [serviceId])
53+
const isLinear = serviceId === 'linear'
54+
4955
const { isForeignCredential } = useForeignCredential(
50-
subBlock.provider || subBlock.serviceId || 'jira',
56+
effectiveProviderId,
5157
(connectedCredential as string) || ''
5258
)
5359
const activeWorkflowId = useWorkflowRegistry((s) => s.activeWorkflowId) as string | null
@@ -58,10 +64,6 @@ export function ProjectSelectorInput({
5864
previewContextValues,
5965
})
6066

61-
// Get provider-specific values
62-
const provider = subBlock.provider || 'jira'
63-
const isLinear = provider === 'linear'
64-
6567
// Jira/Discord upstream fields - use values from previewContextValues or store
6668
const jiraCredential = connectedCredential
6769
const domain = (jiraDomain as string) || ''
@@ -121,7 +123,7 @@ export function ProjectSelectorInput({
121123
/>
122124
) : (
123125
<div className='w-full rounded border border-dashed p-4 text-center text-muted-foreground text-sm'>
124-
Project selector not supported for provider: {subBlock.provider || 'unknown'}
126+
Project selector not supported for service: {serviceId}
125127
</div>
126128
)}
127129
</div>

apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/tool-input/tool-input.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { Toggle } from '@/components/ui/toggle'
1818
import { createLogger } from '@/lib/logs/console/logger'
1919
import {
2020
getCanonicalScopesForProvider,
21+
getProviderIdFromServiceId,
2122
type OAuthProvider,
2223
type OAuthService,
2324
} from '@/lib/oauth/oauth'
@@ -168,7 +169,6 @@ function FileSelectorSyncWrapper({
168169
id: paramId,
169170
type: 'file-selector' as const,
170171
title: paramId,
171-
provider: uiComponent.provider,
172172
serviceId: uiComponent.serviceId,
173173
mimeType: uiComponent.mimeType,
174174
requiredScopes: uiComponent.requiredScopes || [],
@@ -467,7 +467,7 @@ function ChannelSelectorSyncWrapper({
467467
id: paramId,
468468
type: 'channel-selector' as const,
469469
title: paramId,
470-
provider: uiComponent.provider || 'slack',
470+
serviceId: uiComponent.serviceId,
471471
placeholder: uiComponent.placeholder,
472472
dependsOn: uiComponent.dependsOn,
473473
}}
@@ -1404,7 +1404,6 @@ export function ToolInput({
14041404
id: `tool-${toolIndex || 0}-${param.id}`,
14051405
type: 'project-selector' as const,
14061406
title: param.id,
1407-
provider: uiComponent.provider || 'jira',
14081407
serviceId: uiComponent.serviceId,
14091408
placeholder: uiComponent.placeholder,
14101409
requiredScopes: uiComponent.requiredScopes,
@@ -1421,7 +1420,7 @@ export function ToolInput({
14211420
<ToolCredentialSelector
14221421
value={value}
14231422
onChange={onChange}
1424-
provider={(uiComponent.provider || uiComponent.serviceId) as OAuthProvider}
1423+
provider={getProviderIdFromServiceId(uiComponent.serviceId || '') as OAuthProvider}
14251424
serviceId={uiComponent.serviceId as OAuthService}
14261425
disabled={disabled}
14271426
requiredScopes={uiComponent.requiredScopes || []}

0 commit comments

Comments
 (0)