summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/pages/sessions/new/length_validator.js
blob: 3d687ca08cc70163b01d1e23b4567141b82f4973 (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
import InputValidator from '../../../validators/input_validator';

const errorMessageClass = 'gl-field-error';

export default class LengthValidator extends InputValidator {
  constructor(opts = {}) {
    super();

    const container = opts.container || '';
    const validateLengthElements = document.querySelectorAll(`${container} .js-validate-length`);

    validateLengthElements.forEach(element =>
      element.addEventListener('input', this.eventHandler.bind(this)),
    );
  }

  eventHandler(event) {
    this.inputDomElement = event.target;
    this.inputErrorMessage = this.inputDomElement.parentElement.querySelector(
      `.${errorMessageClass}`,
    );

    const { value } = this.inputDomElement;
    const { maxLengthMessage, maxLength } = this.inputDomElement.dataset;

    this.errorMessage = maxLengthMessage;

    this.invalidInput = value.length > parseInt(maxLength, 10);

    this.setValidationStateAndMessage();
  }
}