Ten dialogs disable submit on vee-validate's meta.valid, which can be false with zero errors #178
Labels
No labels
app:activities
app:chat
app:chatelet
app:events
app:forum
app:libra
app:market
app:restaurant
app:tasks
app:wallet
app:webapp
bug
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
aiolabs/webapp#178
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Split out from #177, which fixed this for the event-creation form only.
What happened
On demo, a fully filled event form — title, dates, price, capacity, payment methods, a promo code and three named ticket waves — had its Submit button greyed with nothing on screen explaining why. Diagnosis:
document.querySelectorAll('[aria-invalid="true"]')→ empty, so no field had an error:disabled="isLoading"binding, so the in-flight flag was falseSo
meta.validwas false whileerrorswas empty — vee-validate #4630 reproduced. The organiser had no way to discover that, and no way to proceed.Why
meta.validis the wrong thing to gate ondisabledwas removed from<Field>because consistent behaviour was unachievable. Most of our dialogs disable inputs while submitting.valid && dirtyrather thanvalid.A flag unreliable in both directions should not be the only thing between a user and their action — least of all as a disabled button, which offers no affordance for finding out why.
The other ten sites
Every one disables a button on
!isFormValid, and none useshandleSubmit's invalid callback (onlyCreateEventDialogdoes, since #177):wallet/ReceiveDialog.vue!isFormValid || isCreatingchatelet/BookRoomDialog.vue!isFormValid || flow.isRequesting.valuemarket/CreateProductDialog.vueisCreating || !isFormValidmarket/CreateStoreDialog.vueisCreating || !isFormValidmarket/MarketSettings.vueisSaving || !isFormValidbase/ProfileSettings.vueisUpdating || !isFormValidexpenses/AddExpense.vueisSubmitting || !isFormValidnostr-feed/NoteComposer.vueisPublishing || !isFormValidnostr-feed/RideshareComposer.vueisPublishing || !isFormValidaccounting-app/views/AddIncome.vueisSubmitting || !isFormValidReceiveDialogandBookRoomDialoglook like the ones to do first — a user unable to create an invoice, or a guest unable to book a room, with no error and no recourse.The pattern from #177
handleSubmitan invalid callback that names the offending fields and surfaces them — ours toasts"Check Tickets, Start date, Title", opens whichever collapsible holds one, and scrolls the first into view.Worth also checking each form for a schema field with no
FormFieldin the template —CreateEventDialoghas one (notification_subject), so an error there could never have been displayed. Harmless while it defaults to'', but the same latent shape.Not urgent
Nothing is broken today beyond what #177 already fixed; this is a class of latent dead-ends. Filing so it is tracked rather than rediscovered one blocked user at a time.