summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/clusters/components/crossplane_provider_stack.vue
blob: 6b99bb0950476481faaa19a2e0a20411d7a17f16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<script>
import { GlDropdown, GlDropdownItem, GlIcon } from '@gitlab/ui';
import { s__ } from '../../locale';

export default {
  name: 'CrossplaneProviderStack',
  components: {
    GlDropdown,
    GlDropdownItem,
    GlIcon,
  },
  props: {
    stacks: {
      type: Array,
      required: false,
      default: () => [
        {
          name: s__('Google Cloud Platform'),
          code: 'gcp',
        },
        {
          name: s__('Amazon Web Services'),
          code: 'aws',
        },
        {
          name: s__('Microsoft Azure'),
          code: 'azure',
        },
        {
          name: s__('Rook'),
          code: 'rook',
        },
      ],
    },
    crossplane: {
      type: Object,
      required: true,
    },
  },
  computed: {
    dropdownText() {
      const result = this.stacks.reduce((map, obj) => {
        // eslint-disable-next-line no-param-reassign
        map[obj.code] = obj.name;
        return map;
      }, {});
      const { stack } = this.crossplane;
      if (stack !== '') {
        return result[stack];
      }
      return s__('Select Stack');
    },
    validationError() {
      return this.crossplane.validationError;
    },
  },
  methods: {
    selectStack(stack) {
      this.$emit('set', stack);
    },
  },
};
</script>

<template>
  <div>
    <label>
      {{ s__('ClusterIntegration|Enabled stack') }}
    </label>
    <gl-dropdown
      :disabled="crossplane.installed"
      :text="dropdownText"
      toggle-class="dropdown-menu-toggle gl-field-error-outline"
      class="w-100"
      :class="{ 'gl-show-field-errors': validationError }"
    >
      <gl-dropdown-item v-for="stack in stacks" :key="stack.code" @click="selectStack(stack)">
        <span class="ml-1">{{ stack.name }}</span>
      </gl-dropdown-item>
    </gl-dropdown>
    <span v-if="validationError" class="gl-field-error">{{ validationError }}</span>
    <p class="form-text text-muted">
      {{ s__(`You must select a stack for configuring your cloud provider. Learn more about`) }}
      <a
        href="https://crossplane.io/docs/master/stacks-guide.html"
        target="_blank"
        rel="noopener noreferrer"
        >{{ __('Crossplane') }}
        <gl-icon name="external-link" class="vertical-align-middle" />
      </a>
    </p>
  </div>
</template>