Commit a2dbdb88 authored by Filipa Lacerda's avatar Filipa Lacerda

Fix tab filtering and counting

parent 9a7fa3b6
...@@ -16,14 +16,21 @@ $(() => { ...@@ -16,14 +16,21 @@ $(() => {
gl.EnvironmentsListApp.$destroy(true); gl.EnvironmentsListApp.$destroy(true);
} }
const filterEnvironments = (environments = [], filter = "") => {
return environments.filter((env) => { const filterState = (state) => (environment) => environment.state === state && environment;
if (env.children) {
return env.children.filter((child) => child.state === filter).length; // recursiveMap :: (Function, Array) -> Array
} else { const recursiveMap = (fn, arr) => {
return env.state === filter; return arr.map((item) => {
}; if (!item.children) { return fn(item); }
});
const filteredChildren = recursiveMap(fn, item.children).filter(Boolean);
if (filteredChildren.length) {
item.children = filteredChildren;
return item;
}
}).filter(Boolean);
}; };
gl.EnvironmentsListApp = new Vue({ gl.EnvironmentsListApp = new Vue({
...@@ -43,15 +50,15 @@ $(() => { ...@@ -43,15 +50,15 @@ $(() => {
computed: { computed: {
filteredEnvironments () { filteredEnvironments () {
return filterEnvironments(this.state.environments, this.visibility); return recursiveMap(filterState(this.visibility), this.state.environments);
}, },
countStopped () { countStopped () {
return filterEnvironments(this.state.environments, 'stopped').length;
}, },
countAvailable () { countAvailable () {
return filterEnvironments(this.state.environments, 'available').length; // return recursiveMap(filterState('available'), this.state.environments).length;
} }
}, },
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
create () { create () {
this.state.environments = []; this.state.environments = [];
this.state.stoppedCounter = 0;
this.state.availableCounter = 0;
}, },
/** /**
...@@ -42,6 +44,10 @@ ...@@ -42,6 +44,10 @@
* @returns {Array} Tree structured array with the received environments. * @returns {Array} Tree structured array with the received environments.
*/ */
storeEnvironments(environments = []) { storeEnvironments(environments = []) {
this.state.stoppedCounter = this.countByState(environments, 'stopped');
this.state.availableCounter = this.countByState(environments, 'available');
const environmentsTree = environments.reduce((acc, environment) => { const environmentsTree = environments.reduce((acc, environment) => {
if (environment.last_deployment) { if (environment.last_deployment) {
...@@ -59,15 +65,14 @@ ...@@ -59,15 +65,14 @@
if (environment.environment_type !== null) { if (environment.environment_type !== null) {
const occurs = acc.find((element, index, array) => { const occurs = acc.find((element, index, array) => {
return element.environment_type === environment.environment_type; return element.children && element.name === environment.environment_type;
}); });
environment["vue-isChildren"] = true; environment["vue-isChildren"] = true;
if (occurs !== undefined) { if (occurs !== undefined) {
acc[acc.indexOf(occurs)].children.push(environment); acc[acc.indexOf(occurs)].children.push(environment);
acc[acc.indexOf(occurs)].children.push(environment).sort(this.sortByName) acc[acc.indexOf(occurs)].children.sort(this.sortByName)
} else { } else {
acc.push({ acc.push({
name: environment.environment_type, name: environment.environment_type,
...@@ -88,6 +93,18 @@ ...@@ -88,6 +93,18 @@
return environmentsTree; return environmentsTree;
}, },
/**
* Given an array of environments, returns the number of environments
* that have the given state.
*
* @param {Array} environments
* @param {String} state
* @returns {Number}
*/
countByState(environments, state) {
return environments.filter((env) => env.state === state).length;
},
/** /**
* Sorts the two objects provided by their name. * Sorts the two objects provided by their name.
* *
......
...@@ -12,13 +12,13 @@ ...@@ -12,13 +12,13 @@
= link_to project_environments_path(@project) do = link_to project_environments_path(@project) do
Available Available
%span.badge.js-available-environments-count %span.badge.js-available-environments-count
{{countAvailable}} {{state.availableCounter}}
%li{class: ('active' if @scope == 'stopped')} %li{class: ('active' if @scope == 'stopped')}
= link_to project_environments_path(@project, scope: :stopped) do = link_to project_environments_path(@project, scope: :stopped) do
Stopped Stopped
%span.badge.js-stopped-environments-count %span.badge.js-stopped-environments-count
{{countStopped}} {{state.stoppedCounter}}
- if can?(current_user, :create_environment, @project) && !@all_environments.blank? - if can?(current_user, :create_environment, @project) && !@all_environments.blank?
.nav-controls .nav-controls
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment