summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/error_tracking_settings/index.js
blob: 9da1d1be3aa840a6f11a0388ca60b677aa5c3154 (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
import Vue from 'vue';
import { createStore } from './store';
import ErrorTrackingSettings from './components/error_tracking_settings.vue';

const store = createStore();

const getInitialProject = dataset => {
  const {
    projectName: name,
    projectSlug: slug,
    projectOrganizationName: organizationName,
    projectOrganizationSlug: organizationSlug,
  } = dataset;
  if (slug) {
    return {
      id: `${organizationSlug}${slug}`,
      name,
      slug,
      organizationName,
      organizationSlug,
    };
  }
  return null;
};

export default () => {
  const formContainerEl = document.getElementsByClassName('js-error-tracking-form')[0];
  const {
    dataset: { apiHost, enabled, token, listProjectsEndpoint },
  } = formContainerEl;
  const operationsSettingsEndpoint = formContainerEl.getAttribute('action');
  const initialProject = getInitialProject(formContainerEl.dataset);

  // Set up initial store state from DOM
  store.dispatch('setInitialState', {
    apiHost,
    enabled: enabled === 'false' ? false : Boolean(enabled),
    token,
    project: initialProject,
  });

  return new Vue({
    el: formContainerEl,
    store,
    components: {
      ErrorTrackingSettings,
    },
    render(createElement) {
      return createElement(ErrorTrackingSettings, {
        props: {
          listProjectsEndpoint,
          operationsSettingsEndpoint,
        },
      });
    },
  });
};