Guest User

Untitled

a guest
Jul 29th, 2018
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 KB | None | 0 0
  1. ```js
  2. let maxRowsCount;
  3.  
  4. const mockRowsCountFetch = async () =>
  5. maxRowsCount = await mockServerCall(2000, () => 5);
  6.  
  7. // a form with 10 items, with each item holding a username and password fields.
  8. const form = new Form({
  9. children: Array.from({length: 10}, () => ({
  10. children: [
  11. {
  12. name: 'username',
  13. validate: validation(
  14. validation.required(),
  15. validation.async((value) =>
  16. mockServerCall(1000, () => value === 'john' ? 'username is taken' : null)))
  17. },
  18. {
  19. name: 'password',
  20. validate: validation(
  21. validation.required(),
  22. validation.validate(
  23. value => value && value.length < 6 ? 'invalid password' : null,
  24. {events: ['blur']}))
  25. }
  26. ]
  27. })),
  28.  
  29. validate: ({event}) => {
  30. if (event === 'init') {
  31. return mockRowsCountFetch().then(() => {
  32. const sizeError = validateFormSize();
  33.  
  34. return sizeError
  35. ? form.hasErrors
  36. ? [
  37. ...form.errors,
  38. sizeError
  39. ]
  40. : sizeError
  41. : form.errors;
  42. });
  43. }
  44.  
  45. if (maxRowsCount !== undefined) {
  46. return validateFormSize();
  47. }
  48. }
  49. });
  50.  
  51. const validateFormSize = () => {
  52. if (form.children.length > maxRowsCount) {
  53. return `Maximum allowed number of rows is ${maxRowsCount}`;
  54. }
  55. };
  56.  
  57. // call 1 to the server is initiated because of the init validation
  58.  
  59. const username = form.children[0].get('username');
  60. const password = form.children[1].get('password');
  61.  
  62. console.log(username.hasErrors); // false
  63. console.log(username.errors); // null
  64. console.log(password.hasErrors); // false
  65. console.log(password.errors); // null
  66. console.log(form.hasErrors); // false
  67. console.log(form.errors); // null
  68.  
  69. username.onChange('john'); // initiates call 2 to the server
  70.  
  71. console.log(username.hasErrors); // false
  72. console.log(username.errors); // null
  73. console.log(password.hasErrors); // false
  74. console.log(password.errors); // null
  75. console.log(form.hasErrors); // false
  76. console.log(form.errors); // null
  77.  
  78. password.onChange('123');
  79. password.onBlur();
  80.  
  81. console.log(username.hasErrors); // false
  82. console.log(username.errors); // null
  83. console.log(password.hasErrors); // true
  84. console.log(password.errors); // ['invalid password']
  85. console.log(form.hasErrors); // true
  86. console.log(form.errors); // ['invalid password']
  87.  
  88. // ... waiting asynchronously
  89. // later, after response 2 comes from the server, but before response 1 comes from the server
  90.  
  91. console.log(username.hasErrors); // true
  92. console.log(username.errors); // ['username is taken']
  93. console.log(password.hasErrors); // true
  94. console.log(password.errors); // ['invalid password']
  95. console.log(form.hasErrors); // true
  96. console.log(form.errors); // ['username is taken', 'invalid password']
  97.  
  98. // ... waiting asynchronously
  99. // later, after response 1 comes from the server
  100.  
  101. console.log(username.hasErrors); // true
  102. console.log(username.errors); // ['username is taken']
  103. console.log(password.hasErrors); // true
  104. console.log(password.errors); // ['invalid password']
  105. console.log(form.hasErrors); // true
  106. console.log(form.errors); // ['username is taken', 'invalid password',
  107. // 'Maximum allowed number of rows is 5']
  108.  
  109. const tailChildren = form.children.slice(-6);
  110.  
  111. tailChidren.forEach((row) => row.remove());
  112.  
  113. console.log(username.hasErrors); // true
  114. console.log(username.errors); // ['username is taken']
  115. console.log(password.hasErrors); // true
  116. console.log(password.errors); // ['invalid password']
  117. console.log(form.hasErrors); // true
  118. console.log(form.errors); // ['username is taken', 'invalid password']
  119.  
  120. tailChidren.forEach((row) => form.addChild(row));
  121.  
  122. console.log(username.hasErrors); // true
  123. console.log(username.errors); // ['username is taken']
  124. console.log(password.hasErrors); // true
  125. console.log(password.errors); // ['invalid password']
  126. console.log(form.hasErrors); // true
  127. console.log(form.errors); // ['username is taken', 'invalid password',
  128. // 'Maximum allowed number of rows is 5']
  129. ```
Add Comment
Please, Sign In to add comment