summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/error_tracking_settings/components/error_tracking_form.vue
blob: 51de7808152495314bcc6d9f40acf79ce72b6a8b (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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<script>
import { mapActions, mapState } from 'vuex';
import Icon from '~/vue_shared/components/icon.vue';

export default {
  components: { Icon },
  props: {
    listProjectsEndpoint: {
      type: String,
      required: true,
    },
  },
  computed: {
    ...mapState({
      showError: state => state.connectError,
      showCheck: state => state.connectSuccessful,
    }),
    apiHost: {
      get() {
        return this.$store.state.apiHost;
      },
      set(apiHost) {
        this.updateApiHost(apiHost);
      },
    },
    enabled: {
      get() {
        return this.$store.state.enabled;
      },
      set(enabled) {
        this.updateEnabled(enabled);
      },
    },
    token: {
      get() {
        return this.$store.state.token;
      },
      set(token) {
        this.updateToken(token);
      },
    },
  },
  methods: {
    ...mapActions(['fetchProjects', 'updateApiHost', 'updateToken', 'updateEnabled']),
    handleConnectClick() {
      this.fetchProjects({
        listProjectsEndpoint: this.listProjectsEndpoint,
      });
    },
  },
};
</script>

<template>
  <div>
    <div class="form-check form-group">
      <input
        id="error-tracking-enabled"
        v-model="enabled"
        class="form-check-input"
        type="checkbox"
      />
      <label class="form-check-label" for="error-tracking-enabled">{{
        s__('ErrorTracking|Active')
      }}</label>
    </div>
    <div class="form-group">
      <label class="label-bold" for="error-tracking-api-host">{{
        s__('ErrorTracking|Sentry API URL')
      }}</label>
      <div class="row">
        <div class="col-8 col-md-9 gl-pr-0">
          <input
            id="error-tracking-api-host"
            v-model="apiHost"
            class="form-control"
            placeholder="https://mysentryserver.com"
          />
        </div>
      </div>
      <p class="form-text text-muted">
        {{ s__('ErrorTracking|Find your hostname in your Sentry account settings page') }}
      </p>
    </div>
    <div class="form-group" :class="{ 'gl-show-field-errors': showError }">
      <label class="label-bold" for="error-tracking-token">{{
        s__('ErrorTracking|Auth Token')
      }}</label>
      <div class="row">
        <div class="col-8 col-md-9 gl-pr-0">
          <input
            id="error-tracking-token"
            v-model="token"
            class="form-control form-control-inline gl-field-error-outline"
          />
        </div>
        <div class="col-4 col-md-3 gl-pl-0">
          <button
            class="btn prepend-left-5"
            data-qa-id="error-tracking-connect"
            @click="handleConnectClick"
          >
            {{ s__('ErrorTracking|Connect') }}
          </button>
          <icon
            v-show="showCheck"
            class="prepend-left-5 text-success align-middle"
            data-qa-id="error-tracking-connect-success"
            :aria-label="__('Projects Successfully Retrieved')"
            name="check-circle"
          />
        </div>
      </div>
      <p v-if="showError" class="gl-field-error">
        {{ s__('ErrorTracking|Connection has failed. Re-check Auth Token and try again.') }}
      </p>
      <p v-else class="form-text text-muted">
        {{ __("After adding your Auth Token, use the 'Connect' button to load projects") }}
      </p>
    </div>
  </div>
</template>