ecoportal-api-graphql 1.3.5 → 1.3.17
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +943 -477
- data/LICENSE +21 -21
- data/README.md +24 -24
- data/lib/ecoportal/api/common/graphql/auth_service.rb +115 -115
- data/lib/ecoportal/api/common/graphql/class_helpers.rb +46 -46
- data/lib/ecoportal/api/common/graphql/client.rb +69 -69
- data/lib/ecoportal/api/common/graphql/hash_helpers.rb +105 -105
- data/lib/ecoportal/api/common/graphql/http_client.rb +195 -145
- data/lib/ecoportal/api/common/graphql/model/as_input.rb +54 -51
- data/lib/ecoportal/api/common/graphql/model/diffable/classic_diff_service.rb +49 -47
- data/lib/ecoportal/api/common/graphql/model/diffable/diff_service.rb +188 -180
- data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff.rb +55 -55
- data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff_nesting.rb +295 -242
- data/lib/ecoportal/api/common/graphql/model/diffable.rb +54 -54
- data/lib/ecoportal/api/common/graphql/model.rb +17 -17
- data/lib/ecoportal/api/common/graphql/patches.rb +1 -1
- data/lib/ecoportal/api/common/graphql/query_integration.rb +45 -45
- data/lib/ecoportal/api/common/graphql.rb +16 -16
- data/lib/ecoportal/api/common.graphql.rb +8 -8
- data/lib/ecoportal/api/graphql/base/action.rb +43 -43
- data/lib/ecoportal/api/graphql/base/action_category.rb +15 -15
- data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +17 -0
- data/lib/ecoportal/api/graphql/base/contractor_entity/member_changes.rb +67 -67
- data/lib/ecoportal/api/graphql/base/contractor_entity.rb +24 -24
- data/lib/ecoportal/api/graphql/base/date_time.rb +12 -12
- data/lib/ecoportal/api/graphql/base/delta_result.rb +16 -0
- data/lib/ecoportal/api/graphql/base/field.rb +12 -12
- data/lib/ecoportal/api/graphql/base/file_attachment.rb +15 -15
- data/lib/ecoportal/api/graphql/base/file_container.rb +14 -14
- data/lib/ecoportal/api/graphql/base/force/binding.rb +19 -0
- data/lib/ecoportal/api/graphql/base/force/binding_collection.rb +62 -0
- data/lib/ecoportal/api/graphql/base/force/collection.rb +47 -0
- data/lib/ecoportal/api/graphql/base/force.rb +65 -0
- data/lib/ecoportal/api/graphql/base/kickstand/job.rb +17 -0
- data/lib/ecoportal/api/graphql/base/kickstand/workflow.rb +18 -0
- data/lib/ecoportal/api/graphql/base/kickstand.rb +13 -0
- data/lib/ecoportal/api/graphql/base/location_classification_type.rb +15 -15
- data/lib/ecoportal/api/graphql/base/location_node.rb +14 -14
- data/lib/ecoportal/api/graphql/base/location_structure/draft/structure.rb +37 -37
- data/lib/ecoportal/api/graphql/base/location_structure/draft.rb +93 -93
- data/lib/ecoportal/api/graphql/base/location_structure.rb +27 -27
- data/lib/ecoportal/api/graphql/base/organization.rb +15 -15
- data/lib/ecoportal/api/graphql/base/page/basic.rb +38 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/actions_list.rb +9 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/ai_summary.rb +18 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/checklist.rb +29 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/collection.rb +119 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/contractor_entities.rb +28 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/cross_reference.rb +54 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/date_field.rb +23 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/file_field.rb +25 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/gauge.rb +19 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/geo.rb +24 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/image_gallery.rb +24 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/law.rb +8 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/mailbox.rb +9 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/number.rb +20 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/people.rb +35 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/plain_text.rb +17 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/rich_text.rb +26 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/select.rb +41 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/signature.rb +9 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/smart_fill.rb +17 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/table.rb +9 -0
- data/lib/ecoportal/api/graphql/base/page/data_field/tag_field.rb +21 -0
- data/lib/ecoportal/api/graphql/base/page/data_field.rb +137 -12
- data/lib/ecoportal/api/graphql/base/page/phased/stage.rb +68 -14
- data/lib/ecoportal/api/graphql/base/page/phased.rb +15 -14
- data/lib/ecoportal/api/graphql/base/page/section.rb +48 -12
- data/lib/ecoportal/api/graphql/base/page/section_collection.rb +85 -0
- data/lib/ecoportal/api/graphql/base/page/task.rb +24 -0
- data/lib/ecoportal/api/graphql/base/page.rb +17 -14
- data/lib/ecoportal/api/graphql/base/page_info.rb +12 -12
- data/lib/ecoportal/api/graphql/base/pages_workflow/action_type_selection.rb +17 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/callback_type.rb +28 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/command_change.rb +17 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/command_change_message.rb +15 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/command_es_change.rb +17 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/command_interface.rb +36 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/email_config.rb +18 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/escalation_level.rb +19 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/in_system_config.rb +16 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/mailbox_field_selection.rb +17 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/operation_interface.rb +39 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/operations/assign_to.rb +27 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/operations/create_page.rb +21 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/operations/send_notification.rb +30 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/people_field_selection.rb +17 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/recipient_config.rb +34 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/register_field.rb +17 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/task_config_selection.rb +17 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/time_delay_config.rb +16 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/trigger_interface.rb +26 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/triggers/conditional_logic.rb +17 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow/user_selection.rb +16 -0
- data/lib/ecoportal/api/graphql/base/pages_workflow.rb +35 -0
- data/lib/ecoportal/api/graphql/base/person_member.rb +22 -22
- data/lib/ecoportal/api/graphql/base/preset_view.rb +17 -0
- data/lib/ecoportal/api/graphql/base/preview_page.rb +23 -0
- data/lib/ecoportal/api/graphql/base/register.rb +18 -0
- data/lib/ecoportal/api/graphql/base/resource.rb +13 -13
- data/lib/ecoportal/api/graphql/base/template.rb +35 -0
- data/lib/ecoportal/api/graphql/base.rb +37 -24
- data/lib/ecoportal/api/graphql/builder/action.rb +41 -41
- data/lib/ecoportal/api/graphql/builder/contractor_entity.rb +41 -41
- data/lib/ecoportal/api/graphql/builder/kickstand.rb +73 -0
- data/lib/ecoportal/api/graphql/builder/location_structure/draft.rb +64 -64
- data/lib/ecoportal/api/graphql/builder/location_structure.rb +40 -40
- data/lib/ecoportal/api/graphql/builder/page.rb +210 -41
- data/lib/ecoportal/api/graphql/builder/register/preset_view.rb +84 -0
- data/lib/ecoportal/api/graphql/builder/register.rb +49 -41
- data/lib/ecoportal/api/graphql/builder/template.rb +80 -0
- data/lib/ecoportal/api/graphql/builder/template_builder.rb +174 -0
- data/lib/ecoportal/api/graphql/builder.rb +17 -14
- data/lib/ecoportal/api/graphql/compat/filter_translator.rb +142 -0
- data/lib/ecoportal/api/graphql/compat/page_reference.rb +23 -0
- data/lib/ecoportal/api/graphql/compat/pages.rb +212 -0
- data/lib/ecoportal/api/graphql/compat/registers.rb +84 -0
- data/lib/ecoportal/api/graphql/compat/response.rb +35 -0
- data/lib/ecoportal/api/graphql/compat/search_results.rb +33 -0
- data/lib/ecoportal/api/graphql/compat/stage_collection.rb +70 -0
- data/lib/ecoportal/api/graphql/compat/stage_view.rb +76 -0
- data/lib/ecoportal/api/graphql/compat.rb +17 -0
- data/lib/ecoportal/api/graphql/concerns/data_field_access.rb +71 -0
- data/lib/ecoportal/api/graphql/concerns/deprecation.rb +20 -0
- data/lib/ecoportal/api/graphql/concerns/fragment_definitions.rb +68 -75
- data/lib/ecoportal/api/graphql/concerns/page_compat.rb +51 -0
- data/lib/ecoportal/api/graphql/concerns/snake_camel_access.rb +60 -0
- data/lib/ecoportal/api/graphql/concerns.rb +14 -10
- data/lib/ecoportal/api/graphql/connection/action.rb +11 -11
- data/lib/ecoportal/api/graphql/connection/action_category.rb +11 -11
- data/lib/ecoportal/api/graphql/connection/contractor_entity.rb +11 -11
- data/lib/ecoportal/api/graphql/connection/page.rb +11 -0
- data/lib/ecoportal/api/graphql/connection/pages_workflow_command.rb +13 -0
- data/lib/ecoportal/api/graphql/connection/person_member.rb +11 -11
- data/lib/ecoportal/api/graphql/connection/preset_view.rb +11 -0
- data/lib/ecoportal/api/graphql/connection/preview_page.rb +11 -0
- data/lib/ecoportal/api/graphql/connection.rb +17 -13
- data/lib/ecoportal/api/graphql/diff/change.rb +59 -0
- data/lib/ecoportal/api/graphql/diff/command_synthesizer.rb +329 -0
- data/lib/ecoportal/api/graphql/diff/cross_object_diff.rb +165 -0
- data/lib/ecoportal/api/graphql/diff/deploy.rb +121 -0
- data/lib/ecoportal/api/graphql/diff/id_resolver.rb +64 -0
- data/lib/ecoportal/api/graphql/diff/pairing/candidate.rb +32 -0
- data/lib/ecoportal/api/graphql/diff/pairing/engine.rb +173 -0
- data/lib/ecoportal/api/graphql/diff/pairing/ledger.rb +119 -0
- data/lib/ecoportal/api/graphql/diff/pairing/signals.rb +104 -0
- data/lib/ecoportal/api/graphql/diff/strategy.rb +113 -0
- data/lib/ecoportal/api/graphql/diff/version_diff.rb +332 -0
- data/lib/ecoportal/api/graphql/diff.rb +34 -0
- data/lib/ecoportal/api/graphql/error/locations_error/fetch_nested.rb +51 -51
- data/lib/ecoportal/api/graphql/error/locations_error.rb +28 -28
- data/lib/ecoportal/api/graphql/error/locations_validation_error.rb +20 -20
- data/lib/ecoportal/api/graphql/error/validation_errors.rb +28 -28
- data/lib/ecoportal/api/graphql/error.rb +12 -12
- data/lib/ecoportal/api/graphql/file_upload/client.rb +192 -0
- data/lib/ecoportal/api/graphql/file_upload.rb +10 -0
- data/lib/ecoportal/api/graphql/fragment/action.rb +65 -65
- data/lib/ecoportal/api/graphql/fragment/action_category.rb +17 -17
- data/lib/ecoportal/api/graphql/fragment/contractor_entity.rb +20 -20
- data/lib/ecoportal/api/graphql/fragment/field_configuration.rb +38 -0
- data/lib/ecoportal/api/graphql/fragment/force.rb +34 -0
- data/lib/ecoportal/api/graphql/fragment/location_draft.rb +53 -53
- data/lib/ecoportal/api/graphql/fragment/location_node.rb +26 -26
- data/lib/ecoportal/api/graphql/fragment/locations_error.rb +19 -19
- data/lib/ecoportal/api/graphql/fragment/page.rb +85 -0
- data/lib/ecoportal/api/graphql/fragment/page_task.rb +39 -0
- data/lib/ecoportal/api/graphql/fragment/pages/common_page_union.rb +396 -0
- data/lib/ecoportal/api/graphql/fragment/pages.rb +15 -0
- data/lib/ecoportal/api/graphql/fragment/pages_workflow.rb +172 -0
- data/lib/ecoportal/api/graphql/fragment/pagination.rb +17 -17
- data/lib/ecoportal/api/graphql/fragment/template.rb +51 -0
- data/lib/ecoportal/api/graphql/fragment.rb +40 -27
- data/lib/ecoportal/api/graphql/helpers/locations_tree.rb +41 -41
- data/lib/ecoportal/api/graphql/helpers.rb +10 -10
- data/lib/ecoportal/api/graphql/input/action/archive.rb +14 -14
- data/lib/ecoportal/api/graphql/input/action/create.rb +13 -13
- data/lib/ecoportal/api/graphql/input/action/update.rb +14 -14
- data/lib/ecoportal/api/graphql/input/action.rb +14 -14
- data/lib/ecoportal/api/graphql/input/contractor_entity/create.rb +14 -14
- data/lib/ecoportal/api/graphql/input/contractor_entity/destroy.rb +13 -13
- data/lib/ecoportal/api/graphql/input/contractor_entity/update.rb +41 -16
- data/lib/ecoportal/api/graphql/input/contractor_entity.rb +14 -14
- data/lib/ecoportal/api/graphql/input/delta_input.rb +16 -0
- data/lib/ecoportal/api/graphql/input/id_diff.rb +11 -11
- data/lib/ecoportal/api/graphql/input/location_structure/apply_commands.rb +47 -47
- data/lib/ecoportal/api/graphql/input/location_structure/archive_command.rb +13 -13
- data/lib/ecoportal/api/graphql/input/location_structure/delete_command.rb +13 -13
- data/lib/ecoportal/api/graphql/input/location_structure/draft/add_commands.rb +49 -49
- data/lib/ecoportal/api/graphql/input/location_structure/draft/create.rb +15 -15
- data/lib/ecoportal/api/graphql/input/location_structure/draft/delete.rb +15 -15
- data/lib/ecoportal/api/graphql/input/location_structure/draft/drop_bad_commands.rb +16 -16
- data/lib/ecoportal/api/graphql/input/location_structure/draft/publish.rb +16 -16
- data/lib/ecoportal/api/graphql/input/location_structure/draft.rb +19 -19
- data/lib/ecoportal/api/graphql/input/location_structure/insert_command.rb +13 -13
- data/lib/ecoportal/api/graphql/input/location_structure/move_command.rb +14 -14
- data/lib/ecoportal/api/graphql/input/location_structure/reorder_command.rb +13 -13
- data/lib/ecoportal/api/graphql/input/location_structure/unarchive_command.rb +13 -13
- data/lib/ecoportal/api/graphql/input/location_structure/update_command.rb +27 -27
- data/lib/ecoportal/api/graphql/input/location_structure.rb +20 -20
- data/lib/ecoportal/api/graphql/input/page/archive.rb +14 -0
- data/lib/ecoportal/api/graphql/input/page/build_from_template.rb +13 -0
- data/lib/ecoportal/api/graphql/input/page/create_draft.rb +13 -0
- data/lib/ecoportal/api/graphql/input/page/create_from_template.rb +18 -0
- data/lib/ecoportal/api/graphql/input/page/delete_draft.rb +13 -0
- data/lib/ecoportal/api/graphql/input/page/publish_draft.rb +13 -0
- data/lib/ecoportal/api/graphql/input/page/review_task.rb +14 -0
- data/lib/ecoportal/api/graphql/input/page/unarchive.rb +14 -0
- data/lib/ecoportal/api/graphql/input/page/update.rb +140 -0
- data/lib/ecoportal/api/graphql/input/page.rb +26 -0
- data/lib/ecoportal/api/graphql/input/preset_view/create.rb +18 -0
- data/lib/ecoportal/api/graphql/input/preset_view/permission.rb +16 -0
- data/lib/ecoportal/api/graphql/input/preset_view/update.rb +16 -0
- data/lib/ecoportal/api/graphql/input/preset_view.rb +14 -0
- data/lib/ecoportal/api/graphql/input/register/create.rb +18 -0
- data/lib/ecoportal/api/graphql/input/register/update.rb +15 -0
- data/lib/ecoportal/api/graphql/input/register.rb +13 -0
- data/lib/ecoportal/api/graphql/input/search.rb +13 -13
- data/lib/ecoportal/api/graphql/input/search_conf/ai_generator.rb +234 -0
- data/lib/ecoportal/api/graphql/input/search_conf.rb +436 -0
- data/lib/ecoportal/api/graphql/input/search_filter.rb +12 -12
- data/lib/ecoportal/api/graphql/input/search_sorter.rb +11 -11
- data/lib/ecoportal/api/graphql/input/variable_binding.rb +20 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_action_tag.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_binding.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_comment_tagging_user_group.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_default_direct_strategy_user.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_default_strategy.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_direct_strategy_user.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_field.rb +27 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_force.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_gauge_field_stop.rb +19 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_field_config.rb +23 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_helper.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_operation.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_direct_strategy_user.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_strategy.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_action_type.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_filter.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_people_field.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_task_config.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_user.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback.rb +23 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback_action.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_section.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_select_field_option.rb +19 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_stage.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_section.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_tag.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_strategy.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_task.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_task_assignment_user_group.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/add_workflow_callback.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/collapse_section.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_binding.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_creator_permissions.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_default_strategy.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_field_configuration.rb +21 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_force.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_gauge_field_stop.rb +19 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_field_config.rb +19 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_helper.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation_strategy.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_page.rb +28 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_page_creator_permissions.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_reminder.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_required_sign_offs.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_comment_tagging.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_task_assignment.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_scheduled_callback.rb +22 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_section_header.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_select_field_option.rb +19 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_stage.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_strategy.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_task_due.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_trigger.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/expand_section.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/contractor_entities.rb +24 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/cross_reference.rb +23 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/date.rb +20 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/gauge.rb +20 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/image_gallery.rb +20 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/location_field.rb +24 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/people.rb +24 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/plain_text.rb +20 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/rich_text.rb +20 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/select.rb +20 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/signature.rb +20 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/table.rb +25 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/move_field.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/move_stage.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_action_tag.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_binding.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_callback.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_comment_tagging_user_group.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_direct_strategy_user.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_strategy.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_direct_strategy_user.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_field.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_force.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_gauge_field_stop.rb +17 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_field_config.rb +17 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_helper.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_direct_strategy_user.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_strategy.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_action_type.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_filter.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_people_field.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_task_config.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_user.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_scheduled_callback.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_section.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_select_field_option.rb +17 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_section.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_tag.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_strategy.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_task.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_assignment_user_group.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_due.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_priority_level.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/reorder_forces.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command/reorder_section.rb +18 -0
- data/lib/ecoportal/api/graphql/input/workflow_command.rb +251 -0
- data/lib/ecoportal/api/graphql/input.rb +24 -16
- data/lib/ecoportal/api/graphql/interface/base_page.rb +100 -58
- data/lib/ecoportal/api/graphql/interface/location_structure/command.rb +30 -30
- data/lib/ecoportal/api/graphql/interface/location_structure/node.rb +43 -43
- data/lib/ecoportal/api/graphql/interface/location_structure/nodes.rb +27 -28
- data/lib/ecoportal/api/graphql/interface/location_structure.rb +14 -14
- data/lib/ecoportal/api/graphql/interface.rb +11 -11
- data/lib/ecoportal/api/graphql/logic/base_model.rb +15 -13
- data/lib/ecoportal/api/graphql/logic/base_query.rb +193 -150
- data/lib/ecoportal/api/graphql/logic/connection.rb +34 -34
- data/lib/ecoportal/api/graphql/logic/input.rb +26 -11
- data/lib/ecoportal/api/graphql/logic/mutation.rb +59 -59
- data/lib/ecoportal/api/graphql/logic/payload.rb +42 -42
- data/lib/ecoportal/api/graphql/logic/query.rb +23 -23
- data/lib/ecoportal/api/graphql/logic/query_array.rb +30 -30
- data/lib/ecoportal/api/graphql/logic/query_connection.rb +48 -48
- data/lib/ecoportal/api/graphql/logic.rb +18 -18
- data/lib/ecoportal/api/graphql/model/account.rb +15 -15
- data/lib/ecoportal/api/graphql/model/action.rb +22 -22
- data/lib/ecoportal/api/graphql/model/ai_summary_version.rb +10 -0
- data/lib/ecoportal/api/graphql/model/contractor_entity.rb +12 -12
- data/lib/ecoportal/api/graphql/model/field.rb +10 -10
- data/lib/ecoportal/api/graphql/model/file_attachment.rb +10 -10
- data/lib/ecoportal/api/graphql/model/file_container.rb +11 -11
- data/lib/ecoportal/api/graphql/model/location_node.rb +14 -14
- data/lib/ecoportal/api/graphql/model/location_structure/draft/structure.rb +15 -15
- data/lib/ecoportal/api/graphql/model/location_structure/draft.rb +15 -15
- data/lib/ecoportal/api/graphql/model/location_structure.rb +16 -16
- data/lib/ecoportal/api/graphql/model/organization.rb +65 -55
- data/lib/ecoportal/api/graphql/model/page/basic.rb +14 -0
- data/lib/ecoportal/api/graphql/model/page/data_field.rb +12 -12
- data/lib/ecoportal/api/graphql/model/page/phased/stage.rb +14 -14
- data/lib/ecoportal/api/graphql/model/page/phased.rb +82 -20
- data/lib/ecoportal/api/graphql/model/page/section.rb +12 -12
- data/lib/ecoportal/api/graphql/model/page/task.rb +16 -0
- data/lib/ecoportal/api/graphql/model/page.rb +16 -14
- data/lib/ecoportal/api/graphql/model/page_union.rb +21 -0
- data/lib/ecoportal/api/graphql/model/pages_workflow.rb +20 -0
- data/lib/ecoportal/api/graphql/model/person_member.rb +15 -15
- data/lib/ecoportal/api/graphql/model/preset_view.rb +10 -0
- data/lib/ecoportal/api/graphql/model/preview_page.rb +10 -0
- data/lib/ecoportal/api/graphql/model/register.rb +10 -0
- data/lib/ecoportal/api/graphql/model/resource.rb +13 -13
- data/lib/ecoportal/api/graphql/model/template.rb +15 -0
- data/lib/ecoportal/api/graphql/model/user.rb +14 -14
- data/lib/ecoportal/api/graphql/model.rb +32 -22
- data/lib/ecoportal/api/graphql/mutation/action/archive.rb +41 -41
- data/lib/ecoportal/api/graphql/mutation/action/create.rb +40 -40
- data/lib/ecoportal/api/graphql/mutation/action/update.rb +40 -40
- data/lib/ecoportal/api/graphql/mutation/action.rb +14 -14
- data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +45 -0
- data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +40 -0
- data/lib/ecoportal/api/graphql/mutation/ai_summary.rb +13 -0
- data/lib/ecoportal/api/graphql/mutation/contractor_entity/create.rb +40 -40
- data/lib/ecoportal/api/graphql/mutation/contractor_entity/destroy.rb +40 -40
- data/lib/ecoportal/api/graphql/mutation/contractor_entity/update.rb +40 -40
- data/lib/ecoportal/api/graphql/mutation/contractor_entity.rb +14 -14
- data/lib/ecoportal/api/graphql/mutation/kickstand/bulk_update_jobs.rb +43 -0
- data/lib/ecoportal/api/graphql/mutation/kickstand/bulk_update_workflows.rb +43 -0
- data/lib/ecoportal/api/graphql/mutation/kickstand/fail_job.rb +39 -0
- data/lib/ecoportal/api/graphql/mutation/kickstand/fail_workflow.rb +39 -0
- data/lib/ecoportal/api/graphql/mutation/kickstand/start_job.rb +39 -0
- data/lib/ecoportal/api/graphql/mutation/kickstand/start_workflow.rb +39 -0
- data/lib/ecoportal/api/graphql/mutation/kickstand/stop_workflow.rb +39 -0
- data/lib/ecoportal/api/graphql/mutation/kickstand.rb +18 -0
- data/lib/ecoportal/api/graphql/mutation/location_structure/apply_commands.rb +54 -54
- data/lib/ecoportal/api/graphql/mutation/location_structure/draft/add_commands.rb +55 -55
- data/lib/ecoportal/api/graphql/mutation/location_structure/draft/create.rb +54 -54
- data/lib/ecoportal/api/graphql/mutation/location_structure/draft/delete.rb +43 -43
- data/lib/ecoportal/api/graphql/mutation/location_structure/draft/drop_bad_commands.rb +56 -56
- data/lib/ecoportal/api/graphql/mutation/location_structure/draft/publish.rb +66 -66
- data/lib/ecoportal/api/graphql/mutation/location_structure/draft.rb +18 -18
- data/lib/ecoportal/api/graphql/mutation/location_structure.rb +13 -13
- data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +40 -0
- data/lib/ecoportal/api/graphql/mutation/page/archive.rb +40 -0
- data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +38 -0
- data/lib/ecoportal/api/graphql/mutation/page/build_from_template.rb +50 -0
- data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +38 -0
- data/lib/ecoportal/api/graphql/mutation/page/create_from_template.rb +43 -0
- data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +38 -0
- data/lib/ecoportal/api/graphql/mutation/page/execute_force_commands.rb +69 -0
- data/lib/ecoportal/api/graphql/mutation/page/execute_workflow_commands.rb +52 -0
- data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +38 -0
- data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +40 -0
- data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +40 -0
- data/lib/ecoportal/api/graphql/mutation/page/unarchive.rb +40 -0
- data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +40 -0
- data/lib/ecoportal/api/graphql/mutation/page/update.rb +40 -0
- data/lib/ecoportal/api/graphql/mutation/page/update_variable_bindings.rb +44 -0
- data/lib/ecoportal/api/graphql/mutation/page.rb +28 -0
- data/lib/ecoportal/api/graphql/mutation/preset_view/create.rb +35 -0
- data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +34 -0
- data/lib/ecoportal/api/graphql/mutation/preset_view/permission.rb +37 -0
- data/lib/ecoportal/api/graphql/mutation/preset_view/update.rb +35 -0
- data/lib/ecoportal/api/graphql/mutation/preset_view.rb +15 -0
- data/lib/ecoportal/api/graphql/mutation/register/create.rb +35 -0
- data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +35 -0
- data/lib/ecoportal/api/graphql/mutation/register/update.rb +35 -0
- data/lib/ecoportal/api/graphql/mutation/register.rb +14 -0
- data/lib/ecoportal/api/graphql/mutation/smart_fill/generate.rb +36 -0
- data/lib/ecoportal/api/graphql/mutation/smart_fill/submit_feedback.rb +40 -0
- data/lib/ecoportal/api/graphql/mutation/smart_fill.rb +13 -0
- data/lib/ecoportal/api/graphql/mutation/template/create.rb +39 -0
- data/lib/ecoportal/api/graphql/mutation/template/create_related_page.rb +46 -0
- data/lib/ecoportal/api/graphql/mutation/template/destroy_related_page.rb +43 -0
- data/lib/ecoportal/api/graphql/mutation/template/publish.rb +39 -0
- data/lib/ecoportal/api/graphql/mutation/template/unpublish.rb +39 -0
- data/lib/ecoportal/api/graphql/mutation/template/update.rb +43 -0
- data/lib/ecoportal/api/graphql/mutation/template/update_information.rb +43 -0
- data/lib/ecoportal/api/graphql/mutation/template.rb +18 -0
- data/lib/ecoportal/api/graphql/mutation.rb +20 -12
- data/lib/ecoportal/api/graphql/payload/action/archive.rb +13 -13
- data/lib/ecoportal/api/graphql/payload/action/create.rb +13 -13
- data/lib/ecoportal/api/graphql/payload/action/update.rb +13 -13
- data/lib/ecoportal/api/graphql/payload/action.rb +14 -14
- data/lib/ecoportal/api/graphql/payload/ai_summary_generate.rb +12 -0
- data/lib/ecoportal/api/graphql/payload/contractor_entity/create.rb +13 -13
- data/lib/ecoportal/api/graphql/payload/contractor_entity/destroy.rb +12 -12
- data/lib/ecoportal/api/graphql/payload/contractor_entity/update.rb +12 -12
- data/lib/ecoportal/api/graphql/payload/contractor_entity.rb +14 -14
- data/lib/ecoportal/api/graphql/payload/execute_workflow_commands.rb +36 -0
- data/lib/ecoportal/api/graphql/payload/force_commands.rb +31 -0
- data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_jobs.rb +36 -0
- data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_workflows.rb +36 -0
- data/lib/ecoportal/api/graphql/payload/kickstand/job.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/kickstand/workflow.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/kickstand.rb +15 -0
- data/lib/ecoportal/api/graphql/payload/location_structure/apply_commands.rb +51 -51
- data/lib/ecoportal/api/graphql/payload/location_structure/command_execution_result.rb +50 -50
- data/lib/ecoportal/api/graphql/payload/location_structure/draft/add_commands.rb +30 -30
- data/lib/ecoportal/api/graphql/payload/location_structure/draft/create.rb +33 -34
- data/lib/ecoportal/api/graphql/payload/location_structure/draft/delete.rb +30 -30
- data/lib/ecoportal/api/graphql/payload/location_structure/draft/drop_bad_commands.rb +43 -43
- data/lib/ecoportal/api/graphql/payload/location_structure/draft/publish.rb +63 -63
- data/lib/ecoportal/api/graphql/payload/location_structure/draft.rb +18 -18
- data/lib/ecoportal/api/graphql/payload/location_structure.rb +14 -14
- data/lib/ecoportal/api/graphql/payload/ok_payload.rb +36 -0
- data/lib/ecoportal/api/graphql/payload/page/archive.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/page/build_from_template.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/page/create_from_template.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/page/draft.rb +26 -0
- data/lib/ecoportal/api/graphql/payload/page/review_task.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/page/review_task_batch.rb +23 -0
- data/lib/ecoportal/api/graphql/payload/page/unarchive.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/page/update.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/page/update_variable_bindings.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/page.rb +20 -0
- data/lib/ecoportal/api/graphql/payload/preset_view.rb +15 -0
- data/lib/ecoportal/api/graphql/payload/register.rb +15 -0
- data/lib/ecoportal/api/graphql/payload/template/create.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/template/create_related_page.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/template/destroy_related_page.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/template/publish.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/template/unpublish.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/template/update.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/template/update_information.rb +13 -0
- data/lib/ecoportal/api/graphql/payload/template.rb +18 -0
- data/lib/ecoportal/api/graphql/payload.rb +23 -12
- data/lib/ecoportal/api/graphql/query/action.rb +33 -33
- data/lib/ecoportal/api/graphql/query/action_categories.rb +53 -53
- data/lib/ecoportal/api/graphql/query/actions.rb +43 -43
- data/lib/ecoportal/api/graphql/query/contractor_entities.rb +53 -53
- data/lib/ecoportal/api/graphql/query/file_upload_signature.rb +76 -0
- data/lib/ecoportal/api/graphql/query/location_classifications.rb +39 -39
- data/lib/ecoportal/api/graphql/query/location_structure/draft.rb +62 -62
- data/lib/ecoportal/api/graphql/query/location_structure.rb +61 -61
- data/lib/ecoportal/api/graphql/query/location_structures.rb +57 -57
- data/lib/ecoportal/api/graphql/query/page.rb +45 -0
- data/lib/ecoportal/api/graphql/query/page_delta.rb +47 -0
- data/lib/ecoportal/api/graphql/query/page_with_forces.rb +49 -0
- data/lib/ecoportal/api/graphql/query/pages.rb +59 -0
- data/lib/ecoportal/api/graphql/query/pages_workflow_commands.rb +65 -0
- data/lib/ecoportal/api/graphql/query/register_preset_views.rb +78 -0
- data/lib/ecoportal/api/graphql/query/register_preview_pages.rb +83 -0
- data/lib/ecoportal/api/graphql/query/templates.rb +53 -0
- data/lib/ecoportal/api/graphql/query.rb +27 -16
- data/lib/ecoportal/api/graphql.rb +143 -80
- data/lib/ecoportal/api/graphql_version.rb +5 -5
- data/lib/ecoportal/api-graphql.rb +10 -10
- metadata +328 -25
- data/.gitignore +0 -24
- data/.markdownlint.json +0 -4
- data/.rspec +0 -3
- data/.rubocop.yml +0 -97
- data/.ruby-version +0 -1
- data/.yardopts +0 -10
- data/Gemfile +0 -6
- data/Rakefile +0 -38
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/bin/setup.ps1 +0 -6
- data/ecoportal-api-graphql.gemspec +0 -40
- data/tests/actions_get.rb +0 -7
- data/tests/contractor_entities_get.rb +0 -20
- data/tests/contractor_entity_create.rb +0 -19
- data/tests/contractor_entity_udpate.rb +0 -20
- data/tests/loc_structure_get.rb +0 -11
- data/tests/loc_structure_update.rb +0 -51
- data/tests/loc_structures_get.rb +0 -15
- data/tests/local_libs.rb +0 -20
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module Ecoportal::API::GraphQL::Base::Page
|
|
2
|
+
class DataField
|
|
3
|
+
# Actions list field — embedded action items linked to this page.
|
|
4
|
+
# Actions are managed through Mutation::Action::*; not via DataFieldInput.
|
|
5
|
+
class ActionsList < DataField
|
|
6
|
+
passarray :actions # each: { id:, name:, status: }
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +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
|
|
@@ -0,0 +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
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
module Ecoportal::API::GraphQL::Base::Page
|
|
2
|
+
class DataField
|
|
3
|
+
# Wraps an array of raw data field docs as typed DataField objects.
|
|
4
|
+
# Provides v2-compatible access patterns used in eco-helpers scripts:
|
|
5
|
+
# components.get_by_type(:plain_text) — filter by field type
|
|
6
|
+
# components.get_by_name('FieldLabel') — find by label
|
|
7
|
+
# components.doc — raw doc array
|
|
8
|
+
# components.dirty_inputs — changed field hashes for mutation
|
|
9
|
+
class Collection
|
|
10
|
+
include Enumerable
|
|
11
|
+
|
|
12
|
+
# Accepts raw field docs (→ built via from_doc) OR already-built DataField objects
|
|
13
|
+
# (kept as-is). Preserving existing objects lets a phased page's Stage#components share
|
|
14
|
+
# the SAME field objects as the page's canonical field_collection (so stage-level
|
|
15
|
+
# mutations land in the page's data_fields_updates — phased write-path identity).
|
|
16
|
+
def initialize(fields)
|
|
17
|
+
@fields = Array(fields).map { |f| f.is_a?(DataField) ? f : DataField.from_doc(f) }
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Build from a raw docs array.
|
|
21
|
+
def self.from_doc(raw_array)
|
|
22
|
+
new(Array(raw_array))
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Filter by field type. Accepts symbol (:plain_text), string ('PlainText'), or
|
|
26
|
+
# the GraphQL __typename directly. Matching is case-insensitive.
|
|
27
|
+
def get_by_type(type_key)
|
|
28
|
+
target = normalise_type(type_key)
|
|
29
|
+
@fields.select { |f| normalise_type(f.type) == target }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Find first field matching label (case-insensitive). Optional type: restricts to
|
|
33
|
+
# that field type first (v2 compat: components.get_by_name(name, type:) — used by
|
|
34
|
+
# a customer cutover use case which calls it directly, not via OozeRedirect).
|
|
35
|
+
def get_by_name(label, type: nil)
|
|
36
|
+
pool = type ? get_by_type(type) : @fields
|
|
37
|
+
pool.find { |f| f.label.to_s.downcase == label.to_s.downcase }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Find a field by its id (v2 compat: components.get_by_id — used by e.g. event-changes /
|
|
41
|
+
# TnG cases that resolve a field by reference_id). Returns the field or nil.
|
|
42
|
+
def get_by_id(id)
|
|
43
|
+
wanted = id.to_s
|
|
44
|
+
@fields.find { |f| f.id.to_s == wanted }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Raw doc array (v2 compat — scripts iterate secs_doc / flds_doc).
|
|
48
|
+
def doc
|
|
49
|
+
@fields.map(&:doc)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Add a new field to this collection (v2 compat: components.add).
|
|
53
|
+
# The field must reference an existing server-side ID (from buildFromTemplate).
|
|
54
|
+
# Yields the new field object to the block for configuration.
|
|
55
|
+
# Returns the field object.
|
|
56
|
+
#
|
|
57
|
+
# Usage:
|
|
58
|
+
# components.add(doc: raw_doc) { |f| f.value = 'X' }
|
|
59
|
+
# components.add(id: 'f1', label: 'Name', type: 'PlainText') { |f| f.value = 'X' }
|
|
60
|
+
def add(doc: nil, id: nil, label: nil, type: nil, **opts)
|
|
61
|
+
raw = doc || opts.merge('id' => id, 'label' => label, '__typename' => type.to_s).compact
|
|
62
|
+
field = DataField.from_doc(raw)
|
|
63
|
+
@additions ||= []
|
|
64
|
+
@additions << field
|
|
65
|
+
yield field if block_given?
|
|
66
|
+
field
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Mark a field for deletion by field ID or field object.
|
|
70
|
+
# The field ID is sent in dataFields.deletions on the next update.
|
|
71
|
+
def mark_for_deletion(id_or_field)
|
|
72
|
+
field_id = id_or_field.respond_to?(:id) ? id_or_field.id : id_or_field.to_s
|
|
73
|
+
@deletions ||= []
|
|
74
|
+
@deletions |= [field_id]
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Returns DataFieldInput hashes for fields modified via value setters.
|
|
78
|
+
def dirty_inputs
|
|
79
|
+
@fields.filter_map(&:as_input)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Returns DataFieldInput hashes for fields added via #add.
|
|
83
|
+
def dirty_additions
|
|
84
|
+
(@additions || []).filter_map(&:as_input)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Returns field IDs queued for deletion via #mark_for_deletion.
|
|
88
|
+
def dirty_deletions
|
|
89
|
+
@deletions || []
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def dirty?
|
|
93
|
+
@fields.any?(&:dirty?) ||
|
|
94
|
+
(@additions || []).any?(&:dirty?) ||
|
|
95
|
+
!dirty_deletions.empty?
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def each(&block)
|
|
99
|
+
@fields.each(&block)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def empty?
|
|
103
|
+
@fields.empty?
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def length
|
|
107
|
+
@fields.length
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
private
|
|
111
|
+
|
|
112
|
+
# Normalise type key to lowercase no-underscore string for comparison.
|
|
113
|
+
# :plain_text → 'plaintext', 'PlainText' → 'plaintext'
|
|
114
|
+
def normalise_type(type_key)
|
|
115
|
+
type_key.to_s.downcase.delete('_') if type_key
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Ecoportal::API::GraphQL::Base::Page
|
|
2
|
+
class DataField
|
|
3
|
+
# Contractor entity selector field.
|
|
4
|
+
# Stores references to ContractorEntity records.
|
|
5
|
+
class ContractorEntities < DataField
|
|
6
|
+
passarray :contractors # each: { id:, name: }
|
|
7
|
+
|
|
8
|
+
def contractor_entity_ids
|
|
9
|
+
Array(contractors).map { |c| c.is_a?(Hash) ? c['id'] : c }.compact
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def contractor_entity_ids=(ids)
|
|
13
|
+
doc['contractors'] = Array(ids).map { |id_val| { 'id' => id_val } }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# v2 compat alias
|
|
17
|
+
def value=(ids)
|
|
18
|
+
self.contractor_entity_ids = ids
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def as_input
|
|
22
|
+
return nil unless dirty?
|
|
23
|
+
|
|
24
|
+
{ contractorEntities: { id: id, contractorEntityIds: contractor_entity_ids } }
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Ecoportal::API::GraphQL::Base::Page
|
|
2
|
+
class DataField
|
|
3
|
+
# Cross-reference field — links to pages in another register.
|
|
4
|
+
class CrossReference < DataField
|
|
5
|
+
passarray :pages # staged writes; the READ response uses `references` (a connection)
|
|
6
|
+
|
|
7
|
+
# Current reference ids. The GraphQL response carries them under `references.nodes`
|
|
8
|
+
# (CommonPageUnion's crossReferenceField), NOT `pages` — so read from there. After a
|
|
9
|
+
# page_ids= write, prefer the staged `pages` value.
|
|
10
|
+
def page_ids
|
|
11
|
+
ref_ids_from(doc)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def page_ids=(ids)
|
|
15
|
+
doc['pages'] = Array(ids).map { |id_val| { 'id' => id_val } }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Dirty only when the effective reference-id SET actually changed.
|
|
19
|
+
#
|
|
20
|
+
# The field is READ into `references.nodes` but WRITTEN via `pages` (page_ids=). The
|
|
21
|
+
# default key-level leaf diff therefore sees a brand-new `pages` key the moment any
|
|
22
|
+
# setter runs and flags a change — even when the set is unchanged. The common offender
|
|
23
|
+
# is `clear` on an already-empty field ([] -> []): eco-helpers scripts clear a reference
|
|
24
|
+
# whenever the source value is blank, which under APIv2 was a no-op but on GraphQL
|
|
25
|
+
# emitted a phantom `referenceIds: []` update. Compare id SETS against the server
|
|
26
|
+
# baseline (`original_doc`) instead — restoring v2 parity (empty->empty / same->same
|
|
27
|
+
# is not dirty).
|
|
28
|
+
def dirty?
|
|
29
|
+
ref_ids_from(doc).sort != ref_ids_from(original_doc).sort
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def as_input
|
|
33
|
+
return nil unless dirty?
|
|
34
|
+
|
|
35
|
+
# CrossReferenceInput uses `referenceIds` (schema-confirmed) — NOT pageIds.
|
|
36
|
+
{ crossReference: { id: id, referenceIds: page_ids } }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
# Extract the reference id set from a doc snapshot. `original_doc` is the server baseline
|
|
42
|
+
# (the diff prev_doc — see Diffable::ClassicDiffService), `doc` carries client changes.
|
|
43
|
+
# Both prefer the staged `pages` (write shape) and fall back to `references.nodes` (read
|
|
44
|
+
# shape) — so the comparison is shape-agnostic and stays correct after `consolidate!`
|
|
45
|
+
# copies `doc` (with `pages`) into `original_doc`.
|
|
46
|
+
def ref_ids_from(source_doc)
|
|
47
|
+
return [] unless source_doc
|
|
48
|
+
|
|
49
|
+
src = source_doc.key?('pages') ? source_doc['pages'] : Array(source_doc.dig('references', 'nodes'))
|
|
50
|
+
Array(src).map { |r| r.is_a?(Hash) ? r['id'] : r }.compact
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +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
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Ecoportal::API::GraphQL::Base::Page
|
|
2
|
+
class DataField
|
|
3
|
+
# File attachment field.
|
|
4
|
+
# Writing requires a prior file upload to the REST upload endpoint
|
|
5
|
+
# to obtain fileContainerIds — see the file-upload TODO in projects/TODO.md.
|
|
6
|
+
# The file_container_ids= setter can be used once IDs are available.
|
|
7
|
+
class FileField < DataField
|
|
8
|
+
passarray :fileContainers # each: { id:, fileName:, ... }
|
|
9
|
+
|
|
10
|
+
def file_container_ids
|
|
11
|
+
Array(fileContainers).map { |c| c.is_a?(Hash) ? c['id'] : c }.compact
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def file_container_ids=(ids)
|
|
15
|
+
doc['fileContainers'] = Array(ids).map { |id_val| { 'id' => id_val } }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def as_input
|
|
19
|
+
return nil unless dirty?
|
|
20
|
+
|
|
21
|
+
{ file: { id: id, fileContainerIds: file_container_ids } }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Ecoportal::API::GraphQL::Base::Page
|
|
2
|
+
class DataField
|
|
3
|
+
class Gauge < DataField
|
|
4
|
+
passthrough :value, :max
|
|
5
|
+
|
|
6
|
+
# Blank (empty / whitespace CSV cell) → nil, NOT 0.0 — see DataField#numeric_or_nil
|
|
7
|
+
# (mirrors Number; `"".to_f` would otherwise silently write a real zero).
|
|
8
|
+
def value=(numeric)
|
|
9
|
+
doc['value'] = numeric_or_nil(numeric)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def as_input
|
|
13
|
+
return nil unless dirty?
|
|
14
|
+
|
|
15
|
+
{ gauge: { id: id, value: value } }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Ecoportal::API::GraphQL::Base::Page
|
|
2
|
+
class DataField
|
|
3
|
+
# Image gallery field.
|
|
4
|
+
# Writing requires a prior file upload to the REST upload endpoint
|
|
5
|
+
# to obtain fileContainerIds — see the file-upload TODO in projects/TODO.md.
|
|
6
|
+
class ImageGallery < DataField
|
|
7
|
+
passarray :fileContainers # each: { id:, fileName:, url:, ... }
|
|
8
|
+
|
|
9
|
+
def file_container_ids
|
|
10
|
+
Array(fileContainers).map { |c| c.is_a?(Hash) ? c['id'] : c }.compact
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def file_container_ids=(ids)
|
|
14
|
+
doc['fileContainers'] = Array(ids).map { |id_val| { 'id' => id_val } }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def as_input
|
|
18
|
+
return nil unless dirty?
|
|
19
|
+
|
|
20
|
+
{ imageGallery: { id: id, fileContainerIds: file_container_ids } }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Ecoportal::API::GraphQL::Base::Page
|
|
2
|
+
class DataField
|
|
3
|
+
class Number < DataField
|
|
4
|
+
passthrough :value
|
|
5
|
+
|
|
6
|
+
# Blank (empty / whitespace CSV cell) → nil, NOT 0.0 — see DataField#numeric_or_nil.
|
|
7
|
+
# Whether a blank should CLEAR the field or be LEFT UNTOUCHED is the caller's policy;
|
|
8
|
+
# this only guarantees a blank never becomes the value 0.0.
|
|
9
|
+
def value=(numeric)
|
|
10
|
+
doc['value'] = numeric_or_nil(numeric)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def as_input
|
|
14
|
+
return nil unless dirty?
|
|
15
|
+
|
|
16
|
+
{ number: { id: id, value: value } }
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Ecoportal::API::GraphQL::Base::Page
|
|
2
|
+
class DataField
|
|
3
|
+
class People < DataField
|
|
4
|
+
passarray :peopleIds
|
|
5
|
+
|
|
6
|
+
def people_ids
|
|
7
|
+
ids = Array(peopleIds)
|
|
8
|
+
return ids unless ids.empty?
|
|
9
|
+
|
|
10
|
+
# Fallback: the read fragment populates `peopleIds`, but if a response ever returns it
|
|
11
|
+
# null/empty while the expanded `people { id }` nodes ARE present (a partial / non-
|
|
12
|
+
# $content read), seed from the nodes. The backend write replaces peopleIds wholesale,
|
|
13
|
+
# so a `people_ids << x` append must start from the existing set or it would WIPE the
|
|
14
|
+
# field. Mirrors CrossReference's references.nodes fallback. Read key == write key
|
|
15
|
+
# (peopleIds), so this only widens the read; it never creates phantom-dirty.
|
|
16
|
+
Array(doc['people']).map { |p| p.is_a?(Hash) ? p['id'] : p }.compact
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def people_ids=(ids)
|
|
20
|
+
doc['peopleIds'] = Array(ids).compact
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# v2 compat: scripts may set via people_ids= or direct assignment
|
|
24
|
+
def value=(ids)
|
|
25
|
+
self.people_ids = ids
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def as_input
|
|
29
|
+
return nil unless dirty?
|
|
30
|
+
|
|
31
|
+
{ people: { id: id, peopleIds: Array(peopleIds) } }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +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
|
|
@@ -0,0 +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
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Ecoportal::API::GraphQL::Base::Page
|
|
2
|
+
class DataField
|
|
3
|
+
class Select < DataField
|
|
4
|
+
passarray :options # each: { id:, name:, value:, selected: }
|
|
5
|
+
passthrough :other, :otherDesc, :multiple, :dataType
|
|
6
|
+
|
|
7
|
+
# Select an option by id, name, or value. Deselects all others (single-select).
|
|
8
|
+
# For multi-select fields, call with multiple values.
|
|
9
|
+
def select_option(*id_or_values)
|
|
10
|
+
targets = id_or_values.flatten.map(&:to_s)
|
|
11
|
+
(doc['options'] || []).each do |opt|
|
|
12
|
+
opt['selected'] = targets.include?(opt['id'].to_s) ||
|
|
13
|
+
targets.include?(opt['name'].to_s) ||
|
|
14
|
+
targets.include?(opt['value'].to_s)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Deselect all options.
|
|
19
|
+
def clear_selection
|
|
20
|
+
(doc['options'] || []).each { |opt| opt['selected'] = false }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def selected_options
|
|
24
|
+
(doc['options'] || []).select { |opt| opt['selected'] }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def as_input
|
|
28
|
+
return nil unless dirty?
|
|
29
|
+
|
|
30
|
+
{
|
|
31
|
+
select: {
|
|
32
|
+
id: id,
|
|
33
|
+
# rubocop:disable Style/DoubleNegation
|
|
34
|
+
options: (doc['options'] || []).map { |opt| { id: opt['id'], selected: !!opt['selected'] } }
|
|
35
|
+
# rubocop:enable Style/DoubleNegation
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +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
|
|
@@ -0,0 +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
|
|
@@ -0,0 +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
|