avo 2.46.0 → 3.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of avo might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +23 -22
- data/Gemfile.lock +181 -160
- data/README.md +1 -1
- data/{public/avo-assets → app/assets/builds}/avo.base.css +479 -698
- data/app/assets/builds/avo.base.js +93804 -0
- data/app/assets/builds/avo.base.js.map +7 -0
- data/app/assets/stylesheets/avo.base.css +2 -2
- data/app/assets/svgs/failed_to_load.svg +1 -0
- data/app/assets/svgs/font.svg +1 -0
- data/app/assets/svgs/grid-empty-state.svg +1 -0
- data/app/assets/svgs/table-empty-state.svg +1 -0
- data/app/assets/svgs/triangle-up.svg +1 -0
- data/app/components/avo/actions_component.html.erb +18 -4
- data/app/components/avo/actions_component.rb +12 -18
- data/app/components/avo/alert_component.html.erb +1 -1
- data/app/components/avo/asset_manager/javascript_component.html.erb +3 -0
- data/app/components/avo/asset_manager/javascript_component.rb +13 -0
- data/app/components/avo/asset_manager/stylesheet_component.html.erb +3 -0
- data/app/components/avo/asset_manager/stylesheet_component.rb +13 -0
- data/app/components/avo/base_component.rb +14 -11
- data/app/components/avo/button_component.rb +20 -3
- data/app/components/avo/empty_state_component.rb +1 -1
- data/app/components/avo/field_wrapper_component.html.erb +4 -4
- data/app/components/avo/field_wrapper_component.rb +12 -23
- data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +96 -118
- data/app/components/avo/fields/belongs_to_field/edit_component.rb +5 -20
- data/app/components/avo/fields/belongs_to_field/index_component.html.erb +1 -1
- data/app/components/avo/fields/belongs_to_field/show_component.rb +2 -2
- data/app/components/avo/fields/boolean_field/edit_component.html.erb +1 -2
- data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +3 -3
- data/app/components/avo/fields/code_field/edit_component.html.erb +0 -1
- data/app/components/avo/fields/common/badge_viewer_component.html.erb +24 -1
- data/app/components/avo/fields/common/badge_viewer_component.rb +0 -24
- data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
- data/app/components/avo/fields/common/files_list_viewer_component.html.erb +5 -0
- data/app/components/avo/fields/common/files_list_viewer_component.rb +8 -0
- data/app/components/avo/fields/common/heading_component.html.erb +1 -1
- data/app/components/avo/fields/common/single_file_viewer_component.html.erb +56 -0
- data/app/components/avo/fields/common/single_file_viewer_component.rb +55 -0
- data/app/components/avo/fields/country_field/edit_component.html.erb +1 -3
- data/app/components/avo/fields/edit_component.rb +1 -1
- data/app/components/avo/fields/file_field/edit_component.html.erb +2 -4
- data/app/components/avo/fields/file_field/edit_component.rb +0 -1
- data/app/components/avo/fields/file_field/index_component.rb +2 -2
- data/app/components/avo/fields/file_field/show_component.html.erb +1 -1
- data/app/components/avo/fields/files_field/edit_component.html.erb +2 -4
- data/app/components/avo/fields/files_field/edit_component.rb +0 -1
- data/app/components/avo/fields/files_field/show_component.html.erb +1 -1
- data/app/components/avo/fields/has_many_field/show_component.html.erb +1 -1
- data/app/components/avo/fields/has_one_field/index_component.html.erb +1 -1
- data/app/components/avo/fields/has_one_field/show_component.html.erb +2 -2
- data/app/components/avo/fields/has_one_field/show_component.rb +3 -7
- data/app/components/avo/fields/index_component.rb +5 -6
- data/app/components/avo/fields/markdown_field/edit_component.html.erb +3 -4
- data/app/components/avo/fields/markdown_field/show_component.html.erb +3 -3
- data/app/components/avo/fields/number_field/edit_component.html.erb +1 -3
- data/app/components/avo/fields/password_field/edit_component.html.erb +1 -3
- data/app/components/avo/fields/preview_field/index_component.html.erb +10 -0
- data/app/components/avo/fields/preview_field/index_component.rb +4 -0
- data/app/components/avo/fields/progress_bar_field/edit_component.html.erb +0 -1
- data/app/components/avo/fields/select_field/edit_component.html.erb +2 -3
- data/app/components/avo/fields/show_component.rb +4 -1
- data/app/components/avo/fields/status_field/edit_component.html.erb +1 -1
- data/app/components/avo/fields/text_field/edit_component.html.erb +2 -3
- data/app/components/avo/fields/textarea_field/edit_component.html.erb +0 -1
- data/app/components/avo/fields/trix_field/edit_component.html.erb +1 -2
- data/app/components/avo/fields/trix_field/edit_component.rb +1 -1
- data/app/components/avo/fields/trix_field/show_component.html.erb +1 -1
- data/app/components/avo/filters_component.html.erb +9 -3
- data/app/components/avo/filters_component.rb +4 -4
- data/app/components/avo/index/field_wrapper_component.html.erb +1 -1
- data/app/components/avo/index/grid_item_component.html.erb +5 -2
- data/app/components/avo/index/grid_item_component.rb +7 -6
- data/app/components/avo/index/resource_controls_component.html.erb +3 -81
- data/app/components/avo/index/resource_controls_component.rb +128 -18
- data/app/components/avo/index/resource_grid_component.html.erb +5 -3
- data/app/components/avo/index/resource_grid_component.rb +5 -2
- data/app/components/avo/index/resource_table_component.html.erb +5 -4
- data/app/components/avo/index/resource_table_component.rb +14 -20
- data/app/components/avo/index/table_row_component.html.erb +8 -4
- data/app/components/avo/index/table_row_component.rb +3 -2
- data/app/components/avo/item_switcher_component.html.erb +5 -10
- data/app/components/avo/item_switcher_component.rb +2 -3
- data/app/components/avo/modal_component.html.erb +7 -12
- data/app/components/avo/modal_component.rb +0 -21
- data/app/components/avo/paginator_component.html.erb +40 -29
- data/app/components/avo/paginator_component.rb +5 -23
- data/app/components/avo/panel_component.html.erb +8 -11
- data/app/components/avo/panel_component.rb +0 -1
- data/app/components/avo/profile_item_component.html.erb +2 -17
- data/app/components/avo/profile_item_component.rb +1 -13
- data/app/components/avo/referrer_params_component.html.erb +1 -4
- data/app/components/avo/resource_component.rb +142 -30
- data/app/components/avo/resource_sidebar_component.html.erb +6 -2
- data/app/components/avo/sidebar/link_component.html.erb +0 -2
- data/app/components/avo/sidebar/link_component.rb +3 -5
- data/app/components/avo/sidebar_component.html.erb +9 -2
- data/app/components/avo/sidebar_component.rb +5 -3
- data/app/components/avo/sidebar_profile_component.html.erb +27 -20
- data/app/components/avo/tab_group_component.html.erb +13 -7
- data/app/components/avo/tab_group_component.rb +1 -6
- data/app/components/avo/tab_switcher_component.html.erb +17 -40
- data/app/components/avo/tab_switcher_component.rb +4 -39
- data/app/components/avo/views/resource_edit_component.html.erb +16 -52
- data/app/components/avo/views/resource_edit_component.rb +7 -18
- data/app/components/avo/views/resource_index_component.html.erb +38 -53
- data/app/components/avo/views/resource_index_component.rb +60 -16
- data/app/components/avo/views/resource_show_component.html.erb +8 -151
- data/app/components/avo/views/resource_show_component.rb +6 -11
- data/app/controllers/avo/actions_controller.rb +19 -16
- data/app/controllers/avo/application_controller.rb +40 -109
- data/app/controllers/avo/associations_controller.rb +34 -41
- data/app/controllers/avo/attachments_controller.rb +10 -25
- data/app/controllers/avo/base_controller.rb +91 -103
- data/app/controllers/avo/debug_controller.rb +17 -5
- data/app/controllers/avo/search_controller.rb +29 -54
- data/app/controllers/avo/team_users_controller.rb +4 -0
- data/app/controllers/concerns/avo/initializes_avo.rb +26 -0
- data/app/helpers/avo/application_helper.rb +20 -21
- data/app/helpers/avo/resources_helper.rb +1 -1
- data/app/helpers/avo/url_helpers.rb +27 -11
- data/app/javascript/avo.base.js +1 -0
- data/app/javascript/js/application.js +0 -5
- data/app/javascript/js/controllers/action_controller.js +5 -3
- data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
- data/app/javascript/js/controllers/fields/{easy_mde_controller.js → simple_mde_controller.js} +3 -4
- data/app/javascript/js/controllers/filter_controller.js +1 -1
- data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
- data/app/javascript/js/controllers/preview_controller.js +24 -0
- data/app/javascript/js/controllers/search_controller.js +1 -3
- data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
- data/app/javascript/js/controllers/toggle_controller.js +48 -0
- data/app/javascript/js/controllers.js +12 -8
- data/app/javascript/js/custom-stream-actions.js +15 -0
- data/app/views/avo/{attachments/destroy.turbo_stream.erb → actions/keep_modal_open.turbo_stream.erb} +0 -2
- data/app/views/avo/actions/show.html.erb +12 -11
- data/app/views/avo/associations/new.html.erb +4 -4
- data/app/views/avo/base/index.html.erb +3 -2
- data/app/views/avo/base/new.html.erb +2 -1
- data/app/views/avo/base/preview.html.erb +19 -0
- data/app/views/avo/base/show.html.erb +1 -1
- data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
- data/app/views/avo/debug/report.html.erb +32 -17
- data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -15
- data/app/views/avo/home/index.html.erb +1 -1
- data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
- data/app/views/avo/partials/_javascript.html.erb +5 -0
- data/app/views/avo/partials/_logo.html.erb +1 -1
- data/app/views/avo/partials/_navbar.html.erb +3 -5
- data/app/views/avo/partials/_table_header.html.erb +5 -3
- data/app/views/avo/partials/_view_toggle_button.html.erb +0 -9
- data/app/views/avo/private/design.html.erb +2 -2
- data/app/views/layouts/avo/application.html.erb +3 -0
- data/avo.gemspec +6 -7
- data/bin/dev +1 -1
- data/bin/prod +0 -0
- data/config/i18n-tasks.yml +1 -1
- data/config/initializers/pagy.rb +10 -14
- data/config/master.key +1 -0
- data/config/routes.rb +8 -12
- data/db/factories.rb +7 -18
- data/lib/avo/action_model.rb +20 -0
- data/lib/avo/app.rb +90 -162
- data/lib/avo/asset_manager.rb +30 -0
- data/lib/avo/base_action.rb +38 -36
- data/lib/avo/base_resource.rb +108 -96
- data/lib/avo/base_resource_tool.rb +9 -16
- data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +3 -3
- data/lib/avo/concerns/filters_session_handler.rb +1 -0
- data/lib/avo/concerns/has_controls.rb +37 -0
- data/lib/avo/concerns/has_item_type.rb +38 -0
- data/lib/avo/concerns/{has_fields.rb → has_items.rb} +110 -97
- data/lib/avo/concerns/{has_resource_stimulus_controllers.rb → has_stimulus_controllers.rb} +1 -1
- data/lib/avo/concerns/is_resource_item.rb +24 -36
- data/lib/avo/concerns/is_visible.rb +15 -0
- data/lib/avo/concerns/visible_in_different_views.rb +126 -0
- data/lib/avo/configuration/branding.rb +0 -12
- data/lib/avo/configuration.rb +8 -45
- data/lib/avo/current.rb +5 -0
- data/lib/avo/dsl/field_parser.rb +1 -1
- data/lib/avo/dynamic_router.rb +6 -2
- data/lib/avo/engine.rb +37 -30
- data/lib/avo/error_manager.rb +25 -0
- data/lib/avo/execution_context.rb +9 -15
- data/lib/avo/fields/badge_field.rb +1 -1
- data/lib/avo/fields/base_field.rb +72 -124
- data/lib/avo/fields/belongs_to_field.rb +14 -25
- data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
- data/lib/avo/fields/concerns/has_default.rb +1 -5
- data/lib/avo/fields/concerns/has_field_name.rb +22 -0
- data/lib/avo/fields/concerns/has_html_attributes.rb +110 -0
- data/lib/avo/fields/concerns/is_disabled.rb +1 -5
- data/lib/avo/fields/concerns/is_readonly.rb +1 -5
- data/lib/avo/fields/concerns/is_required.rb +5 -7
- data/lib/avo/fields/concerns/is_searchable.rb +13 -0
- data/lib/avo/fields/concerns/use_resource.rb +5 -1
- data/lib/avo/fields/country_field.rb +4 -0
- data/lib/avo/fields/date_field.rb +3 -16
- data/lib/avo/fields/date_time_field.rb +1 -5
- data/lib/avo/fields/field_manager.rb +45 -0
- data/lib/avo/fields/file_field.rb +0 -2
- data/lib/avo/fields/files_field.rb +0 -6
- data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
- data/lib/avo/fields/has_base_field.rb +11 -14
- data/lib/avo/fields/has_many_field.rb +5 -2
- data/lib/avo/fields/has_one_field.rb +5 -10
- data/lib/avo/fields/heading_field.rb +4 -1
- data/lib/avo/fields/hidden_field.rb +1 -1
- data/lib/avo/fields/id_field.rb +2 -3
- data/lib/avo/fields/password_field.rb +1 -1
- data/lib/avo/fields/preview_field.rb +14 -0
- data/lib/avo/fields/select_field.rb +12 -8
- data/lib/avo/fields/status_field.rb +4 -0
- data/lib/avo/filters/base_filter.rb +3 -8
- data/lib/avo/grid_collector.rb +7 -9
- data/lib/avo/html/builder.rb +5 -8
- data/lib/avo/item_grapher.rb +78 -0
- data/lib/avo/licensing/h_q.rb +4 -68
- data/lib/avo/licensing/license.rb +2 -2
- data/lib/avo/licensing/license_manager.rb +1 -1
- data/lib/avo/licensing/{nil_license.rb → null_license.rb} +1 -1
- data/lib/avo/licensing/pro_license.rb +1 -7
- data/lib/avo/plugin.rb +6 -0
- data/lib/avo/plugin_manager.rb +58 -0
- data/lib/avo/prefixed_test_helpers.rb +20 -0
- data/lib/avo/reloader.rb +3 -0
- data/lib/avo/resources/controls/actions_list.rb +6 -12
- data/lib/avo/resources/controls/attach_button.rb +15 -0
- data/lib/avo/resources/controls/back_button.rb +1 -1
- data/lib/avo/resources/controls/base_control.rb +15 -49
- data/lib/avo/resources/controls/create_button.rb +15 -0
- data/lib/avo/resources/controls/delete_button.rb +5 -1
- data/lib/avo/resources/controls/detach_button.rb +4 -1
- data/lib/avo/resources/controls/edit_button.rb +4 -1
- data/lib/avo/resources/controls/order_controls.rb +8 -0
- data/lib/avo/resources/controls/save_button.rb +13 -0
- data/lib/avo/resources/controls/show_button.rb +15 -0
- data/lib/avo/resources/items/holder.rb +76 -0
- data/lib/avo/resources/items/item_group.rb +48 -0
- data/lib/avo/resources/items/main_panel.rb +2 -0
- data/lib/avo/resources/items/panel.rb +2 -0
- data/lib/avo/resources/items/sidebar.rb +47 -0
- data/lib/avo/resources/items/tab.rb +60 -0
- data/lib/avo/resources/items/tab_group.rb +68 -0
- data/lib/avo/resources/resource_manager.rb +181 -0
- data/lib/avo/services/authorization_service.rb +11 -110
- data/lib/avo/services/debug_service.rb +92 -0
- data/lib/avo/services/telemetry_service.rb +84 -0
- data/lib/avo/test_helpers.rb +362 -0
- data/lib/avo/tools/tool_manager.rb +30 -0
- data/lib/avo/version.rb +1 -1
- data/lib/avo.rb +7 -0
- data/lib/generators/avo/eject_generator.rb +0 -1
- data/lib/generators/avo/install_generator.rb +1 -11
- data/lib/generators/avo/resource_generator.rb +5 -23
- data/lib/generators/avo/scope_generator.rb +15 -0
- data/lib/generators/avo/tailwindcss/install_generator.rb +1 -18
- data/lib/generators/avo/templates/action.tt +1 -1
- data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
- data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
- data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
- data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
- data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
- data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
- data/lib/generators/avo/templates/dashboards/dashboard.tt +1 -1
- data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
- data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
- data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
- data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
- data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
- data/lib/generators/avo/templates/initializer/avo.tt +1 -11
- data/lib/generators/avo/templates/locales/avo.ar.yml +6 -6
- data/lib/generators/avo/templates/locales/avo.en.yml +4 -5
- data/lib/generators/avo/templates/locales/avo.fr.yml +1 -2
- data/lib/generators/avo/templates/locales/avo.nb.yml +1 -2
- data/lib/generators/avo/templates/locales/avo.nn.yml +1 -2
- data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -2
- data/lib/generators/avo/templates/locales/avo.pt.yml +1 -2
- data/lib/generators/avo/templates/locales/avo.ro.yml +6 -7
- data/lib/generators/avo/templates/locales/avo.tr.yml +1 -2
- data/lib/generators/avo/templates/resource/resource.tt +1 -1
- data/lib/generators/avo/templates/resource_tools/partial.tt +4 -4
- data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
- data/lib/generators/avo/templates/scope.tt +6 -0
- data/lib/generators/avo/templates/standalone_action.tt +1 -1
- data/lib/generators/avo/templates/tailwindcss/Procfile.dev +1 -1
- data/lib/generators/avo/templates/tool/view.tt +2 -2
- data/lib/tasks/avo_tasks.rake +22 -0
- metadata +82 -161
- data/app/assets/stylesheets/css/tags.css +0 -32
- data/app/assets/svgs/map-empty-state.svg +0 -35
- data/app/assets/svgs/map-view-type.svg +0 -3
- data/app/components/avo/card_component.html.erb +0 -46
- data/app/components/avo/card_component.rb +0 -25
- data/app/components/avo/dashboards/divider_component.html.erb +0 -9
- data/app/components/avo/dashboards/divider_component.rb +0 -19
- data/app/components/avo/fields/area_field/edit_component.html.erb +0 -7
- data/app/components/avo/fields/area_field/edit_component.rb +0 -4
- data/app/components/avo/fields/area_field/show_component.html.erb +0 -8
- data/app/components/avo/fields/area_field/show_component.rb +0 -4
- data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
- data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
- data/app/components/avo/fields/common/files/controls_component.html.erb +0 -29
- data/app/components/avo/fields/common/files/controls_component.rb +0 -19
- data/app/components/avo/fields/common/files/list_viewer_component.html.erb +0 -20
- data/app/components/avo/fields/common/files/list_viewer_component.rb +0 -41
- data/app/components/avo/fields/common/files/view_type/grid_item_component.html.erb +0 -27
- data/app/components/avo/fields/common/files/view_type/grid_item_component.rb +0 -52
- data/app/components/avo/fields/common/files/view_type/list_item_component.html.erb +0 -22
- data/app/components/avo/fields/common/files/view_type/list_item_component.rb +0 -15
- data/app/components/avo/fields/location_field/edit_component.html.erb +0 -22
- data/app/components/avo/fields/location_field/edit_component.rb +0 -4
- data/app/components/avo/fields/location_field/show_component.html.erb +0 -7
- data/app/components/avo/fields/location_field/show_component.rb +0 -4
- data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
- data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
- data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
- data/app/components/avo/fields/tags_field/index_component.rb +0 -9
- data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
- data/app/components/avo/fields/tags_field/show_component.rb +0 -5
- data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
- data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
- data/app/components/avo/index/ordering/base_component.rb +0 -9
- data/app/components/avo/index/ordering/button_component.html.erb +0 -11
- data/app/components/avo/index/ordering/button_component.rb +0 -23
- data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
- data/app/components/avo/index/ordering/buttons_component.rb +0 -47
- data/app/components/avo/index/resource_map_component.html.erb +0 -16
- data/app/components/avo/index/resource_map_component.rb +0 -109
- data/app/components/avo/row_component.html.erb +0 -3
- data/app/components/avo/row_component.rb +0 -12
- data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
- data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
- data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
- data/app/controllers/avo/dashboards_controller.rb +0 -22
- data/app/controllers/avo/reorder_controller.rb +0 -25
- data/app/javascript/js/controllers/base_controller.js +0 -22
- data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +0 -51
- data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
- data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
- data/app/views/avo/base/_new_via_belongs_to.html.erb +0 -12
- data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
- data/app/views/avo/base/create_fail_action.turbo_stream.erb +0 -13
- data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
- data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
- data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
- data/app/views/avo/dashboards/cards/show.html.erb +0 -3
- data/app/views/avo/dashboards/show.html.erb +0 -38
- data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +0 -3
- data/app/views/avo/partials/_global_search.html.erb +0 -19
- data/app/views/avo/partials/_profile_menu_extra.html.erb +0 -2
- data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
- data/lib/avo/base_card.rb +0 -161
- data/lib/avo/concerns/fetches_things.rb +0 -150
- data/lib/avo/concerns/handles_field_args.rb +0 -47
- data/lib/avo/concerns/has_action_stimulus_controllers.rb +0 -15
- data/lib/avo/concerns/has_editable_controls.rb +0 -34
- data/lib/avo/concerns/has_html_attributes.rb +0 -123
- data/lib/avo/concerns/pagination.rb +0 -53
- data/lib/avo/concerns/policy_helpers.rb +0 -31
- data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
- data/lib/avo/concerns/visible_items.rb +0 -51
- data/lib/avo/dashboards/base_dashboard.rb +0 -89
- data/lib/avo/dashboards/base_divider.rb +0 -35
- data/lib/avo/dashboards/chartkick_card.rb +0 -77
- data/lib/avo/dashboards/dashboard_card.rb +0 -6
- data/lib/avo/dashboards/metric_card.rb +0 -9
- data/lib/avo/dashboards/partial_card.rb +0 -7
- data/lib/avo/fields/area_field.rb +0 -39
- data/lib/avo/fields/concerns/file_authorization.rb +0 -31
- data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
- data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
- data/lib/avo/fields/location_field.rb +0 -86
- data/lib/avo/fields/tags_field.rb +0 -102
- data/lib/avo/hosts/association_scope_host.rb +0 -8
- data/lib/avo/hosts/base_host.rb +0 -25
- data/lib/avo/hosts/card_visibility.rb +0 -20
- data/lib/avo/hosts/dashboard_card.rb +0 -22
- data/lib/avo/hosts/dashboard_visibility.rb +0 -19
- data/lib/avo/hosts/ordering.rb +0 -22
- data/lib/avo/hosts/record_host.rb +0 -7
- data/lib/avo/hosts/resource_record_host.rb +0 -7
- data/lib/avo/hosts/resource_view_record_host.rb +0 -7
- data/lib/avo/hosts/search_scope_host.rb +0 -7
- data/lib/avo/hosts/view_record_host.rb +0 -7
- data/lib/avo/hosts/visibility_host.rb +0 -12
- data/lib/avo/items_holder.rb +0 -96
- data/lib/avo/main_panel.rb +0 -3
- data/lib/avo/menu/base_item.rb +0 -25
- data/lib/avo/menu/builder.rb +0 -82
- data/lib/avo/menu/dashboard.rb +0 -22
- data/lib/avo/menu/group.rb +0 -2
- data/lib/avo/menu/link.rb +0 -6
- data/lib/avo/menu/menu.rb +0 -2
- data/lib/avo/menu/resource.rb +0 -22
- data/lib/avo/menu/section.rb +0 -2
- data/lib/avo/panel.rb +0 -24
- data/lib/avo/panel_builder.rb +0 -25
- data/lib/avo/resources/controls/action.rb +0 -38
- data/lib/avo/resources/controls/execution_context.rb +0 -58
- data/lib/avo/resources/controls/items_holder.rb +0 -19
- data/lib/avo/resources/controls/link_to.rb +0 -27
- data/lib/avo/row.rb +0 -26
- data/lib/avo/row_builder.rb +0 -24
- data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
- data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
- data/lib/avo/sidebar.rb +0 -30
- data/lib/avo/sidebar_builder.rb +0 -24
- data/lib/avo/tab.rb +0 -72
- data/lib/avo/tab_builder.rb +0 -25
- data/lib/avo/tab_group.rb +0 -42
- data/lib/avo/tab_group_builder.rb +0 -43
- data/lib/avo/tools_manager.rb +0 -11
- data/lib/generators/avo/templates/locales/avo.es.yml +0 -126
- data/public/avo-assets/avo.base.js +0 -1037
- data/public/avo-assets/avo.base.js.map +0 -7
@@ -2,18 +2,18 @@ require_dependency "avo/base_controller"
|
|
2
2
|
|
3
3
|
module Avo
|
4
4
|
class AssociationsController < BaseController
|
5
|
-
before_action :
|
6
|
-
before_action :hydrate_resource, only: [:show, :index, :new, :create, :destroy
|
5
|
+
before_action :set_record, only: [:show, :index, :new, :create, :destroy]
|
6
|
+
before_action :hydrate_resource, only: [:show, :index, :new, :create, :destroy]
|
7
7
|
before_action :set_related_resource_name
|
8
|
-
before_action :set_related_resource, only: [:show, :index, :new, :create, :destroy
|
8
|
+
before_action :set_related_resource, only: [:show, :index, :new, :create, :destroy]
|
9
9
|
before_action :set_related_authorization
|
10
10
|
before_action :set_reflection_field
|
11
|
-
before_action :
|
12
|
-
before_action :hydrate_related_resource, only: [:show, :index, :create, :destroy
|
11
|
+
before_action :set_related_record, only: [:show]
|
12
|
+
before_action :hydrate_related_resource, only: [:show, :index, :create, :destroy]
|
13
13
|
before_action :set_reflection
|
14
|
-
before_action :set_attachment_class, only: [:show, :index, :new, :create, :destroy
|
15
|
-
before_action :set_attachment_resource, only: [:show, :index, :new, :create, :destroy
|
16
|
-
before_action :
|
14
|
+
before_action :set_attachment_class, only: [:show, :index, :new, :create, :destroy]
|
15
|
+
before_action :set_attachment_resource, only: [:show, :index, :new, :create, :destroy]
|
16
|
+
before_action :set_attachment_record, only: [:create, :destroy]
|
17
17
|
before_action :authorize_index_action, only: :index
|
18
18
|
before_action :authorize_attach_action, only: :new
|
19
19
|
before_action :authorize_detach_action, only: :destroy
|
@@ -21,55 +21,55 @@ module Avo
|
|
21
21
|
def index
|
22
22
|
@parent_resource = @resource.dup
|
23
23
|
@resource = @related_resource
|
24
|
-
@
|
25
|
-
@parent_resource.hydrate(
|
26
|
-
association_name = BaseResource.valid_association_name(@
|
27
|
-
@query = @related_authorization.apply_policy @
|
24
|
+
@parent_record = @parent_resource.find_record(params[:id], params: params)
|
25
|
+
@parent_resource.hydrate(record: @parent_record)
|
26
|
+
association_name = BaseResource.valid_association_name(@parent_record, params[:related_name])
|
27
|
+
@query = @related_authorization.apply_policy @parent_record.send(association_name)
|
28
28
|
@association_field = @parent_resource.get_field params[:related_name]
|
29
29
|
|
30
30
|
if @association_field.present? && @association_field.scope.present?
|
31
|
-
@query = Avo::
|
31
|
+
@query = Avo::ExecutionContext.new(target: @association_field.scope, query: @query, parent: @parent_record).handle
|
32
32
|
end
|
33
33
|
|
34
34
|
super
|
35
35
|
end
|
36
36
|
|
37
37
|
def show
|
38
|
-
@parent_resource, @
|
38
|
+
@parent_resource, @parent_record = @resource, @record
|
39
39
|
|
40
|
-
@resource, @
|
40
|
+
@resource, @record = @related_resource, @related_record
|
41
41
|
|
42
42
|
super
|
43
43
|
end
|
44
44
|
|
45
45
|
def new
|
46
|
-
@resource.hydrate(
|
46
|
+
@resource.hydrate(record: @record)
|
47
47
|
|
48
|
-
if @field.present? && !@field.
|
48
|
+
if @field.present? && !@field.is_searchable?
|
49
49
|
query = @related_authorization.apply_policy @attachment_class
|
50
50
|
|
51
51
|
# Add the association scope to the query scope
|
52
52
|
if @field.attach_scope.present?
|
53
|
-
query = Avo::
|
53
|
+
query = Avo::ExecutionContext.new(target: @field.attach_scope, query: query, parent: @record).handle
|
54
54
|
end
|
55
55
|
|
56
|
-
@options = query.all.map do |
|
57
|
-
[
|
56
|
+
@options = query.all.map do |record|
|
57
|
+
[record.send(@attachment_resource.class.title), record.id]
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
62
|
def create
|
63
|
-
association_name = BaseResource.valid_association_name(@
|
63
|
+
association_name = BaseResource.valid_association_name(@record, params[:related_name])
|
64
64
|
|
65
65
|
if reflection_class == "HasManyReflection"
|
66
|
-
@
|
66
|
+
@record.send(association_name) << @attachment_record
|
67
67
|
else
|
68
|
-
@
|
68
|
+
@record.send("#{association_name}=", @attachment_record)
|
69
69
|
end
|
70
70
|
|
71
71
|
respond_to do |format|
|
72
|
-
if @
|
72
|
+
if @record.save
|
73
73
|
format.html { redirect_back fallback_location: resource_view_response_path, notice: t("avo.attachment_class_attached", attachment_class: @related_resource.name) }
|
74
74
|
else
|
75
75
|
format.html { render :new }
|
@@ -78,12 +78,12 @@ module Avo
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def destroy
|
81
|
-
association_name = BaseResource.valid_association_name(@
|
81
|
+
association_name = BaseResource.valid_association_name(@record, params[:related_name])
|
82
82
|
|
83
83
|
if reflection_class == "HasManyReflection"
|
84
|
-
@
|
84
|
+
@record.send(association_name).delete @attachment_record
|
85
85
|
else
|
86
|
-
@
|
86
|
+
@record.send("#{association_name}=", nil)
|
87
87
|
end
|
88
88
|
|
89
89
|
respond_to do |format|
|
@@ -91,17 +91,10 @@ module Avo
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
def order
|
95
|
-
@parent_resource = @resource.dup
|
96
|
-
@resource, @model = @related_resource, @related_model
|
97
|
-
|
98
|
-
super
|
99
|
-
end
|
100
|
-
|
101
94
|
private
|
102
95
|
|
103
96
|
def set_reflection
|
104
|
-
@reflection = @
|
97
|
+
@reflection = @record._reflections[params[:related_name].to_s]
|
105
98
|
end
|
106
99
|
|
107
100
|
def set_attachment_class
|
@@ -109,16 +102,16 @@ module Avo
|
|
109
102
|
end
|
110
103
|
|
111
104
|
def set_attachment_resource
|
112
|
-
@attachment_resource = @field.use_resource || (App.
|
105
|
+
@attachment_resource = @field.use_resource || (Avo::App.resources.get_resource_by_model_class @attachment_class)
|
113
106
|
end
|
114
107
|
|
115
|
-
def
|
116
|
-
@
|
108
|
+
def set_attachment_record
|
109
|
+
@attachment_record = @related_resource.find_record attachment_id, params: params
|
117
110
|
end
|
118
111
|
|
119
112
|
def set_reflection_field
|
120
113
|
@field = @resource.get_field_definitions.find { |f| f.id == @related_resource_name.to_sym }
|
121
|
-
@field.hydrate(resource: @resource,
|
114
|
+
@field.hydrate(resource: @resource, record: @record, view: :new)
|
122
115
|
rescue
|
123
116
|
end
|
124
117
|
|
@@ -127,7 +120,7 @@ module Avo
|
|
127
120
|
end
|
128
121
|
|
129
122
|
def reflection_class
|
130
|
-
reflection = @
|
123
|
+
reflection = @record._reflections[params[:related_name]]
|
131
124
|
|
132
125
|
klass = reflection.class.name.demodulize.to_s
|
133
126
|
klass = reflection.through_reflection.class.name.demodulize.to_s if klass == "ThroughReflection"
|
@@ -136,7 +129,7 @@ module Avo
|
|
136
129
|
end
|
137
130
|
|
138
131
|
def authorize_if_defined(method)
|
139
|
-
@authorization.set_record(@
|
132
|
+
@authorization.set_record(@record)
|
140
133
|
|
141
134
|
if @authorization.has_method?(method.to_sym)
|
142
135
|
@authorization.authorize_action method.to_sym
|
@@ -4,17 +4,17 @@ module Avo
|
|
4
4
|
class AttachmentsController < ApplicationController
|
5
5
|
before_action :set_resource_name, only: [:destroy, :create]
|
6
6
|
before_action :set_resource, only: [:destroy, :create]
|
7
|
-
before_action :
|
7
|
+
before_action :set_record, only: [:destroy, :create]
|
8
8
|
|
9
9
|
def create
|
10
|
-
blob = ActiveStorage::Blob.create_and_upload! io: params[:file]
|
11
|
-
association_name = BaseResource.valid_attachment_name(@
|
10
|
+
blob = ActiveStorage::Blob.create_and_upload! io: params[:file], filename: params[:filename]
|
11
|
+
association_name = BaseResource.valid_attachment_name(@record, params[:attachment_key])
|
12
12
|
|
13
13
|
if association_name.blank?
|
14
14
|
raise ActionController::BadRequest.new("Could not find the attachment association for #{params[:attachment_key]} (check the `attachment_key` for this Trix field)")
|
15
15
|
end
|
16
16
|
|
17
|
-
@
|
17
|
+
@record.send(association_name).attach blob
|
18
18
|
|
19
19
|
render json: {
|
20
20
|
url: main_app.url_for(blob),
|
@@ -23,31 +23,16 @@ module Avo
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def destroy
|
26
|
-
|
27
|
-
|
26
|
+
attachment = ActiveStorage::Attachment.find(params[:attachment_id])
|
27
|
+
path = resource_path(record: @record, resource: @resource)
|
28
28
|
|
29
|
-
|
30
|
-
|
29
|
+
if attachment.present?
|
30
|
+
attachment.destroy
|
31
31
|
|
32
|
-
|
33
|
-
else
|
34
|
-
t("avo.failed_to_find_attachment")
|
35
|
-
end
|
32
|
+
redirect_to params[:referrer] || path, notice: t("avo.attachment_destroyed")
|
36
33
|
else
|
37
|
-
|
34
|
+
redirect_back fallback_location: path, notice: t("avo.failed_to_find_attachment")
|
38
35
|
end
|
39
|
-
|
40
|
-
respond_to do |format|
|
41
|
-
format.turbo_stream do
|
42
|
-
render "destroy"
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
def authorized_to(action)
|
50
|
-
@resource.authorization.authorize_action("#{action}_#{params[:attachment_name]}?", record: @model, raise_exception: false)
|
51
36
|
end
|
52
37
|
end
|
53
38
|
end
|
@@ -8,12 +8,12 @@ module Avo
|
|
8
8
|
before_action :set_resource
|
9
9
|
before_action :hydrate_resource
|
10
10
|
before_action :set_applied_filters, only: :index
|
11
|
-
before_action :
|
12
|
-
before_action :
|
11
|
+
before_action :set_record, only: [:show, :edit, :destroy, :update, :preview]
|
12
|
+
before_action :set_record_to_fill
|
13
13
|
before_action :set_edit_title_and_breadcrumbs, only: [:edit, :update]
|
14
|
-
before_action :
|
14
|
+
before_action :fill_record, only: [:create, :update]
|
15
15
|
# Don't run base authorizations for associations
|
16
|
-
before_action :authorize_base_action, if: -> { controller_name != "associations" }
|
16
|
+
before_action :authorize_base_action, except: :preview, if: -> { controller_name != "associations" }
|
17
17
|
before_action :set_pagy_locale, only: :index
|
18
18
|
|
19
19
|
def index
|
@@ -65,57 +65,73 @@ module Avo
|
|
65
65
|
).apply_query request, @query, filter_value
|
66
66
|
end
|
67
67
|
|
68
|
-
|
68
|
+
extra_pagy_params = {}
|
69
69
|
|
70
|
-
#
|
71
|
-
|
72
|
-
|
70
|
+
# Reset open filters when a user navigates to a new page
|
71
|
+
extra_pagy_params[:keep_filters_panel_open] = if params[:keep_filters_panel_open] == "1"
|
72
|
+
"0"
|
73
|
+
end
|
74
|
+
|
75
|
+
safe_call :set_and_apply_scopes
|
76
|
+
|
77
|
+
if Avo.avo_filters_installed? && params[AvoFilters.configuration.param_key].present?
|
78
|
+
# Apply dynamic filters
|
79
|
+
query_builder = AvoFilters::QueryBuilder.new(resource: @resource, params: params, query: @query)
|
80
|
+
@query = @query.ransack(**query_builder.ransack_query)
|
81
|
+
end
|
82
|
+
|
83
|
+
pagy_query = if @query.instance_of?(Ransack::Search)
|
84
|
+
@query.result(distinct: false)
|
85
|
+
else
|
86
|
+
@query
|
87
|
+
end
|
88
|
+
|
89
|
+
@pagy, @records = pagy(pagy_query, items: @index_params[:per_page], link_extra: "data-turbo-frame=\"#{params[:turbo_frame]}\"", size: [1, 2, 2, 1], params: extra_pagy_params)
|
90
|
+
|
91
|
+
# Create resources for each record
|
92
|
+
@resources = @records.map do |record|
|
93
|
+
@resource.hydrate(record: record, params: params).dup
|
73
94
|
end
|
74
95
|
end
|
75
96
|
|
76
97
|
def show
|
77
|
-
@resource.hydrate(
|
98
|
+
@resource.hydrate(record: @record, view: :show, user: _current_user, params: params)
|
78
99
|
|
79
100
|
set_actions
|
80
101
|
|
81
102
|
@page_title = @resource.default_panel_name.to_s
|
82
103
|
|
83
104
|
# If we're accessing this resource via another resource add the parent to the breadcrumbs.
|
84
|
-
if params[:via_resource_class].present? && params[:
|
85
|
-
via_resource = Avo::App.get_resource(params[:via_resource_class]).dup
|
86
|
-
|
87
|
-
via_resource.hydrate
|
105
|
+
if params[:via_resource_class].present? && params[:via_record_id].present?
|
106
|
+
via_resource = Avo::App.resources.get_resource(params[:via_resource_class]).dup
|
107
|
+
via_record = via_resource.find_record params[:via_record_id], params: params
|
108
|
+
via_resource.hydrate record: via_record
|
88
109
|
|
89
110
|
add_breadcrumb via_resource.plural_name, resources_path(resource: via_resource)
|
90
|
-
add_breadcrumb via_resource.
|
111
|
+
add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
|
91
112
|
else
|
92
113
|
add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
|
93
114
|
end
|
94
115
|
|
95
|
-
add_breadcrumb @resource.
|
116
|
+
add_breadcrumb @resource.record_title
|
96
117
|
add_breadcrumb I18n.t("avo.details").upcase_first
|
97
118
|
end
|
98
119
|
|
99
120
|
def new
|
100
|
-
@
|
101
|
-
@resource = @resource.hydrate(
|
102
|
-
|
103
|
-
# Handle special cases when creating a new record via a belongs_to relationship
|
104
|
-
if params[:via_belongs_to_resource_class].present?
|
105
|
-
return render turbo_stream: turbo_stream.append('attach_modal', partial: 'avo/base/new_via_belongs_to')
|
106
|
-
end
|
121
|
+
@record = @resource.model_class.new
|
122
|
+
@resource = @resource.hydrate(record: @record, view: :new, user: _current_user)
|
107
123
|
|
108
124
|
set_actions
|
109
125
|
|
110
126
|
@page_title = @resource.default_panel_name.to_s
|
111
127
|
|
112
128
|
if is_associated_record?
|
113
|
-
via_resource = Avo::App.
|
114
|
-
|
115
|
-
via_resource.hydrate
|
129
|
+
via_resource = Avo::App.resources.get_resource_by_model_class(params[:via_relation_class]).dup
|
130
|
+
via_record = via_resource.find_record params[:via_record_id], params: params
|
131
|
+
via_resource.hydrate record: via_record
|
116
132
|
|
117
133
|
add_breadcrumb via_resource.plural_name, resources_path(resource: via_resource)
|
118
|
-
add_breadcrumb via_resource.
|
134
|
+
add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
|
119
135
|
end
|
120
136
|
|
121
137
|
add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
|
@@ -123,38 +139,33 @@ module Avo
|
|
123
139
|
end
|
124
140
|
|
125
141
|
def create
|
126
|
-
#
|
127
|
-
saved =
|
128
|
-
@resource.hydrate(
|
142
|
+
# record gets instantiated and filled in the fill_record method
|
143
|
+
saved = save_record
|
144
|
+
@resource.hydrate(record: @record, view: :new, user: _current_user)
|
129
145
|
|
130
146
|
# This means that the record has been created through another parent record and we need to attach it somehow.
|
131
|
-
if params[:
|
132
|
-
@reflection = @
|
147
|
+
if params[:via_record_id].present?
|
148
|
+
@reflection = @record._reflections[params[:via_relation]]
|
133
149
|
# Figure out what kind of association does the record have with the parent record
|
134
150
|
|
135
151
|
# Fills in the required infor for belongs_to and has_many
|
136
152
|
# Get the foreign key and set it to the id we received in the params
|
137
153
|
if @reflection.is_a?(ActiveRecord::Reflection::BelongsToReflection) || @reflection.is_a?(ActiveRecord::Reflection::HasManyReflection)
|
138
|
-
related_resource = Avo::App.
|
139
|
-
related_record = related_resource.find_record params[:
|
154
|
+
related_resource = Avo::App.resources.get_resource_by_model_class params[:via_relation_class]
|
155
|
+
related_record = related_resource.find_record params[:via_record_id], params: params
|
140
156
|
|
141
|
-
@
|
142
|
-
@
|
157
|
+
@record.send("#{@reflection.foreign_key}=", related_record.id)
|
158
|
+
@record.save
|
143
159
|
end
|
144
160
|
|
145
161
|
# For when working with has_one, has_one_through, has_many_through, has_and_belongs_to_many, polymorphic
|
146
162
|
if @reflection.is_a? ActiveRecord::Reflection::ThroughReflection
|
147
163
|
# find the record
|
148
|
-
via_resource = ::Avo::App.
|
149
|
-
@related_record = via_resource.find_record params[:
|
150
|
-
association_name = BaseResource.valid_association_name(@
|
151
|
-
|
152
|
-
|
153
|
-
# On has_one scenarios we should switch the @record and @related_record
|
154
|
-
@related_record.send("#{@reflection.parent_reflection.inverse_of.name}=", @model)
|
155
|
-
else
|
156
|
-
@model.send(association_name) << @related_record
|
157
|
-
end
|
164
|
+
via_resource = ::Avo::App.resources.get_resource_by_model_class(params[:via_relation_class]).dup
|
165
|
+
@related_record = via_resource.find_record params[:via_record_id], params: params
|
166
|
+
association_name = BaseResource.valid_association_name(@record, params[:via_relation])
|
167
|
+
|
168
|
+
@record.send(association_name) << @related_record
|
158
169
|
end
|
159
170
|
end
|
160
171
|
|
@@ -174,9 +185,9 @@ module Avo
|
|
174
185
|
end
|
175
186
|
|
176
187
|
def update
|
177
|
-
#
|
178
|
-
saved =
|
179
|
-
@resource = @resource.hydrate(
|
188
|
+
# record gets instantiated and filled in the fill_record method
|
189
|
+
saved = save_record
|
190
|
+
@resource = @resource.hydrate(record: @record, view: :edit, user: _current_user)
|
180
191
|
set_actions
|
181
192
|
|
182
193
|
if saved
|
@@ -194,55 +205,38 @@ module Avo
|
|
194
205
|
end
|
195
206
|
end
|
196
207
|
|
197
|
-
def
|
198
|
-
|
208
|
+
def preview
|
209
|
+
@resource.hydrate(record: @record, view: :show, user: _current_user, params: params)
|
199
210
|
|
200
|
-
|
201
|
-
@resource
|
202
|
-
.hydrate(model: @model, params: params)
|
203
|
-
.ordering_host
|
204
|
-
.order direction
|
205
|
-
end
|
206
|
-
|
207
|
-
respond_to do |format|
|
208
|
-
format.html { redirect_to params[:referrer] || resources_path(resource: @resource) }
|
209
|
-
end
|
211
|
+
render layout: params[:turbo_frame].blank?
|
210
212
|
end
|
211
213
|
|
212
214
|
private
|
213
215
|
|
214
|
-
def
|
216
|
+
def save_record
|
215
217
|
perform_action_and_record_errors do
|
216
|
-
|
218
|
+
@record.save!
|
217
219
|
end
|
218
220
|
end
|
219
221
|
|
220
|
-
def save_model_action
|
221
|
-
@model.save!
|
222
|
-
end
|
223
|
-
|
224
222
|
def destroy_model
|
225
223
|
perform_action_and_record_errors do
|
226
|
-
|
224
|
+
@record.destroy!
|
227
225
|
end
|
228
226
|
end
|
229
227
|
|
230
|
-
def destroy_model_action
|
231
|
-
@model.destroy!
|
232
|
-
end
|
233
|
-
|
234
228
|
def perform_action_and_record_errors(&block)
|
235
229
|
begin
|
236
230
|
succeeded = block.call
|
237
231
|
rescue => exception
|
238
|
-
# In case there's an error somewhere else than the
|
232
|
+
# In case there's an error somewhere else than the record
|
239
233
|
# Example: When you save a license that should create a user for it and creating that user throws and error.
|
240
234
|
# Example: When you Try to delete a record and has a foreign key constraint.
|
241
235
|
exception_message = exception.message
|
242
236
|
end
|
243
237
|
|
244
|
-
# Add the errors from the
|
245
|
-
@errors = @
|
238
|
+
# Add the errors from the record
|
239
|
+
@errors = @record.errors.full_messages.reject { |error| exception_message.include? error }.unshift exception_message
|
246
240
|
|
247
241
|
succeeded
|
248
242
|
end
|
@@ -259,7 +253,7 @@ module Avo
|
|
259
253
|
end
|
260
254
|
|
261
255
|
def permitted_params
|
262
|
-
@resource.get_field_definitions.select(&:updatable).map(&:to_permitted_param).concat
|
256
|
+
@resource.get_field_definitions.select(&:updatable).map(&:to_permitted_param).concat extra_params
|
263
257
|
end
|
264
258
|
|
265
259
|
def extra_params
|
@@ -300,7 +294,7 @@ module Avo
|
|
300
294
|
@index_params[:per_page] = cookies[:per_page]
|
301
295
|
end
|
302
296
|
|
303
|
-
if @
|
297
|
+
if @parent_record.present?
|
304
298
|
@index_params[:per_page] = Avo.configuration.via_per_page
|
305
299
|
end
|
306
300
|
|
@@ -338,7 +332,7 @@ module Avo
|
|
338
332
|
@actions = @resource
|
339
333
|
.get_actions
|
340
334
|
.map do |action|
|
341
|
-
action[:class].new(
|
335
|
+
action[:class].new(record: @record, resource: @resource, view: @view, arguments: action[:arguments])
|
342
336
|
end
|
343
337
|
.select do |action|
|
344
338
|
action.visible_in_view(parent_resource: @parent_resource)
|
@@ -392,45 +386,41 @@ module Avo
|
|
392
386
|
end
|
393
387
|
|
394
388
|
def set_edit_title_and_breadcrumbs
|
395
|
-
@resource = @resource.hydrate(
|
389
|
+
@resource = @resource.hydrate(record: @record, view: :edit, user: _current_user)
|
396
390
|
@page_title = @resource.default_panel_name.to_s
|
397
391
|
|
398
392
|
last_crumb_args = {}
|
399
393
|
# If we're accessing this resource via another resource add the parent to the breadcrumbs.
|
400
|
-
if params[:via_resource_class].present? && params[:
|
401
|
-
via_resource = Avo::App.get_resource(params[:via_resource_class]).dup
|
402
|
-
|
403
|
-
via_resource.hydrate
|
394
|
+
if params[:via_resource_class].present? && params[:via_record_id].present?
|
395
|
+
via_resource = Avo::App.resources.get_resource(params[:via_resource_class]).dup
|
396
|
+
via_record = via_resource.find_record params[:via_record_id], params: params
|
397
|
+
via_resource.hydrate record: via_record
|
404
398
|
|
405
399
|
add_breadcrumb via_resource.plural_name, resources_path(resource: @resource)
|
406
|
-
add_breadcrumb via_resource.
|
400
|
+
add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
|
407
401
|
|
408
402
|
last_crumb_args = {
|
409
403
|
via_resource_class: params[:via_resource_class],
|
410
|
-
|
404
|
+
via_record_id: params[:via_record_id]
|
411
405
|
}
|
412
406
|
else
|
413
407
|
add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
|
414
408
|
end
|
415
409
|
|
416
|
-
add_breadcrumb @resource.
|
410
|
+
add_breadcrumb @resource.record_title, resource_path(record: @resource.record, resource: @resource, **last_crumb_args)
|
417
411
|
add_breadcrumb t("avo.edit").humanize
|
418
412
|
end
|
419
413
|
|
420
414
|
def create_success_action
|
421
|
-
return render "close_modal_and_reload_field" if params[:via_belongs_to_resource_class].present?
|
422
|
-
|
423
415
|
respond_to do |format|
|
424
416
|
format.html { redirect_to after_create_path, notice: create_success_message}
|
425
417
|
end
|
426
418
|
end
|
427
419
|
|
428
420
|
def create_fail_action
|
429
|
-
flash.now[:error] = create_fail_message
|
430
|
-
|
431
421
|
respond_to do |format|
|
422
|
+
flash.now[:error] = create_fail_message
|
432
423
|
format.html { render :new, status: :unprocessable_entity }
|
433
|
-
format.turbo_stream { render "create_fail_action" }
|
434
424
|
end
|
435
425
|
end
|
436
426
|
|
@@ -445,13 +435,13 @@ module Avo
|
|
445
435
|
def after_create_path
|
446
436
|
# If this is an associated record return to the association show page
|
447
437
|
if is_associated_record?
|
448
|
-
parent_resource = ::Avo::App.
|
449
|
-
association_name = BaseResource.valid_association_name(@
|
438
|
+
parent_resource = ::Avo::App.resources.get_resource_by_model_class(params[:via_relation_class]).dup
|
439
|
+
association_name = BaseResource.valid_association_name(@record, params[:via_relation])
|
450
440
|
|
451
441
|
return resource_view_path(
|
452
|
-
|
442
|
+
record: @record.send(association_name),
|
453
443
|
resource: parent_resource,
|
454
|
-
resource_id: params[:
|
444
|
+
resource_id: params[:via_record_id]
|
455
445
|
)
|
456
446
|
end
|
457
447
|
|
@@ -487,7 +477,7 @@ module Avo
|
|
487
477
|
|
488
478
|
# Needs a different name, otwherwise, in some places, this can be called instead helpers.resource_view_path
|
489
479
|
def resource_view_response_path
|
490
|
-
helpers.resource_view_path(
|
480
|
+
helpers.resource_view_path(record: @record, resource: @resource)
|
491
481
|
end
|
492
482
|
|
493
483
|
def destroy_success_action
|
@@ -497,10 +487,8 @@ module Avo
|
|
497
487
|
end
|
498
488
|
|
499
489
|
def destroy_fail_action
|
500
|
-
flash[:error] = destroy_fail_message
|
501
|
-
|
502
490
|
respond_to do |format|
|
503
|
-
format.
|
491
|
+
format.html { redirect_back fallback_location: params[:referrer] || resources_path(resource: @resource, turbo_frame: params[:turbo_frame], view_type: params[:view_type]), error: destroy_fail_message }
|
504
492
|
end
|
505
493
|
end
|
506
494
|
|
@@ -522,14 +510,14 @@ module Avo
|
|
522
510
|
if @resource.class.send(action) == :index
|
523
511
|
resources_path(resource: @resource)
|
524
512
|
elsif @resource.class.send(action) == :edit || Avo.configuration.resource_default_view == :edit
|
525
|
-
edit_resource_path(resource: @resource,
|
513
|
+
edit_resource_path(resource: @resource, record: @resource.record)
|
526
514
|
else
|
527
|
-
resource_path(
|
515
|
+
resource_path(record: @record, resource: @resource)
|
528
516
|
end
|
529
517
|
end
|
530
518
|
|
531
519
|
def is_associated_record?
|
532
|
-
params[:via_relation_class].present? && params[:
|
520
|
+
params[:via_relation_class].present? && params[:via_record_id].present?
|
533
521
|
end
|
534
522
|
|
535
523
|
# Set pagy locale from params or from avo configuration, if both nil locale = "en"
|
@@ -537,8 +525,8 @@ module Avo
|
|
537
525
|
@pagy_locale = locale.to_s || Avo.configuration.locale || "en"
|
538
526
|
end
|
539
527
|
|
540
|
-
def
|
541
|
-
|
528
|
+
def safe_call(method)
|
529
|
+
send(method) if respond_to?(method, true)
|
542
530
|
end
|
543
531
|
end
|
544
532
|
end
|
@@ -2,7 +2,19 @@ require_dependency "avo/application_controller"
|
|
2
2
|
|
3
3
|
module Avo
|
4
4
|
class DebugController < ApplicationController
|
5
|
-
def
|
5
|
+
def status
|
6
|
+
end
|
7
|
+
|
8
|
+
def send_to_hq
|
9
|
+
url = "#{ENV["HQ_URL"]}/api/v3/debug_requests"
|
10
|
+
timeout = 10 # seconds
|
11
|
+
license_key = Avo::Services::DebugService.debug_report(request)[:hq_payload][:license_key]
|
12
|
+
body = params[:body]
|
13
|
+
body = {license_key: license_key, body: body, payload: Avo::Services::DebugService.debug_report(request).to_json}.to_json
|
14
|
+
|
15
|
+
HTTParty.post url, body: body, headers: {"Content-Type": "application/json"}, timeout: timeout
|
16
|
+
|
17
|
+
render turbo_stream: turbo_stream.replace(:send_to_hq, plain: "Payload sent to Avo HQ.")
|
6
18
|
end
|
7
19
|
|
8
20
|
def report
|
@@ -13,13 +25,13 @@ module Avo
|
|
13
25
|
|
14
26
|
if license.valid?
|
15
27
|
flash[:notice] = "avohq.io responded: \"#{license.id.humanize} license is valid\"."
|
16
|
-
elsif license.response[
|
17
|
-
flash[:error] = "avohq.io responded: \"#{license.response[
|
28
|
+
elsif license.response["reason"].present?
|
29
|
+
flash[:error] = "avohq.io responded: \"#{license.response["reason"]}\"."
|
18
30
|
else
|
19
|
-
flash[:error] = license.response[
|
31
|
+
flash[:error] = license.response["error"]
|
20
32
|
end
|
21
33
|
|
22
|
-
redirect_back fallback_location: avo.
|
34
|
+
redirect_back fallback_location: avo.avo_private_status_path
|
23
35
|
end
|
24
36
|
end
|
25
37
|
end
|