misc: add support for live block conditions in workflow forms (#86798)
gitea/wcs/pipeline/head This commit looks good Details

This commit is contained in:
Frédéric Péters 2024-02-09 12:22:41 +01:00
parent f969f302af
commit 925249aa04
2 changed files with 14 additions and 1 deletions

View File

@ -916,11 +916,13 @@ class FormStatusPage(Directory, FormTemplateMixin):
yield (widget.field, block_row, field_widget.field, field_widget)
block_row += 1
# get dictionary with blocks data, from workflow form, or defaults to formdata
blocks_formdata_data = getattr(form, 'blocks_formdata_data', formdata.data)
for block, block_row, field, widget in get_all_field_widgets(form):
t0 = time.time()
if block:
try:
block_data = formdata.data.get(block.id)['data'][block_row]
block_data = blocks_formdata_data.get(block.id)['data'][block_row]
except (IndexError, TypeError):
block_data = {}

View File

@ -326,6 +326,16 @@ class FormWorkflowStatusItem(WorkflowStatusItem):
self.formdef.set_live_condition_sources(form, self.formdef.fields)
if (
formdata.evolution
and formdata.evolution[-1].parts
and isinstance(formdata.evolution[-1].parts[-1], WorkflowFormEvolutionPart)
and formdata.evolution[-1].parts[-1].live
):
# attach live evaluated data to form object, to be used in live_process_fields
# for block conditions.
form.blocks_formdata_data = formdata.evolution[-1].parts[-1].data
if form.is_submitted():
# skip prefilling part when form is being submitted
return
@ -355,6 +365,7 @@ class FormWorkflowStatusItem(WorkflowStatusItem):
formdata.evolution[-1].add_part(
WorkflowFormEvolutionPart(self, formdef_data, live=bool(not submit))
)
form.formdata_data = formdef_data
def submit_form(self, form, formdata, user, evo):
if not self.formdef: