1+
2+ <div class =" modal-wrapper" id =" add-user-modal" >
3+ <div class =" modal" >
4+ <a href =" #" onclick =" closeModal()" class =" modal-close" >+</a >
5+ <div class =" modal-title" >
6+ <h2 >Create New User</h2 >
7+ </div >
8+ <div class =" modal-body" >
9+ <form
10+ method =" post"
11+ action =" /users"
12+ enctype =" multipart/form-data"
13+ id =" add-user-form" >
14+ <input type =" text" placeholder =" enter name" name =" name" />
15+ <p class =" error name-error" >This is error</p >
16+ <input type =" text" placeholder =" enter email" name =" email" />
17+ <p class =" error email-error" >This is error</p >
18+ <input type =" text" placeholder =" enter mobile" name =" mobile" />
19+ <p class =" error mobile-error" >This is error</p >
20+ <input
21+ type =" password"
22+ placeholder =" enter password"
23+ name =" password"
24+ />
25+ <p class =" error password-error" >This is error</p >
26+ <input type =" file" name =" avatar" />
27+ <p class =" error avatar-error" >This is error</p >
28+
29+ <p class =" error common-error" >This is error</p >
30+
31+ <input type =" submit" value =" Submit" />
32+ </form >
33+ </div >
34+ </div >
35+ </div >
36+ <script >
37+ const modal = document .querySelector (" #add-user-modal" );
38+ const form = document .querySelector (" #add-user-form" );
39+
40+ const closeModal = ()=> modal .style .display = " none" ;
41+ const openModal = ()=> modal .style .display = " block" ;
42+
43+ // Success Toast
44+ const successToast = Toastify ({
45+ text: " User Added Successfully! Reloding the list..." ,
46+ duration: 1000
47+ })
48+
49+ // Form submit Handler:
50+ form .onsubmit = async function (event ){
51+ event .preventDefault ()
52+
53+ // Clear Field Errors First:
54+ const errorPlaceHolders = document .querySelectorAll (" p.error" );
55+ for (let i= 0 ; i< errorPlaceHolders .length ; i++ ){
56+ errorPlaceHolders[i].style .display = " none" ;
57+ }
58+
59+ const inputErrors = document .querySelectorAll (" input.error" );
60+ if (inputErrors .length > 0 ){
61+ for (let j= 0 ; j< inputErrors .length ; j++ ){
62+ inputErrors[j].classList .remove (" error" );
63+ }
64+ }
65+
66+ // Prepare Form Data:
67+ const formData = new FormData (form);
68+
69+ // Send the request to the server
70+ let response = await fetch (" /users" ,{
71+ method: " POST" ,
72+ body: formData
73+ })
74+
75+ // Get Response From Server:
76+ let result = await response .json ();
77+
78+ // Handle Errors and response:
79+ if (result .errors ){
80+ // Errors
81+ Object .keys (result .errors ).forEach ((fieldName )=> {
82+ // Add error calss to all inputs
83+ form[fieldname].classList .add (" error" );
84+
85+ // Set all error placeholders (p tag) textContent
86+ const errorPlaceHolders = document .querySelector (` .${ fieldName} -error` );
87+ errorPlaceHolders .textContent = result .errors [fieldName].msg ;
88+
89+ // Make all PlaceHolders Visible
90+ errorPlaceHolders .style .display = " block" ;
91+ });
92+ }else {
93+ // Success
94+ successToast .showToast ();
95+ closeModal ();
96+ document .querySelector (" p.error" ).style .display = " none" ;
97+
98+ // Reload the page after 1 second
99+ setTimeout (()=> {
100+ location .reload ();
101+ },1000 )
102+ }
103+ };
104+
105+ </script >
0 commit comments