mirror of https://github.com/rancher/dashboard.git
101 lines
2.2 KiB
Vue
101 lines
2.2 KiB
Vue
<script>
|
|
import ResourceTable from '@/components/ResourceTable';
|
|
import { WORKLOAD_TYPES, SCHEMA } from '@/config/types';
|
|
import Loading from '@/components/Loading';
|
|
|
|
const schema = {
|
|
id: 'workload',
|
|
type: SCHEMA,
|
|
attributes: {
|
|
kind: 'Workload',
|
|
namespaced: true
|
|
},
|
|
metadata: { name: 'workload' },
|
|
};
|
|
|
|
export default {
|
|
name: 'ListWorkload',
|
|
components: { Loading, ResourceTable },
|
|
|
|
async fetch() {
|
|
let resources;
|
|
|
|
if ( this.allTypes ) {
|
|
resources = await Promise.all(Object.values(WORKLOAD_TYPES).map((type) => {
|
|
// You may not have RBAC to see some of the types
|
|
if ( !this.$store.getters['cluster/schemaFor'](type) ) {
|
|
return null;
|
|
}
|
|
|
|
return this.$store.dispatch('cluster/findAll', { type });
|
|
}));
|
|
} else {
|
|
const type = this.$route.params.resource;
|
|
|
|
if ( this.$store.getters['cluster/schemaFor'](type) ) {
|
|
const resource = await this.$store.dispatch('cluster/findAll', { type });
|
|
|
|
resources = [resource];
|
|
}
|
|
}
|
|
|
|
this.resources = resources;
|
|
},
|
|
|
|
data() {
|
|
return { resources: [] };
|
|
},
|
|
|
|
computed: {
|
|
allTypes() {
|
|
return this.$route.params.resource === schema.id;
|
|
},
|
|
|
|
schema() {
|
|
const { params:{ resource:type } } = this.$route;
|
|
|
|
if (type !== schema.id) {
|
|
return this.$store.getters['cluster/schemaFor'](type);
|
|
}
|
|
|
|
return schema;
|
|
},
|
|
|
|
rows() {
|
|
const out = [];
|
|
const allTypes = this.allTypes;
|
|
|
|
for ( const typeRows of this.resources ) {
|
|
if ( !typeRows ) {
|
|
continue;
|
|
}
|
|
|
|
for ( const row of typeRows ) {
|
|
if ( !allTypes || !row.metadata?.ownerReferences ) {
|
|
out.push(row);
|
|
}
|
|
}
|
|
}
|
|
|
|
return out;
|
|
}
|
|
},
|
|
|
|
typeDisplay() {
|
|
const { params:{ resource:type } } = this.$route;
|
|
let paramSchema = schema;
|
|
|
|
if (type !== schema.id) {
|
|
paramSchema = this.$store.getters['cluster/schemaFor'](type);
|
|
}
|
|
|
|
return this.$store.getters['type-map/labelFor'](paramSchema, 99);
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<Loading v-if="$fetchState.pending" />
|
|
<ResourceTable v-else :schema="schema" :rows="rows" />
|
|
</template>
|