dashboard/shell/edit/constraints.gatekeeper.sh.c.../NamespaceList.vue

79 lines
1.5 KiB
Vue

<script>
import { sortBy } from '@shell/utils/sort';
import { _EDIT } from '@shell/config/query-params';
import { NAMESPACE } from '@shell/config/types';
import LabeledSelect from '@shell/components/form/LabeledSelect';
export const NAMESPACE_FILTERS_HELPER = {
nonSystem(namespace) {
return !namespace.isSystem;
}
};
export default {
emits: ['update:value'],
components: { LabeledSelect },
props: {
value: {
type: Array,
default: null
},
mode: {
type: String,
default: _EDIT
},
namespaceFilter: {
type: Function,
default: (namespace) => true
},
addLabel: {
type: String,
default: null
},
label: {
type: String,
default: 'Namespace'
},
tooltip: {
type: String,
default: null
}
},
computed: {
namespaceOptions() {
const inStore = this.$store.getters['currentStore'](NAMESPACE);
const choices = this.$store.getters[`${ inStore }/all`](NAMESPACE);
return sortBy(
choices
.filter(this.namespaceFilter)
.map((obj) => {
return {
label: obj.nameDisplay,
value: obj.id
};
}),
'label'
);
}
}
};
</script>
<template>
<LabeledSelect
v-bind="$attrs"
:value="value"
:mode="mode"
:multiple="true"
:options="namespaceOptions"
:label="label"
:tooltip="tooltip"
:hover-tooltip="!!tooltip"
@update:value="(e) => $emit('update:value', e)"
/>
</template>