· 9 years ago · Mar 04, 2017, 08:14 PM
1<aura:component implements="force:lightningQuickActionWithoutHeader,force:hasRecordId" controller="LTNG_CaseStudyAuraCtrl">
2<!-- Public attributes -->
3<aura:attribute name="testUser" type="Test_User__c" default="{sobjectType: 'Test_User__c'}" access="global"/>
4<aura:attribute name="hasErrors" type="Boolean" description="Indicate whether there were failures or not" />
5<aura:attribute name="caseStudyName" type="String" />
6<aura:attribute name="recordId" type="String" description="Case Study id"/>
7
8<!-- "Private" attributes, for binding with input componets -->
9<aura:attribute name="firstName" type="String" />
10<aura:attribute name="lastName" type="String" />
11<aura:attribute name="nickName" type="String" />
12<aura:attribute name="email" type="String" />
13
14<aura:handler name="init" value="{!this}" action="{!c.init}" />
15<aura:handler event="c:LTNG_TestUserInputErrorsEvent" action="{!c.handleInputErrors}" />
16
17<div class="slds-page-header" role="banner">
18 <p class="slds-text-heading--label">Case Study</p>
19 <h1 class="slds-page-header__title slds-m-right-small slds-truncate slds-align-left" title="Case Study Title">{!v.caseStudyName}</h1>
20</div>
21<br/>
22
23<aura:if isTrue="{!v.hasErrors}">
24 <div class="userCreateError">
25 <ui:message title="Error" severity="error" closable="true">
26 Please review the error messages.
27 </ui:message>
28 </div>
29</aura:if>
30
31<div class="slds-form--stacked">
32 <c:LTNG_SldsInput label="first name" fieldName="firstName" value="{!v.testUser.firstName}" required="true" updateForm="{!c.updateNickname}" />
33 <c:LTNG_SldsInput label="last name" fieldName="lastName" value="{!v.testUser.lastName}" required="true" />
34 <c:LTNG_SldsInput label="nickname" fieldName="nickName" value="{!v.testUser.Nickname__c}" />
35 <c:LTNG_SldsInput label="user's email" fieldName="email" value="{!v.testUser.Email__c}" required="true" />
36 <c:LTNG_SldsInput label="user's password" fieldName="password" value="{!v.testUser.Password__c}" required="true" secret="true" />
37
38 <div class="slds-form-element">
39 <ui:button class="slds-button slds-button--neutral" press="{!c.cancel}" label="Cancel" />
40 <c:LTNG_SaveTestUserButton testUser="{!v.testUser}" />
41 </div>
42</div>
43
44<aura:component implements="force:hasRecordId" controller="LTNG_TestUserAuraCtrl">
45<aura:attribute name="testUser" type="Test_User__c" default="{sobjectType: 'Test_User__c'}" />
46<aura:attribute name="recordId" type="String" description="Case Study id"/>
47
48<aura:registerEvent name="testUserInputErrorsEvent" type="c:LTNG_TestUserInputErrorsEvent" />
49
50<ui:button class="slds-button slds-button--neutral" press="{!c.save}" label="Save User" />
51
52({
53save: function(component, event, helper) {
54 var isValid = helper.validatePassword(component, event, helper)
55 && helper.validateEmail(component, event, helper)
56
57 if (isValid) {
58 component.set('v.hasErrors', false);
59 helper.save(component, helper);
60 }
61 else {
62 component.set('v.hasErrors', true);
63 }
64}
65
66({
67save : function(component, helper) {
68 var testUser = component.get('v.testUser');
69
70 var action = component.get('c.save');
71 action.setParams({
72 'name' : testUser.firstName + ' ' + testUser.lastName,
73 'password' : testUser.password,
74 'email': testUser.email,
75 'nickname': testUser.nickName,
76 'caseStudyId' : component.get('v.recordId')
77 });
78 action.setCallback(this, function(response){
79 helper.saveResponseHandler(component, helper, action, response);
80 });
81 $A.enqueueAction(action);
82},
83
84saveResponseHandler: function(component, helper, action, response) {
85 var returnValue = response.getReturnValue();
86
87 var isValid = component.isValid();
88 var state = action.getState();
89
90 if (isValid && state === 'SUCCESS') {
91 helper.toastSuccess();
92 }
93 else {
94 console.error('There was a problem and the state is: ' + action.getState());
95 }
96},
97
98toastSuccess: function() {
99 var closeAction = $A.get('e.force:closeQuickAction');
100 if (closeAction) {
101 closeAction.fire();
102 }
103
104 var toastEvent = $A.get('e.force:showToast');
105 toastEvent.setParams({title: 'Success!', message: 'The test user has been created.'});
106 toastEvent.fire();
107 $A.get('e.force:refreshView').fire();
108},
109
110fireInputErrorEvent: function(inputField, message, value) {
111 var testUserInputErrorsEvent = $A.get('e.c:LTNG_TestUserInputErrorsEvent');
112 testUserInputErrorsEvent.setParams({
113 fieldName: inputField,
114 errorMessage: message ? (message + ' (value: ' + value + ')') : null
115 });
116 testUserInputErrorsEvent.fire();
117},
118
119validate: function(component, helper, inputField, testUserField, requirement, message) {
120 var value = component.get('v.testUser.' + testUserField);
121
122 var isValid = requirement(value);
123 if (!isValid) {
124 helper.fireInputErrorEvent(inputField, message, value);
125 }
126 return isValid;
127},
128
129validatePassword: function(component, event, helper) {
130 var isValid = validate(helper.valueIsDefined, 'You must enter a password.')
131 && validate(isCorrectLength, 'The password is the wrong length.')
132 && validate(hasAtLeastOneNumber, 'The password must contain at least one number.')
133 && validate(hasAtLeastOneLetter, 'The password must contain at least one letter.');
134
135 if (isValid){
136 helper.fireInputErrorEvent('password');
137 }
138
139 return isValid;
140
141 function isCorrectLength(value) {
142 return value.length >= 7 || value.length <= 15;
143 }
144
145 function hasAtLeastOneNumber(value) {
146 return value.search(/[0-9]+/) !== -1;
147 }
148
149 function hasAtLeastOneLetter(value) {
150 return value.search(/[a-zA-Z]+/) !== -1
151 }
152
153 function validate(requirement, message) {
154 return helper.validate(component, helper, 'password', 'Password__c', requirement, message);
155 }
156},
157
158validateEmail: function(component, event, helper) {
159 var isValid = validate(helper.valueIsDefined, 'You must enter an email.')
160 && validate(hasCorrectFormat, 'Email is not in the correct format.')
161 && validate(isGmail, 'Email must be a gmail account.');
162
163 if (isValid){
164 helper.fireInputErrorEvent('email');
165 }
166
167 return isValid;
168
169 function hasCorrectFormat(value) {
170 var re = /^(([^<>()[]\.,;:s@"]+(.[^<>()[]\.,;:s@"]+)*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;
171 return re.test(value);
172 }
173
174 function isGmail(value) {
175 var parts = value.split('@');
176 var domain = parts[parts.length - 1];
177 return domain.toLowerCase() === 'gmail.com';
178 }
179
180 function validate(requirement, message) {
181 return helper.validate(component, helper, 'email', 'Email__c', requirement, message);
182 }
183},
184
185valueIsDefined: function isDefined(value) {
186 return value !== undefined;
187}
188
189({
190save : function(component, helper) {
191 var testUser = component.get('v.testUser');
192
193 var action = component.get('c.save');
194 action.setParams({
195 'name' : testUser.firstName + ' ' + testUser.lastName,
196 'password' : testUser.password,
197 'email': testUser.email,
198 'nickname': testUser.nickName,
199 'caseStudyId' : component.get('v.recordId')
200 });
201 action.setCallback(this, function(response){
202 helper.saveResponseHandler(component, helper, action, response);
203 });
204 $A.enqueueAction(action);
205},
206
207saveResponseHandler: function(component, helper, action, response) {
208 var returnValue = response.getReturnValue();
209
210 var isValid = component.isValid();
211 var state = action.getState();
212
213 if (isValid && state === 'SUCCESS') {
214 helper.toastSuccess();
215 }
216 else {
217 console.error('There was a problem and the state is: ' + action.getState());
218 }
219},
220
221toastSuccess: function() {
222 var closeAction = $A.get('e.force:closeQuickAction');
223 if (closeAction) {
224 closeAction.fire();
225 }
226
227 var toastEvent = $A.get('e.force:showToast');
228 toastEvent.setParams({title: 'Success!', message: 'The test user has been created.'});
229 toastEvent.fire();
230 $A.get('e.force:refreshView').fire();
231},
232
233fireInputErrorEvent: function(inputField, message, value) {
234 var testUserInputErrorsEvent = $A.get('e.c:LTNG_TestUserInputErrorsEvent');
235 testUserInputErrorsEvent.setParams({
236 fieldName: inputField,
237 errorMessage: message ? (message + ' (value: ' + value + ')') : null
238 });
239 testUserInputErrorsEvent.fire();
240},
241
242validate: function(component, helper, inputField, testUserField, requirement, message) {
243 var value = component.get('v.testUser.' + testUserField);
244
245 var isValid = requirement(value);
246 if (!isValid) {
247 helper.fireInputErrorEvent(inputField, message, value);
248 }
249 return isValid;
250},
251
252validatePassword: function(component, event, helper) {
253 var isValid = validate(helper.valueIsDefined, 'You must enter a password.')
254 && validate(isCorrectLength, 'The password is the wrong length.')
255 && validate(hasAtLeastOneNumber, 'The password must contain at least one number.')
256 && validate(hasAtLeastOneLetter, 'The password must contain at least one letter.');
257
258 if (isValid){
259 helper.fireInputErrorEvent('password');
260 }
261
262 return isValid;
263
264 function isCorrectLength(value) {
265 return value.length >= 7 || value.length <= 15;
266 }
267
268 function hasAtLeastOneNumber(value) {
269 return value.search(/[0-9]+/) !== -1;
270 }
271
272 function hasAtLeastOneLetter(value) {
273 return value.search(/[a-zA-Z]+/) !== -1
274 }
275
276 function validate(requirement, message) {
277 return helper.validate(component, helper, 'password', 'Password__c', requirement, message);
278 }
279},
280
281validateEmail: function(component, event, helper) {
282 var isValid = validate(helper.valueIsDefined, 'You must enter an email.')
283 && validate(hasCorrectFormat, 'Email is not in the correct format.')
284 && validate(isGmail, 'Email must be a gmail account.');
285
286 if (isValid){
287 helper.fireInputErrorEvent('email');
288 }
289
290 return isValid;
291
292 function hasCorrectFormat(value) {
293 var re = /^(([^<>()[]\.,;:s@"]+(.[^<>()[]\.,;:s@"]+)*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;
294 return re.test(value);
295 }
296
297 function isGmail(value) {
298 var parts = value.split('@');
299 var domain = parts[parts.length - 1];
300 return domain.toLowerCase() === 'gmail.com';
301 }
302
303 function validate(requirement, message) {
304 return helper.validate(component, helper, 'email', 'Email__c', requirement, message);
305 }
306},
307
308valueIsDefined: function isDefined(value) {
309 return value !== undefined;
310}