From 5cd80545422bba855cc9a730a2e13cc9d982c34b Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 30 Nov 2017 10:51:13 +0100 Subject: Add ability to list jobs --- client/src/app/+admin/admin-routing.module.ts | 4 +- client/src/app/+admin/admin.module.ts | 11 ++++- client/src/app/+admin/jobs/index.ts | 1 + client/src/app/+admin/jobs/job.component.ts | 6 +++ client/src/app/+admin/jobs/job.routes.ts | 35 +++++++++++++++ client/src/app/+admin/jobs/jobs-list/index.ts | 1 + .../+admin/jobs/jobs-list/jobs-list.component.html | 18 ++++++++ .../+admin/jobs/jobs-list/jobs-list.component.ts | 50 ++++++++++++++++++++++ client/src/app/+admin/jobs/shared/index.ts | 1 + client/src/app/+admin/jobs/shared/job.service.ts | 30 +++++++++++++ client/src/app/core/menu/menu-admin.component.html | 5 +++ client/src/app/core/menu/menu-admin.component.ts | 4 ++ 12 files changed, 163 insertions(+), 3 deletions(-) create mode 100644 client/src/app/+admin/jobs/index.ts create mode 100644 client/src/app/+admin/jobs/job.component.ts create mode 100644 client/src/app/+admin/jobs/job.routes.ts create mode 100644 client/src/app/+admin/jobs/jobs-list/index.ts create mode 100644 client/src/app/+admin/jobs/jobs-list/jobs-list.component.html create mode 100644 client/src/app/+admin/jobs/jobs-list/jobs-list.component.ts create mode 100644 client/src/app/+admin/jobs/shared/index.ts create mode 100644 client/src/app/+admin/jobs/shared/job.service.ts (limited to 'client') diff --git a/client/src/app/+admin/admin-routing.module.ts b/client/src/app/+admin/admin-routing.module.ts index cd8b9bdef..7ef5c6105 100644 --- a/client/src/app/+admin/admin-routing.module.ts +++ b/client/src/app/+admin/admin-routing.module.ts @@ -8,6 +8,7 @@ import { FollowsRoutes } from './follows' import { UsersRoutes } from './users' import { VideoAbusesRoutes } from './video-abuses' import { VideoBlacklistRoutes } from './video-blacklist' +import { JobsRoutes } from './jobs/job.routes' const adminRoutes: Routes = [ { @@ -24,7 +25,8 @@ const adminRoutes: Routes = [ ...FollowsRoutes, ...UsersRoutes, ...VideoAbusesRoutes, - ...VideoBlacklistRoutes + ...VideoBlacklistRoutes, + ...JobsRoutes ] } ] diff --git a/client/src/app/+admin/admin.module.ts b/client/src/app/+admin/admin.module.ts index 3c6b7a793..c0b006e73 100644 --- a/client/src/app/+admin/admin.module.ts +++ b/client/src/app/+admin/admin.module.ts @@ -5,6 +5,9 @@ import { AdminRoutingModule } from './admin-routing.module' import { AdminComponent } from './admin.component' import { FollowersListComponent, FollowingAddComponent, FollowsComponent, FollowService } from './follows' import { FollowingListComponent } from './follows/following-list/following-list.component' +import { JobsComponent } from './jobs/job.component' +import { JobsListComponent } from './jobs/jobs-list/jobs-list.component' +import { JobService } from './jobs/shared/job.service' import { UserAddComponent, UserListComponent, UsersComponent, UserService, UserUpdateComponent } from './users' import { VideoAbuseListComponent, VideoAbusesComponent } from './video-abuses' import { VideoBlacklistComponent, VideoBlacklistListComponent } from './video-blacklist' @@ -33,7 +36,10 @@ import { VideoBlacklistComponent, VideoBlacklistListComponent } from './video-bl VideoBlacklistListComponent, VideoAbusesComponent, - VideoAbuseListComponent + VideoAbuseListComponent, + + JobsComponent, + JobsListComponent ], exports: [ @@ -42,7 +48,8 @@ import { VideoBlacklistComponent, VideoBlacklistListComponent } from './video-bl providers: [ FollowService, - UserService + UserService, + JobService ] }) export class AdminModule { } diff --git a/client/src/app/+admin/jobs/index.ts b/client/src/app/+admin/jobs/index.ts new file mode 100644 index 000000000..7b5271956 --- /dev/null +++ b/client/src/app/+admin/jobs/index.ts @@ -0,0 +1 @@ +export * from './' diff --git a/client/src/app/+admin/jobs/job.component.ts b/client/src/app/+admin/jobs/job.component.ts new file mode 100644 index 000000000..bc80c9a6a --- /dev/null +++ b/client/src/app/+admin/jobs/job.component.ts @@ -0,0 +1,6 @@ +import { Component } from '@angular/core' + +@Component({ + template: '' +}) +export class JobsComponent {} diff --git a/client/src/app/+admin/jobs/job.routes.ts b/client/src/app/+admin/jobs/job.routes.ts new file mode 100644 index 000000000..a7bf2b221 --- /dev/null +++ b/client/src/app/+admin/jobs/job.routes.ts @@ -0,0 +1,35 @@ +import { Routes } from '@angular/router' + +import { UserRightGuard } from '../../core' +import { FollowingAddComponent } from './following-add' +import { UserRight } from '../../../../../shared' +import { FollowingListComponent } from './following-list/following-list.component' +import { JobsComponent } from './job.component' +import { JobsListComponent } from './jobs-list/jobs-list.component' + +export const JobsRoutes: Routes = [ + { + path: 'jobs', + component: JobsComponent, + canActivate: [ UserRightGuard ], + data: { + userRight: UserRight.MANAGE_JOBS + }, + children: [ + { + path: '', + redirectTo: 'list', + pathMatch: 'full' + }, + { + path: 'list', + component: JobsListComponent, + data: { + meta: { + title: 'Jobs list' + } + } + } + ] + } +] diff --git a/client/src/app/+admin/jobs/jobs-list/index.ts b/client/src/app/+admin/jobs/jobs-list/index.ts new file mode 100644 index 000000000..cf590a6f8 --- /dev/null +++ b/client/src/app/+admin/jobs/jobs-list/index.ts @@ -0,0 +1 @@ +export * from './jobs-list.component' diff --git a/client/src/app/+admin/jobs/jobs-list/jobs-list.component.html b/client/src/app/+admin/jobs/jobs-list/jobs-list.component.html new file mode 100644 index 000000000..a90267172 --- /dev/null +++ b/client/src/app/+admin/jobs/jobs-list/jobs-list.component.html @@ -0,0 +1,18 @@ +
+
+

