ecoportal-api-graphql 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +363 -1
  3. data/LICENSE +21 -21
  4. data/README.md +24 -24
  5. data/lib/ecoportal/api/common/graphql/auth_service.rb +115 -115
  6. data/lib/ecoportal/api/common/graphql/class_helpers.rb +46 -46
  7. data/lib/ecoportal/api/common/graphql/client.rb +69 -69
  8. data/lib/ecoportal/api/common/graphql/hash_helpers.rb +105 -105
  9. data/lib/ecoportal/api/common/graphql/http_client.rb +85 -2
  10. data/lib/ecoportal/api/common/graphql/model/as_input.rb +54 -54
  11. data/lib/ecoportal/api/common/graphql/model/diffable/classic_diff_service.rb +49 -49
  12. data/lib/ecoportal/api/common/graphql/model/diffable/diff_service.rb +188 -188
  13. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff.rb +55 -55
  14. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff_nesting.rb +295 -295
  15. data/lib/ecoportal/api/common/graphql/model.rb +17 -17
  16. data/lib/ecoportal/api/common/graphql/patches.rb +1 -1
  17. data/lib/ecoportal/api/common/graphql/query_integration.rb +45 -45
  18. data/lib/ecoportal/api/common/graphql.rb +16 -16
  19. data/lib/ecoportal/api/common.graphql.rb +8 -8
  20. data/lib/ecoportal/api/graphql/base/action_category.rb +15 -15
  21. data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +1 -1
  22. data/lib/ecoportal/api/graphql/base/contractor_entity.rb +24 -24
  23. data/lib/ecoportal/api/graphql/base/date_time.rb +12 -12
  24. data/lib/ecoportal/api/graphql/base/delta_result.rb +16 -16
  25. data/lib/ecoportal/api/graphql/base/field.rb +12 -12
  26. data/lib/ecoportal/api/graphql/base/file_attachment.rb +15 -15
  27. data/lib/ecoportal/api/graphql/base/location_node.rb +14 -14
  28. data/lib/ecoportal/api/graphql/base/location_structure/draft/structure.rb +37 -37
  29. data/lib/ecoportal/api/graphql/base/location_structure/draft.rb +93 -93
  30. data/lib/ecoportal/api/graphql/base/page/data_field/actions_list.rb +9 -9
  31. data/lib/ecoportal/api/graphql/base/page/data_field/ai_summary.rb +18 -18
  32. data/lib/ecoportal/api/graphql/base/page/data_field/checklist.rb +29 -29
  33. data/lib/ecoportal/api/graphql/base/page/data_field/cross_reference.rb +1 -1
  34. data/lib/ecoportal/api/graphql/base/page/data_field/date_field.rb +23 -23
  35. data/lib/ecoportal/api/graphql/base/page/data_field/geo.rb +24 -24
  36. data/lib/ecoportal/api/graphql/base/page/data_field/image_gallery.rb +1 -1
  37. data/lib/ecoportal/api/graphql/base/page/data_field/law.rb +8 -8
  38. data/lib/ecoportal/api/graphql/base/page/data_field/mailbox.rb +9 -9
  39. data/lib/ecoportal/api/graphql/base/page/data_field/plain_text.rb +17 -17
  40. data/lib/ecoportal/api/graphql/base/page/data_field/rich_text.rb +26 -26
  41. data/lib/ecoportal/api/graphql/base/page/data_field/signature.rb +9 -9
  42. data/lib/ecoportal/api/graphql/base/page/data_field/smart_fill.rb +17 -17
  43. data/lib/ecoportal/api/graphql/base/page/data_field/table.rb +9 -9
  44. data/lib/ecoportal/api/graphql/base/page/data_field/tag_field.rb +21 -21
  45. data/lib/ecoportal/api/graphql/base/page/phased/stage.rb +51 -0
  46. data/lib/ecoportal/api/graphql/base/page/phased.rb +15 -15
  47. data/lib/ecoportal/api/graphql/base/page/section.rb +48 -48
  48. data/lib/ecoportal/api/graphql/base/page_info.rb +12 -12
  49. data/lib/ecoportal/api/graphql/base/pages_workflow/operation_interface.rb +39 -39
  50. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/assign_to.rb +27 -27
  51. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/send_notification.rb +30 -30
  52. data/lib/ecoportal/api/graphql/base/pages_workflow/recipient_config.rb +34 -34
  53. data/lib/ecoportal/api/graphql/base/pages_workflow.rb +35 -35
  54. data/lib/ecoportal/api/graphql/base/person_member.rb +22 -22
  55. data/lib/ecoportal/api/graphql/base/preview_page.rb +23 -23
  56. data/lib/ecoportal/api/graphql/base/register.rb +1 -1
  57. data/lib/ecoportal/api/graphql/base/resource.rb +13 -13
  58. data/lib/ecoportal/api/graphql/base/template/change_log_entry.rb +118 -0
  59. data/lib/ecoportal/api/graphql/base/template.rb +2 -0
  60. data/lib/ecoportal/api/graphql/builder/action.rb +41 -41
  61. data/lib/ecoportal/api/graphql/builder/location_structure/draft.rb +64 -64
  62. data/lib/ecoportal/api/graphql/builder/location_structure.rb +40 -40
  63. data/lib/ecoportal/api/graphql/builder/register/preset_view.rb +84 -84
  64. data/lib/ecoportal/api/graphql/builder/register.rb +49 -49
  65. data/lib/ecoportal/api/graphql/builder/template.rb +28 -0
  66. data/lib/ecoportal/api/graphql/builder/template_builder.rb +21 -2
  67. data/lib/ecoportal/api/graphql/compat/page_reference.rb +23 -23
  68. data/lib/ecoportal/api/graphql/compat/registers.rb +84 -84
  69. data/lib/ecoportal/api/graphql/compat/search_results.rb +33 -33
  70. data/lib/ecoportal/api/graphql/compat.rb +17 -17
  71. data/lib/ecoportal/api/graphql/concerns/data_field_access.rb +71 -71
  72. data/lib/ecoportal/api/graphql/concerns/fragment_definitions.rb +68 -68
  73. data/lib/ecoportal/api/graphql/concerns/snake_camel_access.rb +60 -60
  74. data/lib/ecoportal/api/graphql/connection/preset_view.rb +11 -11
  75. data/lib/ecoportal/api/graphql/connection/template_change_log.rb +19 -0
  76. data/lib/ecoportal/api/graphql/connection.rb +1 -0
  77. data/lib/ecoportal/api/graphql/diff/change.rb +7 -2
  78. data/lib/ecoportal/api/graphql/diff/command_synthesizer.rb +19 -1
  79. data/lib/ecoportal/api/graphql/diff/version_diff.rb +13 -6
  80. data/lib/ecoportal/api/graphql/error/locations_error/fetch_nested.rb +51 -51
  81. data/lib/ecoportal/api/graphql/error/locations_error.rb +28 -28
  82. data/lib/ecoportal/api/graphql/error/locations_validation_error.rb +20 -20
  83. data/lib/ecoportal/api/graphql/error/validation_errors.rb +28 -28
  84. data/lib/ecoportal/api/graphql/error.rb +12 -12
  85. data/lib/ecoportal/api/graphql/file_upload.rb +10 -10
  86. data/lib/ecoportal/api/graphql/fragment/action.rb +65 -65
  87. data/lib/ecoportal/api/graphql/fragment/action_category.rb +17 -17
  88. data/lib/ecoportal/api/graphql/fragment/contractor_entity.rb +20 -20
  89. data/lib/ecoportal/api/graphql/fragment/locations_error.rb +19 -19
  90. data/lib/ecoportal/api/graphql/fragment/page.rb +1 -0
  91. data/lib/ecoportal/api/graphql/fragment/pages/common_page_union.rb +2 -0
  92. data/lib/ecoportal/api/graphql/fragment/pages.rb +15 -15
  93. data/lib/ecoportal/api/graphql/fragment/pagination.rb +17 -17
  94. data/lib/ecoportal/api/graphql/fragment/template_change_log.rb +102 -0
  95. data/lib/ecoportal/api/graphql/fragment.rb +1 -0
  96. data/lib/ecoportal/api/graphql/helpers/locations_tree.rb +41 -41
  97. data/lib/ecoportal/api/graphql/helpers.rb +10 -10
  98. data/lib/ecoportal/api/graphql/input/action/archive.rb +14 -14
  99. data/lib/ecoportal/api/graphql/input/action/create.rb +13 -13
  100. data/lib/ecoportal/api/graphql/input/action.rb +14 -14
  101. data/lib/ecoportal/api/graphql/input/contractor_entity/create.rb +14 -14
  102. data/lib/ecoportal/api/graphql/input/contractor_entity/destroy.rb +13 -13
  103. data/lib/ecoportal/api/graphql/input/delta_input.rb +16 -16
  104. data/lib/ecoportal/api/graphql/input/id_diff.rb +11 -11
  105. data/lib/ecoportal/api/graphql/input/location_structure/archive_command.rb +13 -13
  106. data/lib/ecoportal/api/graphql/input/location_structure/delete_command.rb +13 -13
  107. data/lib/ecoportal/api/graphql/input/location_structure/draft/create.rb +15 -15
  108. data/lib/ecoportal/api/graphql/input/location_structure/draft/delete.rb +15 -15
  109. data/lib/ecoportal/api/graphql/input/location_structure/draft/drop_bad_commands.rb +16 -16
  110. data/lib/ecoportal/api/graphql/input/location_structure/draft/publish.rb +16 -16
  111. data/lib/ecoportal/api/graphql/input/location_structure/draft.rb +19 -19
  112. data/lib/ecoportal/api/graphql/input/location_structure/insert_command.rb +21 -13
  113. data/lib/ecoportal/api/graphql/input/location_structure/move_command.rb +14 -14
  114. data/lib/ecoportal/api/graphql/input/location_structure/reorder_command.rb +13 -13
  115. data/lib/ecoportal/api/graphql/input/location_structure/unarchive_command.rb +13 -13
  116. data/lib/ecoportal/api/graphql/input/location_structure.rb +20 -20
  117. data/lib/ecoportal/api/graphql/input/page/archive.rb +14 -14
  118. data/lib/ecoportal/api/graphql/input/page/build_from_template.rb +13 -13
  119. data/lib/ecoportal/api/graphql/input/page/create_draft.rb +13 -13
  120. data/lib/ecoportal/api/graphql/input/page/create_from_template.rb +18 -18
  121. data/lib/ecoportal/api/graphql/input/page/delete_draft.rb +13 -13
  122. data/lib/ecoportal/api/graphql/input/page/publish_draft.rb +13 -13
  123. data/lib/ecoportal/api/graphql/input/page/review_task.rb +27 -14
  124. data/lib/ecoportal/api/graphql/input/page/unarchive.rb +14 -14
  125. data/lib/ecoportal/api/graphql/input/page.rb +26 -26
  126. data/lib/ecoportal/api/graphql/input/preset_view/create.rb +18 -18
  127. data/lib/ecoportal/api/graphql/input/preset_view/permission.rb +16 -16
  128. data/lib/ecoportal/api/graphql/input/preset_view/update.rb +1 -1
  129. data/lib/ecoportal/api/graphql/input/preset_view.rb +14 -14
  130. data/lib/ecoportal/api/graphql/input/register/create.rb +18 -18
  131. data/lib/ecoportal/api/graphql/input/register/update.rb +15 -15
  132. data/lib/ecoportal/api/graphql/input/register.rb +13 -13
  133. data/lib/ecoportal/api/graphql/input/search.rb +13 -13
  134. data/lib/ecoportal/api/graphql/input/search_conf/ai_generator.rb +234 -234
  135. data/lib/ecoportal/api/graphql/input/search_filter.rb +12 -12
  136. data/lib/ecoportal/api/graphql/input/search_sorter.rb +11 -11
  137. data/lib/ecoportal/api/graphql/input/workflow_command/add_action_tag.rb +18 -18
  138. data/lib/ecoportal/api/graphql/input/workflow_command/add_binding.rb +18 -18
  139. data/lib/ecoportal/api/graphql/input/workflow_command/add_comment_tagging_user_group.rb +18 -18
  140. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_direct_strategy_user.rb +18 -18
  141. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_strategy.rb +18 -18
  142. data/lib/ecoportal/api/graphql/input/workflow_command/add_direct_strategy_user.rb +18 -18
  143. data/lib/ecoportal/api/graphql/input/workflow_command/add_field.rb +10 -9
  144. data/lib/ecoportal/api/graphql/input/workflow_command/add_force.rb +18 -18
  145. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_field_config.rb +23 -23
  146. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_helper.rb +18 -18
  147. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation.rb +18 -18
  148. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_direct_strategy_user.rb +18 -18
  149. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_strategy.rb +18 -18
  150. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_action_type.rb +18 -18
  151. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_filter.rb +18 -18
  152. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_people_field.rb +18 -18
  153. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_task_config.rb +18 -18
  154. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_user.rb +18 -18
  155. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback.rb +23 -23
  156. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback_action.rb +18 -18
  157. data/lib/ecoportal/api/graphql/input/workflow_command/add_section.rb +18 -18
  158. data/lib/ecoportal/api/graphql/input/workflow_command/add_select_field_option.rb +25 -19
  159. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_section.rb +18 -18
  160. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_tag.rb +18 -18
  161. data/lib/ecoportal/api/graphql/input/workflow_command/add_strategy.rb +18 -18
  162. data/lib/ecoportal/api/graphql/input/workflow_command/add_task.rb +18 -18
  163. data/lib/ecoportal/api/graphql/input/workflow_command/add_task_assignment_user_group.rb +18 -18
  164. data/lib/ecoportal/api/graphql/input/workflow_command/add_workflow_callback.rb +18 -18
  165. data/lib/ecoportal/api/graphql/input/workflow_command/collapse_section.rb +18 -18
  166. data/lib/ecoportal/api/graphql/input/workflow_command/edit_binding.rb +18 -18
  167. data/lib/ecoportal/api/graphql/input/workflow_command/edit_creator_permissions.rb +18 -18
  168. data/lib/ecoportal/api/graphql/input/workflow_command/edit_default_strategy.rb +18 -18
  169. data/lib/ecoportal/api/graphql/input/workflow_command/edit_field_configuration.rb +7 -2
  170. data/lib/ecoportal/api/graphql/input/workflow_command/edit_force.rb +21 -18
  171. data/lib/ecoportal/api/graphql/input/workflow_command/edit_gauge_field_stop.rb +19 -19
  172. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_field_config.rb +19 -19
  173. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_helper.rb +18 -18
  174. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation.rb +18 -18
  175. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation_strategy.rb +18 -18
  176. data/lib/ecoportal/api/graphql/input/workflow_command/edit_reminder.rb +18 -18
  177. data/lib/ecoportal/api/graphql/input/workflow_command/edit_required_sign_offs.rb +18 -18
  178. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_comment_tagging.rb +18 -18
  179. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_task_assignment.rb +18 -18
  180. data/lib/ecoportal/api/graphql/input/workflow_command/edit_scheduled_callback.rb +22 -22
  181. data/lib/ecoportal/api/graphql/input/workflow_command/edit_section_header.rb +18 -18
  182. data/lib/ecoportal/api/graphql/input/workflow_command/edit_select_field_option.rb +23 -19
  183. data/lib/ecoportal/api/graphql/input/workflow_command/edit_stage.rb +18 -18
  184. data/lib/ecoportal/api/graphql/input/workflow_command/edit_strategy.rb +18 -18
  185. data/lib/ecoportal/api/graphql/input/workflow_command/edit_task_due.rb +18 -18
  186. data/lib/ecoportal/api/graphql/input/workflow_command/edit_template_basic_settings.rb +7 -2
  187. data/lib/ecoportal/api/graphql/input/workflow_command/edit_trigger.rb +18 -18
  188. data/lib/ecoportal/api/graphql/input/workflow_command/expand_section.rb +18 -18
  189. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/contractor_entities.rb +28 -24
  190. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/cross_reference.rb +8 -2
  191. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/gauge.rb +20 -20
  192. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/location_field.rb +24 -24
  193. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/plain_text.rb +8 -2
  194. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/signature.rb +20 -20
  195. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/table.rb +25 -25
  196. data/lib/ecoportal/api/graphql/input/workflow_command/manage_copy_page_configuration.rb +47 -0
  197. data/lib/ecoportal/api/graphql/input/workflow_command/move_stage.rb +18 -18
  198. data/lib/ecoportal/api/graphql/input/workflow_command/remove_action_tag.rb +18 -18
  199. data/lib/ecoportal/api/graphql/input/workflow_command/remove_binding.rb +18 -18
  200. data/lib/ecoportal/api/graphql/input/workflow_command/remove_callback.rb +18 -18
  201. data/lib/ecoportal/api/graphql/input/workflow_command/remove_comment_tagging_user_group.rb +18 -18
  202. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_direct_strategy_user.rb +18 -18
  203. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_strategy.rb +18 -18
  204. data/lib/ecoportal/api/graphql/input/workflow_command/remove_direct_strategy_user.rb +18 -18
  205. data/lib/ecoportal/api/graphql/input/workflow_command/remove_field.rb +18 -18
  206. data/lib/ecoportal/api/graphql/input/workflow_command/remove_force.rb +18 -18
  207. data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_helper.rb +18 -18
  208. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation.rb +18 -18
  209. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_direct_strategy_user.rb +18 -18
  210. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_strategy.rb +18 -18
  211. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_action_type.rb +18 -18
  212. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_filter.rb +18 -18
  213. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_people_field.rb +18 -18
  214. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_task_config.rb +18 -18
  215. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_user.rb +18 -18
  216. data/lib/ecoportal/api/graphql/input/workflow_command/remove_scheduled_callback.rb +18 -18
  217. data/lib/ecoportal/api/graphql/input/workflow_command/remove_section.rb +18 -18
  218. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage.rb +18 -18
  219. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_section.rb +18 -18
  220. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_tag.rb +18 -18
  221. data/lib/ecoportal/api/graphql/input/workflow_command/remove_strategy.rb +18 -18
  222. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task.rb +18 -18
  223. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_assignment_user_group.rb +18 -18
  224. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_due.rb +18 -18
  225. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_priority_level.rb +18 -18
  226. data/lib/ecoportal/api/graphql/input/workflow_command.rb +3 -0
  227. data/lib/ecoportal/api/graphql/interface/base_page.rb +14 -0
  228. data/lib/ecoportal/api/graphql/interface/location_structure/node.rb +43 -43
  229. data/lib/ecoportal/api/graphql/interface/location_structure.rb +14 -14
  230. data/lib/ecoportal/api/graphql/interface.rb +11 -11
  231. data/lib/ecoportal/api/graphql/logic/base_model.rb +15 -15
  232. data/lib/ecoportal/api/graphql/logic/base_query.rb +260 -193
  233. data/lib/ecoportal/api/graphql/logic/mutation.rb +59 -59
  234. data/lib/ecoportal/api/graphql/logic/payload.rb +42 -42
  235. data/lib/ecoportal/api/graphql/logic/query.rb +23 -23
  236. data/lib/ecoportal/api/graphql/logic/query_array.rb +30 -30
  237. data/lib/ecoportal/api/graphql/logic/query_connection.rb +48 -48
  238. data/lib/ecoportal/api/graphql/logic.rb +18 -18
  239. data/lib/ecoportal/api/graphql/model/account.rb +15 -15
  240. data/lib/ecoportal/api/graphql/model/action.rb +22 -22
  241. data/lib/ecoportal/api/graphql/model/ai_summary_version.rb +10 -10
  242. data/lib/ecoportal/api/graphql/model/contractor_entity.rb +12 -12
  243. data/lib/ecoportal/api/graphql/model/field.rb +10 -10
  244. data/lib/ecoportal/api/graphql/model/file_attachment.rb +10 -10
  245. data/lib/ecoportal/api/graphql/model/file_container.rb +11 -11
  246. data/lib/ecoportal/api/graphql/model/location_node.rb +14 -14
  247. data/lib/ecoportal/api/graphql/model/location_structure/draft/structure.rb +15 -15
  248. data/lib/ecoportal/api/graphql/model/location_structure/draft.rb +15 -15
  249. data/lib/ecoportal/api/graphql/model/location_structure.rb +16 -16
  250. data/lib/ecoportal/api/graphql/model/organization.rb +9 -0
  251. data/lib/ecoportal/api/graphql/model/page/basic.rb +14 -14
  252. data/lib/ecoportal/api/graphql/model/page/data_field.rb +12 -12
  253. data/lib/ecoportal/api/graphql/model/page/phased/stage.rb +14 -14
  254. data/lib/ecoportal/api/graphql/model/page/phased.rb +17 -0
  255. data/lib/ecoportal/api/graphql/model/page/section.rb +12 -12
  256. data/lib/ecoportal/api/graphql/model/page_union.rb +21 -21
  257. data/lib/ecoportal/api/graphql/model/pages_workflow.rb +20 -20
  258. data/lib/ecoportal/api/graphql/model/preset_view.rb +10 -10
  259. data/lib/ecoportal/api/graphql/model/preview_page.rb +10 -10
  260. data/lib/ecoportal/api/graphql/model/register.rb +10 -10
  261. data/lib/ecoportal/api/graphql/model/resource.rb +13 -13
  262. data/lib/ecoportal/api/graphql/model/template/change_log_entry.rb +19 -0
  263. data/lib/ecoportal/api/graphql/model/template.rb +4 -1
  264. data/lib/ecoportal/api/graphql/model/user.rb +14 -14
  265. data/lib/ecoportal/api/graphql/mutation/action/archive.rb +41 -41
  266. data/lib/ecoportal/api/graphql/mutation/action/create.rb +40 -40
  267. data/lib/ecoportal/api/graphql/mutation/action/update.rb +40 -40
  268. data/lib/ecoportal/api/graphql/mutation/action.rb +14 -14
  269. data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +1 -1
  270. data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +1 -1
  271. data/lib/ecoportal/api/graphql/mutation/ai_summary.rb +13 -13
  272. data/lib/ecoportal/api/graphql/mutation/contractor_entity/create.rb +40 -40
  273. data/lib/ecoportal/api/graphql/mutation/contractor_entity/destroy.rb +40 -40
  274. data/lib/ecoportal/api/graphql/mutation/contractor_entity/update.rb +40 -40
  275. data/lib/ecoportal/api/graphql/mutation/location_structure/apply_commands.rb +54 -54
  276. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/add_commands.rb +55 -55
  277. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/create.rb +54 -54
  278. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/delete.rb +43 -43
  279. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/drop_bad_commands.rb +56 -56
  280. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/publish.rb +66 -66
  281. data/lib/ecoportal/api/graphql/mutation/location_structure/draft.rb +18 -18
  282. data/lib/ecoportal/api/graphql/mutation/location_structure.rb +13 -13
  283. data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +1 -1
  284. data/lib/ecoportal/api/graphql/mutation/page/archive.rb +40 -40
  285. data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +1 -1
  286. data/lib/ecoportal/api/graphql/mutation/page/build_from_template.rb +50 -50
  287. data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +1 -1
  288. data/lib/ecoportal/api/graphql/mutation/page/create_from_template.rb +43 -43
  289. data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +1 -1
  290. data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +1 -1
  291. data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +1 -1
  292. data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +1 -1
  293. data/lib/ecoportal/api/graphql/mutation/page/unarchive.rb +40 -40
  294. data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +1 -1
  295. data/lib/ecoportal/api/graphql/mutation/page/update.rb +40 -40
  296. data/lib/ecoportal/api/graphql/mutation/page.rb +28 -28
  297. data/lib/ecoportal/api/graphql/mutation/preset_view/create.rb +35 -35
  298. data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +1 -1
  299. data/lib/ecoportal/api/graphql/mutation/preset_view/permission.rb +37 -37
  300. data/lib/ecoportal/api/graphql/mutation/preset_view/update.rb +35 -35
  301. data/lib/ecoportal/api/graphql/mutation/preset_view.rb +15 -15
  302. data/lib/ecoportal/api/graphql/mutation/register/create.rb +35 -35
  303. data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +1 -1
  304. data/lib/ecoportal/api/graphql/mutation/register/update.rb +35 -35
  305. data/lib/ecoportal/api/graphql/mutation/register.rb +14 -14
  306. data/lib/ecoportal/api/graphql/payload/action/archive.rb +13 -13
  307. data/lib/ecoportal/api/graphql/payload/action/create.rb +13 -13
  308. data/lib/ecoportal/api/graphql/payload/action/update.rb +13 -13
  309. data/lib/ecoportal/api/graphql/payload/action.rb +14 -14
  310. data/lib/ecoportal/api/graphql/payload/ai_summary_generate.rb +12 -12
  311. data/lib/ecoportal/api/graphql/payload/contractor_entity/create.rb +13 -13
  312. data/lib/ecoportal/api/graphql/payload/contractor_entity/destroy.rb +12 -12
  313. data/lib/ecoportal/api/graphql/payload/contractor_entity/update.rb +12 -12
  314. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_jobs.rb +2 -2
  315. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_workflows.rb +2 -2
  316. data/lib/ecoportal/api/graphql/payload/location_structure/apply_commands.rb +51 -51
  317. data/lib/ecoportal/api/graphql/payload/location_structure/command_execution_result.rb +50 -50
  318. data/lib/ecoportal/api/graphql/payload/location_structure/draft/add_commands.rb +30 -30
  319. data/lib/ecoportal/api/graphql/payload/location_structure/draft/delete.rb +30 -30
  320. data/lib/ecoportal/api/graphql/payload/location_structure/draft/drop_bad_commands.rb +43 -43
  321. data/lib/ecoportal/api/graphql/payload/location_structure/draft/publish.rb +63 -63
  322. data/lib/ecoportal/api/graphql/payload/location_structure/draft.rb +18 -18
  323. data/lib/ecoportal/api/graphql/payload/location_structure.rb +14 -14
  324. data/lib/ecoportal/api/graphql/payload/ok_payload.rb +1 -1
  325. data/lib/ecoportal/api/graphql/payload/page/archive.rb +13 -13
  326. data/lib/ecoportal/api/graphql/payload/page/build_from_template.rb +13 -13
  327. data/lib/ecoportal/api/graphql/payload/page/create_from_template.rb +13 -13
  328. data/lib/ecoportal/api/graphql/payload/page/draft.rb +1 -1
  329. data/lib/ecoportal/api/graphql/payload/page/review_task.rb +1 -1
  330. data/lib/ecoportal/api/graphql/payload/page/unarchive.rb +13 -13
  331. data/lib/ecoportal/api/graphql/payload/page/update.rb +13 -13
  332. data/lib/ecoportal/api/graphql/payload/preset_view.rb +1 -1
  333. data/lib/ecoportal/api/graphql/payload/register.rb +1 -1
  334. data/lib/ecoportal/api/graphql/query/action.rb +33 -33
  335. data/lib/ecoportal/api/graphql/query/action_categories.rb +53 -53
  336. data/lib/ecoportal/api/graphql/query/actions.rb +43 -43
  337. data/lib/ecoportal/api/graphql/query/contractor_entities.rb +53 -53
  338. data/lib/ecoportal/api/graphql/query/file_upload_signature.rb +76 -76
  339. data/lib/ecoportal/api/graphql/query/location_classifications.rb +39 -39
  340. data/lib/ecoportal/api/graphql/query/page_delta.rb +47 -47
  341. data/lib/ecoportal/api/graphql/query/pages.rb +59 -59
  342. data/lib/ecoportal/api/graphql/query/person_members.rb +76 -0
  343. data/lib/ecoportal/api/graphql/query/register_preset_views.rb +1 -1
  344. data/lib/ecoportal/api/graphql/query/register_preview_pages.rb +83 -83
  345. data/lib/ecoportal/api/graphql/query/template_change_log.rb +118 -0
  346. data/lib/ecoportal/api/graphql/query/templates.rb +53 -53
  347. data/lib/ecoportal/api/graphql/query.rb +2 -0
  348. data/lib/ecoportal/api/graphql_version.rb +1 -1
  349. data/lib/ecoportal/api-graphql.rb +10 -10
  350. metadata +10 -8
  351. data/lib/ecoportal/api/common/graphql/CLAUDE.md +0 -36
  352. data/lib/ecoportal/api/common/graphql/model/CLAUDE.md +0 -28
  353. data/lib/ecoportal/api/graphql/CLAUDE.md +0 -37
  354. data/lib/ecoportal/api/graphql/base/CLAUDE.md +0 -50
  355. data/lib/ecoportal/api/graphql/builder/CLAUDE.md +0 -65
@@ -1,18 +1,18 @@
1
- module Ecoportal::API::GraphQL::Base::Page
2
- class DataField
3
- # AI-generated summary field.
4
- # Content is generated server-side via generateAiSummary mutation (Bedrock Claude).
5
- # Not settable via DataFieldInput — use the dedicated mutation instead.
6
- #
7
- # instructions: the AI prompt configured on this field in the template.
8
- # trigger: "submitted" | "approved" — when generation fires.
9
- # trigger_stage_ids: stages that trigger generation (empty = all stages).
10
- # text_format: "simple_text" | "bullet_points" | "numbered_list" | "headings"
11
- class AiSummary < DataField
12
- passthrough :aiSummary, :generatedAt, :instructions
13
- passthrough :trigger, :textFormat
14
- passarray :triggerStageIds, :fieldConfigurations
15
- passboolean :alreadyRated
16
- end
17
- end
18
- end
1
+ module Ecoportal::API::GraphQL::Base::Page
2
+ class DataField
3
+ # AI-generated summary field.
4
+ # Content is generated server-side via generateAiSummary mutation (Bedrock Claude).
5
+ # Not settable via DataFieldInput — use the dedicated mutation instead.
6
+ #
7
+ # instructions: the AI prompt configured on this field in the template.
8
+ # trigger: "submitted" | "approved" — when generation fires.
9
+ # trigger_stage_ids: stages that trigger generation (empty = all stages).
10
+ # text_format: "simple_text" | "bullet_points" | "numbered_list" | "headings"
11
+ class AiSummary < DataField
12
+ passthrough :aiSummary, :generatedAt, :instructions
13
+ passthrough :trigger, :textFormat
14
+ passarray :triggerStageIds, :fieldConfigurations
15
+ passboolean :alreadyRated
16
+ end
17
+ end
18
+ end
@@ -1,29 +1,29 @@
1
- module Ecoportal::API::GraphQL::Base::Page
2
- class DataField
3
- class Checklist < DataField
4
- passarray :items # each: { id:, label:, checked: }
5
- passthrough :complete
6
-
7
- # Check/uncheck an item by label or id.
8
- def check(label_or_id, checked: true)
9
- item = (doc['items'] || []).find { |i| i['label'] == label_or_id.to_s || i['id'] == label_or_id.to_s }
10
- return unless item
11
-
12
- item['checked'] = checked
13
- end
14
-
15
- def as_input
16
- return nil unless dirty?
17
-
18
- {
19
- checklist: {
20
- id: id,
21
- # rubocop:disable Style/DoubleNegation
22
- items: (doc['items'] || []).map { |i| { id: i['id'], checked: !!i['checked'] } }
23
- # rubocop:enable Style/DoubleNegation
24
- }
25
- }
26
- end
27
- end
28
- end
29
- end
1
+ module Ecoportal::API::GraphQL::Base::Page
2
+ class DataField
3
+ class Checklist < DataField
4
+ passarray :items # each: { id:, label:, checked: }
5
+ passthrough :complete
6
+
7
+ # Check/uncheck an item by label or id.
8
+ def check(label_or_id, checked: true)
9
+ item = (doc['items'] || []).find { |i| i['label'] == label_or_id.to_s || i['id'] == label_or_id.to_s }
10
+ return unless item
11
+
12
+ item['checked'] = checked
13
+ end
14
+
15
+ def as_input
16
+ return nil unless dirty?
17
+
18
+ {
19
+ checklist: {
20
+ id: id,
21
+ # rubocop:disable Style/DoubleNegation
22
+ items: (doc['items'] || []).map { |i| { id: i['id'], checked: !!i['checked'] } }
23
+ # rubocop:enable Style/DoubleNegation
24
+ }
25
+ }
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,4 +1,4 @@
1
- module Ecoportal::API::GraphQL::Base::Page
1
+ module Ecoportal::API::GraphQL::Base::Page
2
2
  class DataField
3
3
  # Cross-reference field — links to pages in another register.
4
4
  class CrossReference < DataField
@@ -1,23 +1,23 @@
1
- module Ecoportal::API::GraphQL::Base::Page
2
- class DataField
3
- # Wraps Date data field. Mapped from __typename 'Date'.
4
- # value is an ISO8601DateTime string (e.g. "2024-11-25T08:30:00+13:00").
5
- class DateField < DataField
6
- # value is nested: { dateTime: "...", timeZone: "..." } or raw string
7
- def value
8
- v = doc['value']
9
- v.is_a?(Hash) ? v['dateTime'] : v
10
- end
11
-
12
- def value=(iso8601_string)
13
- doc['value'] = iso8601_string
14
- end
15
-
16
- def as_input
17
- return nil unless dirty?
18
-
19
- { date: { id: id, value: value } }
20
- end
21
- end
22
- end
23
- end
1
+ module Ecoportal::API::GraphQL::Base::Page
2
+ class DataField
3
+ # Wraps Date data field. Mapped from __typename 'Date'.
4
+ # value is an ISO8601DateTime string (e.g. "2024-11-25T08:30:00+13:00").
5
+ class DateField < DataField
6
+ # value is nested: { dateTime: "...", timeZone: "..." } or raw string
7
+ def value
8
+ v = doc['value']
9
+ v.is_a?(Hash) ? v['dateTime'] : v
10
+ end
11
+
12
+ def value=(iso8601_string)
13
+ doc['value'] = iso8601_string
14
+ end
15
+
16
+ def as_input
17
+ return nil unless dirty?
18
+
19
+ { date: { id: id, value: value } }
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,24 +1,24 @@
1
- module Ecoportal::API::GraphQL::Base::Page
2
- class DataField
3
- class Geo < DataField
4
- passthrough :address, :coordinates # coordinates: { lat:, lon: }
5
-
6
- def address=(new_address)
7
- doc['address'] = new_address
8
- end
9
-
10
- def coordinates=(lat_lon_hash)
11
- doc['coordinates'] = lat_lon_hash
12
- end
13
-
14
- def as_input
15
- return nil unless dirty?
16
-
17
- payload = { id: id }
18
- payload[:address] = address if address
19
- payload[:coordinates] = coordinates if coordinates
20
- { geo: payload }
21
- end
22
- end
23
- end
24
- end
1
+ module Ecoportal::API::GraphQL::Base::Page
2
+ class DataField
3
+ class Geo < DataField
4
+ passthrough :address, :coordinates # coordinates: { lat:, lon: }
5
+
6
+ def address=(new_address)
7
+ doc['address'] = new_address
8
+ end
9
+
10
+ def coordinates=(lat_lon_hash)
11
+ doc['coordinates'] = lat_lon_hash
12
+ end
13
+
14
+ def as_input
15
+ return nil unless dirty?
16
+
17
+ payload = { id: id }
18
+ payload[:address] = address if address
19
+ payload[:coordinates] = coordinates if coordinates
20
+ { geo: payload }
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,4 +1,4 @@
1
- module Ecoportal::API::GraphQL::Base::Page
1
+ module Ecoportal::API::GraphQL::Base::Page
2
2
  class DataField
3
3
  # Image gallery field.
4
4
  # ★ WRITE PATH BROKEN (schema-invalid, live-verified 2026-08): `ImageGalleryInput` has no
@@ -1,8 +1,8 @@
1
- module Ecoportal::API::GraphQL::Base::Page
2
- class DataField
3
- # Legal obligation / law snippets field — read access only.
4
- class Law < DataField
5
- passarray :laws # each: { id:, content: }
6
- end
7
- end
8
- end
1
+ module Ecoportal::API::GraphQL::Base::Page
2
+ class DataField
3
+ # Legal obligation / law snippets field — read access only.
4
+ class Law < DataField
5
+ passarray :laws # each: { id:, content: }
6
+ end
7
+ end
8
+ end
@@ -1,9 +1,9 @@
1
- module Ecoportal::API::GraphQL::Base::Page
2
- class DataField
3
- # Mailbox field — email inbox linked to this field.
4
- # Managed by the system; not settable via script.
5
- class Mailbox < DataField
6
- passthrough :email, :enabled
7
- end
8
- end
9
- end
1
+ module Ecoportal::API::GraphQL::Base::Page
2
+ class DataField
3
+ # Mailbox field — email inbox linked to this field.
4
+ # Managed by the system; not settable via script.
5
+ class Mailbox < DataField
6
+ passthrough :email, :enabled
7
+ end
8
+ end
9
+ end
@@ -1,17 +1,17 @@
1
- module Ecoportal::API::GraphQL::Base::Page
2
- class DataField
3
- class PlainText < DataField
4
- passthrough :value
5
-
6
- def value=(new_value)
7
- doc['value'] = new_value
8
- end
9
-
10
- def as_input
11
- return nil unless dirty?
12
-
13
- { plainText: { id: id, value: value } }
14
- end
15
- end
16
- end
17
- end
1
+ module Ecoportal::API::GraphQL::Base::Page
2
+ class DataField
3
+ class PlainText < DataField
4
+ passthrough :value
5
+
6
+ def value=(new_value)
7
+ doc['value'] = new_value
8
+ end
9
+
10
+ def as_input
11
+ return nil unless dirty?
12
+
13
+ { plainText: { id: id, value: value } }
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,26 +1,26 @@
1
- module Ecoportal::API::GraphQL::Base::Page
2
- class DataField
3
- class RichText < DataField
4
- passthrough :content
5
-
6
- def content=(new_content)
7
- doc['content'] = new_content
8
- end
9
-
10
- # v2 compat alias — RichText value is stored as content
11
- def value
12
- content
13
- end
14
-
15
- def value=(new_value)
16
- self.content = new_value
17
- end
18
-
19
- def as_input
20
- return nil unless dirty?
21
-
22
- { richText: { id: id, content: content } }
23
- end
24
- end
25
- end
26
- end
1
+ module Ecoportal::API::GraphQL::Base::Page
2
+ class DataField
3
+ class RichText < DataField
4
+ passthrough :content
5
+
6
+ def content=(new_content)
7
+ doc['content'] = new_content
8
+ end
9
+
10
+ # v2 compat alias — RichText value is stored as content
11
+ def value
12
+ content
13
+ end
14
+
15
+ def value=(new_value)
16
+ self.content = new_value
17
+ end
18
+
19
+ def as_input
20
+ return nil unless dirty?
21
+
22
+ { richText: { id: id, content: content } }
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,9 +1,9 @@
1
- module Ecoportal::API::GraphQL::Base::Page
2
- class DataField
3
- # Digital signature capture field — read access only.
4
- # Signatures are captured through the UI; not settable via script.
5
- class Signature < DataField
6
- passthrough :signedAt, :signerName
7
- end
8
- end
9
- end
1
+ module Ecoportal::API::GraphQL::Base::Page
2
+ class DataField
3
+ # Digital signature capture field — read access only.
4
+ # Signatures are captured through the UI; not settable via script.
5
+ class Signature < DataField
6
+ passthrough :signedAt, :signerName
7
+ end
8
+ end
9
+ end
@@ -1,17 +1,17 @@
1
- module Ecoportal::API::GraphQL::Base::Page
2
- class DataField
3
- # SmartFill field — AI-auto-populated field using a template-defined prompt.
4
- # Value is generated server-side via Bedrock; trigger_type controls when.
5
- #
6
- # Read-only for DataFieldInput — use the generateSmartFill GraphQL mutation
7
- # (or its trigger) to populate. The instructions field is template-configured
8
- # and can be reviewed/updated via template management.
9
- class SmartFill < DataField
10
- passthrough :status # pending | generating | success | failed
11
- passthrough :trigger_type # manual | snapshot | live
12
- passthrough :instructions # the AI prompt configured on the template field
13
- passboolean :edit_enabled
14
- passthrough :generated_at
15
- end
16
- end
17
- end
1
+ module Ecoportal::API::GraphQL::Base::Page
2
+ class DataField
3
+ # SmartFill field — AI-auto-populated field using a template-defined prompt.
4
+ # Value is generated server-side via Bedrock; trigger_type controls when.
5
+ #
6
+ # Read-only for DataFieldInput — use the generateSmartFill GraphQL mutation
7
+ # (or its trigger) to populate. The instructions field is template-configured
8
+ # and can be reviewed/updated via template management.
9
+ class SmartFill < DataField
10
+ passthrough :status # pending | generating | success | failed
11
+ passthrough :trigger_type # manual | snapshot | live
12
+ passthrough :instructions # the AI prompt configured on the template field
13
+ passboolean :edit_enabled
14
+ passthrough :generated_at
15
+ end
16
+ end
17
+ end
@@ -1,9 +1,9 @@
1
- module Ecoportal::API::GraphQL::Base::Page
2
- class DataField
3
- # Table / embedded structure field — read access only.
4
- # Complex structured data managed via its own mutation path.
5
- class Table < DataField
6
- passarray :rows
7
- end
8
- end
9
- end
1
+ module Ecoportal::API::GraphQL::Base::Page
2
+ class DataField
3
+ # Table / embedded structure field — read access only.
4
+ # Complex structured data managed via its own mutation path.
5
+ class Table < DataField
6
+ passarray :rows
7
+ end
8
+ end
9
+ end
@@ -1,21 +1,21 @@
1
- module Ecoportal::API::GraphQL::Base::Page
2
- class DataField
3
- # Location/tag field — mapped from __typename 'TagField'.
4
- class TagField < DataField
5
- passarray :locations # each: { id:, name: }
6
-
7
- def location_ids
8
- Array(locations).map { |l| l['id'] }.compact
9
- end
10
-
11
- def location_ids=(ids)
12
- doc['locations'] = Array(ids).map { |id_val| { 'id' => id_val } }
13
- end
14
-
15
- # NOTE: LocationFieldInput has NO location-value field — page locations are set at the
16
- # PAGE level (UpdatePageInput.page.locations, via Interface::BasePage#location_ids=),
17
- # not via the data field. So this field contributes no value to dataFields.updates;
18
- # it inherits DataField#as_input (nil). location_ids/= stay as field-level read/staging.
19
- end
20
- end
21
- end
1
+ module Ecoportal::API::GraphQL::Base::Page
2
+ class DataField
3
+ # Location/tag field — mapped from __typename 'TagField'.
4
+ class TagField < DataField
5
+ passarray :locations # each: { id:, name: }
6
+
7
+ def location_ids
8
+ Array(locations).map { |l| l['id'] }.compact
9
+ end
10
+
11
+ def location_ids=(ids)
12
+ doc['locations'] = Array(ids).map { |id_val| { 'id' => id_val } }
13
+ end
14
+
15
+ # NOTE: LocationFieldInput has NO location-value field — page locations are set at the
16
+ # PAGE level (UpdatePageInput.page.locations, via Interface::BasePage#location_ids=),
17
+ # not via the data field. So this field contributes no value to dataFields.updates;
18
+ # it inherits DataField#as_input (nil). location_ids/= stay as field-level read/staging.
19
+ end
20
+ end
21
+ end
@@ -10,6 +10,9 @@ module Ecoportal
10
10
  passkey :id
