mirror of https://github.com/rancher/ui.git
87 lines
2.5 KiB
JavaScript
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());
|
|
},
|
|
|
|
});
|