Jobs list

+ + + + + + + + + + +
+
diff --git a/client/src/app/+admin/jobs/jobs-list/jobs-list.component.ts b/client/src/app/+admin/jobs/jobs-list/jobs-list.component.ts new file mode 100644 index 000000000..88fe259fb --- /dev/null +++ b/client/src/app/+admin/jobs/jobs-list/jobs-list.component.ts @@ -0,0 +1,50 @@ +import { Component } from '@angular/core' +import { NotificationsService } from 'angular2-notifications' +import { SortMeta } from 'primeng/primeng' +import { Job } from '../../../../../../shared/index' +import { RestPagination, RestTable } from '../../../shared' +import { JobService } from '../shared' +import { RestExtractor } from '../../../shared/rest/rest-extractor.service' + +@Component({ + selector: 'my-jobs-list', + templateUrl: './jobs-list.component.html', + styleUrls: [ ] +}) +export class JobsListComponent extends RestTable { + jobs: Job[] = [] + totalRecords = 0 + rowsPerPage = 10 + sort: SortMeta = { field: 'createdAt', order: 1 } + pagination: RestPagination = { count: this.rowsPerPage, start: 0 } + + constructor ( + private notificationsService: NotificationsService, + private restExtractor: RestExtractor, + private jobsService: JobService + ) { + super() + } + + protected loadData () { + this.jobsService + .getJobs(this.pagination, this.sort) + .map(res => this.restExtractor.applyToResultListData(res, this.formatJob.bind(this))) + .subscribe( + resultList => { + this.jobs = resultList.data + this.totalRecords = resultList.total + }, + + err => this.notificationsService.error('Error', err.message) + ) + } + + private formatJob (job: Job) { + const handlerInputData = JSON.stringify(job.handlerInputData) + + return Object.assign(job, { + handlerInputData + }) + } +} diff --git a/client/src/app/+admin/jobs/shared/index.ts b/client/src/app/+admin/jobs/shared/index.ts new file mode 100644 index 000000000..609439e5c --- /dev/null +++ b/client/src/app/+admin/jobs/shared/index.ts @@ -0,0 +1 @@ +export * from './job.service' diff --git a/client/src/app/+admin/jobs/shared/job.service.ts b/client/src/app/+admin/jobs/shared/job.service.ts new file mode 100644 index 000000000..49f1ab6f5 --- /dev/null +++ b/client/src/app/+admin/jobs/shared/job.service.ts @@ -0,0 +1,30 @@ +import { HttpClient, HttpParams } from '@angular/common/http' +import { Injectable } from '@angular/core' +import { SortMeta } from 'primeng/primeng' +import 'rxjs/add/operator/catch' +import 'rxjs/add/operator/map' +import { Observable } from 'rxjs/Observable' +import { ResultList } from '../../../../../../shared' +import { Job } from '../../../../../../shared/models/job.model' + +import { RestExtractor, RestPagination, RestService } from '../../../shared' + +@Injectable() +export class JobService { + private static BASE_JOB_URL = API_URL + '/api/v1/jobs' + + constructor ( + private authHttp: HttpClient, + private restService: RestService, + private restExtractor: RestExtractor + ) {} + + getJobs (pagination: RestPagination, sort: SortMeta): Observable> { + let params = new HttpParams() + params = this.restService.addRestGetParams(params, pagination, sort) + + return this.authHttp.get>(JobService.BASE_JOB_URL, { params }) + .map(res => this.restExtractor.convertResultListDateToHuman(res)) + .catch(err => this.restExtractor.handleError(err)) + } +} diff --git a/client/src/app/core/menu/menu-admin.component.html b/client/src/app/core/menu/menu-admin.component.html index eb2d0d69c..9857b2e3e 100644 --- a/client/src/app/core/menu/menu-admin.component.html +++ b/client/src/app/core/menu/menu-admin.component.html @@ -19,6 +19,11 @@ Video blacklist + + + + Jobs +
diff --git a/client/src/app/core/menu/menu-admin.component.ts b/client/src/app/core/menu/menu-admin.component.ts index 466da1aee..ea8d5f57c 100644 --- a/client/src/app/core/menu/menu-admin.component.ts +++ b/client/src/app/core/menu/menu-admin.component.ts @@ -26,4 +26,8 @@ export class MenuAdminComponent { hasVideoBlacklistRight () { return this.auth.getUser().hasRight(UserRight.MANAGE_VIDEO_BLACKLIST) } + + hasJobsRight () { + return this.auth.getUser().hasRight(UserRight.MANAGE_JOBS) + } } -- cgit v1.2.3