diff --git a/backend/src/collective/volto/formsupport/datamanager/catalog.py b/backend/src/collective/volto/formsupport/datamanager/catalog.py index 1d6625f..0209a30 100644 --- a/backend/src/collective/volto/formsupport/datamanager/catalog.py +++ b/backend/src/collective/volto/formsupport/datamanager/catalog.py @@ -46,32 +46,24 @@ def block_id(self): def get_form_fields(self): blocks = get_blocks(self.context) - if not blocks: return {} - form_block = {} - for id_, block in blocks.items(): - if id_ != self.block_id: - continue - block_type = block.get("@type", "") - if block_type == "form" or block_type == "schemaForm": - form_block = deepcopy(block) - if not form_block: - return {} - - # TODO: get fields for schemaForm block - if block["@type"] == "schemaForm": - return block.get("data", {}) - - subblocks = form_block.get("subblocks", []) - - # Add the 'custom_field_id' field back in as this isn't stored with each - # subblock - for index, field in enumerate(subblocks): - if form_block.get(field["field_id"]): - subblocks[index]["custom_field_id"] = form_block.get(field["field_id"]) - - return subblocks + block = blocks.get(self.block_id, {}) + block_type = block.get("@type", "") + if block_type == "schemaForm": + return [ + {"field_id": name, "label": field.get("title", name)} + for name, field in block["schema"]["properties"].items() + ] + elif block_type == "form": + subblocks = block.get("subblocks", []) + # Add the 'custom_field_id' field back in as this isn't stored with each + # subblock + for index, field in enumerate(subblocks): + if block.get(field["field_id"]): + subblocks[index]["custom_field_id"] = block.get(field["field_id"]) + return subblocks + return {} def add(self, data): form_fields = self.get_form_fields() diff --git a/backend/src/collective/volto/formsupport/restapi/services/form_data/form_data.py b/backend/src/collective/volto/formsupport/restapi/services/form_data/form_data.py index b8e997b..d1ad74b 100644 --- a/backend/src/collective/volto/formsupport/restapi/services/form_data/form_data.py +++ b/backend/src/collective/volto/formsupport/restapi/services/form_data/form_data.py @@ -55,7 +55,7 @@ def __call__(self, expand=False): return {} if self.block_id: service_id = ( - f"{self.context.absolute_url()}/@form-data?block_id{self.block_id}" + f"{self.context.absolute_url()}/@form-data?block_id={self.block_id}" ) else: service_id = f"{self.context.absolute_url()}/@form-data" @@ -81,7 +81,7 @@ def form_block(self): if not blocks: return {} for id_, block in blocks.items(): - if block.get("@type", "") == "form" and block.get("store", False): + if block.get("@type", "") in ("form", "schemaForm") and block.get("store", False): if not self.block_id or self.block_id == id_: return block return {} diff --git a/backend/src/collective/volto/formsupport/restapi/services/submit_form/post.py b/backend/src/collective/volto/formsupport/restapi/services/submit_form/post.py index e05b9a0..7e93f98 100644 --- a/backend/src/collective/volto/formsupport/restapi/services/submit_form/post.py +++ b/backend/src/collective/volto/formsupport/restapi/services/submit_form/post.py @@ -479,6 +479,7 @@ def filter_parameters(self): # TODO: handle attachments for schemaForm block if self.block["@type"] == "schemaForm": return [{ + "field_id": k, "value": v, "label": self.block["schema"]["properties"].get(k, {}).get("title", k), } for k, v in self.form_data["data"].items()]