11frappe . ready ( function ( ) {
2+ // Load top-level event types
3+ frappe . call ( {
4+ method : "frappe.client.get_list" ,
5+ args : {
6+ doctype : "Event Type" ,
7+ filters : {
8+ is_group : 1
9+ } ,
10+ fields : [ "name" ]
11+ } ,
12+ callback : function ( r ) {
13+ if ( r . message ) {
14+ const options = r . message . map ( row => row . name ) ;
15+ frappe . web_form . fields_dict . type . df . options = options ;
16+ frappe . web_form . fields_dict . type . refresh ( ) ;
17+ }
18+ }
19+ } ) ;
20+
21+ // Load subtypes when type is selected
22+ frappe . web_form . on ( 'type' , function ( value ) {
23+ if ( ! value ) return ;
24+
25+ frappe . call ( {
26+ method : "frappe.client.get_list" ,
27+ args : {
28+ doctype : "Event Type" ,
29+ filters : {
30+ parent_event_type : value . value ,
31+ is_group : 0
32+ } ,
33+ fields : [ "name" ]
34+ } ,
35+ callback : function ( r ) {
36+ const subOptions = r . message . map ( row => row . name ) ;
37+ frappe . web_form . fields_dict . sub_type . df . options = subOptions ;
38+ frappe . web_form . fields_dict . sub_type . refresh ( ) ;
39+ frappe . web_form . set_value ( "sub_type" , "" ) ;
40+ }
41+ } ) ;
42+ } ) ;
43+
44+ // Validation before form submission
245 frappe . web_form . validate = ( ) => {
346 let data = frappe . web_form . get_values ( ) ;
447 if ( data . title . length > 70 ) {
548 frappe . msgprint ( "Please restrict title to max 70 characters." ) ;
649 return false ;
750 }
8- if ( frappe . web_form . get_value ( "user" ) && ! ( frappe . utils . validate_type ( frappe . web_form . get_value ( "user" ) , "email" ) ) ) {
51+ if (
52+ frappe . web_form . get_value ( "user" ) &&
53+ frappe . web_form . get_value ( "user" ) !== "Administrator" &&
54+ ! frappe . utils . validate_type ( frappe . web_form . get_value ( "user" ) , "email" )
55+ ) {
956 frappe . msgprint ( 'Invalid email address' ) ;
1057 return false ;
1158 }
12-
1359 } ;
1460
61+ // Title input live validation
1562 frappe . web_form . on ( "title" , ( field , value ) => {
16- console . log ( value )
1763 if ( value . length > 70 ) {
18- frappe . msgprint ( `Please restrict the title to max 70 characters, <br> You've entered ${ value . length } characters in the title` ) ;
64+ frappe . msgprint (
65+ `Please restrict the title to max 70 characters, <br> You've entered ${ value . length } characters in the title`
66+ ) ;
1967 }
2068 } ) ;
2169
70+ // Set max length for title input
2271 $ ( '*[data-fieldname="title"]' ) . attr ( "maxlength" , "70" ) ;
2372
24-
25- // hide / show fields based on user login information
73+ // Show/hide fields based on user login
2674 if ( frappe . session . user && frappe . session . user != "Guest" ) {
2775 frappe . web_form . set_value ( [ "user" ] , frappe . session . user ) ;
2876 frappe . web_form . set_df_property ( "user" , "hidden" , 1 ) ;
@@ -43,7 +91,7 @@ frappe.ready(function () {
4391 frappe . web_form . set_df_property ( "user" , "hidden" , 0 ) ;
4492 }
4593
46- // default starting position for map
94+ // Default map position
4795 let defaultPosition = [ 22.1458 , 80.0882 ] ;
4896
4997 if ( navigator . geolocation ) {
@@ -53,52 +101,45 @@ frappe.ready(function () {
53101 }
54102
55103 function showMap ( position ) {
56- if ( position ) {
57- if ( position . coords ) {
58- let lat = position . coords . longitude ;
59- let long = position . coords . latitude ;
60- defaultPosition = [ ] ;
61- defaultPosition . push ( lat ) ;
62- defaultPosition . push ( long ) ;
63- }
104+ if ( position && position . coords ) {
105+ let lat = position . coords . longitude ;
106+ let long = position . coords . latitude ;
107+ defaultPosition = [ lat , long ] ;
64108 }
109+
65110 const container = document . getElementById ( "map" ) ;
66111 if ( container ) {
67-
68112 const screenWidth = window . screen . width ;
113+ let mapZoom = screenWidth < 700 ? 4 : 5.4 ;
69114
70- let mapZoom = 5.4
71- if ( screenWidth < 700 ) {
72- mapZoom = 4
73- }
74115 let map = L . map ( "map" ) . setView ( defaultPosition , mapZoom ) ;
75116
76117 L . tileLayer ( "https://tile.openstreetmap.org/{z}/{x}/{y}.png" , {
77118 maxZoom : 19 ,
78119 attribution :
79120 '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>' ,
80121 } ) . addTo ( map ) ;
122+
81123 let allMarkers = [ ] ;
82- map
83- . locate ( {
84- setView : true ,
85- } )
86- . on ( "locationerror" , function ( e ) {
87- console . log ( e ) ;
88- } ) ;
124+
125+ map . locate ( {
126+ setView : true ,
127+ } ) . on ( "locationerror" , function ( e ) {
128+ console . log ( e ) ;
129+ } ) ;
89130
90131 function onMapClick ( e ) {
91- for ( let step = 0 ; step < allMarkers . length ; step ++ ) {
92- map . removeLayer ( allMarkers [ step ] ) ;
93- }
132+ allMarkers . forEach ( marker => map . removeLayer ( marker ) ) ;
94133 const latlng = e . latlng ;
134+
95135 frappe . web_form . set_value ( [ "latitude" ] , latlng . lat ) ;
96136 frappe . web_form . set_value ( [ "longitude" ] , latlng . lng ) ;
97137
98138 let marker = L . marker ( [ latlng . lat , latlng . lng ] ) . addTo ( map ) ;
99139 allMarkers . push ( marker ) ;
100140 }
141+
101142 map . on ( "click" , onMapClick ) ;
102143 }
103144 }
104- } ) ;
145+ } ) ;
0 commit comments