summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/projects/gke_cluster_dropdowns/components/gke_zone_dropdown.vue
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/projects/gke_cluster_dropdowns/components/gke_zone_dropdown.vue')
-rw-r--r--app/assets/javascripts/projects/gke_cluster_dropdowns/components/gke_zone_dropdown.vue73
1 files changed, 11 insertions, 62 deletions
diff --git a/app/assets/javascripts/projects/gke_cluster_dropdowns/components/gke_zone_dropdown.vue b/app/assets/javascripts/projects/gke_cluster_dropdowns/components/gke_zone_dropdown.vue
index f27cee3bf07..35220d8d960 100644
--- a/app/assets/javascripts/projects/gke_cluster_dropdowns/components/gke_zone_dropdown.vue
+++ b/app/assets/javascripts/projects/gke_cluster_dropdowns/components/gke_zone_dropdown.vue
@@ -1,54 +1,19 @@
<script>
-import _ from 'underscore';
import { s__ } from '~/locale';
import { mapState, mapGetters, mapActions } from 'vuex';
-import LoadingIcon from '~/vue_shared/components/loading_icon.vue';
-import DropdownSearchInput from '~/vue_shared/components/dropdown/dropdown_search_input.vue';
-import DropdownHiddenInput from '~/vue_shared/components/dropdown/dropdown_hidden_input.vue';
-import DropdownButton from '~/vue_shared/components/dropdown/dropdown_button.vue';
-import store from '../stores';
+import gcpDropdownMixin from './gcp_dropdown_mixin';
export default {
name: 'GkeZoneDropdown',
- store,
- components: {
- LoadingIcon,
- DropdownButton,
- DropdownSearchInput,
- DropdownHiddenInput,
- },
- props: {
- fieldId: {
- type: String,
- required: true,
- },
- fieldName: {
- type: String,
- required: true,
- },
- defaultValue: {
- type: String,
- required: false,
- default: '',
- },
- },
- data() {
- return {
- isLoading: false,
- hasErrors: false,
- searchQuery: '',
- };
- },
+ mixins: [gcpDropdownMixin],
computed: {
- ...mapState(['selectedProject', 'selectedZone', 'zones']),
+ ...mapState(['selectedProject', 'selectedZone']),
+ ...mapState({ items: 'zones' }),
...mapGetters(['hasProject']),
isDisabled() {
return !this.hasProject;
},
- results() {
- return this.zones.filter(item => item.name.toLowerCase().indexOf(this.searchQuery) > -1);
- },
toggleText() {
if (this.isLoading) {
return s__('ClusterIntegration|Fetching zones');
@@ -71,33 +36,17 @@ export default {
},
watch: {
selectedProject() {
- this.fetchZones();
- },
- },
- methods: {
- ...mapActions(['setZone', 'getZones']),
- fetchZones() {
this.isLoading = true;
this.getZones()
- .then(() => {
- if (this.defaultValue) {
- const zoneToSelect = _.find(this.zones, item => item.name === this.defaultValue);
-
- if (zoneToSelect) {
- this.setZone(zoneToSelect.name);
- }
- }
-
- this.isLoading = false;
- this.hasErrors = false;
- })
- .catch(() => {
- this.isLoading = false;
- this.hasErrors = true;
- });
+ .then(this.fetchSuccessHandler)
+ .catch(this.fetchFailureHandler);
},
},
+ methods: {
+ ...mapActions(['getZones']),
+ ...mapActions({ setItem: 'setZone' }),
+ },
};
</script>
@@ -130,7 +79,7 @@ export default {
v-for="result in results"
:key="result.id"
>
- <button @click.prevent="setZone(result.name)">
+ <button @click.prevent="setItem(result.name)">
{{ result.name }}
</button>
</li>