summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/visual_review_toolbar/components/mr_id.js
blob: f51e9631dd2dc983d9686e63325dc878ae7906c3 (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
import { nextView } from '../store';
import { MR_ID, MR_ID_BUTTON, localStorage } from '../shared';
import { clearNote, postError } from './note';
import { rememberBox, submitButton } from './form_elements';
import { selectForm, selectMrBox, selectRemember } from './utils';
import { addForm } from './wrapper';

/* eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings */
const mrLabel = `Enter your merge request ID`;
/* eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings */
const mrRememberText = `Remember this number`;

const mrForm = `
    <div>
      <label for="${MR_ID}" class="gitlab-label">${mrLabel}</label>
      <input class="gitlab-input" type="text" pattern="[1-9][0-9]*" id="${MR_ID}" name="${MR_ID}" placeholder="e.g., 321" aria-required="true">
    </div>
    ${rememberBox(mrRememberText)}
    ${submitButton(MR_ID_BUTTON)}
`;

const storeMR = (id, state) => {
  const rememberMe = selectRemember().checked;

  if (rememberMe) {
    localStorage.setItem('mergeRequestId', id);
  }

  state.mergeRequestId = id;
};

const getFormError = (mrNumber, form) => {
  if (!mrNumber) {
    /* eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings */
    return 'Please enter your merge request ID number.';
  }

  if (!form.checkValidity()) {
    /* eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings */
    return 'Please remove any non-number values from the field.';
  }

  return null;
};

const addMr = state => {
  // Clear any old errors
  clearNote(MR_ID);

  const mrNumber = selectMrBox().value;
  const form = selectForm();
  const formError = getFormError(mrNumber, form);

  if (formError) {
    postError(formError, MR_ID);
    return;
  }

  storeMR(mrNumber, state);
  addForm(nextView(state, MR_ID));
};

export { addMr, mrForm, storeMR };