Skip to content

Commit b464d70

Browse files
committed
fix resolution
1 parent 87280c8 commit b464d70

File tree

13 files changed

+124
-111
lines changed

13 files changed

+124
-111
lines changed

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

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
22
import { useReactFlow } from 'reactflow'
33
import { Combobox, type ComboboxOption } from '@/components/emcn/components'
44
import { cn } from '@/lib/core/utils/cn'
5-
import {
6-
buildCanonicalIndex,
7-
hasAdvancedValues,
8-
resolveDependencyValue,
9-
} from '@/lib/workflows/subblocks/visibility'
5+
import { buildCanonicalIndex, resolveDependencyValue } from '@/lib/workflows/subblocks/visibility'
106
import { formatDisplayText } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/formatted-text'
117
import { SubBlockInputController } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/sub-block-input-controller'
128
import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-sub-block-value'
@@ -111,28 +107,11 @@ export function ComboBox({
111107
if (dependsOnFields.length === 0 || !activeWorkflowId) return []
112108
const workflowValues = state.workflowValues[activeWorkflowId] || {}
113109
const blockValues = workflowValues[blockId] || {}
114-
const displayAdvancedOptions =
115-
(blockState?.advancedMode ?? false) ||
116-
hasAdvancedValues(blockConfig?.subBlocks || [], blockValues, canonicalIndex)
117110
return dependsOnFields.map((depKey) =>
118-
resolveDependencyValue(
119-
depKey,
120-
blockValues,
121-
displayAdvancedOptions,
122-
canonicalIndex,
123-
canonicalModeOverrides
124-
)
111+
resolveDependencyValue(depKey, blockValues, canonicalIndex, canonicalModeOverrides)
125112
)
126113
},
127-
[
128-
dependsOnFields,
129-
activeWorkflowId,
130-
blockId,
131-
blockState?.advancedMode,
132-
blockConfig?.subBlocks,
133-
canonicalIndex,
134-
canonicalModeOverrides,
135-
]
114+
[dependsOnFields, activeWorkflowId, blockId, canonicalIndex, canonicalModeOverrides]
136115
)
137116
)
138117

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

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
22
import { Badge } from '@/components/emcn'
33
import { Combobox, type ComboboxOption } from '@/components/emcn/components'
4-
import {
5-
buildCanonicalIndex,
6-
hasAdvancedValues,
7-
resolveDependencyValue,
8-
} from '@/lib/workflows/subblocks/visibility'
4+
import { buildCanonicalIndex, resolveDependencyValue } from '@/lib/workflows/subblocks/visibility'
95
import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-sub-block-value'
106
import { getBlock } from '@/blocks/registry'
117
import type { SubBlockConfig } from '@/blocks/types'
@@ -109,28 +105,11 @@ export function Dropdown({
109105
if (dependsOnFields.length === 0 || !activeWorkflowId) return []
110106
const workflowValues = state.workflowValues[activeWorkflowId] || {}
111107
const blockValues = workflowValues[blockId] || {}
112-
const displayAdvancedOptions =
113-
(blockState?.advancedMode ?? false) ||
114-
hasAdvancedValues(blockConfig?.subBlocks || [], blockValues, canonicalIndex)
115108
return dependsOnFields.map((depKey) =>
116-
resolveDependencyValue(
117-
depKey,
118-
blockValues,
119-
displayAdvancedOptions,
120-
canonicalIndex,
121-
canonicalModeOverrides
122-
)
109+
resolveDependencyValue(depKey, blockValues, canonicalIndex, canonicalModeOverrides)
123110
)
124111
},
125-
[
126-
dependsOnFields,
127-
activeWorkflowId,
128-
blockId,
129-
blockState?.advancedMode,
130-
blockConfig?.subBlocks,
131-
canonicalIndex,
132-
canonicalModeOverrides,
133-
]
112+
[dependsOnFields, activeWorkflowId, blockId, canonicalIndex, canonicalModeOverrides]
134113
)
135114
)
136115

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

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@ import { useMemo } from 'react'
44
import { useParams } from 'next/navigation'
55
import { Tooltip } from '@/components/emcn'
66
import { getProviderIdFromServiceId } from '@/lib/oauth'
7+
import { buildCanonicalIndex, resolveDependencyValue } from '@/lib/workflows/subblocks/visibility'
78
import { SelectorCombobox } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/selector-combobox/selector-combobox'
89
import { useDependsOnGate } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-depends-on-gate'
910
import { useForeignCredential } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-foreign-credential'
10-
import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-sub-block-value'
11+
import { getBlock } from '@/blocks/registry'
1112
import type { SubBlockConfig } from '@/blocks/types'
1213
import { resolveSelectorForSubBlock, type SelectorResolution } from '@/hooks/selectors/resolution'
1314
import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow'
1415
import { useWorkflowRegistry } from '@/stores/workflows/registry/store'
16+
import { useSubBlockStore } from '@/stores/workflows/subblock/store'
17+
import { useWorkflowStore } from '@/stores/workflows/workflow/store'
1518

