]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
frontend mail rule validation
authorMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Mon, 28 Nov 2022 23:51:39 +0000 (15:51 -0800)
committerMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Sat, 3 Dec 2022 17:31:39 +0000 (09:31 -0800)
Display non-field validation errors, hide action param field if not needed

src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html
src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts
src/documents/serialisers.py

index ef9a5bc479347a721b87649dfb777ed799e5942b..a8a476c280b7ed9609c6bd068c77141f89914b76 100644 (file)
@@ -22,7 +22,7 @@
       </div>
       <div class="col">
         <app-input-select i18n-title title="Action" [items]="actionOptions" formControlName="action" i18n-hint hint="Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched."></app-input-select>
-        <app-input-text i18n-title title="Action parameter" formControlName="action_parameter" [error]="error?.action_parameter"></app-input-text>
+        <app-input-text i18n-title title="Action parameter" *ngIf="showActionParamField" formControlName="action_parameter" [error]="error?.action_parameter"></app-input-text>
         <app-input-select i18n-title title="Assign title from" [items]="metadataTitleOptions" formControlName="assign_title_from"></app-input-select>
         <app-input-tags [allowCreate]="false" formControlName="assign_tags"></app-input-tags>
         <app-input-select i18n-title title="Assign document type" [items]="documentTypes" [allowNull]="true" formControlName="assign_document_type"></app-input-select>
@@ -32,6 +32,7 @@
     </div>
   </div>
   <div class="modal-footer">
+    <span class="text-danger" *ngIf="error?.non_field_errors"><ng-container i18n>Error</ng-container>: {{error.non_field_errors}}</span>
     <button type="button" class="btn btn-outline-secondary" (click)="cancel()" i18n [disabled]="networkActive">Cancel</button>
     <button type="submit" class="btn btn-primary" i18n [disabled]="networkActive">Save</button>
   </div>
index 3dcd7ce01c00047c57d9c4a9df4151bf68cacdcf..126c4968f0c1a7779059392556cc36d495deb65b 100644 (file)
@@ -155,6 +155,13 @@ export class MailRuleEditDialogComponent extends EditDialogComponent<PaperlessMa
     )
   }
 
+  get showActionParamField(): boolean {
+    return (
+      this.objectForm?.get('action')?.value == MailAction.Move ||
+      this.objectForm?.get('action')?.value == MailAction.Tag
+    )
+  }
+
   get attachmentTypeOptions() {
     return ATTACHMENT_TYPE_OPTIONS
   }
index 44572e8fb8b02bb9900d396cc5cc3236b37bf84d..11a9cba398abf7fb969473015125e6f111ce0a9a 100644 (file)
@@ -785,3 +785,12 @@ class MailRuleSerializer(serializers.ModelSerializer):
         if assign_tags:
             mail_rule.assign_tags.set(assign_tags)
         return mail_rule
+
+    def validate(self, attrs):
+        if (
+            attrs["action"] == MailRule.MailAction.TAG
+            or attrs["action"] == MailRule.MailAction.MOVE
+        ) and attrs["action_parameter"] is None:
+            raise serializers.ValidationError("An action parameter is required.")
+
+        return attrs