Skip to content

Commit 2fd516c

Browse files
committed
fix(serializer): default canonical modes construction
1 parent ecdb133 commit 2fd516c

3 files changed

Lines changed: 53 additions & 28 deletions

File tree

apps/sim/serializer/index.test.ts

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -683,34 +683,37 @@ describe('Serializer', () => {
683683
expect(slackBlock?.config.params.username).toBe('bot')
684684
})
685685

686-
it.concurrent('should fall back to legacy advancedMode when canonicalModes not set', () => {
687-
const serializer = new Serializer()
686+
it.concurrent(
687+
'should fall back to legacy advancedMode for non-credential canonical groups when canonicalModes not set',
688+
() => {
689+
const serializer = new Serializer()
688690

689-
const block: any = {
690-
id: 'slack-1',
691-
type: 'slack',
692-
name: 'Test Slack Block',
693-
position: { x: 0, y: 0 },
694-
advancedMode: true,
695-
subBlocks: {
696-
operation: { value: 'send' },
697-
destinationType: { value: 'channel' },
698-
channel: { value: 'general' },
699-
manualChannel: { value: 'C1234567890' },
700-
text: { value: 'Hello world' },
701-
username: { value: 'bot' },
702-
},
703-
outputs: {},
704-
enabled: true,
705-
}
691+
const block: any = {
692+
id: 'slack-1',
693+
type: 'slack',
694+
name: 'Test Slack Block',
695+
position: { x: 0, y: 0 },
696+
advancedMode: true,
697+
subBlocks: {
698+
operation: { value: 'send' },
699+
destinationType: { value: 'channel' },
700+
channel: { value: 'general' },
701+
manualChannel: { value: 'C1234567890' },
702+
text: { value: 'Hello world' },
703+
username: { value: 'bot' },
704+
},
705+
outputs: {},
706+
enabled: true,
707+
}
706708

707-
const serialized = serializer.serializeWorkflow({ 'slack-1': block }, [], {})
708-
const slackBlock = serialized.blocks.find((b) => b.id === 'slack-1')
709+
const serialized = serializer.serializeWorkflow({ 'slack-1': block }, [], {})
710+
const slackBlock = serialized.blocks.find((b) => b.id === 'slack-1')
709711

710-
expect(slackBlock).toBeDefined()
711-
expect(slackBlock?.config.params.channel).toBe('C1234567890')
712-
expect(slackBlock?.config.params.manualChannel).toBeUndefined()
713-
})
712+
expect(slackBlock).toBeDefined()
713+
expect(slackBlock?.config.params.channel).toBe('C1234567890')
714+
expect(slackBlock?.config.params.manualChannel).toBeUndefined()
715+
}
716+
)
714717

715718
it.concurrent('should use basic value by default when no mode specified', () => {
716719
const serializer = new Serializer()

apps/sim/serializer/index.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,9 @@ function shouldSerializeSubBlock(
6161
const group = canonicalId ? canonicalIndex.groupsById[canonicalId] : undefined
6262
if (group && isCanonicalPair(group)) {
6363
const mode =
64-
canonicalModeOverrides?.[group.canonicalId] ??
65-
(displayAdvancedOptions ? 'advanced' : resolveCanonicalMode(group, values))
64+
canonicalModeOverrides?.[group.canonicalId] != null || !displayAdvancedOptions
65+
? resolveCanonicalMode(group, values, canonicalModeOverrides)
66+
: 'advanced'
6667
const matchesMode =
6768
mode === 'advanced'
6869
? group.advancedIds.includes(subBlockConfig.id)
@@ -374,8 +375,15 @@ export class Serializer {
374375

375376
Object.values(canonicalIndex.groupsById).forEach((group) => {
376377
const { basicValue, advancedValue } = getCanonicalValues(group, params)
378+
const hasExplicitOverride = canonicalModeOverrides?.[group.canonicalId] != null
377379
const pairMode =
378-
canonicalModeOverrides?.[group.canonicalId] ?? (legacyAdvancedMode ? 'advanced' : 'basic')
380+
hasExplicitOverride || !legacyAdvancedMode
381+
? resolveCanonicalMode(
382+
group,
383+
buildSubBlockValues(block.subBlocks),
384+
canonicalModeOverrides
385+
)
386+
: 'advanced'
379387
const chosen = pairMode === 'advanced' ? advancedValue : basicValue
380388

381389
const sourceIds = [group.basicId, ...group.advancedIds].filter(Boolean) as string[]

apps/sim/stores/workflows/utils.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { v4 as uuidv4 } from 'uuid'
33
import { DEFAULT_DUPLICATE_OFFSET } from '@/lib/workflows/autolayout/constants'
44
import { getEffectiveBlockOutputs } from '@/lib/workflows/blocks/block-outputs'
55
import { mergeSubblockStateWithValues } from '@/lib/workflows/subblocks'
6+
import { buildCanonicalIndex, isCanonicalPair } from '@/lib/workflows/subblocks/visibility'
67
import { hasTriggerCapability } from '@/lib/workflows/triggers/trigger-utils'
78
import { TriggerUtils } from '@/lib/workflows/triggers/triggers'
89
import { getBlock } from '@/blocks'
@@ -196,6 +197,19 @@ export function prepareBlockState(options: PrepareBlockStateOptions): BlockState
196197
preferToolOutputs: !effectiveTriggerMode,
197198
})
198199

200+
if (blockConfig.subBlocks) {
201+
const canonicalIndex = buildCanonicalIndex(blockConfig.subBlocks)
202+
const canonicalModes: Record<string, 'basic' | 'advanced'> = {}
203+
for (const group of Object.values(canonicalIndex.groupsById)) {
204+
if (isCanonicalPair(group)) {
205+
canonicalModes[group.canonicalId] = 'basic'
206+
}
207+
}
208+
if (Object.keys(canonicalModes).length > 0) {
209+
blockData.canonicalModes = canonicalModes
210+
}
211+
}
212+
199213
return {
200214
id,
201215
type,

0 commit comments

Comments
 (0)