Verification: inferred from reading DynamicForm.qml, CollectionView.qml and WizardView.qml on master 05222af.
Every prefill path writes control text: CollectionView locates field_<name> and sets .text; WizardView calls setFieldValue(name, text). Nothing converts a wire value into the text the form's draft holds, so a caller editing an existing record has to do it by hand per kind — {num,den,dp} → locale digits for a Quantity, an ISO string → display-zone wall clock for a Timestamp, a value → its option's valueJson for a closed set.
This bites hardest for a std::vector<Row> drawn by a slot (#809): the slot's rows are {member: cellText}, and turning a stored [{"sieve":31.5,"passing":{"num":1000,"den":10,"dp":1}}] back into cell texts is the inverse of encodeFieldText, which does not exist.
Proposal: DynamicForm.decodeFieldValue(field, jsonValue) -> text (the inverse of encodeFieldText, locale- and zone-aware) and DynamicForm.prefillFromJson(payloadText) built on it, covering object-array rows cell by cell.
Closes when form.prefillFromJson(form.previewLine) on a ready form reproduces the same previewLine, for every field kind including a slot-drawn collection.
Verification: inferred from reading
DynamicForm.qml,CollectionView.qmlandWizardView.qmlon master 05222af.Every prefill path writes control text: CollectionView locates
field_<name>and sets.text; WizardView callssetFieldValue(name, text). Nothing converts a wire value into the text the form's draft holds, so a caller editing an existing record has to do it by hand per kind —{num,den,dp}→ locale digits for aQuantity, an ISO string → display-zone wall clock for aTimestamp, a value → its option'svalueJsonfor a closed set.This bites hardest for a
std::vector<Row>drawn by a slot (#809): the slot's rows are{member: cellText}, and turning a stored[{"sieve":31.5,"passing":{"num":1000,"den":10,"dp":1}}]back into cell texts is the inverse ofencodeFieldText, which does not exist.Proposal:
DynamicForm.decodeFieldValue(field, jsonValue) -> text(the inverse ofencodeFieldText, locale- and zone-aware) andDynamicForm.prefillFromJson(payloadText)built on it, covering object-array rows cell by cell.Closes when
form.prefillFromJson(form.previewLine)on a ready form reproduces the samepreviewLine, for every field kind including a slot-drawn collection.