mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-09-16 21:55:37 -05:00
108 lines
4.5 KiB
HTML
108 lines
4.5 KiB
HTML
<div class="modal-header">
|
|
<h6 class="modal-title" id="modal-basic-title" i18n>Processed Mail for <em>{{ rule.name }}</em></h6>
|
|
<button class="btn btn-sm btn-link text-muted me-auto p-0 p-md-2" title="What's this?" i18n-title type="button" [ngbPopover]="infoPopover" [autoClose]="true">
|
|
<i-bs name="question-circle"></i-bs>
|
|
</button>
|
|
<ng-template #infoPopover>
|
|
<a href="https://docs.paperless-ngx.com/usage#processed-mail" target="_blank" referrerpolicy="noopener noreferrer" i18n>Read more</a>
|
|
<i-bs class="ms-1" width=".8em" height=".8em" name="box-arrow-up-right"></i-bs>
|
|
</ng-template>
|
|
<button type="button" class="btn-close" aria-label="Close" (click)="close()"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
@if (loading) {
|
|
<div class="text-center my-5">
|
|
<div class="spinner-border" role="status">
|
|
<span class="visually-hidden" i18n>Loading...</span>
|
|
</div>
|
|
</div>
|
|
} @else if (processedMails.length === 0) {
|
|
<span i18n>No processed email messages found.</span>
|
|
} @else {
|
|
<div class="table-responsive">
|
|
<table class="table table-hover table-sm align-middle">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" style="width: 40px;">
|
|
<div class="form-check m-0 ms-2 me-n2">
|
|
<input type="checkbox" class="form-check-input" id="all-objects" [(ngModel)]="toggleAllEnabled" [disabled]="processedMails.length === 0" (click)="toggleAll($event); $event.stopPropagation();">
|
|
<label class="form-check-label" for="all-objects"></label>
|
|
</div>
|
|
</th>
|
|
<th scope="col" i18n>Subject</th>
|
|
<th scope="col" i18n>Received</th>
|
|
<th scope="col" i18n>Processed</th>
|
|
<th scope="col" i18n>Status</th>
|
|
<th scope="col" i18n>Error</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@for (mail of processedMails; track mail.id) {
|
|
<ng-template #statusTooltip>
|
|
<div class="small text-light font-monospace">
|
|
{{mail.status}}
|
|
</div>
|
|
</ng-template>
|
|
<tr>
|
|
<td>
|
|
<div class="form-check m-0 ms-2 me-n2">
|
|
<input type="checkbox" class="form-check-input" [id]="mail.id" [checked]="selectedMailIds.has(mail.id)" (click)="toggleSelected(mail); $event.stopPropagation();">
|
|
<label class="form-check-label" [for]="mail.id"></label>
|
|
</div>
|
|
</td>
|
|
<td>{{ mail.subject }}</td>
|
|
<td>{{ mail.received | customDate:'longDate' }}</td>
|
|
<td>{{ mail.processed | customDate:'longDate' }}</td>
|
|
<td>
|
|
@switch (mail.status) {
|
|
@case ('SUCCESS') {
|
|
<i-bs name="check-circle" title="SUCCESS" class="text-success" [ngbTooltip]="statusTooltip"></i-bs>
|
|
}
|
|
@case ('FAILED') {
|
|
<i-bs name="exclamation-triangle" title="FAILED" class="text-danger" [ngbTooltip]="statusTooltip"></i-bs>
|
|
}
|
|
@default {
|
|
<i-bs name="slash-circle" title="{{ mail.status }}" class="text-muted" [ngbTooltip]="statusTooltip"></i-bs>
|
|
}
|
|
}
|
|
</td>
|
|
<td>
|
|
<ng-template #errorPopover>
|
|
<pre class="small text-light">
|
|
{{ mail.error }}
|
|
</pre>
|
|
</ng-template>
|
|
@if (mail.error) {
|
|
<span class="text-danger" triggers="mouseenter:mouseleave" [ngbPopover]="errorPopover">{{ mail.error | slice:0:20 }}</span>
|
|
}
|
|
</td>
|
|
</tr>
|
|
}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="btn-toolbar">
|
|
<button type="button" class="btn btn-outline-secondary me-2" (click)="clearSelection()" [disabled]="selectedMailIds.size === 0" i18n>Clear</button>
|
|
<pngx-confirm-button
|
|
label="Delete selected"
|
|
i18n-label
|
|
title="Delete selected"
|
|
i18n-title
|
|
buttonClasses="btn-outline-danger"
|
|
iconName="trash"
|
|
[disabled]="selectedMailIds.size === 0"
|
|
(confirm)="deleteSelected()">
|
|
</pngx-confirm-button>
|
|
<div class="ms-auto">
|
|
<ngb-pagination
|
|
[collectionSize]="processedMails.length"
|
|
[(page)]="page"
|
|
[pageSize]="50"
|
|
[maxSize]="5"
|
|
(pageChange)="loadProcessedMails()">
|
|
</ngb-pagination>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|