github.com/zoomfoo/nomad@v0.8.5-0.20180907175415-f28fd3a1a056/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 fuzzySearchProps: computed(() => ['name']), 29 fuzzySearchEnabled: true, 30 31 /** 32 Filtered jobs are those that match the selected namespace and aren't children 33 of periodic or parameterized jobs. 34 */ 35 filteredJobs: computed('model.[]', 'model.@each.parent', function() { 36 // Namespace related properties are ommitted from the dependent keys 37 // due to a prop invalidation bug caused by region switching. 38 const hasNamespaces = this.get('system.namespaces.length'); 39 const activeNamespace = this.get('system.activeNamespace.id') || 'default'; 40 41 return this.get('model') 42 .compact() 43 .filter(job => !hasNamespaces || job.get('namespace.id') === activeNamespace) 44 .filter(job => !job.get('parent.content')); 45 }), 46 47 listToSort: alias('filteredJobs'), 48 listToSearch: alias('listSorted'), 49 sortedJobs: alias('listSearched'), 50 51 isShowingDeploymentDetails: false, 52 53 actions: { 54 gotoJob(job) { 55 this.transitionToRoute('jobs.job', job.get('plainId')); 56 }, 57 }, 58 });