blob: 395e635c47b145ddc5fbaa0d455c35e9397b309f [file] [log] [blame]
miramurali23afc8a792019-06-17 13:07:24 -05001window.angular && (function(angular) {
2 'use strict';
3
4 /**
5 * Username validator
6 *
7 * Checks if entered username is a duplicate
8 * Provide existingUsernames scope that should be an array of
9 * existing usernames
10 *
11 * <input username-validator existing-usernames="[]"/>
12 *
13 */
14 angular.module('app.accessControl')
15 .directive('usernameValidator', function() {
16 return {
17 restrict: 'A', require: 'ngModel', scope: {existingUsernames: '='},
18 link: function(scope, element, attrs, controller) {
19 if (scope.existingUsernames === undefined) {
20 return;
21 }
22 controller.$validators.duplicateUsername =
23 (modelValue, viewValue) => {
24 const enteredUsername = modelValue || viewValue;
25 const matchedExisting = scope.existingUsernames.find(
26 (username) => username === enteredUsername);
27 if (matchedExisting) {
28 return false;
29 } else {
30 return true;
31 }
32 };
33 element.on('blur', () => {
34 controller.$validate();
35 });
36 }
37 }
38 });
39})(window.angular);