11
11
  passthrough :name, :ordering, :state
12
12
  passboolean :active, :started
13
+ # Per-stage tag set (Stage.tags in the schema). Fetched by the stageAttrs
14
+ # fragment; a component of #all_tags. Empty array when not queried.
15
+ passarray :tags
13
16
 
14
17
  class_resolver :callback_type_class, 'Ecoportal::API::GraphQL::Base::PagesWorkflow::CallbackType'
15
18
 
@@ -17,6 +20,54 @@ module Ecoportal
17
20
  # canonical field objects (filtered to this stage) rather than fresh dups.
18
21
  attr_writer :page_field_collection
19
22
 
23
+ # The owning page, resolved via the DoubleModel's NATIVE nesting reference rather
24
+ # than a manually-injected back-ref. A stage is embedded under the page as
25
+ # page -> stages (CollectionModel) -> stage, so `_parent` is the intermediate
26
+ # collection, NOT the page. `root` walks the whole `_parent` chain to the top of
27
+ # the doc model (the page), which is robust to that intermediate nesting.
28
+ #
29
+ # Returns the page for an embedded stage, or nil for a standalone stage whose root
30
+ # is itself (i.e. not a page — has no baseTags/otherTags/location_ids to fold in).
31
+ def page
32
+ top = root
33
+ top.equal?(self) ? nil : top
34
+ end
35
+
36
+ # location_ids redirect: the GraphQL Stage type has NO location field — locations
37
+ # are assigned at the PAGE level (page.locations { id }). So a stage's location ids
38
+ # are the page's location ids. Empty array for a standalone stage.
39
+ def location_ids
40
+ Array(page&.location_ids)
41
+ end
42
+
43
+ # The stage's fully-compiled tag set (client-side build of the backend-only
44
+ # "compiled_tags"), per the domain formula:
45
+ #
46
+ # Stage.all_tags = page.baseTags + page.location_ids + page.otherTags + stage.tags
47
+ #
48
+ # (page.location_ids — surfaced here via #location_ids — stands in for the per-stage
49
+ # "location_ids" of the formula: the GraphQL schema does NOT expose locations on the
50
+ # Stage type, they are assigned at the PAGE level.)
51
+ #
52
+ # Returns a de-duplicated Array of tag strings. For a standalone stage (no owning
53
+ # page) folds in only the stage's own tags.
54
+ def all_tags
55
+ (page_base_tags + location_ids + page_other_tags + Array(tags)).
56
+ compact.uniq
57
+ end
58
+
59
+ private
60
+
61
+ def page_base_tags
62
+ page ? Array(page.baseTags) : []
63
+ end
64
+
65
+ def page_other_tags
66
+ page ? Array(page.otherTags) : []
67
+ end
68
+
69
+ public
70
+
20
71
  def workflow_callbacks
21
72
  @workflow_callbacks ||= Array(doc['workflowCallbacks'] || []).map { |cb| callback_type_class.from_doc(cb) }
22
73
  end
@@ -1,15 +1,15 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Base
5
- module Page
6
- class Phased < Interface::BasePage
7
- require_relative 'phased/stage'
8
-
9
- embeds_many :stages, klass: Stage, read_only: true
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Base
5
+ module Page
6
+ class Phased < Interface::BasePage
7
+ require_relative 'phased/stage'
8
+
9
+ embeds_many :stages, klass: Stage, read_only: true
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,48 +1,48 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Base
5
- module Page
6
- # Wraps a SectionUnion doc (ContentSection or SplitSection).
7
- # Provides access to heading, type, and data fields within the section.
8
- class Section < Logic::BaseModel
9
- read_only!
10
-
11
- passkey :id
12
- passthrough :heading
13
-
14
- # __typename normalised to 'type' during initialisation
15
- passthrough :type
16
-
17
- def initialize(raw_doc = {})
18
- raw_doc = raw_doc.dup if raw_doc.is_a?(Hash)
19
- raw_doc['type'] ||= raw_doc['__typename'] if raw_doc.is_a?(Hash)
20
- super
21
- end
22
-
23
- # All data fields in this section.
24
- # ContentSection → dataFields
25
- # SplitSection → leftDataFields + rightDataFields (merged)
26
- def components
27
- all = (doc['dataFields'] || []) +
28
- (doc['leftDataFields'] || []) +
29
- (doc['rightDataFields'] || [])
30
- DataField::Collection.from_doc(all)
31
- end
32
-
33
- # v2 compat alias
34
- alias_method :data_fields, :components
35
-
36
- def content_section?
37
- type.to_s == 'ContentSection'
38
- end
39
-
40
- def split_section?
41
- type.to_s == 'SplitSection'
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Base
5
+ module Page
6
+ # Wraps a SectionUnion doc (ContentSection or SplitSection).
7
+ # Provides access to heading, type, and data fields within the section.
8
+ class Section < Logic::BaseModel
9
+ read_only!
10
+
11
+ passkey :id
12
+ passthrough :heading
13
+
14
+ # __typename normalised to 'type' during initialisation
15
+ passthrough :type
16
+
17
+ def initialize(raw_doc = {})
18
+ raw_doc = raw_doc.dup if raw_doc.is_a?(Hash)
19
+ raw_doc['type'] ||= raw_doc['__typename'] if raw_doc.is_a?(Hash)
20
+ super
21
+ end
22
+
23
+ # All data fields in this section.
24
+ # ContentSection → dataFields
25
+ # SplitSection → leftDataFields + rightDataFields (merged)
26
+ def components
27
+ all = (doc['dataFields'] || []) +
28
+ (doc['leftDataFields'] || []) +
29
+ (doc['rightDataFields'] || [])
30
+ DataField::Collection.from_doc(all)
31
+ end
32
+
33
+ # v2 compat alias
34
+ alias_method :data_fields, :components
35
+
36
+ def content_section?
37
+ type.to_s == 'ContentSection'
38
+ end
39
+
40
+ def split_section?
41
+ type.to_s == 'SplitSection'
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end