1619
interface SheetSelectorInputProps {
1720
blockId: string
@@ -41,16 +44,32 @@ export function SheetSelectorInput({
4144
previewContextValues,
4245
})
4346

44-
const [connectedCredentialFromStore] = useSubBlockValue(blockId, 'credential')
45-
const [spreadsheetIdFromStore] = useSubBlockValue(blockId, 'spreadsheetId')
46-
const [manualSpreadsheetIdFromStore] = useSubBlockValue(blockId, 'manualSpreadsheetId')
47+
const blockState = useWorkflowStore((state) => state.blocks[blockId])
48+
const blockConfig = blockState?.type ? getBlock(blockState.type) : null
49+
const canonicalIndex = useMemo(
50+
() => buildCanonicalIndex(blockConfig?.subBlocks || []),
51+
[blockConfig?.subBlocks]
52+
)
53+
const canonicalModeOverrides = blockState?.data?.canonicalModes
54+
55+
const blockValues = useSubBlockStore((state) => {
56+
if (!activeWorkflowId) return {}
57+
const workflowValues = state.workflowValues[activeWorkflowId] || {}
58+
return (workflowValues as Record<string, Record<string, unknown>>)[blockId] || {}
59+
})
60+
61+
const connectedCredentialFromStore = blockValues.credential
62+
63+
const spreadsheetIdFromStore = useMemo(
64+
() =>
65+
resolveDependencyValue('spreadsheetId', blockValues, canonicalIndex, canonicalModeOverrides),
66+
[blockValues, canonicalIndex, canonicalModeOverrides]
67+
)
4768

4869
const connectedCredential = previewContextValues?.credential ?? connectedCredentialFromStore
49-
const spreadsheetId =
50-
previewContextValues?.spreadsheetId ??
51-
spreadsheetIdFromStore ??
52-
previewContextValues?.manualSpreadsheetId ??
53-
manualSpreadsheetIdFromStore
70+
const spreadsheetId = previewContextValues
71+
? (previewContextValues.spreadsheetId ?? previewContextValues.manualSpreadsheetId)
72+
: spreadsheetIdFromStore
5473

5574
const normalizedCredentialId =
5675
typeof connectedCredential === 'string'
@@ -61,7 +80,6 @@ export function SheetSelectorInput({
6180

6281
const normalizedSpreadsheetId = typeof spreadsheetId === 'string' ? spreadsheetId.trim() : ''
6382

64-
// Derive provider from serviceId using OAuth config
6583
const serviceId = subBlock.serviceId || ''
6684
const effectiveProviderId = useMemo(() => getProviderIdFromServiceId(serviceId), [serviceId])
6785

apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/hooks/use-depends-on-gate.ts

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

33
import { useMemo } from 'react'
4-
import {
5-
buildCanonicalIndex,
6-
hasAdvancedValues,
7-
resolveDependencyValue,
8-
} from '@/lib/workflows/subblocks/visibility'
4+
import { buildCanonicalIndex, resolveDependencyValue } from '@/lib/workflows/subblocks/visibility'
95
import { getBlock } from '@/blocks/registry'
106
import type { SubBlockConfig } from '@/blocks/types'
117
import { useWorkflowRegistry } from '@/stores/workflows/registry/store'
@@ -103,17 +99,11 @@ export function useDependsOnGate(
10399

104100
// If previewContextValues are provided (e.g., tool parameters), use those first
105101
if (previewContextValues) {
106-
const displayAdvancedOptions = hasAdvancedValues(
107-
blockConfig?.subBlocks || [],
108-
previewContextValues,
109-
canonicalIndex
110-
)
111102
const map: Record<string, unknown> = {}
112103
for (const key of allDependsOnFields) {
113104
const resolvedValue = resolveDependencyValue(
114105
key,
115106
previewContextValues,
116-
displayAdvancedOptions,
117107
canonicalIndex,
118108
canonicalModeOverrides
119109
)
@@ -132,15 +122,11 @@ export function useDependsOnGate(
132122

133123
const workflowValues = state.workflowValues[activeWorkflowId] || {}
134124
const blockValues = (workflowValues as any)[blockId] || {}
135-
const displayAdvancedOptions =
136-
(blockState?.advancedMode ?? false) ||
137-
hasAdvancedValues(blockConfig?.subBlocks || [], blockValues, canonicalIndex)
138125
const map: Record<string, unknown> = {}
139126
for (const key of allDependsOnFields) {
140127
const resolvedValue = resolveDependencyValue(
141128
key,
142129
blockValues,
143-
displayAdvancedOptions,
144130
canonicalIndex,
145131
canonicalModeOverrides
146132
)
@@ -149,12 +135,6 @@ export function useDependsOnGate(
149135
return map
150136
})
151137

152-
// For backward compatibility, also provide array of values
153-
const dependencyValues = useMemo(
154-
() => allDependsOnFields.map((key) => dependencyValuesMap[key]),
155-
[allDependsOnFields, dependencyValuesMap]
156-
) as any[]
157-
158138
const isValueSatisfied = (value: unknown): boolean => {
159139
if (value === null || value === undefined) return false
160140
if (typeof value === 'string') return value.trim().length > 0
@@ -182,7 +162,6 @@ export function useDependsOnGate(
182162

183163
return {
184164
dependsOn,
185-
dependencyValues,
186165
depsSatisfied,
187166
blocked,
188167
finalDisabled,

apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/editor.tsx

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,9 @@ export function Editor() {
106106
blockSubBlockValues,
107107
canonicalIndex
108108
)
109-
const effectiveAdvanced = advancedMode || advancedValuesPresent
109+
const displayAdvancedOptions = userPermissions.canEdit
110+
? advancedMode
111+
: advancedMode || advancedValuesPresent
110112
const hasAdvancedOnlyFields = useMemo(() => {
111113
if (!blockConfig?.subBlocks) return false
112114
return blockConfig.subBlocks.some((subBlock) => {
@@ -121,7 +123,7 @@ export function Editor() {
121123
const { subBlocks, stateToUse: subBlockState } = useEditorSubblockLayout(
122124
blockConfig || ({} as any),
123125
currentBlockId || '',
124-
advancedMode,
126+
displayAdvancedOptions,
125127
triggerMode,
126128
activeWorkflowId,
127129
blockSubBlockValues,
@@ -216,6 +218,24 @@ export function Editor() {
216218

217219
const hasAdvancedMode = hasAdvancedOnlyFields
218220

221+
const autoExpandedBlocksRef = useRef<Set<string>>(new Set())
222+
223+
useEffect(() => {
224+
if (!currentBlockId || !userPermissions.canEdit) return
225+
if (!advancedValuesPresent) return
226+
if (advancedMode) return
227+
if (autoExpandedBlocksRef.current.has(currentBlockId)) return
228+
229+
autoExpandedBlocksRef.current.add(currentBlockId)
230+
collaborativeToggleBlockAdvancedMode(currentBlockId)
231+
}, [
232+
advancedMode,
233+
advancedValuesPresent,
234+
collaborativeToggleBlockAdvancedMode,
235+
currentBlockId,
236+
userPermissions.canEdit,
237+
])
238+
219239
// Determine if connections are at minimum height (collapsed state)
220240
const isConnectionsAtMinHeight = connectionsHeight <= 35
221241

@@ -375,7 +395,7 @@ export function Editor() {
375395
canonicalGroup && isCanonicalSwap
376396
? resolveCanonicalMode(
377397
canonicalGroup,
378-
effectiveAdvanced,
398+
blockSubBlockValues,
379399
canonicalModeOverrides
380400
)
381401
: undefined
@@ -439,7 +459,7 @@ export function Editor() {
439459
>
440460
<div className='flex items-center gap-[6px]'>
441461
<span className='text-[var(--text-primary)]'>
442-
{effectiveAdvanced ? 'Hide advanced options' : 'Show advanced options'}
462+
{displayAdvancedOptions ? 'Hide advanced options' : 'Show advanced options'}
443463
</span>
444464
{advancedValuesPresent && (
445465
<span className='h-[6px] w-[6px] rounded-full bg-[var(--brand-9)]' />
@@ -448,7 +468,7 @@ export function Editor() {
448468
<ChevronDown
449469
className={cn(
450470
'h-[14px] w-[14px] transition-transform',
451-
effectiveAdvanced && 'rotate-180'
471+
displayAdvancedOptions && 'rotate-180'
452472
)}
453473
/>
454474
</Button>

apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/hooks/use-editor-subblock-layout.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { useCallback, useMemo } from 'react'
22
import {
33
buildCanonicalIndex,
44
evaluateSubBlockCondition,
5-
hasAdvancedValues,
65
isSubBlockFeatureEnabled,
76
isSubBlockVisibleForMode,
87
} from '@/lib/workflows/subblocks/visibility'
@@ -89,8 +88,7 @@ export function useEditorSubblockLayout(
8988
)
9089

9190
const canonicalIndex = buildCanonicalIndex(config.subBlocks || [])
92-
const effectiveAdvanced =
93-
displayAdvancedMode || hasAdvancedValues(config.subBlocks || [], rawValues, canonicalIndex)
91+
const effectiveAdvanced = displayAdvancedMode
9492
const canonicalModeOverrides = blockData?.canonicalModes
9593

9694
const visibleSubBlocks = (config.subBlocks || []).filter((block) => {
@@ -116,7 +114,13 @@ export function useEditorSubblockLayout(
116114
}
117115

118116
if (
119-
!isSubBlockVisibleForMode(block, effectiveAdvanced, canonicalIndex, canonicalModeOverrides)
117+
!isSubBlockVisibleForMode(
118+
block,
119+
effectiveAdvanced,
120+
canonicalIndex,
121+
rawValues,
122+
canonicalModeOverrides
123+
)
120124
) {
121125
return false
122126
}

0 commit comments

Comments
 (0)