Welcome to mirror list, hosted at ThFree Co, Russian Federation.

index.js « access_tokens « javascripts « assets « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: f0c1b415157ad9360021c701ddf2004c5dd35741 (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
123
124
125
126
127
import Vue from 'vue';

import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
import { parseRailsFormFields } from '~/lib/utils/forms';
import { __, sprintf } from '~/locale';

import AccessTokenTableApp from './components/access_token_table_app.vue';
import ExpiresAtField from './components/expires_at_field.vue';
import NewAccessTokenApp from './components/new_access_token_app.vue';
import TokensApp from './components/tokens_app.vue';
import { FEED_TOKEN, INCOMING_EMAIL_TOKEN, STATIC_OBJECT_TOKEN } from './constants';

export const initAccessTokenTableApp = () => {
  const el = document.querySelector('#js-access-token-table-app');

  if (!el) {
    return null;
  }

  const {
    accessTokenType,
    accessTokenTypePlural,
    initialActiveAccessTokens: initialActiveAccessTokensJson,
    noActiveTokensMessage: noTokensMessage,
  } = el.dataset;

  // Default values
  const noActiveTokensMessage =
    noTokensMessage ||
    sprintf(__('This user has no active %{accessTokenTypePlural}.'), { accessTokenTypePlural });
  const showRole = 'showRole' in el.dataset;

  const initialActiveAccessTokens = convertObjectPropsToCamelCase(
    JSON.parse(initialActiveAccessTokensJson),
    {
      deep: true,
    },
  );

  return new Vue({
    el,
    name: 'AccessTokenTableRoot',
    provide: {
      accessTokenType,
      accessTokenTypePlural,
      initialActiveAccessTokens,
      noActiveTokensMessage,
      showRole,
    },
    render(h) {
      return h(AccessTokenTableApp);
    },
  });
};

export const initExpiresAtField = () => {
  const el = document.querySelector('.js-access-tokens-expires-at');

  if (!el) {
    return null;
  }

  const { expiresAt: inputAttrs } = parseRailsFormFields(el);
  const { minDate, maxDate, defaultDateOffset, description } = el.dataset;

  return new Vue({
    el,
    render(h) {
      return h(ExpiresAtField, {
        props: {
          inputAttrs,
          minDate: minDate ? new Date(minDate) : undefined,
          maxDate: maxDate ? new Date(maxDate) : undefined,
          defaultDateOffset: defaultDateOffset ? Number(defaultDateOffset) : undefined,
          description,
        },
      });
    },
  });
};

export const initNewAccessTokenApp = () => {
  const el = document.querySelector('#js-new-access-token-app');

  if (!el) {
    return null;
  }

  const { accessTokenType } = el.dataset;

  return new Vue({
    el,
    name: 'NewAccessTokenRoot',
    provide: {
      accessTokenType,
    },
    render(h) {
      return h(NewAccessTokenApp);
    },
  });
};

export const initTokensApp = () => {
  const el = document.getElementById('js-tokens-app');

  if (!el) return false;

  const tokensData = convertObjectPropsToCamelCase(JSON.parse(el.dataset.tokensData), {
    deep: true,
  });

  const tokenTypes = {
    [FEED_TOKEN]: tokensData[FEED_TOKEN],
    [INCOMING_EMAIL_TOKEN]: tokensData[INCOMING_EMAIL_TOKEN],
    [STATIC_OBJECT_TOKEN]: tokensData[STATIC_OBJECT_TOKEN],
  };

  return new Vue({
    el,
    provide: {
      tokenTypes,
    },
    render(createElement) {
      return createElement(TokensApp);
    },
  });
};