2022-05-23 01:21:06 -07:00
< app-page-header title = "File Tasks" i18n-title >
2022-05-26 21:24:55 -07:00
< div class = "btn-toolbar col col-md-auto" >
< button class = "btn btn-sm btn-outline-secondary me-2" ( click ) = " clearSelection ( ) " [ hidden ] = " selectedTasks . size = = 0 " >
< svg class = "sidebaricon" fill = "currentColor" >
< use xlink:href = "assets/bootstrap-icons.svg#x" / >
< / svg > < ng-container i18n > Clear selection< / ng-container >
< / button >
2022-11-11 14:32:18 -08:00
< button class = "btn btn-sm btn-outline-primary me-4" ( click ) = " dismissTasks ( ) " * ifPermissions = "'django_q.delete_task'" [ disabled ] = " tasksService . total = = 0 " >
2022-05-26 21:24:55 -07:00
< svg class = "sidebaricon" fill = "currentColor" >
< use xlink:href = "assets/bootstrap-icons.svg#check2-all" / >
< / svg > < ng-container i18n > {{dismissButtonText}}< / ng-container >
< / button >
< button class = "btn btn-sm btn-outline-primary" ( click ) = " tasksService . reload ( ) " >
2022-05-26 22:58:01 -07:00
< svg * ngIf = "!tasksService.loading" class = "sidebaricon" fill = "currentColor" >
2022-05-26 21:24:55 -07:00
< use xlink:href = "assets/bootstrap-icons.svg#arrow-clockwise" / >
2022-05-26 22:58:01 -07:00
< / svg >
< ng-container * ngIf = "tasksService.loading" >
< div class = "spinner-border spinner-border-sm fw-normal" role = "status" > < / div >
< div class = "visually-hidden" i18n > Loading...< / div >
< / ng-container > < ng-container i18n > Refresh< / ng-container >
2022-05-26 21:24:55 -07:00
< / button >
< / div >
2022-05-23 01:21:06 -07:00
< / app-page-header >
2022-05-26 21:24:55 -07:00
< ng-container * ngIf = "!tasksService.completedFileTasks && tasksService.loading" >
2022-05-23 01:21:06 -07:00
< div class = "spinner-border spinner-border-sm fw-normal ms-2 me-auto" role = "status" > < / div >
< div class = "visually-hidden" i18n > Loading...< / div >
< / ng-container >
< ng-template let-tasks = "tasks" # tasksTemplate >
< table class = "table table-striped align-middle border shadow-sm" >
< thead >
< tr >
2022-05-26 21:21:29 -07:00
< th scope = "col" >
2022-05-23 01:21:06 -07:00
< div class = "form-check" >
2022-05-26 21:24:55 -07:00
< input type = "checkbox" class = "form-check-input" id = "all-tasks" [ disabled ] = " currentTasks . length = = 0 " ( click ) = " toggleAll ( $ event ) ; $ event . stopPropagation ( ) ; " >
2022-05-23 01:21:06 -07:00
< label class = "form-check-label" for = "all-tasks" > < / label >
< / div >
< / th >
2022-05-26 22:15:56 -07:00
< th scope = "col" i18n > Name< / th >
< th scope = "col" class = "d-none d-lg-table-cell" i18n > Created< / th >
2022-06-06 01:39:45 -07:00
< th scope = "col" class = "d-none d-lg-table-cell" * ngIf = "activeTab != 'started' && activeTab != 'queued'" i18n > Results< / th >
2022-05-26 22:15:56 -07:00
< th scope = "col" class = "d-table-cell d-lg-none" i18n > Info< / th >
< th scope = "col" i18n > Actions< / th >
2022-05-23 01:21:06 -07:00
< / tr >
< / thead >
< tbody >
2022-05-27 10:27:42 -07:00
< ng-container * ngFor = "let task of tasks" >
< tr ( click ) = " toggleSelected ( task , $ event ) ; $ event . stopPropagation ( ) ; " >
2022-05-26 15:41:30 -07:00
< th >
2022-05-23 01:21:06 -07:00
< div class = "form-check" >
2022-05-26 21:24:55 -07:00
< input type = "checkbox" class = "form-check-input" id = "task{{task.id}}" [ checked ] = " selectedTasks . has ( task . id ) " ( click ) = " toggleSelected ( task , $ event ) ; $ event . stopPropagation ( ) ; " >
2022-05-23 01:21:06 -07:00
< label class = "form-check-label" for = "task{{task.id}}" > < / label >
< / div >
2022-05-26 15:41:30 -07:00
< / th >
2022-10-17 13:53:44 -07:00
< td class = "overflow-auto" > {{ task.task_file_name }}< / td >
2022-09-27 17:56:04 -07:00
< td class = "d-none d-lg-table-cell" > {{ task.date_created | customDate:'short' }}< / td >
2022-08-31 12:39:56 -07:00
< td class = "d-none d-lg-table-cell" * ngIf = "activeTab != 'started' && activeTab != 'queued'" >
2022-05-27 10:27:42 -07:00
< div * ngIf = "task.result.length > 50" class = "result" ( click ) = " expandTask ( task ) ; $ event . stopPropagation ( ) ; "
[ngbPopover]="resultPopover" popoverClass="shadow small mobile" triggers="mouseenter:mouseleave" container="body">
2022-05-26 15:41:30 -07:00
< span class = "small d-none d-md-inline-block font-monospace text-muted" > {{ task.result | slice:0:50 }}… < / span >
< / div >
2022-05-27 10:27:42 -07:00
< span * ngIf = "task.result.length <= 50" class = "small d-none d-md-inline-block font-monospace text-muted" > {{ task.result }}< / span >
< ng-template # resultPopover >
< pre class = "small mb-0" > {{ task.result | slice:0:300 }}< ng-container * ngIf = "task.result.length > 300" > … < / ng-container > < / pre >
< ng-container * ngIf = "task.result.length > 300" > < br / > < em > (< ng-container i18n > click for full output< / ng-container > )< / em > < / ng-container >
< / ng-template >
2022-05-26 22:15:56 -07:00
< / td >
< td class = "d-lg-none" >
2022-05-27 10:27:42 -07:00
< button class = "btn btn-link" ( click ) = " expandTask ( task ) ; $ event . stopPropagation ( ) ; " >
< svg fill = "currentColor" class = "" width = "1.2em" height = "1.2em" style = "vertical-align: text-top;" viewBox = "0 0 16 16" >
2022-05-26 22:15:56 -07:00
< use xlink:href = "assets/bootstrap-icons.svg#info-circle" / >
< / svg >
2022-05-27 10:27:42 -07:00
< / button >
2022-05-23 01:21:06 -07:00
< / td >
< td scope = "row" >
2022-09-27 20:50:26 -07:00
< div class = "btn-group" role = "group" >
2022-11-11 14:32:18 -08:00
< button class = "btn btn-sm btn-outline-secondary" ( click ) = " dismissTask ( task ) ; $ event . stopPropagation ( ) ; " * ifPermissions = "'django_q.delete_task'" >
2022-09-27 20:50:26 -07:00
< svg class = "sidebaricon" fill = "currentColor" >
< use xlink:href = "assets/bootstrap-icons.svg#check" / >
< / svg > < ng-container i18n > Dismiss< / ng-container >
< / button >
2022-11-11 14:32:18 -08:00
< div * ifPermissions = "'documents.view_document'" > <!-- TODO - This div breaks btn - group logic, may have to find a way to merge *ngIf and *ifPermissions -->
2022-11-11 18:33:04 +00:00
< button * ngIf = "task.related_document" class = "btn btn-sm btn-outline-primary" ( click ) = " dismissAndGo ( task ) ; $ event . stopPropagation ( ) ; " >
< svg class = "sidebaricon" fill = "currentColor" >
< use xlink:href = "assets/bootstrap-icons.svg#file-text" / >
< / svg > < ng-container i18n > Open Document< / ng-container >
< / button >
< / div >
2022-09-27 20:50:26 -07:00
< / div >
2022-05-23 01:21:06 -07:00
< / td >
< / tr >
2022-05-27 10:27:42 -07:00
< tr >
< td class = "p-0" [ class . border-0 ] = " expandedTask ! = task . id " colspan = "5" >
< pre # collapse = "ngbCollapse" [ ngbCollapse ] = " expandedTask ! = = task . id " class = "small mb-0" > < div class = "small p-1 p-lg-3 ms-lg-3" > {{ task.result }}< / div > < / pre >
< / td >
< / tr >
< / ng-container >
2022-05-23 01:21:06 -07:00
< / tbody >
< / table >
< / ng-template >
2022-05-26 21:24:55 -07:00
< ul ngbNav # nav = "ngbNav" [ ( activeId ) ] = " activeTab " class = "nav-tabs" >
2022-05-26 23:20:57 -07:00
< li ngbNavItem = "failed" >
< a ngbNavLink i18n > Failed < span * ngIf = "tasksService.failedFileTasks.length > 0" class = "badge bg-danger ms-1" > {{tasksService.failedFileTasks.length}}< / span > < / a >
2022-05-23 01:21:06 -07:00
< ng-template ngbNavContent >
2022-05-26 23:20:57 -07:00
< ng-container [ ngTemplateOutlet ] = " tasksTemplate " [ ngTemplateOutletContext ] = " { tasks:tasksService . failedFileTasks } " > < / ng-container >
2022-05-23 01:21:06 -07:00
< / ng-template >
< / li >
2022-05-26 21:24:55 -07:00
< li ngbNavItem = "completed" >
2022-05-26 23:20:57 -07:00
< a ngbNavLink i18n > Complete < span * ngIf = "tasksService.completedFileTasks.length > 0" class = "badge bg-secondary ms-1" > {{tasksService.completedFileTasks.length}}< / span > < / a >
2022-05-23 01:21:06 -07:00
< ng-template ngbNavContent >
2022-05-26 21:24:55 -07:00
< ng-container [ ngTemplateOutlet ] = " tasksTemplate " [ ngTemplateOutletContext ] = " { tasks:tasksService . completedFileTasks } " > < / ng-container >
2022-05-23 01:21:06 -07:00
< / ng-template >
< / li >
2022-06-06 01:39:45 -07:00
< li ngbNavItem = "started" >
< a ngbNavLink i18n > Started < span * ngIf = "tasksService.startedFileTasks.length > 0" class = "badge bg-secondary ms-1" > {{tasksService.startedFileTasks.length}}< / span > < / a >
2022-05-23 01:21:06 -07:00
< ng-template ngbNavContent >
2022-06-06 01:39:45 -07:00
< ng-container [ ngTemplateOutlet ] = " tasksTemplate " [ ngTemplateOutletContext ] = " { tasks:tasksService . startedFileTasks } " > < / ng-container >
< / ng-template >
< / li >
< li ngbNavItem = "queued" >
< a ngbNavLink i18n > Queued < span * ngIf = "tasksService.queuedFileTasks.length > 0" class = "badge bg-secondary ms-1" > {{tasksService.queuedFileTasks.length}}< / span > < / a >
< ng-template ngbNavContent >
< ng-container [ ngTemplateOutlet ] = " tasksTemplate " [ ngTemplateOutletContext ] = " { tasks:tasksService . queuedFileTasks } " > < / ng-container >
2022-05-23 01:21:06 -07:00
< / ng-template >
< / li >
< / ul >
< div [ ngbNavOutlet ] = " nav " > < / div >