Skip to content

Commit

Permalink
#110 Add a filter to jobs list
Browse files Browse the repository at this point in the history
  • Loading branch information
nadouani committed Jul 19, 2018
1 parent c11a543 commit ab9445c
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 84 deletions.
41 changes: 27 additions & 14 deletions www/src/app/pages/analyzers/analyzers.page.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,36 @@ <h1>Analyzers ({{$ctrl.pagination.total}})</h1>
<section class="analyzers-page content">
<div class="box box-primary paginable-page">
<div class="box-header">
<form ng-submit="$ctrl.applyFilters()">
<div class="table-toolbar">
<label class="form-control pull-left">Data Types</label>

<form class="form-inline table-toolbar" ng-submit="$ctrl.applyFilters()">
<div class="form-group">
<div>
<Label>Data Types</Label>
</div>
<multiselect class="pull-left mr-xs" ng-model="$ctrl.filters.dataType" options="$ctrl.datatypes" placeholder="Select" show-select-all="true"
show-unselect-all="true" classes-btn="($ctrl.filters.dataType.length > 0) ? 'btn-block btn-primary' : 'btn-default btn-block'">
</multiselect>

<label class="form-control pull-left">Analyzer</label>
<input type="text" class="form-control pull-left mr-xs" placeholder="Search for analyzer description" ng-model="$ctrl.filters.search">
<button class="pull-left btn btn-primary" type="submit">Search</button>
<button class="pull-left btn btn-clear text-danger ml-xxxs" type="button" ng-click="$ctrl.clearFilters()"><i class="fa fa-times-circle"></i> Clear</button>

<select class="ml-xxxs form-control pull-right" ng-model="$ctrl.pagination.pageSize" ng-change="$ctrl.load()" ng-options="v as (v + ' / page') for v in [10, 50, 100, 1000]"></select>
<ul class="pull-right" ng-show="$ctrl.pagination.total > $ctrl.pagination.pageSize" uib-pagination total-items="$ctrl.pagination.total"
ng-change="$ctrl.load()" ng-model="$ctrl.pagination.current" boundary-links="true" items-per-page="$ctrl.pagination.pageSize"
previous-text="&lsaquo;" next-text="&rsaquo;" first-text="&laquo;" last-text="&raquo;" max-size="3" rotate="false"></ul>
</div>
<div class="form-group">
<div>
<Label>Analyzer</Label>
</div>
<div>
<input type="text" class="form-control pull-left mr-xs" placeholder="Search for analyzer description" ng-model="$ctrl.filters.search">
<button class="btn btn-primary" type="submit">Search</button>
<button class="btn btn-clear text-danger ml-xxxs" type="button" ng-click="$ctrl.clearFilters()">
<i class="fa fa-times-circle"></i> Clear</button>
</div>
</div>
<div class="form-group pull-right">
<div>
<label>Page size</label>
</div>
<div>
<select class="form-control" ng-model="$ctrl.pagination.pageSize" ng-change="$ctrl.load()" ng-options="v as (v + ' / page') for v in [10, 50, 100, 1000]"></select>
<ul class="pull-right" ng-show="$ctrl.pagination.total > $ctrl.pagination.pageSize" uib-pagination total-items="$ctrl.pagination.total"
ng-change="$ctrl.load()" ng-model="$ctrl.pagination.current" boundary-links="true" items-per-page="$ctrl.pagination.pageSize"
previous-text="&lsaquo;" next-text="&rsaquo;" first-text="&laquo;" last-text="&raquo;" max-size="3" rotate="false"></ul>
</div>
</div>
</form>
</div>
Expand Down
38 changes: 23 additions & 15 deletions www/src/app/pages/jobs/jobs.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ export default class JobsController extends PageController {
$scope,
$state,
$interval,
AnalyzerService,
JobService,
SearchService,
NotificationService,
Expand Down Expand Up @@ -39,14 +38,16 @@ export default class JobsController extends PageController {
this.search = {
analyzerId: '',
data: '',
dataType: ''
dataType: '',
jobType: ''
};

this.state = this.localStorageService.get('jobs-page') || {
filters: {
search: null,
status: [],
dataType: [],
jobType: [],
analyzer: []
},
pagination: {
Expand Down Expand Up @@ -88,6 +89,15 @@ export default class JobsController extends PageController {
});
}

if (!_.isEmpty(this.filters.jobType)) {
criteria.push({
_in: {
_field: 'type',
_values: this.filters.jobType
}
});
}

if (!_.isEmpty(this.filters.analyzer)) {
criteria.push({
_in: {
Expand All @@ -97,13 +107,11 @@ export default class JobsController extends PageController {
});
}

return _.isEmpty(criteria)
? {}
: criteria.length === 1
? criteria[0]
: {
_and: criteria
};
return _.isEmpty(criteria) ? {} :
criteria.length === 1 ?
criteria[0] : {
_and: criteria
};
}

load(page) {
Expand All @@ -118,11 +126,11 @@ export default class JobsController extends PageController {
this.localStorageService.set('jobs-page', this.state);

this.SearchService.configure({
objectType: 'job',
filter: this.buildQuery(),
range: this.buildRange(),
sort: ['-createdAt']
})
objectType: 'job',
filter: this.buildQuery(),
range: this.buildRange(),
sort: ['-createdAt']
})
.search()
.then(response => {
this.jobs = response.data;
Expand All @@ -139,4 +147,4 @@ export default class JobsController extends PageController {
self.load(self.pagination.current);
}
}
}
}
22 changes: 9 additions & 13 deletions www/src/app/pages/jobs/jobs.module.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,11 @@ const jobsModule = angular
component: 'jobsPage',
resolve: {
datatypes: ($q, AnalyzerService) => {
let defer = $q.defer();

AnalyzerService.list()
.then(() => {
defer.resolve(AnalyzerService.getTypes());
})
.catch(err => defer.reject(err));

return defer.promise;
return AnalyzerService.list()
.then(() => $q.resolve(AnalyzerService.getTypes()))
.catch(err => $q.reject(err));
},
jobtypes: () => ['analyzer', 'responder'],
analyzers: AnalyzerService =>
AnalyzerService.list().then(analyzers =>
_.sortBy(
Expand All @@ -65,10 +60,10 @@ const jobsModule = angular
let defered = $q.defer();

JobService.report($stateParams.id).then(
function(response) {
function (response) {
defered.resolve(response.data);
},
function(response) {
function (response) {
$log.error('Error while getting job report');
defered.reject(response);
$state.go('main.jobs');
Expand All @@ -85,7 +80,8 @@ const jobsModule = angular
templateUrl: tpl,
bindings: {
datatypes: '<',
analyzers: '<'
analyzers: '<',
jobtypes: '<'
}
})
.component('jobsList', {
Expand All @@ -112,4 +108,4 @@ const jobsModule = angular
})
.service('JobService', jobService);

export default jobsModule;
export default jobsModule;
56 changes: 38 additions & 18 deletions www/src/app/pages/jobs/jobs.page.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,51 @@ <h1>Jobs History ({{$ctrl.pagination.total}})</h1>
<section class="jobs-page content">
<div class="box box-primary paginable-page">
<div class="box-header">
<!-- <h3 class="box-title">List of existing jobs ()</h3> -->
<form ng-submit="$ctrl.applyFilters()">
<div class="table-toolbar">
<label class="form-control pull-left">Data Types</label>

<form class="form-inline table-toolbar" ng-submit="$ctrl.applyFilters()">
<div class="form-group">
<div><Label>Data Types</Label></div>
<multiselect class="pull-left mr-xs" ng-model="$ctrl.filters.dataType" options="$ctrl.datatypes" placeholder="Select" show-select-all="true"
show-unselect-all="true" classes-btn="($ctrl.filters.dataType.length > 0) ? 'btn-block btn-primary' : 'btn-default btn-block'">
</multiselect>

<label class="form-control pull-left">Analyzers</label>
</div>
<div class="form-group">
<div>
<Label>Job Type</Label>
</div>
<multiselect class="pull-left mr-xs" ng-model="$ctrl.filters.jobType" options="$ctrl.jobtypes" placeholder="Select" show-select-all="true"
show-unselect-all="true" classes-btn="($ctrl.filters.jobType.length > 0) ? 'btn-block btn-primary' : 'btn-default btn-block'">
</multiselect>
</div>
<div class="form-group">
<div>
<Label>Analyzers</Label>
</div>
<multiselect class="pull-left mr-xs" ng-model="$ctrl.filters.analyzer" options="$ctrl.analyzers" id-prop="id" display-prop="name"
placeholder="Select" show-select-all="true" show-unselect-all="true" classes-btn="($ctrl.filters.analyzer.length > 0) ? 'btn-block btn-primary' : 'btn-default btn-block'">
</multiselect>

<label class="form-control pull-left">Observable</label>
<input type="text" class="form-control pull-left mr-xs" placeholder="Search for observable data" ng-model="$ctrl.filters.search">
<button class="pull-left btn btn-primary" type="submit">Search</button>
<button class="pull-left btn btn-clear text-danger ml-xxxs" type="button" ng-click="$ctrl.clearFilters()"><i class="fa fa-times-circle"></i> Clear</button>

<select class="ml-xxxs form-control pull-right" ng-model="$ctrl.pagination.pageSize" ng-change="$ctrl.load()" ng-options="v as (v + ' / page') for v in [10, 50, 100, 1000]"></select>
<ul class="pull-right" ng-show="$ctrl.pagination.total > $ctrl.pagination.pageSize" uib-pagination total-items="$ctrl.pagination.total"
ng-change="$ctrl.load()" ng-model="$ctrl.pagination.current" boundary-links="true" items-per-page="$ctrl.pagination.pageSize"
previous-text="&lsaquo;" next-text="&rsaquo;" first-text="&laquo;" last-text="&raquo;" max-size="3" rotate="false"></ul>
</div>
</form>
<div class="form-group">
<div>
<label>Observable</label>
</div>
<div>
<input type="text" class="form-control mr-xs" placeholder="Search for observable data" ng-model="$ctrl.filters.search">
<button class="btn btn-primary" type="submit">Search</button>
<button class="btn btn-clear text-danger ml-xxxs" type="button" ng-click="$ctrl.clearFilters()">
<i class="fa fa-times-circle"></i> Clear</button>
</div>
</div>
<div class="form-group pull-right">
<div><label>Page size</label></div>
<div>
<select class="form-control" ng-model="$ctrl.pagination.pageSize" ng-change="$ctrl.load()" ng-options="v as (v + ' / page') for v in [10, 50, 100, 1000]"></select>
<ul class="pull-right" ng-show="$ctrl.pagination.total > $ctrl.pagination.pageSize" uib-pagination total-items="$ctrl.pagination.total"
ng-change="$ctrl.load()" ng-model="$ctrl.pagination.current" boundary-links="true" items-per-page="$ctrl.pagination.pageSize"
previous-text="&lsaquo;" next-text="&rsaquo;" first-text="&laquo;" last-text="&raquo;" max-size="3" rotate="false"></ul>
</div>
</div>
</form>

</div>
<div class="box-body">
<jobs-list jobs="$ctrl.jobs" on-delete="$ctrl.load(1)"></jobs-list>
Expand Down
12 changes: 3 additions & 9 deletions www/src/app/pages/responders/responders.module.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,9 @@ const respondersModule = angular
component: 'respondersPage',
resolve: {
datatypes: ($q, ResponderService) => {
let defer = $q.defer();

ResponderService.list()
.then(() => {
defer.resolve(ResponderService.getTypes());
})
.catch(err => defer.reject(err));

return defer.promise;
return ResponderService.list()
.then(() => $q.resolve(ResponderService.getTypes()))
.catch(err => $q.reject(err));
}
},
data: {
Expand Down
42 changes: 27 additions & 15 deletions www/src/app/pages/responders/responders.page.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,36 @@ <h1>Responders ({{$ctrl.pagination.total}})</h1>
<section class="responders-page content">
<div class="box box-primary paginable-page">
<div class="box-header">
<form ng-submit="$ctrl.applyFilters()">
<div class="table-toolbar">
<label class="form-control pull-left">Data Types</label>

<form class="form-inline table-toolbar" ng-submit="$ctrl.applyFilters()">
<div class="form-group">
<div>
<Label>Data Types</Label>
</div>
<multiselect class="pull-left mr-xs" ng-model="$ctrl.filters.dataType" options="$ctrl.datatypes" placeholder="Select" show-select-all="true"
show-unselect-all="true" classes-btn="($ctrl.filters.dataType.length > 0) ? 'btn-block btn-primary' : 'btn-default btn-block'">
</multiselect>

<label class="form-control pull-left">Responder</label>
<input type="text" class="form-control pull-left mr-xs" placeholder="Search for responder description" ng-model="$ctrl.filters.search">
<button class="pull-left btn btn-primary" type="submit">Search</button>
<button class="pull-left btn btn-clear text-danger ml-xxxs" type="button" ng-click="$ctrl.clearFilters()">
<i class="fa fa-times-circle"></i> Clear</button>

<select class="ml-xxxs form-control pull-right" ng-model="$ctrl.pagination.pageSize" ng-change="$ctrl.load()" ng-options="v as (v + ' / page') for v in [10, 50, 100, 1000]"></select>
<ul class="pull-right" ng-show="$ctrl.pagination.total > $ctrl.pagination.pageSize" uib-pagination total-items="$ctrl.pagination.total"
ng-change="$ctrl.load()" ng-model="$ctrl.pagination.current" boundary-links="true" items-per-page="$ctrl.pagination.pageSize"
previous-text="&lsaquo;" next-text="&rsaquo;" first-text="&laquo;" last-text="&raquo;" max-size="3" rotate="false"></ul>
</div>
<div class="form-group">
<div>
<label>Responder</label>
</div>
<div>
<input type="text" class="form-control pull-left mr-xs" placeholder="Search for responder description" ng-model="$ctrl.filters.search">
<button class="btn btn-primary" type="submit">Search</button>
<button class="btn btn-clear text-danger ml-xxxs" type="button" ng-click="$ctrl.clearFilters()">
<i class="fa fa-times-circle"></i> Clear</button>
</div>
</div>
<div class="form-group pull-right">
<div>
<label>Page size</label>
</div>
<div>
<select class="form-control" ng-model="$ctrl.pagination.pageSize" ng-change="$ctrl.load()" ng-options="v as (v + ' / page') for v in [10, 50, 100, 1000]"></select>
<ul class="pull-right" ng-show="$ctrl.pagination.total > $ctrl.pagination.pageSize" uib-pagination total-items="$ctrl.pagination.total"
ng-change="$ctrl.load()" ng-model="$ctrl.pagination.current" boundary-links="true" items-per-page="$ctrl.pagination.pageSize"
previous-text="&lsaquo;" next-text="&rsaquo;" first-text="&laquo;" last-text="&raquo;" max-size="3" rotate="false"></ul>
</div>
</div>
</form>
</div>
Expand Down

0 comments on commit ab9445c

Please sign in to comment.