avo 2.46.0 → 3.0.0.pre2
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
data/lib/avo/base_resource.rb
CHANGED
@@ -3,52 +3,52 @@ module Avo
|
|
3
3
|
extend ActiveSupport::DescendantsTracker
|
4
4
|
|
5
5
|
include ActionView::Helpers::UrlHelper
|
6
|
-
include Avo::Concerns::
|
7
|
-
include Avo::Concerns::
|
8
|
-
include Avo::Concerns::
|
9
|
-
include Avo::Concerns::
|
6
|
+
include Avo::Concerns::HasItems
|
7
|
+
include Avo::Concerns::CanReplaceItems
|
8
|
+
include Avo::Concerns::HasControls
|
9
|
+
include Avo::Concerns::HasStimulusControllers
|
10
10
|
include Avo::Concerns::ModelClassConstantized
|
11
|
-
include Avo::Concerns::Pagination
|
12
11
|
|
13
|
-
delegate :
|
14
|
-
delegate :current_user, to:
|
15
|
-
delegate :params, to:
|
12
|
+
delegate :context, to: Avo::Current
|
13
|
+
delegate :current_user, to: Avo::Current
|
14
|
+
delegate :params, to: Avo::Current
|
15
|
+
delegate :request, to: Avo::Current
|
16
|
+
delegate :view_context, to: Avo::Current
|
16
17
|
delegate :simple_format, :content_tag, to: :view_context
|
17
18
|
delegate :main_app, to: :view_context
|
18
19
|
delegate :avo, to: :view_context
|
19
20
|
delegate :resource_path, to: :view_context
|
20
21
|
delegate :resources_path, to: :view_context
|
21
22
|
delegate :t, to: ::I18n
|
22
|
-
delegate :context, to: ::Avo::App
|
23
23
|
|
24
24
|
attr_accessor :view
|
25
25
|
attr_accessor :reflection
|
26
26
|
attr_accessor :user
|
27
27
|
attr_accessor :params
|
28
|
+
attr_accessor :record
|
28
29
|
|
29
30
|
class_attribute :id, default: :id
|
30
31
|
class_attribute :title, default: :id
|
31
32
|
class_attribute :description, default: :id
|
32
33
|
class_attribute :search_query, default: nil
|
33
34
|
class_attribute :search_query_help, default: ""
|
34
|
-
class_attribute :search_result_path
|
35
35
|
class_attribute :includes, default: []
|
36
36
|
class_attribute :authorization_policy
|
37
37
|
class_attribute :translation_key
|
38
38
|
class_attribute :default_view_type, default: :table
|
39
39
|
class_attribute :devise_password_optional, default: false
|
40
40
|
class_attribute :actions_loader
|
41
|
+
class_attribute :scopes_loader
|
41
42
|
class_attribute :filters_loader
|
42
43
|
class_attribute :grid_loader
|
43
44
|
class_attribute :visible_on_sidebar, default: true
|
44
45
|
class_attribute :unscoped_queries_on_index, default: false
|
45
|
-
class_attribute :
|
46
|
+
class_attribute :resolve_index_query
|
46
47
|
class_attribute :resolve_find_scope
|
47
48
|
# TODO: refactor this into a Host without args
|
48
49
|
class_attribute :find_record_method, default: ->(model_class:, id:, params:) {
|
49
50
|
model_class.find id
|
50
51
|
}
|
51
|
-
class_attribute :ordering
|
52
52
|
class_attribute :hide_from_global_search, default: false
|
53
53
|
class_attribute :after_create_path, default: :show
|
54
54
|
class_attribute :after_update_path, default: :show
|
@@ -56,11 +56,13 @@ module Avo
|
|
56
56
|
class_attribute :keep_filters_panel_open, default: false
|
57
57
|
class_attribute :extra_params
|
58
58
|
class_attribute :link_to_child_resource, default: false
|
59
|
-
|
59
|
+
|
60
|
+
# EXTRACT:
|
61
|
+
class_attribute :ordering
|
60
62
|
|
61
63
|
class << self
|
62
64
|
delegate :t, to: ::I18n
|
63
|
-
delegate :context, to: ::Avo::
|
65
|
+
delegate :context, to: ::Avo::Current
|
64
66
|
|
65
67
|
def grid(&block)
|
66
68
|
grid_collector = GridCollector.new
|
@@ -72,7 +74,7 @@ module Avo
|
|
72
74
|
def action(action_class, arguments: {})
|
73
75
|
self.actions_loader ||= Avo::Loaders::Loader.new
|
74
76
|
|
75
|
-
action = {
|
77
|
+
action = {class: action_class, arguments: arguments}
|
76
78
|
self.actions_loader.use action
|
77
79
|
end
|
78
80
|
|
@@ -89,28 +91,38 @@ module Avo
|
|
89
91
|
query_scope
|
90
92
|
end
|
91
93
|
|
94
|
+
def scopes(*args)
|
95
|
+
self.scopes_loader ||= Avo::Loaders::Loader.new
|
96
|
+
|
97
|
+
args.each do |scope_class|
|
98
|
+
self.scopes_loader.use scope_class
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
92
102
|
# This resolves the scope when doing "where" queries (not find queries)
|
93
103
|
def query_scope
|
94
|
-
final_scope =
|
104
|
+
final_scope = if resolve_index_query.present?
|
105
|
+
Avo::ExecutionContext.new(target: resolve_index_query, model_class: model_class).handle
|
106
|
+
else
|
107
|
+
model_class
|
108
|
+
end
|
95
109
|
|
96
110
|
authorization.apply_policy final_scope
|
97
111
|
end
|
98
112
|
|
99
113
|
# This resolves the scope when finding records (not "where" queries)
|
100
114
|
def find_scope
|
101
|
-
final_scope = resolve_find_scope.present?
|
115
|
+
final_scope = if resolve_find_scope.present?
|
116
|
+
Avo::ExecutionContext.new(target: resolve_find_scope, model_class: model_class).handle
|
117
|
+
else
|
118
|
+
model_class
|
119
|
+
end
|
102
120
|
|
103
121
|
authorization.apply_policy final_scope
|
104
122
|
end
|
105
123
|
|
106
124
|
def authorization
|
107
|
-
Avo::Services::AuthorizationService.new Avo::
|
108
|
-
end
|
109
|
-
|
110
|
-
def order_actions
|
111
|
-
return {} if ordering.blank?
|
112
|
-
|
113
|
-
ordering.dig(:actions) || {}
|
125
|
+
Avo::Services::AuthorizationService.new Avo::Current.current_user, model_class, policy_class: authorization_policy
|
114
126
|
end
|
115
127
|
|
116
128
|
def get_record_associations(record)
|
@@ -134,13 +146,15 @@ module Avo
|
|
134
146
|
ApplicationRecord.descendants
|
135
147
|
end
|
136
148
|
|
137
|
-
def
|
149
|
+
def get_model_by_name(model_name)
|
138
150
|
get_available_models.find do |m|
|
139
|
-
m.to_s ==
|
151
|
+
m.to_s == model_name.to_s
|
140
152
|
end
|
141
153
|
end
|
142
154
|
end
|
143
155
|
|
156
|
+
delegate :context, to: ::Avo::Current
|
157
|
+
|
144
158
|
def initialize
|
145
159
|
unless self.class.model_class.present?
|
146
160
|
if model_class.present? && model_class.respond_to?(:base_class)
|
@@ -149,19 +163,13 @@ module Avo
|
|
149
163
|
end
|
150
164
|
end
|
151
165
|
|
152
|
-
def record
|
153
|
-
@model
|
154
|
-
end
|
155
|
-
alias_method :model, :record
|
156
|
-
|
157
|
-
|
158
|
-
def hydrate(model: nil, view: nil, user: nil, params: nil)
|
166
|
+
def hydrate(record: nil, view: nil, user: nil, params: nil)
|
159
167
|
@view = view if view.present?
|
160
168
|
@user = user if user.present?
|
161
169
|
@params = params if params.present?
|
162
170
|
|
163
|
-
if
|
164
|
-
@
|
171
|
+
if record.present?
|
172
|
+
@record = record
|
165
173
|
|
166
174
|
hydrate_model_with_default_values if @view == :new
|
167
175
|
end
|
@@ -172,7 +180,7 @@ module Avo
|
|
172
180
|
def get_grid_fields
|
173
181
|
return if self.class.grid_loader.blank?
|
174
182
|
|
175
|
-
self.class.grid_loader.hydrate(
|
183
|
+
self.class.grid_loader.hydrate(record: @record, view: @view, resource: self)
|
176
184
|
end
|
177
185
|
|
178
186
|
def get_filters
|
@@ -199,45 +207,47 @@ module Avo
|
|
199
207
|
action[:arguments]
|
200
208
|
end
|
201
209
|
|
210
|
+
def get_scopes
|
211
|
+
return [] if self.class.scopes_loader.blank?
|
212
|
+
|
213
|
+
self.class.scopes_loader.bag
|
214
|
+
end
|
215
|
+
|
202
216
|
def default_panel_name
|
203
217
|
return @params[:related_name].capitalize if @params.present? && @params[:related_name].present?
|
204
218
|
|
205
219
|
case @view
|
206
220
|
when :show
|
207
|
-
|
221
|
+
record_title
|
208
222
|
when :edit
|
209
|
-
|
223
|
+
record_title
|
210
224
|
when :new
|
211
225
|
t("avo.create_new_item", item: name.downcase).upcase_first
|
212
226
|
end
|
213
227
|
end
|
214
228
|
|
215
|
-
def
|
216
|
-
self.class.name.demodulize
|
229
|
+
def class_name
|
230
|
+
self.class.name.demodulize
|
217
231
|
end
|
218
232
|
|
219
233
|
def model_class
|
220
234
|
# get the model class off of the static property
|
221
235
|
return self.class.model_class if self.class.model_class.present?
|
222
236
|
|
223
|
-
# get the model class off of the
|
224
|
-
return @
|
237
|
+
# get the model class off of the record
|
238
|
+
return @record.base_class if @record.present?
|
225
239
|
|
226
240
|
# generate a model class
|
227
|
-
|
241
|
+
class_name.safe_constantize
|
228
242
|
end
|
229
243
|
|
230
|
-
def
|
231
|
-
@
|
232
|
-
end
|
233
|
-
|
234
|
-
def model_title
|
235
|
-
return name if @model.nil?
|
244
|
+
def record_title
|
245
|
+
return name if @record.nil?
|
236
246
|
|
237
|
-
the_title = @
|
247
|
+
the_title = @record.send title
|
238
248
|
return the_title if the_title.present?
|
239
249
|
|
240
|
-
|
250
|
+
@record.id
|
241
251
|
rescue
|
242
252
|
name
|
243
253
|
end
|
@@ -253,18 +263,16 @@ module Avo
|
|
253
263
|
end
|
254
264
|
|
255
265
|
def translation_key
|
256
|
-
|
257
|
-
|
258
|
-
self.class.translation_key
|
266
|
+
self.class.translation_key || "avo.resource_translations.#{class_name.underscore}"
|
259
267
|
end
|
260
268
|
|
261
269
|
def name
|
262
|
-
default =
|
270
|
+
default = class_name.underscore.humanize
|
263
271
|
|
264
272
|
return @name if @name.present?
|
265
273
|
|
266
|
-
if translation_key
|
267
|
-
t(translation_key, count: 1, default: default).
|
274
|
+
if translation_key
|
275
|
+
t(translation_key, count: 1, default: default).capitalize
|
268
276
|
else
|
269
277
|
default
|
270
278
|
end
|
@@ -277,8 +285,8 @@ module Avo
|
|
277
285
|
def plural_name
|
278
286
|
default = name.pluralize
|
279
287
|
|
280
|
-
if translation_key
|
281
|
-
t(translation_key, count: 2, default: default).
|
288
|
+
if translation_key
|
289
|
+
t(translation_key, count: 2, default: default).capitalize
|
282
290
|
else
|
283
291
|
default
|
284
292
|
end
|
@@ -298,20 +306,19 @@ module Avo
|
|
298
306
|
view_types = [:table]
|
299
307
|
|
300
308
|
view_types << :grid if get_grid_fields.present?
|
301
|
-
view_types << :map if map_view.present?
|
302
309
|
|
303
310
|
view_types
|
304
311
|
end
|
305
312
|
|
306
|
-
def
|
313
|
+
def attached_file_fields
|
307
314
|
get_field_definitions.select do |field|
|
308
315
|
[Avo::Fields::FileField, Avo::Fields::FilesField].include? field.class
|
309
316
|
end
|
310
317
|
end
|
311
318
|
|
312
|
-
|
313
|
-
|
314
|
-
get_field_definitions
|
319
|
+
def fill_record(record, params, extra_params: [])
|
320
|
+
# Map the received params to their actual fields
|
321
|
+
fields_by_database_id = get_field_definitions
|
315
322
|
.reject do |field|
|
316
323
|
field.computed
|
317
324
|
end
|
@@ -319,30 +326,28 @@ module Avo
|
|
319
326
|
[field.database_id.to_s, field]
|
320
327
|
end
|
321
328
|
.to_h
|
322
|
-
end
|
323
329
|
|
324
|
-
def fill_model(model, params, extra_params: [])
|
325
330
|
# Write the field values
|
326
331
|
params.each do |key, value|
|
327
332
|
field = fields_by_database_id[key]
|
328
333
|
|
329
334
|
next unless field.present?
|
330
335
|
|
331
|
-
|
336
|
+
record = field.fill_field record, key, value, params
|
332
337
|
end
|
333
338
|
|
334
|
-
# Write the user configured extra params to the
|
339
|
+
# Write the user configured extra params to the record
|
335
340
|
if extra_params.present?
|
336
341
|
# Let Rails fill in the rest of the params
|
337
|
-
|
342
|
+
record.assign_attributes params.permit(extra_params)
|
338
343
|
end
|
339
344
|
|
340
|
-
|
345
|
+
record
|
341
346
|
end
|
342
347
|
|
343
348
|
def authorization(user: nil)
|
344
|
-
current_user = user || Avo::
|
345
|
-
Avo::Services::AuthorizationService.new(current_user,
|
349
|
+
current_user = user || Avo::Current.current_user
|
350
|
+
Avo::Services::AuthorizationService.new(current_user, record || model_class, policy_class: authorization_policy)
|
346
351
|
end
|
347
352
|
|
348
353
|
def file_hash
|
@@ -363,54 +368,57 @@ module Avo
|
|
363
368
|
Digest::MD5.hexdigest(content_to_be_hashed)
|
364
369
|
end
|
365
370
|
|
366
|
-
def cache_hash(
|
367
|
-
if
|
368
|
-
[
|
371
|
+
def cache_hash(parent_record)
|
372
|
+
if parent_record.present?
|
373
|
+
[record, file_hash, parent_record]
|
369
374
|
else
|
370
|
-
[
|
375
|
+
[record, file_hash]
|
371
376
|
end
|
372
377
|
end
|
373
378
|
|
374
|
-
# We will not overwrite any attributes that come pre-filled in the
|
379
|
+
# We will not overwrite any attributes that come pre-filled in the record.
|
375
380
|
def hydrate_model_with_default_values
|
376
381
|
default_values = get_fields
|
377
382
|
.select do |field|
|
378
383
|
!field.computed
|
379
384
|
end
|
380
385
|
.map do |field|
|
386
|
+
id = field.id
|
381
387
|
value = field.value
|
382
388
|
|
383
389
|
if field.type == "belongs_to"
|
390
|
+
id = field.foreign_key.to_sym
|
384
391
|
|
385
|
-
reflection = @
|
392
|
+
reflection = @record._reflections[@params[:via_relation]]
|
386
393
|
|
387
394
|
if field.polymorphic_as.present? && field.types.map(&:to_s).include?(@params[:via_relation_class])
|
388
395
|
# set the value to the actual record
|
389
|
-
|
390
|
-
value = via_resource.find_record(@params[:via_resource_id])
|
396
|
+
value = @params[:via_relation_class].safe_constantize.find(@params[:via_record_id])
|
391
397
|
elsif reflection.present? && reflection.foreign_key.present? && field.id.to_s == @params[:via_relation].to_s
|
392
|
-
resource = Avo::App.
|
393
|
-
|
398
|
+
resource = Avo::App.resources.get_resource_by_model_class params[:via_relation_class]
|
399
|
+
record = resource.find_record @params[:via_record_id], params: params
|
394
400
|
id_param = reflection.options[:primary_key] || :id
|
395
401
|
|
396
|
-
value =
|
402
|
+
value = record.send(id_param)
|
397
403
|
end
|
398
404
|
end
|
399
405
|
|
400
|
-
[
|
406
|
+
[id, value]
|
401
407
|
end
|
402
408
|
.to_h
|
403
|
-
.select do |
|
409
|
+
.select do |id, value|
|
404
410
|
value.present?
|
405
411
|
end
|
406
412
|
|
407
|
-
default_values.each do |
|
408
|
-
|
413
|
+
default_values.each do |id, value|
|
414
|
+
if @record.send(id).nil?
|
415
|
+
@record.send("#{id}=", value)
|
416
|
+
end
|
409
417
|
end
|
410
418
|
end
|
411
419
|
|
412
420
|
def route_key
|
413
|
-
|
421
|
+
class_name.underscore.pluralize
|
414
422
|
end
|
415
423
|
|
416
424
|
def singular_route_key
|
@@ -434,7 +442,7 @@ module Avo
|
|
434
442
|
end
|
435
443
|
|
436
444
|
def record_path
|
437
|
-
resource_path(
|
445
|
+
resource_path(record: record, resource: self)
|
438
446
|
end
|
439
447
|
|
440
448
|
def records_path
|
@@ -450,7 +458,7 @@ module Avo
|
|
450
458
|
end
|
451
459
|
|
452
460
|
def label
|
453
|
-
label_field&.value ||
|
461
|
+
label_field&.value || record_title
|
454
462
|
end
|
455
463
|
|
456
464
|
def avatar_field
|
@@ -493,12 +501,8 @@ module Avo
|
|
493
501
|
model_class.base_class.to_s.underscore.downcase
|
494
502
|
end
|
495
503
|
|
496
|
-
def
|
497
|
-
|
498
|
-
end
|
499
|
-
|
500
|
-
def has_model_id?
|
501
|
-
model.present? && model.id.present?
|
504
|
+
def has_record_id?
|
505
|
+
record.present? && record_id.present?
|
502
506
|
end
|
503
507
|
|
504
508
|
def find_record(id, query: nil, params: nil)
|
@@ -506,5 +510,13 @@ module Avo
|
|
506
510
|
|
507
511
|
self.class.find_record_method.call(model_class: query, id: id, params: params)
|
508
512
|
end
|
513
|
+
|
514
|
+
def id_attribute
|
515
|
+
:id
|
516
|
+
end
|
517
|
+
|
518
|
+
def record_id
|
519
|
+
record.send(id_attribute)
|
520
|
+
end
|
509
521
|
end
|
510
522
|
end
|
@@ -1,36 +1,29 @@
|
|
1
1
|
module Avo
|
2
2
|
class BaseResourceTool
|
3
|
-
|
4
|
-
|
3
|
+
prepend Avo::Concerns::IsResourceItem
|
4
|
+
|
5
|
+
include Avo::Concerns::HasItemType
|
6
|
+
include Avo::Concerns::IsVisible
|
7
|
+
include Avo::Concerns::VisibleInDifferentViews
|
5
8
|
|
6
9
|
class_attribute :name
|
7
10
|
class_attribute :partial
|
8
|
-
class_attribute :item_type, default: :tool
|
9
11
|
|
10
12
|
attr_accessor :params
|
11
|
-
attr_accessor :resource
|
12
|
-
attr_accessor :view
|
13
13
|
|
14
14
|
def initialize(**args)
|
15
15
|
# Set the visibility
|
16
|
-
|
17
|
-
|
18
|
-
show_on args[:show_on] if args[:show_on].present?
|
19
|
-
hide_on args[:hide_on] if args[:hide_on].present?
|
20
|
-
only_on args[:only_on] if args[:only_on].present?
|
21
|
-
except_on args[:except_on] if args[:except_on].present?
|
22
|
-
end
|
16
|
+
only_on Avo.configuration.resource_default_view
|
23
17
|
|
24
|
-
|
25
|
-
@view = view if view.present?
|
18
|
+
@args = args
|
26
19
|
|
27
|
-
|
20
|
+
post_initialize if respond_to?(:post_initialize)
|
28
21
|
end
|
29
22
|
|
30
23
|
def partial
|
31
24
|
return self.class.partial if self.class.partial.present?
|
32
25
|
|
33
|
-
|
26
|
+
self.class.to_s.underscore
|
34
27
|
end
|
35
28
|
end
|
36
29
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Avo
|
2
2
|
module Concerns
|
3
|
-
module
|
3
|
+
module CanReplaceItems
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
included do
|
@@ -12,7 +12,7 @@ module Avo
|
|
12
12
|
# back-up the previous items
|
13
13
|
self.backup_items_holder = items_holder
|
14
14
|
|
15
|
-
self.items_holder = Avo::
|
15
|
+
self.items_holder = Avo::Resources::Items::Holder.new
|
16
16
|
|
17
17
|
instance_eval(&block)
|
18
18
|
end
|
@@ -22,7 +22,7 @@ module Avo
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def with_new_items(&block)
|
25
|
-
self.items_holder = Avo::
|
25
|
+
self.items_holder = Avo::Resources::Items::Holder.new
|
26
26
|
|
27
27
|
instance_eval(&block)
|
28
28
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Avo
|
2
|
+
module Concerns
|
3
|
+
module HasControls
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
include Avo::Resources::Controls
|
6
|
+
|
7
|
+
included do
|
8
|
+
class_attribute :show_controls
|
9
|
+
class_attribute :edit_controls
|
10
|
+
class_attribute :index_controls
|
11
|
+
class_attribute :row_controls
|
12
|
+
end
|
13
|
+
|
14
|
+
def render_show_controls
|
15
|
+
[BackButton.new, DeleteButton.new, DetachButton.new, ActionsList.new, EditButton.new]
|
16
|
+
end
|
17
|
+
|
18
|
+
def render_edit_controls
|
19
|
+
[BackButton.new(label: I18n.t("avo.cancel").capitalize), DeleteButton.new, ActionsList.new, SaveButton.new]
|
20
|
+
end
|
21
|
+
|
22
|
+
def render_index_controls(item:)
|
23
|
+
[AttachButton.new(item: item), ActionsList.new(as_index_control: true), CreateButton.new(item: item)]
|
24
|
+
end
|
25
|
+
|
26
|
+
def render_row_controls(item:)
|
27
|
+
[
|
28
|
+
OrderControls.new,
|
29
|
+
ShowButton.new(item: item),
|
30
|
+
EditButton.new(item: item),
|
31
|
+
DetachButton.new(item: item),
|
32
|
+
DeleteButton.new(item: item)
|
33
|
+
]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# This concern helps us figure out what kind of items (field, tool, tab_group, or panel) have been passed to the resource or action.
|
2
|
+
module Avo
|
3
|
+
module Concerns
|
4
|
+
module HasItemType
|
5
|
+
def is_field?
|
6
|
+
self.class.ancestors.include?(Avo::Fields::BaseField)
|
7
|
+
end
|
8
|
+
|
9
|
+
def is_heading?
|
10
|
+
self.class.ancestors.include?(Avo::Fields::HeadingField)
|
11
|
+
end
|
12
|
+
|
13
|
+
def is_panel?
|
14
|
+
self.class.ancestors.include?(Avo::Resources::Items::Panel)
|
15
|
+
end
|
16
|
+
|
17
|
+
def is_main_panel?
|
18
|
+
self.class.ancestors.include?(Avo::Resources::Items::MainPanel)
|
19
|
+
end
|
20
|
+
|
21
|
+
def is_tool?
|
22
|
+
self.class.ancestors.include?(Avo::BaseResourceTool)
|
23
|
+
end
|
24
|
+
|
25
|
+
def is_tab?
|
26
|
+
self.class.ancestors.include?(Avo::Resources::Items::Tab)
|
27
|
+
end
|
28
|
+
|
29
|
+
def is_tab_group?
|
30
|
+
self.class.ancestors.include?(Avo::Resources::Items::TabGroup)
|
31
|
+
end
|
32
|
+
|
33
|
+
def is_sidebar?
|
34
|
+
self.class.ancestors.include?(Avo::Resources::Items::Sidebar)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|