Add missing mail rules & accounts

This commit is contained in:
shamoon 2024-04-03 00:56:40 -07:00
parent 5d22fc76b4
commit 2f21046c50
4 changed files with 42 additions and 15 deletions

View File

@ -160,6 +160,7 @@ import {
doorOpen, doorOpen,
download, download,
envelope, envelope,
envelopeAt,
exclamationCircleFill, exclamationCircleFill,
exclamationTriangle, exclamationTriangle,
exclamationTriangleFill, exclamationTriangleFill,
@ -256,6 +257,7 @@ const icons = {
doorOpen, doorOpen,
download, download,
envelope, envelope,
envelopeAt,
exclamationCircleFill, exclamationCircleFill,
exclamationTriangle, exclamationTriangle,
exclamationTriangleFill, exclamationTriangleFill,

View File

@ -33,7 +33,7 @@
@if (type === DataType.Document) { @if (type === DataType.Document) {
<i-bs width="1em" height="1em" name="pencil"></i-bs> <i-bs width="1em" height="1em" name="pencil"></i-bs>
<span>&nbsp;<ng-container i18n>Open</ng-container></span> <span>&nbsp;<ng-container i18n>Open</ng-container></span>
} @else if (type === DataType.Workflow || type === DataType.CustomField || type === DataType.Group || type === DataType.User) { } @else if (type === DataType.Workflow || type === DataType.CustomField || type === DataType.Group || type === DataType.User || type === DataType.MailAccount || type === DataType.MailRule) {
<i-bs width="1em" height="1em" name="pencil"></i-bs> <i-bs width="1em" height="1em" name="pencil"></i-bs>
<span>&nbsp;<ng-container i18n>Edit</ng-container></span> <span>&nbsp;<ng-container i18n>Edit</ng-container></span>
} @else { } @else {
@ -41,7 +41,7 @@
<span>&nbsp;<ng-container i18n>Filter documents</ng-container></span> <span>&nbsp;<ng-container i18n>Filter documents</ng-container></span>
} }
</button> </button>
@if (type !== DataType.Workflow && type !== DataType.CustomField && type !== DataType.Group && type !== DataType.User) { @if (type !== DataType.Workflow && type !== DataType.CustomField && type !== DataType.Group && type !== DataType.User && type !== DataType.MailAccount && type !== DataType.MailRule) {
<button #secondaryButton type="button" class="btn btn-sm btn-outline-primary d-flex" <button #secondaryButton type="button" class="btn btn-sm btn-outline-primary d-flex"
(click)="secondaryAction(type, item); $event.stopPropagation()" (click)="secondaryAction(type, item); $event.stopPropagation()"
[disabled]="disableSecondaryButton(type, item)" [disabled]="disableSecondaryButton(type, item)"
@ -119,6 +119,20 @@
} }
} }
@if (searchResults?.mail_accounts.length) {
<h6 class="dropdown-header" i18n="@@searchResults.mailAccounts">Mail accounts</h6>
@for (mailAccount of searchResults.mail_accounts; track mailAccount.id) {
<ng-container *ngTemplateOutlet="resultItemTemplate; context: {item: mailAccount, nameProp: 'name', type: DataType.MailAccount, icon: 'envelope-at'}"></ng-container>
}
}
@if (searchResults?.mail_rules.length) {
<h6 class="dropdown-header" i18n="@@searchResults.mailRules">Mail rules</h6>
@for (mailRule of searchResults.mail_rules; track mailRule.id) {
<ng-container *ngTemplateOutlet="resultItemTemplate; context: {item: mailRule, nameProp: 'name', type: DataType.MailRule, icon: 'envelope'}"></ng-container>
}
}
@if (searchResults?.workflows.length) { @if (searchResults?.workflows.length) {
<h6 class="dropdown-header" i18n="@@searchResults.workflows">Workflows</h6> <h6 class="dropdown-header" i18n="@@searchResults.workflows">Workflows</h6>
@for (workflow of searchResults.workflows; track workflow.id) { @for (workflow of searchResults.workflows; track workflow.id) {

View File

@ -66,7 +66,7 @@ const searchResults = {
storage_paths: [ storage_paths: [
{ {
id: 1, id: 1,
path: 'TestStoragePath', name: 'TestStoragePath',
}, },
], ],
tags: [ tags: [
@ -208,6 +208,17 @@ describe('GlobalSearchComponent', () => {
) )
expect(component['currentItemIndex']).toBe(-1) expect(component['currentItemIndex']).toBe(-1)
expect(inputFocusSpy).toHaveBeenCalled() expect(inputFocusSpy).toHaveBeenCalled()
component.handleKeyboardEvent(
new KeyboardEvent('keydown', { key: 'ArrowDown' })
)
component['currentItemIndex'] = searchResults.total - 1
component['setCurrentItem']()
component.handleKeyboardEvent(
new KeyboardEvent('keydown', { key: 'ArrowDown' })
)
expect(component['currentItemIndex']).toBe(0)
expect(zeroItemSpy).toHaveBeenCalled()
}) })
it('should search on query debounce', fakeAsync(() => { it('should search on query debounce', fakeAsync(() => {

View File

@ -1130,7 +1130,7 @@ class GlobalSearchView(PassUserMixin):
tags = ( tags = (
get_objects_for_user_owner_aware(request.user, "view_tag", Tag).filter( get_objects_for_user_owner_aware(request.user, "view_tag", Tag).filter(
name__contains=query, name__icontains=query,
)[:3] )[:3]
if request.user.has_perm("documents.view_tag") if request.user.has_perm("documents.view_tag")
else [] else []
@ -1140,7 +1140,7 @@ class GlobalSearchView(PassUserMixin):
request.user, request.user,
"view_correspondent", "view_correspondent",
Correspondent, Correspondent,
).filter(name__contains=query)[:3] ).filter(name__icontains=query)[:3]
if request.user.has_perm("documents.view_correspondent") if request.user.has_perm("documents.view_correspondent")
else [] else []
) )
@ -1149,7 +1149,7 @@ class GlobalSearchView(PassUserMixin):
request.user, request.user,
"view_documenttype", "view_documenttype",
DocumentType, DocumentType,
).filter(name__contains=query)[:3] ).filter(name__icontains=query)[:3]
if request.user.has_perm("documents.view_documenttype") if request.user.has_perm("documents.view_documenttype")
else [] else []
) )
@ -1158,37 +1158,37 @@ class GlobalSearchView(PassUserMixin):
request.user, request.user,
"view_storagepath", "view_storagepath",
StoragePath, StoragePath,
).filter(name__contains=query)[:3] ).filter(name__icontains=query)[:3]
if request.user.has_perm("documents.view_storagepath") if request.user.has_perm("documents.view_storagepath")
else [] else []
) )
users = ( users = (
User.objects.filter(username__contains=query)[:3] User.objects.filter(username__icontains=query)[:3]
if request.user.has_perm("documents.view_user") if request.user.has_perm("documents.view_user")
else [] else []
) )
groups = ( groups = (
Group.objects.filter(name__contains=query)[:3] Group.objects.filter(name__icontains=query)[:3]
if request.user.has_perm("documents.view_group") if request.user.has_perm("documents.view_group")
else [] else []
) )
mail_rules = ( mail_rules = (
MailRule.objects.filter(name__contains=query)[:3] MailRule.objects.filter(name__icontains=query)[:3]
if request.user.has_perm("documents.view_mailrule") if request.user.has_perm("paperless_mail.view_mailrule")
else [] else []
) )
mail_accounts = ( mail_accounts = (
MailAccount.objects.filter(name__contains=query)[:3] MailAccount.objects.filter(name__icontains=query)[:3]
if request.user.has_perm("documents.view_mailaccount") if request.user.has_perm("paperless_mail.view_mailaccount")
else [] else []
) )
workflows = ( workflows = (
Workflow.objects.filter(name__contains=query)[:3] Workflow.objects.filter(name__icontains=query)[:3]
if request.user.has_perm("documents.view_workflow") if request.user.has_perm("documents.view_workflow")
else [] else []
) )
custom_fields = ( custom_fields = (
CustomField.objects.filter(name__contains=query)[:3] CustomField.objects.filter(name__icontains=query)[:3]
if request.user.has_perm("documents.view_customfield") if request.user.has_perm("documents.view_customfield")
else [] else []
) )