avo 2.45.0 → 3.0.0.beta1
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 +26 -25
- data/Gemfile.lock +179 -147
- data/README.md +1 -1
- data/app/assets/stylesheets/avo.base.css +0 -1
- data/app/assets/svgs/font.svg +1 -0
- data/app/assets/svgs/triangle-up.svg +1 -0
- data/app/components/avo/actions_component.html.erb +19 -5
- data/app/components/avo/actions_component.rb +37 -17
- 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 +15 -12
- 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 +1 -1
- data/app/components/avo/field_wrapper_component.rb +8 -8
- data/app/components/avo/fields/area_field/edit_component.html.erb +2 -2
- 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 +6 -17
- 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 -1
- data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +3 -3
- 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.rb +3 -3
- data/app/components/avo/fields/common/files/view_type/{grid_item_component.html.erb → grid_component.html.erb} +2 -2
- data/app/components/avo/fields/common/files/view_type/{grid_item_component.rb → grid_component.rb} +4 -5
- data/app/components/avo/fields/common/files/view_type/{list_item_component.rb → list_component.rb} +1 -1
- data/app/components/avo/fields/edit_component.rb +1 -1
- data/app/components/avo/fields/file_field/edit_component.html.erb +1 -1
- data/app/components/avo/fields/file_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 +3 -2
- data/app/components/avo/fields/has_one_field/show_component.rb +2 -2
- data/app/components/avo/fields/index_component.rb +5 -5
- 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/select_field/edit_component.html.erb +1 -1
- data/app/components/avo/fields/show_component.rb +4 -1
- data/app/components/avo/fields/trix_field/edit_component.rb +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.rb +0 -12
- data/app/components/avo/index/grid_item_component.html.erb +13 -36
- data/app/components/avo/index/grid_item_component.rb +43 -16
- data/app/components/avo/index/resource_controls_component.html.erb +3 -81
- data/app/components/avo/index/resource_controls_component.rb +124 -17
- 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_map_component.html.erb +1 -1
- data/app/components/avo/index/resource_map_component.rb +3 -3
- 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.rb +2 -2
- 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 -6
- data/app/components/avo/referrer_params_component.html.erb +1 -2
- data/app/components/avo/resource_component.rb +189 -14
- data/app/components/avo/resource_sidebar_component.html.erb +6 -2
- data/app/components/avo/resource_sidebar_component.rb +1 -1
- data/app/components/avo/sidebar/link_component.rb +1 -1
- data/app/components/avo/sidebar_component.html.erb +10 -3
- data/app/components/avo/sidebar_component.rb +5 -3
- data/app/components/avo/sidebar_profile_component.html.erb +15 -8
- 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 +12 -48
- data/app/components/avo/views/resource_edit_component.rb +7 -18
- data/app/components/avo/views/resource_index_component.html.erb +41 -47
- data/app/components/avo/views/resource_index_component.rb +62 -12
- data/app/components/avo/views/resource_show_component.html.erb +6 -149
- data/app/components/avo/views/resource_show_component.rb +6 -11
- data/app/controllers/avo/actions_controller.rb +27 -24
- data/app/controllers/avo/application_controller.rb +105 -151
- data/app/controllers/avo/associations_controller.rb +34 -43
- data/app/controllers/avo/attachments_controller.rb +4 -4
- data/app/controllers/avo/base_controller.rb +102 -102
- data/app/controllers/avo/debug_controller.rb +17 -5
- data/app/controllers/avo/home_controller.rb +1 -1
- data/app/controllers/avo/search_controller.rb +30 -51
- data/app/controllers/avo/team_users_controller.rb +4 -0
- data/app/controllers/concerns/avo/initializes_avo.rb +21 -0
- data/app/helpers/avo/application_helper.rb +15 -9
- 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 -3
- 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/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 +2 -2
- 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 +10 -6
- data/app/javascript/js/custom-stream-actions.js +15 -0
- data/app/views/avo/actions/keep_modal_open.turbo_stream.erb +5 -0
- data/app/views/avo/actions/show.html.erb +9 -6
- data/app/views/avo/associations/new.html.erb +2 -2
- 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 -14
- data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
- data/app/views/avo/partials/_footer.html.erb +1 -1
- 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 -11
- data/app/views/layouts/avo/application.html.erb +4 -2
- data/avo.gemspec +7 -7
- data/bin/dev +1 -1
- data/bin/prod +0 -0
- data/config/i18n-tasks.yml +1 -1
- data/config/initializers/pagy.rb +0 -2
- data/config/master.key +1 -0
- data/config/routes.rb +6 -10
- data/db/factories.rb +7 -1
- data/lib/avo/action_model.rb +20 -0
- data/lib/avo/asset_manager.rb +30 -0
- data/lib/avo/base_action.rb +57 -41
- data/lib/avo/base_resource.rb +263 -226
- data/lib/avo/base_resource_tool.rb +9 -16
- data/lib/avo/concerns/breadcrumbs.rb +2 -2
- data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +5 -9
- data/lib/avo/concerns/filters_session_handler.rb +5 -3
- data/lib/avo/concerns/has_controls.rb +37 -0
- data/lib/avo/concerns/has_description.rb +23 -0
- data/lib/avo/concerns/has_item_type.rb +42 -0
- data/lib/avo/concerns/has_items.rb +325 -0
- data/lib/avo/concerns/is_resource_item.rb +24 -36
- data/lib/avo/concerns/is_visible.rb +15 -0
- data/lib/avo/concerns/model_class_constantized.rb +0 -2
- data/lib/avo/concerns/visible_in_different_views.rb +126 -0
- data/lib/avo/configuration/branding.rb +0 -12
- data/lib/avo/configuration.rb +1 -37
- data/lib/avo/current.rb +39 -0
- data/lib/avo/dsl/field_parser.rb +1 -1
- data/lib/avo/dynamic_router.rb +18 -3
- data/lib/avo/engine.rb +35 -30
- data/lib/avo/error_manager.rb +25 -0
- data/lib/avo/execution_context.rb +10 -14
- data/lib/avo/fields/badge_field.rb +1 -1
- data/lib/avo/fields/base_field.rb +91 -105
- data/lib/avo/fields/belongs_to_field.rb +18 -22
- data/lib/avo/fields/concerns/file_authorization.rb +2 -2
- 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_time_field.rb +1 -5
- data/lib/avo/fields/field_manager.rb +55 -0
- data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
- data/lib/avo/fields/has_base_field.rb +12 -15
- data/lib/avo/fields/has_many_field.rb +5 -2
- data/lib/avo/fields/has_one_field.rb +6 -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 +1 -1
- data/lib/avo/fields/location_field.rb +8 -8
- 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 +8 -4
- data/lib/avo/html/builder.rb +7 -8
- data/lib/avo/item_grapher.rb +78 -0
- data/lib/avo/licensing/h_q.rb +7 -66
- data/lib/avo/licensing/license.rb +1 -1
- data/lib/avo/licensing/pro_license.rb +1 -7
- data/lib/avo/loaders/fields_loader.rb +7 -1
- data/lib/avo/plugin.rb +16 -0
- data/lib/avo/plugin_manager.rb +56 -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 +7 -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 +84 -0
- data/lib/avo/resources/items/item_group.rb +49 -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/row.rb +54 -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 +174 -0
- data/lib/avo/services/authorization_service.rb +11 -110
- data/lib/avo/services/debug_service.rb +93 -0
- data/lib/avo/services/telemetry_service.rb +85 -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 +115 -24
- data/lib/generators/avo/action_generator.rb +8 -8
- data/lib/generators/avo/card_generator.rb +27 -0
- data/lib/generators/avo/filter_generator.rb +8 -8
- data/lib/generators/avo/resource_generator.rb +4 -4
- data/lib/generators/avo/scope_generator.rb +15 -0
- data/lib/generators/avo/tailwindcss/install_generator.rb +1 -15
- data/lib/generators/avo/templates/action.tt +8 -6
- 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 +5 -3
- 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 -9
- data/lib/generators/avo/templates/locales/avo.ar.yml +5 -5
- 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 +7 -7
- 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/tool/view.tt +2 -2
- data/lib/tasks/avo_tasks.rake +27 -0
- data/public/avo-assets/avo.base.css +1810 -1189
- data/public/avo-assets/avo.base.js +217 -305
- data/public/avo-assets/avo.base.js.map +3 -3
- data/public/avo-assets/avo.css +9744 -0
- data/public/avo-assets/avo.js +513 -0
- data/public/avo-assets/avo.js.map +7 -0
- metadata +96 -137
- data/app/assets/stylesheets/css/tags.css +0 -32
- 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/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/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/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/sidebar/_license_warnings.html.erb +0 -6
- data/lib/avo/app.rb +0 -237
- 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_editable_controls.rb +0 -34
- data/lib/avo/concerns/has_fields.rb +0 -334
- data/lib/avo/concerns/has_html_attributes.rb +0 -108
- 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/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/tags_field.rb +0 -102
- data/lib/avo/grid_collector.rb +0 -42
- 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/card/chartkick_generator.rb +0 -18
- data/lib/generators/avo/card/metric_generator.rb +0 -18
- data/lib/generators/avo/card/partial_generator.rb +0 -19
- data/lib/generators/avo/templates/locales/avo.es.yml +0 -126
- data/lib/generators/avo/templates/standalone_action.tt +0 -8
- /data/app/components/avo/fields/common/files/view_type/{list_item_component.html.erb → list_component.html.erb} +0 -0
@@ -2,18 +2,16 @@ 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, :order]
|
5
|
+
before_action :set_record, only: [:show, :index, :new, :create, :destroy]
|
7
6
|
before_action :set_related_resource_name
|
8
|
-
before_action :set_related_resource, only: [:show, :index, :new, :create, :destroy
|
7
|
+
before_action :set_related_resource, only: [:show, :index, :new, :create, :destroy]
|
9
8
|
before_action :set_related_authorization
|
10
9
|
before_action :set_reflection_field
|
11
|
-
before_action :
|
12
|
-
before_action :hydrate_related_resource, only: [:show, :index, :create, :destroy, :order]
|
10
|
+
before_action :set_related_record, only: [:show]
|
13
11
|
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 :
|
12
|
+
before_action :set_attachment_class, only: [:show, :index, :new, :create, :destroy]
|
13
|
+
before_action :set_attachment_resource, only: [:show, :index, :new, :create, :destroy]
|
14
|
+
before_action :set_attachment_record, only: [:create, :destroy]
|
17
15
|
before_action :authorize_index_action, only: :index
|
18
16
|
before_action :authorize_attach_action, only: :new
|
19
17
|
before_action :authorize_detach_action, only: :destroy
|
@@ -21,55 +19,55 @@ module Avo
|
|
21
19
|
def index
|
22
20
|
@parent_resource = @resource.dup
|
23
21
|
@resource = @related_resource
|
24
|
-
@
|
25
|
-
@parent_resource.hydrate(
|
26
|
-
association_name = BaseResource.valid_association_name(@
|
27
|
-
@query = @related_authorization.apply_policy @
|
22
|
+
@parent_record = @parent_resource.find_record(params[:id], params: params)
|
23
|
+
@parent_resource.hydrate(record: @parent_record)
|
24
|
+
association_name = BaseResource.valid_association_name(@parent_record, params[:related_name])
|
25
|
+
@query = @related_authorization.apply_policy @parent_record.send(association_name)
|
28
26
|
@association_field = @parent_resource.get_field params[:related_name]
|
29
27
|
|
30
28
|
if @association_field.present? && @association_field.scope.present?
|
31
|
-
@query = Avo::
|
29
|
+
@query = Avo::ExecutionContext.new(target: @association_field.scope, query: @query, parent: @parent_record).handle
|
32
30
|
end
|
33
31
|
|
34
32
|
super
|
35
33
|
end
|
36
34
|
|
37
35
|
def show
|
38
|
-
@parent_resource, @
|
36
|
+
@parent_resource, @parent_record = @resource, @record
|
39
37
|
|
40
|
-
@resource, @
|
38
|
+
@resource, @record = @related_resource, @related_record
|
41
39
|
|
42
40
|
super
|
43
41
|
end
|
44
42
|
|
45
43
|
def new
|
46
|
-
@resource.hydrate(
|
44
|
+
@resource.hydrate(record: @record)
|
47
45
|
|
48
|
-
if @field.present? && !@field.
|
46
|
+
if @field.present? && !@field.is_searchable?
|
49
47
|
query = @related_authorization.apply_policy @attachment_class
|
50
48
|
|
51
49
|
# Add the association scope to the query scope
|
52
50
|
if @field.attach_scope.present?
|
53
|
-
query = Avo::
|
51
|
+
query = Avo::ExecutionContext.new(target: @field.attach_scope, query: query, parent: @record).handle
|
54
52
|
end
|
55
53
|
|
56
|
-
@options = query.all.map do |
|
57
|
-
[
|
54
|
+
@options = query.all.map do |record|
|
55
|
+
[@attachment_resource.new(record: record).record_title, record.id]
|
58
56
|
end
|
59
57
|
end
|
60
58
|
end
|
61
59
|
|
62
60
|
def create
|
63
|
-
association_name = BaseResource.valid_association_name(@
|
61
|
+
association_name = BaseResource.valid_association_name(@record, params[:related_name])
|
64
62
|
|
65
63
|
if reflection_class == "HasManyReflection"
|
66
|
-
@
|
64
|
+
@record.send(association_name) << @attachment_record
|
67
65
|
else
|
68
|
-
@
|
66
|
+
@record.send("#{association_name}=", @attachment_record)
|
69
67
|
end
|
70
68
|
|
71
69
|
respond_to do |format|
|
72
|
-
if @
|
70
|
+
if @record.save
|
73
71
|
format.html { redirect_back fallback_location: resource_view_response_path, notice: t("avo.attachment_class_attached", attachment_class: @related_resource.name) }
|
74
72
|
else
|
75
73
|
format.html { render :new }
|
@@ -78,12 +76,12 @@ module Avo
|
|
78
76
|
end
|
79
77
|
|
80
78
|
def destroy
|
81
|
-
association_name = BaseResource.valid_association_name(@
|
79
|
+
association_name = BaseResource.valid_association_name(@record, params[:related_name])
|
82
80
|
|
83
81
|
if reflection_class == "HasManyReflection"
|
84
|
-
@
|
82
|
+
@record.send(association_name).destroy @attachment_record
|
85
83
|
else
|
86
|
-
@
|
84
|
+
@record.send("#{association_name}=", nil)
|
87
85
|
end
|
88
86
|
|
89
87
|
respond_to do |format|
|
@@ -91,17 +89,10 @@ module Avo
|
|
91
89
|
end
|
92
90
|
end
|
93
91
|
|
94
|
-
def order
|
95
|
-
@parent_resource = @resource.dup
|
96
|
-
@resource, @model = @related_resource, @related_model
|
97
|
-
|
98
|
-
super
|
99
|
-
end
|
100
|
-
|
101
92
|
private
|
102
93
|
|
103
94
|
def set_reflection
|
104
|
-
@reflection = @
|
95
|
+
@reflection = @record._reflections[params[:related_name].to_s]
|
105
96
|
end
|
106
97
|
|
107
98
|
def set_attachment_class
|
@@ -109,16 +100,16 @@ module Avo
|
|
109
100
|
end
|
110
101
|
|
111
102
|
def set_attachment_resource
|
112
|
-
@attachment_resource = @field.use_resource || (
|
103
|
+
@attachment_resource = @field.use_resource || (Avo.resource_manager.get_resource_by_model_class @attachment_class)
|
113
104
|
end
|
114
105
|
|
115
|
-
def
|
116
|
-
@
|
106
|
+
def set_attachment_record
|
107
|
+
@attachment_record = @related_resource.find_record attachment_id, params: params
|
117
108
|
end
|
118
109
|
|
119
110
|
def set_reflection_field
|
120
111
|
@field = @resource.get_field_definitions.find { |f| f.id == @related_resource_name.to_sym }
|
121
|
-
@field.hydrate(resource: @resource,
|
112
|
+
@field.hydrate(resource: @resource, record: @record, view: :new)
|
122
113
|
rescue
|
123
114
|
end
|
124
115
|
|
@@ -127,7 +118,7 @@ module Avo
|
|
127
118
|
end
|
128
119
|
|
129
120
|
def reflection_class
|
130
|
-
reflection = @
|
121
|
+
reflection = @record._reflections[params[:related_name]]
|
131
122
|
|
132
123
|
klass = reflection.class.name.demodulize.to_s
|
133
124
|
klass = reflection.through_reflection.class.name.demodulize.to_s if klass == "ThroughReflection"
|
@@ -136,7 +127,7 @@ module Avo
|
|
136
127
|
end
|
137
128
|
|
138
129
|
def authorize_if_defined(method)
|
139
|
-
@authorization.set_record(@
|
130
|
+
@authorization.set_record(@record)
|
140
131
|
|
141
132
|
if @authorization.has_method?(method.to_sym)
|
142
133
|
@authorization.authorize_action method.to_sym
|
@@ -158,8 +149,8 @@ module Avo
|
|
158
149
|
private
|
159
150
|
|
160
151
|
def set_related_authorization
|
161
|
-
@related_authorization = if related_resource
|
162
|
-
related_resource.authorization(user: _current_user)
|
152
|
+
@related_authorization = if @related_resource.present?
|
153
|
+
@related_resource.authorization(user: _current_user)
|
163
154
|
else
|
164
155
|
Services::AuthorizationService.new _current_user
|
165
156
|
end
|
@@ -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
10
|
blob = ActiveStorage::Blob.create_and_upload! io: params[:file].to_io, filename: params[:filename]
|
11
|
-
association_name = BaseResource.valid_attachment_name(@
|
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),
|
@@ -47,7 +47,7 @@ module Avo
|
|
47
47
|
private
|
48
48
|
|
49
49
|
def authorized_to(action)
|
50
|
-
@resource.authorization.authorize_action("#{action}_#{params[:attachment_name]}?", record: @
|
50
|
+
@resource.authorization.authorize_action("#{action}_#{params[:attachment_name]}?", record: @record, raise_exception: false)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
@@ -6,14 +6,13 @@ module Avo
|
|
6
6
|
|
7
7
|
before_action :set_resource_name
|
8
8
|
before_action :set_resource
|
9
|
-
before_action :hydrate_resource
|
10
9
|
before_action :set_applied_filters, only: :index
|
11
|
-
before_action :
|
12
|
-
before_action :
|
10
|
+
before_action :set_record, only: [:show, :edit, :destroy, :update, :preview]
|
11
|
+
before_action :set_record_to_fill
|
13
12
|
before_action :set_edit_title_and_breadcrumbs, only: [:edit, :update]
|
14
|
-
before_action :
|
13
|
+
before_action :fill_record, only: [:create, :update]
|
15
14
|
# Don't run base authorizations for associations
|
16
|
-
before_action :authorize_base_action, if: -> { controller_name != "associations" }
|
15
|
+
before_action :authorize_base_action, except: :preview, if: -> { controller_name != "associations" }
|
17
16
|
before_action :set_pagy_locale, only: :index
|
18
17
|
|
19
18
|
def index
|
@@ -29,11 +28,6 @@ module Avo
|
|
29
28
|
@query = @resource.class.query_scope
|
30
29
|
end
|
31
30
|
|
32
|
-
# Remove default_scope for index view if no parent_resource present
|
33
|
-
if @resource.unscoped_queries_on_index && @parent_resource.blank?
|
34
|
-
@query = @query.unscoped
|
35
|
-
end
|
36
|
-
|
37
31
|
# Eager load the associations
|
38
32
|
if @resource.includes.present?
|
39
33
|
@query = @query.includes(*@resource.includes)
|
@@ -52,7 +46,7 @@ module Avo
|
|
52
46
|
field_id = @index_params[:sort_by].to_sym
|
53
47
|
field = @resource.get_field_definitions.find { |field| field.id == field_id }
|
54
48
|
@query = if field&.sortable.is_a?(Proc)
|
55
|
-
field.sortable
|
49
|
+
Avo::ExecutionContext.new(target: field.sortable, query: @query, direction: @index_params[:sort_direction]).handle
|
56
50
|
else
|
57
51
|
@query.order("#{@resource.model_class.table_name}.#{@index_params[:sort_by]} #{@index_params[:sort_direction]}")
|
58
52
|
end
|
@@ -65,57 +59,62 @@ module Avo
|
|
65
59
|
).apply_query request, @query, filter_value
|
66
60
|
end
|
67
61
|
|
68
|
-
|
62
|
+
extra_pagy_params = {}
|
63
|
+
|
64
|
+
# Reset open filters when a user navigates to a new page
|
65
|
+
extra_pagy_params[:keep_filters_panel_open] = if params[:keep_filters_panel_open] == "1"
|
66
|
+
"0"
|
67
|
+
end
|
68
|
+
|
69
|
+
safe_call :set_and_apply_scopes
|
70
|
+
safe_call :apply_dynamic_filters
|
71
|
+
|
72
|
+
@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)
|
69
73
|
|
70
|
-
# Create resources for each
|
71
|
-
@resources = @
|
72
|
-
@resource.hydrate(
|
74
|
+
# Create resources for each record
|
75
|
+
@resources = @records.map do |record|
|
76
|
+
@resource.hydrate(record: record, params: params).dup
|
73
77
|
end
|
74
78
|
end
|
75
79
|
|
76
80
|
def show
|
77
|
-
@resource.hydrate(
|
81
|
+
@resource.hydrate(record: @record, view: :show, user: _current_user, params: params).detect_fields
|
78
82
|
|
79
83
|
set_actions
|
80
84
|
|
81
85
|
@page_title = @resource.default_panel_name.to_s
|
82
86
|
|
83
87
|
# 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
|
86
|
-
|
87
|
-
via_resource.
|
88
|
+
if params[:via_resource_class].present? && params[:via_record_id].present?
|
89
|
+
via_resource = Avo.resource_manager.get_resource(params[:via_resource_class])
|
90
|
+
via_record = via_resource.find_record params[:via_record_id], params: params
|
91
|
+
via_resource = via_resource.new record: via_record
|
88
92
|
|
89
93
|
add_breadcrumb via_resource.plural_name, resources_path(resource: via_resource)
|
90
|
-
add_breadcrumb via_resource.
|
94
|
+
add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
|
91
95
|
else
|
92
96
|
add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
|
93
97
|
end
|
94
98
|
|
95
|
-
add_breadcrumb @resource.
|
99
|
+
add_breadcrumb @resource.record_title
|
96
100
|
add_breadcrumb I18n.t("avo.details").upcase_first
|
97
101
|
end
|
98
102
|
|
99
103
|
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
|
104
|
+
@record = @resource.model_class.new
|
105
|
+
@resource = @resource.hydrate(record: @record, view: :new, user: _current_user)
|
107
106
|
|
108
107
|
set_actions
|
109
108
|
|
110
109
|
@page_title = @resource.default_panel_name.to_s
|
111
110
|
|
112
111
|
if is_associated_record?
|
113
|
-
via_resource = Avo
|
114
|
-
|
115
|
-
via_resource.
|
112
|
+
via_resource = Avo.resource_manager.get_resource_by_model_class(params[:via_relation_class])
|
113
|
+
via_record = via_resource.find_record params[:via_record_id], params: params
|
114
|
+
via_resource = via_resource.new record: via_record
|
116
115
|
|
117
116
|
add_breadcrumb via_resource.plural_name, resources_path(resource: via_resource)
|
118
|
-
add_breadcrumb via_resource.
|
117
|
+
add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
|
119
118
|
end
|
120
119
|
|
121
120
|
add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
|
@@ -123,37 +122,37 @@ module Avo
|
|
123
122
|
end
|
124
123
|
|
125
124
|
def create
|
126
|
-
#
|
127
|
-
saved =
|
128
|
-
@resource.hydrate(
|
125
|
+
# record gets instantiated and filled in the fill_record method
|
126
|
+
saved = save_record
|
127
|
+
@resource.hydrate(record: @record, view: :new, user: _current_user)
|
129
128
|
|
130
129
|
# This means that the record has been created through another parent record and we need to attach it somehow.
|
131
|
-
if params[:
|
132
|
-
@reflection = @
|
130
|
+
if params[:via_record_id].present?
|
131
|
+
@reflection = @record._reflections[params[:via_relation]]
|
133
132
|
# Figure out what kind of association does the record have with the parent record
|
134
133
|
|
135
134
|
# Fills in the required infor for belongs_to and has_many
|
136
135
|
# Get the foreign key and set it to the id we received in the params
|
137
136
|
if @reflection.is_a?(ActiveRecord::Reflection::BelongsToReflection) || @reflection.is_a?(ActiveRecord::Reflection::HasManyReflection)
|
138
|
-
related_resource = Avo
|
139
|
-
related_record = related_resource.find_record params[:
|
137
|
+
related_resource = Avo.resource_manager.get_resource_by_model_class params[:via_relation_class]
|
138
|
+
related_record = related_resource.find_record params[:via_record_id], params: params
|
140
139
|
|
141
|
-
@
|
142
|
-
@
|
140
|
+
@record.send("#{@reflection.foreign_key}=", related_record.id)
|
141
|
+
@record.save
|
143
142
|
end
|
144
143
|
|
145
144
|
# For when working with has_one, has_one_through, has_many_through, has_and_belongs_to_many, polymorphic
|
146
145
|
if @reflection.is_a? ActiveRecord::Reflection::ThroughReflection
|
147
146
|
# find the record
|
148
|
-
via_resource =
|
149
|
-
@related_record = via_resource.find_record params[:
|
150
|
-
association_name = BaseResource.valid_association_name(@
|
147
|
+
via_resource = Avo.resource_manager.get_resource_by_model_class(params[:via_relation_class])
|
148
|
+
@related_record = via_resource.find_record params[:via_record_id], params: params
|
149
|
+
association_name = BaseResource.valid_association_name(@record, params[:via_relation])
|
151
150
|
|
152
151
|
if params[:via_association_type] == "has_one"
|
153
152
|
# On has_one scenarios we should switch the @record and @related_record
|
154
|
-
@related_record.send("#{@reflection.parent_reflection.inverse_of.name}=", @
|
153
|
+
@related_record.send("#{@reflection.parent_reflection.inverse_of.name}=", @record)
|
155
154
|
else
|
156
|
-
@
|
155
|
+
@record.send(association_name) << @related_record
|
157
156
|
end
|
158
157
|
end
|
159
158
|
end
|
@@ -174,9 +173,9 @@ module Avo
|
|
174
173
|
end
|
175
174
|
|
176
175
|
def update
|
177
|
-
#
|
178
|
-
saved =
|
179
|
-
@resource = @resource.hydrate(
|
176
|
+
# record gets instantiated and filled in the fill_record method
|
177
|
+
saved = save_record
|
178
|
+
@resource = @resource.hydrate(record: @record, view: :edit, user: _current_user)
|
180
179
|
set_actions
|
181
180
|
|
182
181
|
if saved
|
@@ -194,55 +193,46 @@ module Avo
|
|
194
193
|
end
|
195
194
|
end
|
196
195
|
|
197
|
-
def
|
198
|
-
|
196
|
+
def preview
|
197
|
+
@resource.hydrate(record: @record, view: :show, user: _current_user, params: params)
|
199
198
|
|
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
|
199
|
+
render layout: params[:turbo_frame].blank?
|
210
200
|
end
|
211
201
|
|
212
202
|
private
|
213
203
|
|
214
|
-
def
|
204
|
+
def save_record
|
215
205
|
perform_action_and_record_errors do
|
216
|
-
|
206
|
+
save_record_action
|
217
207
|
end
|
218
208
|
end
|
219
209
|
|
220
|
-
def
|
221
|
-
@
|
210
|
+
def save_record_action
|
211
|
+
@record.save!
|
222
212
|
end
|
223
213
|
|
224
214
|
def destroy_model
|
225
215
|
perform_action_and_record_errors do
|
226
|
-
|
216
|
+
destroy_record_action
|
227
217
|
end
|
228
218
|
end
|
229
219
|
|
230
|
-
def
|
231
|
-
@
|
220
|
+
def destroy_record_action
|
221
|
+
@record.destroy!
|
232
222
|
end
|
233
223
|
|
234
224
|
def perform_action_and_record_errors(&block)
|
235
225
|
begin
|
236
226
|
succeeded = block.call
|
237
227
|
rescue => exception
|
238
|
-
# In case there's an error somewhere else than the
|
228
|
+
# In case there's an error somewhere else than the record
|
239
229
|
# Example: When you save a license that should create a user for it and creating that user throws and error.
|
240
230
|
# Example: When you Try to delete a record and has a foreign key constraint.
|
241
231
|
exception_message = exception.message
|
242
232
|
end
|
243
233
|
|
244
|
-
# Add the errors from the
|
245
|
-
@errors = @
|
234
|
+
# Add the errors from the record
|
235
|
+
@errors = @record.errors.full_messages.reject { |error| exception_message.include? error }.unshift exception_message
|
246
236
|
|
247
237
|
succeeded
|
248
238
|
end
|
@@ -300,7 +290,7 @@ module Avo
|
|
300
290
|
@index_params[:per_page] = cookies[:per_page]
|
301
291
|
end
|
302
292
|
|
303
|
-
if @
|
293
|
+
if @parent_record.present?
|
304
294
|
@index_params[:per_page] = Avo.configuration.via_per_page
|
305
295
|
end
|
306
296
|
|
@@ -319,8 +309,20 @@ module Avo
|
|
319
309
|
@index_params[:sort_direction] = params[:sort_direction] || :desc
|
320
310
|
|
321
311
|
# View types
|
322
|
-
|
323
|
-
@index_params[:available_view_types] =
|
312
|
+
available_view_types = @resource.available_view_types
|
313
|
+
@index_params[:available_view_types] = available_view_types
|
314
|
+
|
315
|
+
@index_params[:view_type] = if params[:view_type].present?
|
316
|
+
params[:view_type]
|
317
|
+
elsif available_view_types.size == 1
|
318
|
+
available_view_types.first
|
319
|
+
else
|
320
|
+
@resource.default_view_type || Avo.configuration.default_view_type
|
321
|
+
end
|
322
|
+
|
323
|
+
if available_view_types.exclude? @index_params[:view_type].to_sym
|
324
|
+
raise "View type '#{@index_params[:view_type]}' is unavailable for #{@resource.class}."
|
325
|
+
end
|
324
326
|
end
|
325
327
|
|
326
328
|
def set_filters
|
@@ -338,7 +340,7 @@ module Avo
|
|
338
340
|
@actions = @resource
|
339
341
|
.get_actions
|
340
342
|
.map do |action|
|
341
|
-
action[:class].new(
|
343
|
+
action[:class].new(record: @record, resource: @resource, view: @view, arguments: action[:arguments])
|
342
344
|
end
|
343
345
|
.select do |action|
|
344
346
|
action.visible_in_view(parent_resource: @parent_resource)
|
@@ -392,45 +394,41 @@ module Avo
|
|
392
394
|
end
|
393
395
|
|
394
396
|
def set_edit_title_and_breadcrumbs
|
395
|
-
@resource = @resource.hydrate(
|
397
|
+
@resource = @resource.hydrate(record: @record, view: :edit, user: _current_user)
|
396
398
|
@page_title = @resource.default_panel_name.to_s
|
397
399
|
|
398
400
|
last_crumb_args = {}
|
399
401
|
# 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
|
402
|
-
|
403
|
-
via_resource.
|
402
|
+
if params[:via_resource_class].present? && params[:via_record_id].present?
|
403
|
+
via_resource = Avo.resource_manager.get_resource(params[:via_resource_class])
|
404
|
+
via_record = via_resource.find_record params[:via_record_id], params: params
|
405
|
+
via_resource = via_resource.new record: via_record
|
404
406
|
|
405
407
|
add_breadcrumb via_resource.plural_name, resources_path(resource: @resource)
|
406
|
-
add_breadcrumb via_resource.
|
408
|
+
add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
|
407
409
|
|
408
410
|
last_crumb_args = {
|
409
411
|
via_resource_class: params[:via_resource_class],
|
410
|
-
|
412
|
+
via_record_id: params[:via_record_id]
|
411
413
|
}
|
412
414
|
else
|
413
415
|
add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
|
414
416
|
end
|
415
417
|
|
416
|
-
add_breadcrumb @resource.
|
418
|
+
add_breadcrumb @resource.record_title, resource_path(record: @resource.record, resource: @resource, **last_crumb_args)
|
417
419
|
add_breadcrumb t("avo.edit").humanize
|
418
420
|
end
|
419
421
|
|
420
422
|
def create_success_action
|
421
|
-
return render "close_modal_and_reload_field" if params[:via_belongs_to_resource_class].present?
|
422
|
-
|
423
423
|
respond_to do |format|
|
424
424
|
format.html { redirect_to after_create_path, notice: create_success_message}
|
425
425
|
end
|
426
426
|
end
|
427
427
|
|
428
428
|
def create_fail_action
|
429
|
-
flash.now[:error] = create_fail_message
|
430
|
-
|
431
429
|
respond_to do |format|
|
430
|
+
flash.now[:error] = create_fail_message
|
432
431
|
format.html { render :new, status: :unprocessable_entity }
|
433
|
-
format.turbo_stream { render "create_fail_action" }
|
434
432
|
end
|
435
433
|
end
|
436
434
|
|
@@ -445,13 +443,13 @@ module Avo
|
|
445
443
|
def after_create_path
|
446
444
|
# If this is an associated record return to the association show page
|
447
445
|
if is_associated_record?
|
448
|
-
parent_resource =
|
449
|
-
association_name = BaseResource.valid_association_name(@
|
446
|
+
parent_resource = Avo.resource_manager.get_resource_by_model_class(params[:via_relation_class])
|
447
|
+
association_name = BaseResource.valid_association_name(@record, params[:via_relation])
|
450
448
|
|
451
449
|
return resource_view_path(
|
452
|
-
|
450
|
+
record: @record.send(association_name),
|
453
451
|
resource: parent_resource,
|
454
|
-
resource_id: params[:
|
452
|
+
resource_id: params[:via_record_id]
|
455
453
|
)
|
456
454
|
end
|
457
455
|
|
@@ -487,7 +485,7 @@ module Avo
|
|
487
485
|
|
488
486
|
# Needs a different name, otwherwise, in some places, this can be called instead helpers.resource_view_path
|
489
487
|
def resource_view_response_path
|
490
|
-
helpers.resource_view_path(
|
488
|
+
helpers.resource_view_path(record: @record, resource: @resource)
|
491
489
|
end
|
492
490
|
|
493
491
|
def destroy_success_action
|
@@ -497,10 +495,8 @@ module Avo
|
|
497
495
|
end
|
498
496
|
|
499
497
|
def destroy_fail_action
|
500
|
-
flash[:error] = destroy_fail_message
|
501
|
-
|
502
498
|
respond_to do |format|
|
503
|
-
format.
|
499
|
+
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
500
|
end
|
505
501
|
end
|
506
502
|
|
@@ -522,14 +518,14 @@ module Avo
|
|
522
518
|
if @resource.class.send(action) == :index
|
523
519
|
resources_path(resource: @resource)
|
524
520
|
elsif @resource.class.send(action) == :edit || Avo.configuration.resource_default_view == :edit
|
525
|
-
edit_resource_path(resource: @resource,
|
521
|
+
edit_resource_path(resource: @resource, record: @resource.record)
|
526
522
|
else
|
527
|
-
resource_path(
|
523
|
+
resource_path(record: @record, resource: @resource)
|
528
524
|
end
|
529
525
|
end
|
530
526
|
|
531
527
|
def is_associated_record?
|
532
|
-
params[:via_relation_class].present? && params[:
|
528
|
+
params[:via_relation_class].present? && params[:via_record_id].present?
|
533
529
|
end
|
534
530
|
|
535
531
|
# Set pagy locale from params or from avo configuration, if both nil locale = "en"
|
@@ -537,8 +533,12 @@ module Avo
|
|
537
533
|
@pagy_locale = locale.to_s || Avo.configuration.locale || "en"
|
538
534
|
end
|
539
535
|
|
540
|
-
def
|
541
|
-
|
536
|
+
def safe_call(method)
|
537
|
+
send(method) if respond_to?(method, true)
|
538
|
+
end
|
539
|
+
|
540
|
+
def pagy_query
|
541
|
+
@query
|
542
542
|
end
|
543
543
|
end
|
544
544
|
end
|