forms: add hidden previous button on first form page (#41889) #163

Merged
fpeters merged 1 commits from wip/41889-conserver-le-positionnement-des-boutons into main 2023-05-02 14:16:05 +02:00
2 changed files with 18 additions and 14 deletions

View File

@ -1122,8 +1122,7 @@ def test_form_multi_page_condition_on_first_page(pub):
resp = get_app(pub).get('/test/')
formdef.data_class().wipe()
# should be on second page already
with pytest.raises(AssertionError):
resp.form.get('previous')
assert resp.pyquery(".buttons button.form-previous[hidden][disabled]")
resp.form['f3'] = 'foo'
assert_current_page(resp, '2nd page')
resp = resp.form.submit('submit') # -> 3rd page
@ -1136,8 +1135,7 @@ def test_form_multi_page_condition_on_first_page(pub):
resp = resp.form.submit('previous') # -> 2nd page
assert_current_page(resp, '2nd page')
assert resp.form['f3']
with pytest.raises(AssertionError):
resp.form.get('previous')
assert resp.pyquery(".buttons button.form-previous[hidden][disabled]")
def test_form_multi_page_condition_on_first_and_next(pub):
@ -10475,7 +10473,8 @@ def test_form_edit_single_page(pub):
resp = resp.form.submit('button_editable').follow()
assert [x.text for x in resp.pyquery('#steps .label')] == ['2nd page']
resp.form['f4'] = 'changed'
assert [x.text for x in resp.pyquery('.buttons button')] == ['Save Changes', 'Cancel']
assert [x.text for x in resp.pyquery('.buttons button')] == ['Save Changes', 'Previous', 'Cancel']
assert resp.pyquery('.buttons button.form-previous[hidden][disabled]')
resp = resp.form.submit('submit')
formdata.refresh_from_storage()
assert formdata.data == {'2': 'a', '4': 'changed', '6': 'c'}
@ -10488,14 +10487,20 @@ def test_form_edit_single_page(pub):
resp = resp.form.submit('button_editable').follow()
assert [x.text for x in resp.pyquery('#steps .label')] == ['2nd page', '3rd page']
resp.form['f4'] = 'other change'
assert [x.text for x in resp.pyquery('.buttons button')] == ['Next', 'Cancel']
assert [x.text for x in resp.pyquery('.buttons button')] == ['Next', 'Previous', 'Cancel']
assert resp.pyquery('.buttons button.form-previous[hidden][disabled]')
resp = resp.form.submit('submit')
assert [x.text for x in resp.pyquery('.buttons button')] == ['Save Changes', 'Previous', 'Cancel']
assert resp.pyquery('.buttons button.form-previous:not([hidden])')
assert resp.pyquery('.buttons button.form-previous:not([disabled])')
resp = resp.form.submit('previous')
assert [x.text for x in resp.pyquery('.buttons button')] == ['Next', 'Cancel']
assert [x.text for x in resp.pyquery('.buttons button')] == ['Next', 'Previous', 'Cancel']
assert resp.pyquery('.buttons button.form-previous[hidden][disabled]')
resp = resp.form.submit('submit')
resp.form['f6'] = 'last change'
assert [x.text for x in resp.pyquery('.buttons button')] == ['Save Changes', 'Previous', 'Cancel']
assert resp.pyquery('.buttons button.form-previous:not([hidden])')
assert resp.pyquery('.buttons button.form-previous:not([disabled])')
resp = resp.form.submit('submit')
formdata.refresh_from_storage()
assert formdata.data == {'2': 'a', '4': 'other change', '6': 'last change'}

View File

@ -637,13 +637,12 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
'submit', _('Next'), css_class='form-next', attrs={'aria-label': _('Go to next page')}
)
if self.pages.index(page) > 0:
form.add_submit(
'previous',
_('Previous'),
css_class='form-previous',
attrs={'aria-label': _('Go back to previous page')},
)
previous_button_attrs = {'aria-label': _('Go back to previous page')}
if self.pages.index(page) == 0:
previous_button_attrs['hidden'] = 'true'
previous_button_attrs['disabled'] = 'true'
form.add_submit('previous', _('Previous'), css_class='form-previous', attrs=previous_button_attrs)
had_prefill = False
if page_change or submit_button is True: