@@ -77,6 +77,9 @@ def _create_field(self, label_text: str, field: dict):
7777
7878 row = Gtk .Box (orientation = Gtk .Orientation .VERTICAL , spacing = 6 )
7979
80+ if field .get ("required" , False ):
81+ label_text = label_text + " *"
82+
8083 label = Gtk .Label (
8184 label = label_text ,
8285 halign = Gtk .Align .START ,
@@ -170,6 +173,8 @@ def _create_field(self, label_text: str, field: dict):
170173 @Gtk .Template .Callback ()
171174 def on_submit_clicked (self , * _ ):
172175 data = self ._collect_data ()
176+ if not data :
177+ return
173178 self ._append_to_csv (data )
174179 self ._reset_form ()
175180
@@ -182,27 +187,46 @@ def _collect_data(self) -> dict:
182187
183188 for field_id , field_dict in self .fields .items ():
184189 widget = field_dict ["widget" ]
190+ field_value = None
185191 if isinstance (widget , Gtk .Entry ):
186- data [ field_id ] = widget .get_text ()
192+ field_value = widget .get_text ()
187193 elif isinstance (widget , Gtk .TextView ):
188194 text_buffer = widget .get_buffer ()
189195 start_iter = text_buffer .get_start_iter ()
190196 end_iter = text_buffer .get_end_iter ()
191- data [ field_id ] = text_buffer .get_text (start_iter , end_iter , True )
197+ field_value = text_buffer .get_text (start_iter , end_iter , True )
192198 elif isinstance (widget , list ):
193199 for indv_widget in widget :
194200 active = indv_widget .get_active ()
195201 if active :
196- data [ field_id ] = indv_widget .get_label ()
202+ field_value = indv_widget .get_label ()
197203 elif isinstance (widget , Gtk .CheckButton ):
198204 active = widget .get_active ()
199- data [ field_id ] = True if active else False
205+ field_value = True if active else False
200206 elif isinstance (widget , Gtk .Calendar ):
201207 date = widget .get_date ().format_iso8601 ()
202- data [field_id ] = date
203-
208+ field_value = date
204209 elif isinstance (widget , Gtk .SpinButton ):
205- data [field_id ] = widget .get_value_as_int ()
210+ field_value = widget .get_value_as_int ()
211+ field_dict_config = field_dict .get ("config" , None )
212+ if not field_dict_config :
213+ show_fatal_toast (self .form_toast_overlay )
214+ if field_dict_config .get ("required" , False ):
215+ show_toast = False
216+ if field_value is None :
217+ show_toast = True
218+ if isinstance (field_value , str ) and field_value == "" :
219+ show_toast = True
220+ if isinstance (field_value , bool ) and not field_value :
221+ show_toast = True
222+ if show_toast :
223+ toast = Adw .Toast .new (
224+ f"Please fill the required field: { field_dict_config .get ('label' , 'All' )} "
225+ )
226+ toast .set_timeout (2 )
227+ self .form_toast_overlay .add_toast (toast )
228+ return None
229+ data [field_id ] = field_value
206230
207231 return data
208232
0 commit comments