mirror of https://github.com/hashicorp/consul
66 lines
2.2 KiB
JavaScript
66 lines
2.2 KiB
JavaScript
import Controller from '@ember/controller';
|
|
import { get, computed } from '@ember/object';
|
|
import { htmlSafe } from '@ember/string';
|
|
import WithHealthFiltering from 'consul-ui/mixins/with-health-filtering';
|
|
const max = function(arr, prop) {
|
|
return arr.reduce(function(prev, item) {
|
|
return Math.max(prev, get(item, prop));
|
|
}, 0);
|
|
};
|
|
const chunk = function(str, size) {
|
|
const num = Math.ceil(str.length / size);
|
|
const chunks = new Array(num);
|
|
for (let i = 0, o = 0; i < num; ++i, o += size) {
|
|
chunks[i] = str.substr(o, size);
|
|
}
|
|
return chunks;
|
|
};
|
|
const width = function(num) {
|
|
const str = num.toString();
|
|
const len = str.length;
|
|
const commas = chunk(str, 3).length - 1;
|
|
return commas * 4 + len * 10;
|
|
};
|
|
const widthDeclaration = function(num) {
|
|
return htmlSafe(`width: ${num}px`);
|
|
};
|
|
export default Controller.extend(WithHealthFiltering, {
|
|
filter: function(item, { s = '', status = '' }) {
|
|
return (
|
|
get(item, 'Name')
|
|
.toLowerCase()
|
|
.indexOf(s.toLowerCase()) !== -1 && item.hasStatus(status)
|
|
);
|
|
},
|
|
totalWidth: computed('{maxPassing,maxWarning,maxCritical}', function() {
|
|
const PADDING = 32 * 3 + 13;
|
|
return ['maxPassing', 'maxWarning', 'maxCritical'].reduce((prev, item) => {
|
|
return prev + width(get(this, item));
|
|
}, PADDING);
|
|
}),
|
|
thWidth: computed('totalWidth', function() {
|
|
return widthDeclaration(get(this, 'totalWidth'));
|
|
}),
|
|
remainingWidth: computed('totalWidth', function() {
|
|
return htmlSafe(`width: calc(50% - ${Math.round(get(this, 'totalWidth') / 2)}px)`);
|
|
}),
|
|
maxPassing: computed('items', function() {
|
|
return max(get(this, 'items'), 'ChecksPassing');
|
|
}),
|
|
maxWarning: computed('items', function() {
|
|
return max(get(this, 'items'), 'ChecksWarning');
|
|
}),
|
|
maxCritical: computed('items', function() {
|
|
return max(get(this, 'items'), 'ChecksCritical');
|
|
}),
|
|
passingWidth: computed('maxPassing', function() {
|
|
return widthDeclaration(width(get(this, 'maxPassing')));
|
|
}),
|
|
warningWidth: computed('maxWarning', function() {
|
|
return widthDeclaration(width(get(this, 'maxWarning')));
|
|
}),
|
|
criticalWidth: computed('maxCritical', function() {
|
|
return widthDeclaration(width(get(this, 'maxCritical')));
|
|
}),
|
|
});
|