Skip to content

Commit 8533ded

Browse files
author
waleed
committed
edge cases for effectiveTriggerId
1 parent c6a8a5d commit 8533ded

File tree

4 files changed

+63
-18
lines changed

4 files changed

+63
-18
lines changed

apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/trigger-save/trigger-save.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,16 +119,19 @@ export function TriggerSave({
119119
.map((sb) => sb.id)
120120
}, [triggerDef])
121121

122-
const otherRequiredValues = useSubBlockStore((state) => {
122+
const otherRequiredValues = useMemo(() => {
123123
if (!triggerDef) return {}
124124
const values: Record<string, any> = {}
125125
requiredSubBlockIds
126126
.filter((id) => id !== 'triggerCredentials')
127127
.forEach((subBlockId) => {
128-
values[subBlockId] = state.getValue(blockId, subBlockId)
128+
const value = useSubBlockStore.getState().getValue(blockId, subBlockId)
129+
if (value !== null && value !== undefined && value !== '') {
130+
values[subBlockId] = value
131+
}
129132
})
130133
return values
131-
})
134+
}, [blockId, triggerDef, requiredSubBlockIds])
132135

133136
const requiredSubBlockValues = useMemo(() => {
134137
return {

apps/sim/hooks/use-trigger-config-aggregation.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,16 @@ import { SYSTEM_SUBBLOCK_IDS } from '@/triggers/consts'
66
const logger = createLogger('useTriggerConfigAggregation')
77

88
/**
9-
* Maps old trigger config field names to new subblock IDs for backward compatibility
9+
* Maps old trigger config field names to new subblock IDs for backward compatibility.
10+
* This handles field name changes during the migration from modal-based configuration
11+
* to individual subblock fields.
12+
*
13+
* @param oldFieldName - The field name from the old triggerConfig object
14+
* @returns The corresponding new subblock ID, or the original field name if no mapping exists
15+
*
16+
* @example
17+
* mapOldFieldNameToNewSubBlockId('credentialId') // Returns 'triggerCredentials'
18+
* mapOldFieldNameToNewSubBlockId('labelIds') // Returns 'labelIds' (no mapping needed)
1019
*/
1120
function mapOldFieldNameToNewSubBlockId(oldFieldName: string): string {
1221
const fieldMapping: Record<string, string> = {
@@ -95,6 +104,10 @@ export function populateTriggerFieldsFromConfig(
95104
return
96105
}
97106

107+
if (Object.keys(triggerConfig).length === 0) {
108+
return
109+
}
110+
98111
if (!isTriggerValid(triggerId)) {
99112
return
100113
}

apps/sim/hooks/use-webhook-management.ts

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,16 @@ export function useWebhookManagement({
164164
if (blockConfig.category === 'triggers') {
165165
effectiveTriggerId = block.type
166166
} else if (block.triggerMode && blockConfig.triggers?.enabled) {
167+
const selectedTriggerIdValue = block.subBlocks?.selectedTriggerId?.value
167168
const triggerIdValue = block.subBlocks?.triggerId?.value
168169
effectiveTriggerId =
169-
(typeof triggerIdValue === 'string' ? triggerIdValue : undefined) ||
170+
(typeof selectedTriggerIdValue === 'string' &&
171+
isTriggerValid(selectedTriggerIdValue)
172+
? selectedTriggerIdValue
173+
: undefined) ||
174+
(typeof triggerIdValue === 'string' && isTriggerValid(triggerIdValue)
175+
? triggerIdValue
176+
: undefined) ||
170177
blockConfig.triggers?.available?.[0]
171178
}
172179
}
@@ -235,6 +242,21 @@ export function useWebhookManagement({
235242
return false
236243
}
237244

245+
let effectiveTriggerId: string | undefined = triggerId
246+
if (!effectiveTriggerId) {
247+
const selectedTriggerId = useSubBlockStore.getState().getValue(blockId, 'selectedTriggerId')
248+
if (typeof selectedTriggerId === 'string' && isTriggerValid(selectedTriggerId)) {
249+
effectiveTriggerId = selectedTriggerId
250+
}
251+
}
252+
if (!effectiveTriggerId) {
253+
const storedTriggerId = useSubBlockStore.getState().getValue(blockId, 'triggerId')
254+
effectiveTriggerId =
255+
typeof storedTriggerId === 'string' && isTriggerValid(storedTriggerId)
256+
? storedTriggerId
257+
: triggerId
258+
}
259+
238260
try {
239261
setIsSaving(true)
240262

@@ -250,7 +272,7 @@ export function useWebhookManagement({
250272
const webhookConfig = {
251273
...(triggerConfig || {}),
252274
...(selectedCredentialId ? { credentialId: selectedCredentialId } : {}),
253-
triggerId,
275+
triggerId: effectiveTriggerId,
254276
}
255277

256278
const response = await fetch('/api/webhooks', {
@@ -281,15 +303,15 @@ export function useWebhookManagement({
281303
const savedWebhookId = data.webhook.id
282304

283305
useSubBlockStore.getState().setValue(blockId, 'triggerPath', path)
284-
useSubBlockStore.getState().setValue(blockId, 'triggerId', triggerId)
306+
useSubBlockStore.getState().setValue(blockId, 'triggerId', effectiveTriggerId)
285307
useSubBlockStore.getState().setValue(blockId, 'webhookId', savedWebhookId)
286308
useSubBlockStore.setState((state) => ({
287309
checkedWebhooks: new Set([...state.checkedWebhooks, blockId]),
288310
}))
289311

290312
logger.info('Trigger webhook created successfully', {
291313
webhookId: savedWebhookId,
292-
triggerId,
314+
triggerId: effectiveTriggerId,
293315
provider: triggerDef.provider,
294316
blockId,
295317
})
@@ -308,7 +330,7 @@ export function useWebhookManagement({
308330
providerConfig: {
309331
...triggerConfig,
310332
...(selectedCredentialId ? { credentialId: selectedCredentialId } : {}),
311-
triggerId,
333+
triggerId: effectiveTriggerId,
312334
},
313335
}),
314336
})

apps/sim/stores/workflows/subblock/store.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import { create } from 'zustand'
22
import { devtools } from 'zustand/middleware'
3+
import { createLogger } from '@/lib/logs/console/logger'
34
import { getBlock } from '@/blocks'
45
import type { SubBlockConfig } from '@/blocks/types'
56
import { populateTriggerFieldsFromConfig } from '@/hooks/use-trigger-config-aggregation'
67
import { useWorkflowRegistry } from '@/stores/workflows/registry/store'
78
import type { SubBlockStore } from '@/stores/workflows/subblock/types'
89
import { isTriggerValid } from '@/triggers'
910

11+
const logger = createLogger('SubBlockStore')
12+
1013
/**
1114
* SubBlockState stores values for all subblocks in workflows
1215
*
@@ -29,34 +32,29 @@ export const useSubBlockStore = create<SubBlockStore>()(
2932
const activeWorkflowId = useWorkflowRegistry.getState().activeWorkflowId
3033
if (!activeWorkflowId) return
3134

32-
// Validate and fix table data if needed
3335
let validatedValue = value
3436
if (Array.isArray(value)) {
35-
// Check if this looks like table data (array of objects with cells)
3637
const isTableData =
3738
value.length > 0 &&
3839
value.some((item) => item && typeof item === 'object' && 'cells' in item)
3940

4041
if (isTableData) {
41-
console.log('Validating table data for subblock:', { blockId, subBlockId })
42+
logger.debug('Validating table data for subblock', { blockId, subBlockId })
4243
validatedValue = value.map((row: any) => {
43-
// Ensure each row has proper structure
4444
if (!row || typeof row !== 'object') {
45-
console.warn('Fixing malformed table row:', row)
45+
logger.warn('Fixing malformed table row', { blockId, subBlockId, row })
4646
return {
4747
id: crypto.randomUUID(),
4848
cells: { Key: '', Value: '' },
4949
}
5050
}
5151

52-
// Ensure row has an id
5352
if (!row.id) {
5453
row.id = crypto.randomUUID()
5554
}
5655

57-
// Ensure row has cells object
5856
if (!row.cells || typeof row.cells !== 'object') {
59-
console.warn('Fixing malformed table row cells:', row)
57+
logger.warn('Fixing malformed table row cells', { blockId, subBlockId, row })
6058
row.cells = { Key: '', Value: '' }
6159
}
6260

@@ -129,7 +127,16 @@ export const useSubBlockStore = create<SubBlockStore>()(
129127
if (blockConfig.category === 'triggers') {
130128
triggerId = block.type
131129
} else if (block.triggerMode === true && blockConfig.triggers?.enabled) {
132-
triggerId = block.subBlocks?.triggerId?.value || blockConfig.triggers?.available?.[0]
130+
const selectedTriggerIdValue = block.subBlocks?.selectedTriggerId?.value
131+
const triggerIdValue = block.subBlocks?.triggerId?.value
132+
triggerId =
133+
(typeof selectedTriggerIdValue === 'string' && isTriggerValid(selectedTriggerIdValue)
134+
? selectedTriggerIdValue
135+
: undefined) ||
136+
(typeof triggerIdValue === 'string' && isTriggerValid(triggerIdValue)
137+
? triggerIdValue
138+
: undefined) ||
139+
blockConfig.triggers?.available?.[0]
133140
}
134141

135142
if (!triggerId || !isTriggerValid(triggerId)) {

0 commit comments

Comments
 (0)