BO : afficher le premier onglet en erreur à la validation d’un formulaire (#81845) #138
Open
pmarillonnet
wants to merge 1 commits from
wip/81845-bo-form-error-on-hidden-tab
into main
pull from: wip/81845-bo-form-error-on-hidden-tab
merge into: entrouvert:main
entrouvert:main
entrouvert:wip/90438-API-de-creation-de-role-erreur-s
entrouvert:wip/90208-auth-oidc-catch-sig-error
entrouvert:wip/90337-phone-authn-registration-existing-account-sms-info
entrouvert:wip/89940-auth-oidc-logger-l-id-token-avan
entrouvert:wip/89456-api-client-password
entrouvert:wip/89627-dans-le-journal-pouvoir-filtrer
entrouvert:wip/83700-api-users-crud-phone-uniqueness-tel
entrouvert:wip/40685-squash-des-migrations-partial
entrouvert:wip/88158-phone-authn-lost-password-config-in-template-ctx
entrouvert:wip/88146-phone-authn-registration-fields-not-optional
entrouvert:wip/86937-accounts-multivalued-attribute-multiselect
entrouvert:wip/87701-phone-identifier-attribute-required
entrouvert:wip/56850-IndexError-filtrage-par-ou
entrouvert:wip/76835-open-redirection
entrouvert:wip/40685-squash-des-migrations
entrouvert:wip/72462-BO-inclure-courriels-dans-l-impo
entrouvert:wip/75205-rbac-admin-role-user-perm-restriction
entrouvert:wip/86671-accounts-multiple-attribute-readonly-display
entrouvert:wip/86670-api-users-attributes-multiple
entrouvert:wip/86663-idp-oidc-multiple-attributes-into-claims
entrouvert:wip/86086-FileNotFoundError-en-cherchant-a
entrouvert:wip/76224-enable-client-id-secret-edition-for-oidc-service
entrouvert:wip/76359-list-api-client-inherited-roles
entrouvert:wip/76858-Ne-pas-permettre-la-reutilisatio
entrouvert:wip/82737-authn-tel-post-registration-account-selection-buggy-form
entrouvert:wip/85276-bo-phone-identifier-duplicate-prevention
entrouvert:wip/75684-add-aria-required-to-registration-field
entrouvert:wip/82736-account-create-as-recent-authn
entrouvert:wip/68946-auth-oidc-provider-jwkset-from-wellknown
entrouvert:wip/82739-account-deletion-no-phone-yet-validated
entrouvert:wip/82522-ldap-user-bo-page-no-deletion-info
entrouvert:wip/83078-role-summary-refresh-cache-job-infra
entrouvert:wip/83211-a11y-add-title-attribute-to-password-policy-rules
entrouvert:wip/83078-role-summary-refresh-cache
entrouvert:wip/83227-phone-based-registration-api-save-registration-data
entrouvert:wip/83190-phone-registration-api-endpoint
entrouvert:wip/83024-idp-oidc-authz-default-max-value
entrouvert:wip/81334-manage-apiclient-edit-tabs
entrouvert:wip/82388-phone-authn-accounts-verification-label
entrouvert:wip/66416-ldap-add-ppolicy-support
entrouvert:wip/82128-do-not-migrate-role-attribution-condition-with-on-name-set
entrouvert:wip/81943-drf314
entrouvert:wip/81945-bookworm-jwcrypto-version
entrouvert:wip/81282-remove-user-phone-column
entrouvert:wip/81478-csv-buggy-password-hashes
entrouvert:wip/81152-phone-info-stats
entrouvert:wip/79807-zxcvbn-champs-profil
entrouvert:wip/80236-vacuum-at-cleanup
entrouvert:wip/78907-zxcvbn-champs-profil
entrouvert:wip/72614-phone-identifier-modification-ui
entrouvert:wip/79183-phone-authn-healthcheck-endpoint
entrouvert:wip/75474-auth-oidc-active-attributes-mapping
entrouvert:wip/79135-user-phone-model-field-deprecation
entrouvert:wip/79489-configuration-d-un-moyen-d-authe
entrouvert:wip/79507-page-d-info-sur-un-moyen-d-authe
entrouvert:wip/79528-libelle-valeur-par-defaut-du-sys
entrouvert:wip/77243-Voir-les-roles-administres-par-u
entrouvert:tmp-test-authn-migration
entrouvert:wip/78919-authn-local-admin-manager-perm
entrouvert:wip/78046-password-authn-identifier-selection
entrouvert:wip/78409-password-lost-phone-retrieval-next-url
entrouvert:wip/78096-password-lost-phone-retrieval-next-url
entrouvert:wip/78157-phone-registration-enforce-signed-next-url
entrouvert:wip/77756-authn-addroleaction-conditions
entrouvert:wip/77452-idp-oidc-ne-pas-lever-d-erreur-c
entrouvert:wip/77296-default-saml-service-appearance
entrouvert:wip/77366-authn-manager-oidc-claim-edit
entrouvert:wip/77309-default-saml-service-appearance
entrouvert:wip/69890-password-lost-sms-recovery
entrouvert:wip/72449-login-authn-single-identifier-field
entrouvert:wip/74969-auth-oidc-masquer-les-options-ho
entrouvert:wip/75138-sso-authz-default-appearance
entrouvert:wip/75139-neutral-authz-theme-bo-config
entrouvert:wip/76835-Verifier-la-possibilite-de-redir
entrouvert:wip/72538-auth-oidc-prompt-none-error
entrouvert:wip/76542-utiliser-hobo-multitenant-spoole
entrouvert:wip/76342-a2_rbac-role-natural-keys
entrouvert:wip/69606-statistics-performance
entrouvert:wip/65942-rebase
entrouvert:wip/73677-phone-usages-stats-command
entrouvert:wip/66053-csv-import-stocker-une-informati-postrebase-paul
entrouvert:wip/73150-fc-existing-account-manual-link
entrouvert:wip/66053-csv-import-stocker-une-informati
entrouvert:wip/73148-fc-link-mail-validation-on-account-create
entrouvert:wip/69561-page-title
entrouvert:wip/65877-idp-oidc-sync-claim-resolution
entrouvert:wip/65942-idp-oidc-client-api-access-queryset-reduction
entrouvert:wip/72870-fc-nolink-default
entrouvert:wip/auth-oidc-passive
entrouvert:wip/62710-auth-oidc-mainline-sync-cmd
entrouvert:wip/test-tox-4
entrouvert:wip/71463-api-ou-permissions-filtering
entrouvert:wip/66053-csv-import-verification-source
entrouvert:hotfix/v4.49
entrouvert:wip/71069-a11y-close-label-email-hint
entrouvert:wip/65411-auth-fc-locker-le-sub-pendant-le
entrouvert:wip/69335-check-password-drf-api
entrouvert:wip/69468-ldap-password-policy-control-mes
entrouvert:wip/69466-PasswordResetConfirmView-gerer-c
entrouvert:wip/69464-PasswordChangeView-en-cas-de-ref
entrouvert:hotfix/v4.37
entrouvert:wip/blocktrans-trimmed
entrouvert:wip/69526-apiclient-key
entrouvert:wip/62868-su-view-ldap-authn-failed-crash
entrouvert:wip/65411-auth-fc-sub-lock
entrouvert:wip/68607-Preparation-django-DeprecationWa
entrouvert:wip/68607-local-paul
entrouvert:wip/43221-CAS-and-referer-header
entrouvert:wip/xdist
entrouvert:wip/66986-saml-bo-idp-md-sources
entrouvert:wip/66794-role-add-form
entrouvert:wip/66497-manager-homepage
entrouvert:wip/60783-manu
entrouvert:wip/66207-sidepage-menu
entrouvert:wip/65943-idp-oidc-api-user-attr-reduction
entrouvert:wip/65122-user-deletion-message
entrouvert:wip/distutils
entrouvert:wip/63937-ldapobject-timeout
entrouvert:wip/62900-pm-personal-data-minimization-during-authz
entrouvert:wip/62889-pm-do-not-ask-again
entrouvert:wip/20690-Ajouter-automatiquement-des-role
entrouvert:hotfix/v3.81
entrouvert:wip/34829-Avoir-des-vues-backoffice-pour-q
entrouvert:wip/57499-role-members-through-soft-deletion
entrouvert:wip/61299-attribute-kinds-title
entrouvert:wip-paul/non-binary-title
entrouvert:wip/61196-manager-utiliser-le-nouveau-widg
entrouvert:wip/61188-UI-gestion-des-roles-impossible-
entrouvert:wip/50861-api-memberships-roles-ne-pas-ecr
entrouvert:wip/60493-ldap-enabled-option
entrouvert:wip/60488-auth-oidc-strategy-email
entrouvert:wip/locale-boolean-attr
entrouvert:wip/59414-test-59482
entrouvert:wip/58829-django-rbac-operation-model
entrouvert:wip/58948-missing-migration
entrouvert:wip/57663-Definir-une-permission-pour-acce
entrouvert:hotfix/v3.50
entrouvert:wip/47024-auth_oidc-faulty-provider-attribute-sharing-consent
entrouvert:wip/56850-IndexError-list-index-out-of-ran
entrouvert:wip/tox
entrouvert:wip/tel-account-simple
entrouvert:wip/53754-authentification-forcee-ForceAut
entrouvert:wip/54525-journal-expired-sessions
entrouvert:wip/54185-ldap-password-messages
entrouvert:hotfix/v3.34
entrouvert:wip/26277-remove-duplicated-jquery
entrouvert:hotfix/v3.32
entrouvert:wip/test-eo-jenkins-lib
entrouvert:hotfix/v3.2
entrouvert:hotfix/v2.100
entrouvert:wip/tel-account
entrouvert:wip/22687-pouvoir-utiliser-le-niveau-d-isolatoin-serializable-sur-postgresql
entrouvert:hotfix/v2.82
entrouvert:wip/48090-crash-migrations
entrouvert:wip/48352-custom-user-dans-free-text-searc
entrouvert:wip/tmp/paul-devinst-crash-troubleshooting
entrouvert:hotfix/v2.67
entrouvert:wip/36966-auth-oidc-signed-requests
entrouvert:hotfix/v2.64
entrouvert:hotfix/v2.62
entrouvert:hotfix/v2.47-email-validation
entrouvert:wip/importlib-resources-limit
entrouvert:wip/virtualenv-limit
entrouvert:wip/py3-nouvelle-vague
entrouvert:hotfix/v2.18
entrouvert:hotfix/v2.7
entrouvert:wip/33550-multifacteurs-2-haut-niv
entrouvert:wip/move-a2-rbac-tests
entrouvert:hotfix/v2.1.78
entrouvert:wip/33745-missing-migration-files
entrouvert:wip/misc_paul_ui_snapshots
entrouvert:wip/25645-roles-in-users-api
entrouvert:wip/26251-avatar-cadrage-cote-client-de-l-
entrouvert:wip/play-with-jenkinsfile
entrouvert:wip/25645-API-pour-obtenir-la-liste-des-roles-portes-par-un-utilisateur
entrouvert:wip/22865-Ne-plug-utiliser-pkg-resources-pour-charger-les-applications-incluses-dans-authentic
entrouvert:wip/stretch
entrouvert:wip/review-25045
entrouvert:wip/delete-render-block
entrouvert:wip/newpassword
entrouvert:wip/django111
entrouvert:release-2.1.20
entrouvert:release-2.1.19
entrouvert:release-2.1.18
entrouvert:release-2.1.15
entrouvert:release-2.1.14
entrouvert:release-2.1.13
entrouvert:debian-squeeze
No reviewers
Labels
Clear labels
No items
No Label
Milestone
Clear milestone
No items
No Milestone
Assignees
Clear assignees
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: entrouvert/authentic#138
Reference in New Issue
No description provided.
Delete Branch "wip/81845-bo-form-error-on-hidden-tab"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
7f0600ede8
to406162c16c
WIP: BO : afficher le premier onglet en erreur à la validation d’un formulaire (#81845)to BO : afficher le premier onglet en erreur à la validation d’un formulaire (#81845)Je pense qu'on peut s'en sortir en décidant quel onglet est sélectionné directement dans la vue, pour qu'ensuite niveau template on ait juste à vérifier un attribut booléen genre
form.selected
.Un truc genre
@ -20,1 +15,3 @@
{% if form.is_not_default %}class="pk-tabs--button-marker"{% endif %}>{{ form.tab_name }}</button>
{% with is_first_selected=forloop.first|yesno:"true,false" %}
<button role="tab"
aria-selected="{% if erroneous_forms %}{% if form is first_erroneous_form %}true{% else %}false{% endif %}{% else %}{{ is_first_selected }}{% endif %}"
Un peu trop de logique côté template à mon goût, je serais pour déplacer ça dans la vue
@ -124,0 +126,4 @@
if not form.is_valid():
first_erroneous_form = form
all_valid = False
break
On ne valide plus tous les formulaires, c'est une (petite) régression
C’était volontaire mais je loupe sans doute un truc :
lorsque l’un des formulaires (i.e. l’un des onglets) est invalide, on sait d’ores et déjà que l’usager va devoir corriger ce qu’il y a saisi (et que bien sûr il va revalider le formulaire sans parcourir les onglets suivants pour y chercher d’autres erreurs).
Que les onglets suivants soient en état de validité inconnue, on s’en fiche, non ? L’usager de toute façon s’y serait repris à plusieurs fois quand bien même ceux-ci eussent été en état d’invalidité avérée, tu crois pas ?
C’était volontaire mais je loupe sans doute un truc :
lorsque l’un des formulaires (i.e. l’un des onglets) est invalide, on sait d’ores et déjà que l’usager va devoir corriger ce qu’il y a saisi (et que bien sûr il va revalider le formulaire sans parcourir les onglets suivants pour y chercher d’autres erreurs).
Que les onglets suivants soient en état de validité inconnue, on s’en fiche, non ? L’usager de toute façon s’y serait repris à plusieurs fois quand bien même ceux-ci eussent été en état d’invalidité avérée, tu crois pas ?
Oui c'est pour ça que je disais petite, en tout cas j'ai suggéré un patch qui n'a pas cet inconvénient et qui me paraît vraiment plus simple
Ok je pensais que la “(petite) régression” était une touche d’ironie de ta part, je cherchais la grosse régression, en vain :)
Je regarde comment appliquer ton patch.
406162c16c
to90accc3369
90accc3369
to5145950be9
Bien vu, nettement plus simple ainsi, en effet, merci.
5145950be9
to90b6502263
Ça vient de pair avec la modif’ JS côté gadjo, #81867, relue et modifiée une première fois mais pas encore validée. J’attendrai que ce soit validé de ce côté là pour merger ici.
Il y a la suite logique de cette PR aussi, i.e. appliquer cela à une séparation en onglet de la configuration des clients d’API, #81334, bon pour relecture aussi.
Step 1:
From your project repository, check out a new branch and test the changes.Step 2:
Merge the changes and update on Gitea.