Skip to content

Commit 061def4

Browse files
authored
Merge pull request #200 from tuttle-dev/145-refactoring-unnecessary-on_change_calls
Removed unnecessary on_change calls for fields Minor bug fix: Displaying contract and project details status Moved similar views to core views - TStatusFilterBtn, TFullScreenFormContainer, TBackButton, THomeGrid,
2 parents 14de25f + 1d099b7 commit 061def4

File tree

10 files changed

+508
-757
lines changed

10 files changed

+508
-757
lines changed

app/auth/data_source.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from core.intent_result import IntentResult
55

66
from tuttle.dev import deprecated
7-
from tuttle.model import Address, User
7+
from tuttle.model import User
88

99

1010
class UserDataSource(SQLModelDataSourceMixin):

app/auth/view.py

+73-100
Original file line numberDiff line numberDiff line change
@@ -42,56 +42,40 @@ def set_form_data(self):
4242
if not self.user.bank_account:
4343
# Create a new bank account if none exists
4444
self.user.bank_account = BankAccount(name="", BIC="", IBAN="")
45-
self.bank_ibc_field.value = self.bank_bic = self.user.bank_account.BIC
46-
self.bank_name_field.value = self.bank_name = self.user.bank_account.name
47-
self.bank_iban_field.value = self.bank_iban = self.user.bank_account.IBAN
48-
self.vat_number_field.value = self.vat_number = self.user.VAT_number
45+
self.bank_bic_field.value = self.user.bank_account.BIC
46+
self.bank_name_field.value = self.user.bank_account.name
47+
self.bank_iban_field.value = self.user.bank_account.IBAN
48+
self.vat_number_field.value = self.user.VAT_number
4949

5050
def update_form_data(self, user: User):
5151
"""Updates the user's data with the form data"""
5252
self.user = user
5353
self.set_form_data()
5454
self.update()
5555

56-
def on_vat_number_changed(self, e):
57-
"""Called when the VAT number field is changed"""
58-
self.vat_number = e.control.value
59-
self.user.VAT_number = self.vat_number
60-
61-
def on_bank_bic_changed(self, e):
62-
"""Called when the bank BIC field is changed"""
63-
self.bank_bic = e.control.value
64-
self.user.bank_account.BIC = self.bank_bic
65-
66-
def on_bank_iban_changed(self, e):
67-
"""Called when the bank IBAN field is changed"""
68-
self.bank_iban = e.control.value
69-
self.user.bank_account.IBAN = self.bank_iban
70-
71-
def on_bank_name_changed(self, e):
72-
"""Called when the bank name field is changed"""
73-
self.bank_name = e.control.value
74-
self.user.bank_account.name = self.bank_name
56+
def on_click_save(self, e):
57+
"""Called when the save button is clicked"""
58+
self.user.VAT_number = self.vat_number_field.value
59+
self.user.bank_account.BIC = self.bank_bic_field.value
60+
self.user.bank_account.IBAN = self.bank_iban_field.value
61+
self.user.bank_account.name = self.bank_name_field.value
62+
self.on_form_submit(self.user)
7563

7664
def build(self):
7765
"""Called when form is built"""
7866
self.vat_number_field = views.TTextField(
79-
on_change=self.on_vat_number_changed,
8067
label="VAT Number",
8168
hint="Value Added Tax number of the user, legally required for invoices.",
8269
)
8370
self.bank_name_field = views.TTextField(
84-
on_change=self.on_bank_name_changed,
8571
label="Name",
8672
hint="Name of account",
8773
)
8874
self.bank_iban_field = views.TTextField(
89-
on_change=self.on_bank_iban_changed,
9075
label="IBAN",
9176
hint="International Bank Account Number",
9277
)
93-
self.bank_ibc_field = views.TTextField(
94-
on_change=self.on_bank_bic_changed,
78+
self.bank_bic_field = views.TTextField(
9579
label="BIC",
9680
hint="Bank Identifier Code",
9781
)
@@ -103,11 +87,11 @@ def build(self):
10387
views.TSubHeading("Bank Account"),
10488
self.bank_name_field,
10589
self.bank_iban_field,
106-
self.bank_ibc_field,
90+
self.bank_bic_field,
10791
views.Spacer(),
10892
views.TPrimaryButton(
10993
label="Save",
110-
on_click=lambda e: self.on_form_submit(self.user),
94+
on_click=self.on_click_save,
11195
),
11296
],
11397
)
@@ -133,16 +117,6 @@ def __init__(
133117
submit_btn_label : str
134118
The label to display on the submit button
135119
"""
136-
self.name = ""
137-
self.email = ""
138-
self.phone = ""
139-
self.title = ""
140-
self.street = ""
141-
self.street_number = ""
142-
self.postal_code = ""
143-
self.city = ""
144-
self.country = ""
145-
self.website = ""
146120
self.on_form_submit = on_form_submit
147121
self.on_submit_success = on_submit_success
148122
self.submit_btn_label = submit_btn_label
@@ -161,16 +135,12 @@ def on_field_focus(self, e):
161135
self.name_field,
162136
self.email_field,
163137
self.phone_field,
164-
self.title_field,
138+
self.subtitle_field,
165139
]:
166140
field.error_text = ""
167141
self.toggle_form_err()
168142
self.update()
169143

170-
def on_field_value_changed(self, form_property, e):
171-
"""updates the property corresponding to this form field"""
172-
setattr(self, form_property, e.control.value)
173-
174144
def on_submit_btn_clicked(self, e):
175145
# prevent multiple clicking
176146
self.submit_btn.disabled = True
@@ -179,22 +149,38 @@ def on_submit_btn_clicked(self, e):
179149
self.toggle_form_err()
180150

181151
missing_required_data_err = ""
182-
if utils.is_empty_str(self.name):
152+
153+
# get the form data
154+
subtitle = self.subtitle_field.value
155+
name = self.name_field.value
156+
email = self.email_field.value
157+
phone_number = self.phone_field.value
158+
address_street = self.street_field.value
159+
address_postal_code = self.postal_code_field.value
160+
address_number = self.street_number_field.value
161+
address_city = self.city_field.value
162+
address_country = self.country_field.value
163+
website = self.website_field.value
164+
165+
# validate the form data
166+
if utils.is_empty_str(subtitle):
167+
missing_required_data_err = "Please specify your job title. e.g. freelancer"
168+
self.subtitle_field.error_text = missing_required_data_err
169+
170+
elif utils.is_empty_str(name):
183171
missing_required_data_err = "Your name is required."
184172
self.name_field.error_text = missing_required_data_err
185-
elif utils.is_empty_str(self.email):
173+
174+
elif utils.is_empty_str(email):
186175
missing_required_data_err = "Your email is required."
187176
self.email_field.error_text = missing_required_data_err
188-
elif utils.is_empty_str(self.title):
189-
missing_required_data_err = "Please specify your job title. e.g. freelancer"
190-
self.title_field.error_text = missing_required_data_err
191177

192178
elif (
193-
utils.is_empty_str(self.street)
194-
or utils.is_empty_str(self.street_number)
195-
or utils.is_empty_str(self.postal_code)
196-
or utils.is_empty_str(self.country)
197-
or utils.is_empty_str(self.city)
179+
utils.is_empty_str(address_street)
180+
or utils.is_empty_str(address_number)
181+
or utils.is_empty_str(address_postal_code)
182+
or utils.is_empty_str(address_country)
183+
or utils.is_empty_str(address_city)
198184
):
199185

200186
missing_required_data_err = "Please provide your full address"
@@ -203,16 +189,16 @@ def on_submit_btn_clicked(self, e):
203189
if not missing_required_data_err:
204190
# save user
205191
result: IntentResult = self.on_form_submit(
206-
title=self.title,
207-
name=self.name,
208-
email=self.email,
209-
phone=self.phone,
210-
street=self.street,
211-
street_num=self.street_number,
212-
postal_code=self.postal_code,
213-
city=self.city,
214-
country=self.country,
215-
website=self.website,
192+
title=subtitle,
193+
name=name,
194+
email=email,
195+
phone=phone_number,
196+
street=address_street,
197+
street_num=address_number,
198+
postal_code=address_postal_code,
199+
city=address_city,
200+
country=address_country,
201+
website=website,
216202
)
217203
if not result.was_intent_successful:
218204
self.toggle_form_err(result.error_msg)
@@ -226,67 +212,54 @@ def on_submit_btn_clicked(self, e):
226212
def build(self):
227213
"""Called when form is built"""
228214
self.name_field = views.TTextField(
229-
lambda e: self.on_field_value_changed("name", e),
230-
"Name",
231-
"your name",
215+
label="Name",
216+
hint="your name",
232217
on_focus=self.on_field_focus,
233218
keyboard_type=utils.KEYBOARD_NAME,
234219
)
235220
self.email_field = views.TTextField(
236-
lambda e: self.on_field_value_changed("email", e),
237-
"Email",
238-
"your email address",
221+
label="Email",
222+
hint="your email address",
239223
on_focus=self.on_field_focus,
240224
keyboard_type=utils.KEYBOARD_EMAIL,
241225
)
242226
self.phone_field = views.TTextField(
243-
lambda e: self.on_field_value_changed("phone", e),
244-
"Phone (optional)",
245-
"your phone number",
227+
label="Phone (optional)",
228+
hint="your phone number",
246229
on_focus=self.on_field_focus,
247230
keyboard_type=utils.KEYBOARD_PHONE,
248231
)
249-
self.title_field = views.TTextField(
250-
lambda e: self.on_field_value_changed("title", e),
251-
"Job Title",
252-
"What is your role as a freelancer?",
232+
self.subtitle_field = views.TTextField(
233+
label="Job Title",
234+
hint="What is your role as a freelancer?",
253235
on_focus=self.on_field_focus,
254236
keyboard_type=utils.KEYBOARD_TEXT,
255237
)
256238
self.website_field = views.TTextField(
257-
lambda e: self.on_field_value_changed("website", e),
258-
"Website (optional)",
259-
"URL of your website.",
239+
label="Website (optional)",
240+
hint="URL of your website.",
260241
)
261242
self.street_field = views.TTextField(
262-
lambda e: self.on_field_value_changed("street", e),
263243
label="Street Name",
264-
keyboard_type=utils.KEYBOARD_TEXT,
265244
expand=1,
266245
)
267246
self.street_number_field = views.TTextField(
268-
lambda e: self.on_field_value_changed("street_number", e),
269247
label="Street Number",
270248
keyboard_type=utils.KEYBOARD_NUMBER,
271249
expand=1,
272250
)
273251
self.postal_code_field = views.TTextField(
274-
lambda e: self.on_field_value_changed("postal_code", e),
275252
label="Postal Code",
276253
keyboard_type=utils.KEYBOARD_NUMBER,
277254
expand=1,
278255
)
279256

280257
self.city_field = views.TTextField(
281-
lambda e: self.on_field_value_changed("city", e),
282258
label="City",
283-
keyboard_type=utils.KEYBOARD_TEXT,
284259
expand=1,
285260
)
286261
self.country_field = views.TTextField(
287-
lambda e: self.on_field_value_changed("country", e),
288262
label="Country",
289-
keyboard_type=utils.KEYBOARD_TEXT,
290263
)
291264
self.form_err_control = views.TErrorText("")
292265
self.submit_btn = views.TPrimaryButton(
@@ -296,7 +269,7 @@ def build(self):
296269
return Column(
297270
spacing=dimens.SPACE_MD,
298271
controls=[
299-
self.title_field,
272+
self.subtitle_field,
300273
self.name_field,
301274
self.email_field,
302275
self.phone_field,
@@ -324,16 +297,16 @@ def build(self):
324297
def refresh_user_info(self, user: User):
325298
if user is None:
326299
return
327-
self.name_field.value = self.name = user.name
328-
self.email_field.value = self.email = user.email
329-
self.phone_field.value = self.phone = user.phone_number
330-
self.title_field.value = self.title = user.subtitle
331-
self.street_field.value = self.street = user.address.street
332-
self.postal_code_field.value = self.postal_code = user.address.postal_code
333-
self.street_number_field.value = self.street_number = user.address.number
334-
self.city_field.value = self.city = user.address.city
335-
self.country_field.value = self.country = user.address.country
336-
self.website_field.value = self.website = user.website
300+
self.name_field.value = user.name
301+
self.email_field.value = user.email
302+
self.phone_field.value = user.phone_number
303+
self.subtitle_field.value = user.subtitle
304+
self.street_field.value = user.address.street
305+
self.postal_code_field.value = user.address.postal_code
306+
self.street_number_field.value = user.address.number
307+
self.city_field.value = user.address.city
308+
self.country_field.value = user.address.country
309+
self.website_field.value = user.website
337310
self.update()
338311

339312

0 commit comments

Comments
 (0)