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