ui/lib/shared/addon/components/cluster-ribbon-nav/component.js

87 lines
2.5 KiB
JavaScript

import Component from '@ember/component';
import layout from './template';
import C from 'ui/utils/constants';
import { inject as service } from '@ember/service';
import { computed, get, set } from '@ember/object';
export default Component.extend({
prefs: service(),
layout,
tagName: 'section',
classNames: ['recent-clusters'],
activeClusterProvider: null,
allActiveClusterProviders: null,
init() {
this._super(...arguments);
this.initRecentClusters();
},
actions: {
removeRecent(clusterName) {
let recentClusters = get(this, `prefs.${ C.PREFS.RECENT_CLUSTERS }`) || [];
recentClusters.removeObject(clusterName);
set(this, `prefs.${ C.PREFS.RECENT_CLUSTERS }`, recentClusters);
}
},
recentClusterProviders: computed(`prefs.${ C.PREFS.RECENT_CLUSTERS }`, function() {
let recentProviders = get(this, `prefs.${ C.PREFS.RECENT_CLUSTERS }`) || [];
let { allActiveClusterProviders } = this;
let out = recentProviders.map((provider) => {
return allActiveClusterProviders.findBy('name', provider);
})
return out;
}),
clusterDriverError() {
throw new Error('clusterDriverError action is required!');
},
initRecentClusters() {
let { allActiveClusterProviders } = this;
let recentClusters = get(this, `prefs.${ C.PREFS.RECENT_CLUSTERS }`) ? get(this, `prefs.${ C.PREFS.RECENT_CLUSTERS }`).slice() : [];
let activeClusterProvider = get(this, 'activeClusterProvider');
let providerName = activeClusterProvider ? get(activeClusterProvider, 'name') : null;
let activeRecentClusters = recentClusters.filter((rc) => {
if (allActiveClusterProviders.findBy('name', rc)) {
return true;
}
return false;
});
if (providerName) {
if (activeRecentClusters.includes(providerName)) {
activeRecentClusters = activeRecentClusters.removeObject(providerName);
activeRecentClusters.unshiftObject(providerName);
} else {
if (activeRecentClusters.length === 5) {
activeRecentClusters.pop();
activeRecentClusters.unshiftObject(providerName);
} else {
activeRecentClusters.unshiftObject(providerName);
}
}
} else {
this.clusterDriverError();
}
if (activeRecentClusters.uniq().length > 5) {
activeRecentClusters = activeRecentClusters.slice(0, 5);
}
set(this, `prefs.${ C.PREFS.RECENT_CLUSTERS }`, activeRecentClusters.uniq());
},
});