github.com/emate/nomad@v0.8.2-wo-binpacking/ui/app/controllers/jobs/index.js (about) 1 import { inject as service } from '@ember/service'; 2 import { alias } from '@ember/object/computed'; 3 import Controller, { inject as controller } from '@ember/controller'; 4 import { computed } from '@ember/object'; 5 import Sortable from 'nomad-ui/mixins/sortable'; 6 import Searchable from 'nomad-ui/mixins/searchable'; 7 8 export default Controller.extend(Sortable, Searchable, { 9 system: service(), 10 jobsController: controller('jobs'), 11 12 isForbidden: alias('jobsController.isForbidden'), 13 14 queryParams: { 15 currentPage: 'page', 16 searchTerm: 'search', 17 sortProperty: 'sort', 18 sortDescending: 'desc', 19 }, 20 21 currentPage: 1, 22 pageSize: 10, 23 24 sortProperty: 'modifyIndex', 25 sortDescending: true, 26 27 searchProps: computed(() => ['id', 'name']), 28 29 /** 30 Filtered jobs are those that match the selected namespace and aren't children 31 of periodic or parameterized jobs. 32 */ 33 filteredJobs: computed( 34 'model.[]', 35 'model.@each.parent', 36 'system.activeNamespace', 37 'system.namespaces.length', 38 function() { 39 const hasNamespaces = this.get('system.namespaces.length'); 40 const activeNamespace = this.get('system.activeNamespace.id') || 'default'; 41 42 return this.get('model') 43 .compact() 44 .filter(job => !hasNamespaces || job.get('namespace.id') === activeNamespace) 45 .filter(job => !job.get('parent.content')); 46 } 47 ), 48 49 listToSort: alias('filteredJobs'), 50 listToSearch: alias('listSorted'), 51 sortedJobs: alias('listSearched'), 52 53 isShowingDeploymentDetails: false, 54 55 actions: { 56 gotoJob(job) { 57 this.transitionToRoute('jobs.job', job.get('plainId')); 58 }, 59 60 refresh() { 61 this.send('refreshRoute'); 62 }, 63 }, 64 });