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

new.js « users « admin « javascripts « assets « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 33565bfc14f349bf7aeee4d4e25b97cc0eb8274d (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
const DATA_ATTR_REGEX_PATTERN = 'data-user-internal-regex-pattern';
const DATA_ATTR_REGEX_OPTIONS = 'data-user-internal-regex-options';
export const ID_USER_EXTERNAL = 'user_external';
export const ID_WARNING = 'warning_external_automatically_set';
export const ID_USER_EMAIL = 'user_email';

const getAttributeValue = (attr) => document.querySelector(`[${attr}]`)?.getAttribute(attr);

const getRegexPattern = () => getAttributeValue(DATA_ATTR_REGEX_PATTERN);

const getRegexOptions = () => getAttributeValue(DATA_ATTR_REGEX_OPTIONS);

export const setupInternalUserRegexHandler = () => {
  const regexPattern = getRegexPattern();

  if (!regexPattern) {
    return;
  }

  const regexOptions = getRegexOptions();
  const elExternal = document.getElementById(ID_USER_EXTERNAL);
  const elWarningMessage = document.getElementById(ID_WARNING);
  const elUserEmail = document.getElementById(ID_USER_EMAIL);

  const isEmailInternal = (email) => {
    const regex = new RegExp(regexPattern, regexOptions);
    return regex.test(email);
  };

  const setExternalCheckbox = (email) => {
    const isChecked = elExternal.checked;

    if (isEmailInternal(email)) {
      if (isChecked) {
        elExternal.checked = false;
        elWarningMessage.classList.remove('hidden');
      }
    } else if (!isChecked) {
      elExternal.checked = true;
      elWarningMessage.classList.add('hidden');
    }
  };

  const setupListeners = () => {
    elUserEmail.addEventListener('input', (event) => {
      setExternalCheckbox(event.target.value);
    });

    elExternal.addEventListener('change', () => {
      elWarningMessage.classList.add('hidden');
    });
  };

  setupListeners();
};