diff --git a/web/src/lib/services/workflow.service.ts b/web/src/lib/services/workflow.service.ts index b4186b7ebf..9777f1ebcc 100644 --- a/web/src/lib/services/workflow.service.ts +++ b/web/src/lib/services/workflow.service.ts @@ -57,10 +57,6 @@ export const getActionsByContext = ( return availableActions.filter((action) => action.supportedContexts.includes(context)); }; -/** - * Remap configs when items are reordered (drag-drop) - * Moves config from old index to new index position - */ export const remapConfigsOnReorder = ( configs: Record, prefix: 'filter' | 'action', @@ -111,30 +107,19 @@ export const remapConfigsOnRemove = ( return newConfigs; }; -/** - * Initialize filter configurations from existing workflow - * Uses index-based keys to support multiple filters of the same type - */ -export const initializeFilterConfigs = (workflow: WorkflowResponseDto): Record => { +export const initializeConfigs = ( + type: 'action' | 'filter', + workflow: WorkflowResponseDto, +): Record => { const configs: Record = {}; - if (workflow.filters) { + if (workflow.filters && type == 'filter') { for (const [index, workflowFilter] of workflow.filters.entries()) { configs[`filter_${index}`] = workflowFilter.filterConfig ?? {}; } } - return configs; -}; - -/** - * Initialize action configurations from existing workflow - * Uses index-based keys to support multiple actions of the same type - */ -export const initializeActionConfigs = (workflow: WorkflowResponseDto): Record => { - const configs: Record = {}; - - if (workflow.actions) { + if (workflow.actions && type == 'action') { for (const [index, workflowAction] of workflow.actions.entries()) { configs[`action_${index}`] = workflowAction.actionConfig ?? {}; } @@ -175,9 +160,6 @@ export const buildWorkflowPayload = ( }; }; -/** - * Parse JSON workflow and update state - */ export const parseWorkflowJson = ( jsonString: string, availableTriggers: PluginTriggerResponseDto[], @@ -200,10 +182,8 @@ export const parseWorkflowJson = ( try { const parsed = JSON.parse(jsonString); - // Find trigger const trigger = availableTriggers.find((t) => t.type === parsed.triggerType); - // Parse filters (using index-based keys to support multiple of same type) const filters: PluginFilterResponseDto[] = []; const filterConfigs: Record = {}; if (Array.isArray(parsed.filters)) { @@ -217,7 +197,6 @@ export const parseWorkflowJson = ( } } - // Parse actions (using index-based keys to support multiple of same type) const actions: PluginActionResponseDto[] = []; const actionConfigs: Record = {}; if (Array.isArray(parsed.actions)) { @@ -252,9 +231,6 @@ export const parseWorkflowJson = ( } }; -/** - * Check if workflow has changes compared to previous version - */ export const hasWorkflowChanged = ( previousWorkflow: WorkflowResponseDto, enabled: boolean, @@ -266,36 +242,30 @@ export const hasWorkflowChanged = ( filterConfigs: Record, actionConfigs: Record, ): boolean => { - // Check enabled state if (enabled !== previousWorkflow.enabled) { return true; } - // Check name or description if (name !== (previousWorkflow.name ?? '') || description !== (previousWorkflow.description ?? '')) { return true; } - // Check trigger if (triggerType !== previousWorkflow.triggerType) { return true; } - // Check filters order/items const previousFilterIds = previousWorkflow.filters?.map((f) => f.pluginFilterId) ?? []; const currentFilterIds = orderedFilters.map((f) => f.id); if (JSON.stringify(previousFilterIds) !== JSON.stringify(currentFilterIds)) { return true; } - // Check actions order/items const previousActionIds = previousWorkflow.actions?.map((a) => a.pluginActionId) ?? []; const currentActionIds = orderedActions.map((a) => a.id); if (JSON.stringify(previousActionIds) !== JSON.stringify(currentActionIds)) { return true; } - // Check filter configs (using index-based keys) const previousFilterConfigs: Record = {}; for (const [index, wf] of (previousWorkflow.filters ?? []).entries()) { previousFilterConfigs[`filter_${index}`] = wf.filterConfig ?? {}; @@ -304,7 +274,6 @@ export const hasWorkflowChanged = ( return true; } - // Check action configs (using index-based keys) const previousActionConfigs: Record = {}; for (const [index, wa] of (previousWorkflow.actions ?? []).entries()) { previousActionConfigs[`action_${index}`] = wa.actionConfig ?? {}; @@ -316,9 +285,6 @@ export const hasWorkflowChanged = ( return false; }; -/** - * Update a workflow via API - */ export const handleUpdateWorkflow = async ( workflowId: string, name: string, diff --git a/web/src/lib/utils/workflow.ts b/web/src/lib/utils/workflow.ts index c588f9836e..4fd84af40b 100644 --- a/web/src/lib/utils/workflow.ts +++ b/web/src/lib/utils/workflow.ts @@ -33,7 +33,6 @@ export const getComponentDefaultValue = (component: ComponentConfig): unknown => return component.defaultValue; } - // Initialize with appropriate empty value based on component type if (component.type === 'multiselect' || (component.type === 'text' && component.subType === 'people-picker')) { return []; } diff --git a/web/src/routes/(user)/utilities/workflows/[workflowId]/+page.svelte b/web/src/routes/(user)/utilities/workflows/[workflowId]/+page.svelte index 747a7be094..eb47abb767 100644 --- a/web/src/routes/(user)/utilities/workflows/[workflowId]/+page.svelte +++ b/web/src/routes/(user)/utilities/workflows/[workflowId]/+page.svelte @@ -15,8 +15,7 @@ getFiltersByContext, handleUpdateWorkflow, hasWorkflowChanged, - initializeActionConfigs, - initializeFilterConfigs, + initializeConfigs, parseWorkflowJson, remapConfigsOnRemove, remapConfigsOnReorder, @@ -95,8 +94,8 @@ ), ); - let filterConfigs: Record = $derived(initializeFilterConfigs(editWorkflow)); - let actionConfigs: Record = $derived(initializeActionConfigs(editWorkflow)); + let filterConfigs: Record = $derived(initializeConfigs('filter', editWorkflow)); + let actionConfigs: Record = $derived(initializeConfigs('action', editWorkflow)); $effect(() => { editWorkflow.triggerType = triggerType; @@ -129,7 +128,6 @@ actionConfigs, ); - // Update the previous workflow state to the new values previousWorkflow = updated; editWorkflow = updated; @@ -200,7 +198,6 @@ ), ); - // Drag and drop handlers let draggedFilterIndex: number | null = $state(null); let draggedActionIndex: number | null = $state(null); let dragOverFilterIndex: number | null = $state(null); @@ -252,7 +249,6 @@ return; } - // Remap configs to follow the new order actionConfigs = remapConfigsOnReorder(actionConfigs, 'action', draggedActionIndex, index, selectedActions.length); const newActions = [...selectedActions]; @@ -266,12 +262,12 @@ dragOverActionIndex = null; }; - const handleAddStep = async (type?: 'action' | 'filter') => { - const result = (await modalManager.show(AddWorkflowStepModal, { + const handleAddStep = async (type: 'action' | 'filter') => { + const result = await modalManager.show(AddWorkflowStepModal, { filters: supportFilters, actions: supportActions, type, - })) as { type: 'filter' | 'action'; item: PluginFilterResponseDto | PluginActionResponseDto } | undefined; + }); if (result) { if (result.type === 'filter') { @@ -283,13 +279,11 @@ }; const handleRemoveFilter = (index: number) => { - // Remap configs to account for the removed item filterConfigs = remapConfigsOnRemove(filterConfigs, 'filter', index, selectedFilters.length); selectedFilters = selectedFilters.filter((_, i) => i !== index); }; const handleRemoveAction = (index: number) => { - // Remap configs to account for the removed item actionConfigs = remapConfigsOnRemove(actionConfigs, 'action', index, selectedActions.length); selectedActions = selectedActions.filter((_, i) => i !== index); };