ui/app/components/pod-dots/component.js

97 lines
2.6 KiB
JavaScript

import { computed, observer } from '@ember/object';
import { alias } from '@ember/object/computed';
import Component from '@ember/component';
import pagedArray from 'ember-cli-pagination/computed/paged-array';
import { matches } from 'shared/components/sortable-table/component';
import layout from './template';
export const searchFields = ['displayName', 'id:prefix', 'displayState', 'image', 'displayIp:ip'];
export default Component.extend({
layout,
pod: null,
pods: null,
searchText: null,
groupByPod: false,
paging: true,
sort: ['sortStr'],
searchFields,
tagName: '',
page: 1,
perPage: 120,
pageCountChanged: observer('indexFrom', 'filtered.length', function() {
// Go to the last page if we end up past the last page
let from = this.get('indexFrom');
let last = this.get('filtered.length');
var perPage = this.get('perPage');
if ( this.get('page') > 1 && from > last) {
let page = Math.ceil(last / perPage);
this.set('page', page);
}
}),
// Ignore the setting because these are tiny dots.
filtered: computed('pods.[]', 'pod', 'searchText', function() {
let out = [];
const pod = this.get('pod');
const pods = this.get('pods');
if ( pods ) {
out.pushObjects(pods.slice());
}
if ( pod ) {
out.pushObject(pod);
}
let searchFields = this.get('searchFields');
let searchText = (this.get('searchText') || '').trim().toLowerCase();
if ( searchText.length ) {
let searchTokens = searchText.split(/\s*[, ]\s*/);
for ( let i = out.length - 1 ; i >= 0 ; i-- ) {
let row = out[i].containers[0];
for ( let j = 0 ; j < searchTokens.length ; j++ ) {
let expect = true;
let token = searchTokens[j];
if ( token.substr(0, 1) === '!' ) {
expect = false;
token = token.substr(1);
}
if ( token && matches(searchFields, token, row) !== expect ) {
out.removeAt(i);
break;
}
}
}
}
return out;
}),
pagedContent: pagedArray('filtered', {
page: alias('parent.page'),
perPage: alias('parent.perPage')
}),
indexFrom: computed('page', 'perPage', function() {
var current = this.get('page');
var perPage = this.get('perPage');
return Math.max(0, 1 + perPage * (current - 1));
}),
indexTo: computed('indexFrom', 'perPage', 'filtered.length', function() {
return Math.min(this.get('filtered.length'), this.get('indexFrom') + this.get('perPage') - 1);
}),
});