diff --git a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.spec.ts b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.spec.ts index 814525751..dfe713c6d 100644 --- a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.spec.ts @@ -281,6 +281,32 @@ describe('WorkflowEditDialogComponent', () => { ) }) + it('should offer remote OCR on a trigger added to a new workflow', () => { + jest.spyOn(settingsService, 'get').mockReturnValue(true) + component.ngOnInit() + + // Nothing for the action to apply to yet + expect(component.actionTypeOptions.map((a) => a.id)).not.toContain( + WorkflowActionType.RemoteOcr + ) + + // addTrigger creates the form field with emitEvent false, so the options + // have to be computed on read rather than cached from valueChanges + component.addTrigger() + expect(component.actionTypeOptions.map((a) => a.id)).toContain( + WorkflowActionType.RemoteOcr + ) + + // Switching that trigger to a type that runs after parsing removes it + component.triggerFields + .at(0) + .get('type') + .setValue(WorkflowTriggerType.DocumentAdded) + expect(component.actionTypeOptions.map((a) => a.id)).not.toContain( + WorkflowActionType.RemoteOcr + ) + }) + it('should keep remote OCR listed when an action already uses it', () => { jest.spyOn(settingsService, 'get').mockReturnValue(true) diff --git a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts index dad74c88b..e9bc51488 100644 --- a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts @@ -508,8 +508,6 @@ export class WorkflowEditDialogComponent expandedItem: number = null - readonly allowedActionTypes = signal([]) - private readonly triggerFilterOptionsMap = new WeakMap< FormArray, TriggerFilterOption[] @@ -548,15 +546,13 @@ export class WorkflowEditDialogComponent ngOnInit(): void { super.ngOnInit() this.updateAllTriggerActionFields() - this.objectForm.valueChanges.subscribe((formWorkflow) => { - this.checkRemovalActionFields(formWorkflow) - this.updateAllowedActionTypes(formWorkflow) - }) + this.objectForm.valueChanges.subscribe( + this.checkRemovalActionFields.bind(this) + ) this.checkRemovalActionFields(this.objectForm.value) - this.updateAllowedActionTypes(this.objectForm.value) } - private updateAllowedActionTypes(formWorkflow: Workflow) { + private getAllowedActionTypes() { let allowed = WORKFLOW_ACTION_OPTIONS if (!this.settingsService.get(SETTINGS_KEYS.EMAIL_ENABLED)) { @@ -565,6 +561,7 @@ export class WorkflowEditDialogComponent // Remote OCR is decided before the document is parsed, so it is only // offered for workflows that run at consumption. + const formWorkflow: Workflow = this.objectForm?.value const remoteOcrUsable = this.settingsService.get(SETTINGS_KEYS.REMOTE_OCR_CONFIGURED) && (formWorkflow?.triggers?.some( @@ -577,7 +574,7 @@ export class WorkflowEditDialogComponent allowed = allowed.filter((a) => a.id !== WorkflowActionType.RemoteOcr) } - this.allowedActionTypes.set(allowed) + return allowed } private checkRemovalActionFields(formWorkflow: Workflow) { @@ -1302,7 +1299,8 @@ export class WorkflowEditDialogComponent get actionTypeOptions() { this.settingsService.trackChanges() - return this.allowedActionTypes() + // Computed on read rather than cached + return this.getAllowedActionTypes() } getActionTypeOptionName(type: WorkflowActionType): string {