avo 2.49.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 +15 -26
- 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/hidden_field/edit_component.html.erb +1 -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/fields/date_field_controller.js +3 -7
- data/app/javascript/js/controllers/fields/key_value_controller.js +1 -2
- 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 +10 -7
- 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 +11 -12
- 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 -42
- data/lib/avo/base_resource.rb +264 -227
- 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/{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/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 -106
- 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 +3 -14
- 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 +8 -67
- 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/encryption_service.rb +5 -1
- 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 +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 +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 -307
- 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 +102 -146
- 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_action_stimulus_controllers.rb +0 -15
- 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 -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/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
@@ -0,0 +1,126 @@
|
|
1
|
+
module Avo
|
2
|
+
module Concerns
|
3
|
+
module VisibleInDifferentViews
|
4
|
+
attr_accessor :show_on_index
|
5
|
+
attr_accessor :show_on_show
|
6
|
+
attr_accessor :show_on_new
|
7
|
+
attr_accessor :show_on_edit
|
8
|
+
attr_accessor :show_on_preview
|
9
|
+
|
10
|
+
def post_initialize
|
11
|
+
initialize_views
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize_views
|
15
|
+
# Set defaults
|
16
|
+
@show_on_index = @show_on_index.nil? ? true : @show_on_index
|
17
|
+
@show_on_show = @show_on_show.nil? ? true : @show_on_show
|
18
|
+
@show_on_new = @show_on_new.nil? ? true : @show_on_new
|
19
|
+
@show_on_edit = @show_on_edit.nil? ? true : @show_on_edit
|
20
|
+
@show_on_preview = @show_on_preview.nil? ? false : @show_on_preview
|
21
|
+
|
22
|
+
if @args.present?
|
23
|
+
# Execute options
|
24
|
+
show_on @args[:show_on] if @args[:show_on].present?
|
25
|
+
hide_on @args[:hide_on] if @args[:hide_on].present?
|
26
|
+
only_on @args[:only_on] if @args[:only_on].present?
|
27
|
+
except_on @args[:except_on] if @args[:except_on].present?
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Validates if the field is visible on certain view
|
32
|
+
def visible_in_view?(view:)
|
33
|
+
raise "No view specified on visibility check." if view.blank?
|
34
|
+
|
35
|
+
send "show_on_#{view}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def show_on(*where)
|
39
|
+
return show_on_all if where.include? :all
|
40
|
+
|
41
|
+
normalize_views(where).flatten.each do |view|
|
42
|
+
show_on_view view
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def hide_on(*where)
|
47
|
+
return hide_on_all if where.include? :all
|
48
|
+
|
49
|
+
normalize_views(where).flatten.each do |view|
|
50
|
+
hide_on_view view
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def only_on(*where)
|
55
|
+
hide_on_all
|
56
|
+
normalize_views(where).flatten.each do |view|
|
57
|
+
show_on_view view
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def except_on(*where)
|
62
|
+
show_on_all
|
63
|
+
normalize_views(where).flatten.each do |view|
|
64
|
+
show_on_view view
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# When submitting the form on creation, the new page will be create but we don't have a visibility marker for create so we'll default to new
|
69
|
+
def show_on_create
|
70
|
+
show_on_new
|
71
|
+
end
|
72
|
+
|
73
|
+
# When submitting the form on update, the new page will be create but we don't have a visibility marker for update so we'll default to edit
|
74
|
+
def show_on_update
|
75
|
+
show_on_edit
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def show_on_view(view)
|
81
|
+
send("show_on_#{view}=", true)
|
82
|
+
end
|
83
|
+
|
84
|
+
def hide_on_view(view)
|
85
|
+
send("show_on_#{view}=", false)
|
86
|
+
end
|
87
|
+
|
88
|
+
def only_on_view(view)
|
89
|
+
hide_on_all
|
90
|
+
show_on_view view
|
91
|
+
end
|
92
|
+
|
93
|
+
def except_on_view(view)
|
94
|
+
show_on_all
|
95
|
+
hide_on_view view
|
96
|
+
end
|
97
|
+
|
98
|
+
def show_on_all
|
99
|
+
@show_on_index = true
|
100
|
+
@show_on_show = true
|
101
|
+
@show_on_edit = true
|
102
|
+
@show_on_new = true
|
103
|
+
@show_on_preview = true
|
104
|
+
end
|
105
|
+
|
106
|
+
def hide_on_all
|
107
|
+
@show_on_index = false
|
108
|
+
@show_on_show = false
|
109
|
+
@show_on_edit = false
|
110
|
+
@show_on_new = false
|
111
|
+
@show_on_preview = false
|
112
|
+
end
|
113
|
+
|
114
|
+
def normalize_views(*views_and_groups)
|
115
|
+
forms = views_and_groups.flatten! & [:forms]
|
116
|
+
|
117
|
+
if forms.present?
|
118
|
+
views_and_groups -= forms
|
119
|
+
views_and_groups += [:new, :edit]
|
120
|
+
end
|
121
|
+
|
122
|
+
views_and_groups.flatten.uniq
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -32,40 +32,28 @@ class Avo::Configuration::Branding
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def logo
|
35
|
-
return @default_logo if Avo::App.license.lacks_with_trial(:branding)
|
36
|
-
|
37
35
|
@logo || @default_logo
|
38
36
|
end
|
39
37
|
|
40
38
|
def logomark
|
41
|
-
return @default_logomark if Avo::App.license.lacks_with_trial(:branding)
|
42
|
-
|
43
39
|
@logomark || @default_logomark
|
44
40
|
end
|
45
41
|
|
46
42
|
def placeholder
|
47
|
-
return @default_placeholder if Avo::App.license.lacks_with_trial(:branding)
|
48
|
-
|
49
43
|
@placeholder || @default_placeholder
|
50
44
|
end
|
51
45
|
|
52
46
|
def chart_colors
|
53
|
-
return @default_chart_colors if Avo::App.license.lacks_with_trial(:branding)
|
54
|
-
|
55
47
|
@chart_colors || @default_chart_colors
|
56
48
|
end
|
57
49
|
|
58
50
|
def favicon
|
59
|
-
return @default_favicon if Avo::App.license.lacks_with_trial(:branding)
|
60
|
-
|
61
51
|
@favicon || @default_favicon
|
62
52
|
end
|
63
53
|
|
64
54
|
private
|
65
55
|
|
66
56
|
def colors
|
67
|
-
return @default_colors if Avo::App.license.lacks_with_trial(:branding)
|
68
|
-
|
69
57
|
@default_colors.merge(@colors) || @default_colors
|
70
58
|
end
|
71
59
|
|
data/lib/avo/configuration.rb
CHANGED
@@ -5,7 +5,6 @@ module Avo
|
|
5
5
|
attr_writer :app_name
|
6
6
|
attr_writer :branding
|
7
7
|
attr_writer :root_path
|
8
|
-
attr_writer :cache_store
|
9
8
|
attr_accessor :timezone
|
10
9
|
attr_accessor :per_page
|
11
10
|
attr_accessor :per_page_steps
|
@@ -38,7 +37,6 @@ module Avo
|
|
38
37
|
attr_accessor :main_menu
|
39
38
|
attr_accessor :profile_menu
|
40
39
|
attr_accessor :model_resource_mapping
|
41
|
-
attr_accessor :tabs_style
|
42
40
|
attr_accessor :resource_default_view
|
43
41
|
attr_accessor :authorization_client
|
44
42
|
attr_accessor :field_wrapper_layout
|
@@ -91,13 +89,10 @@ module Avo
|
|
91
89
|
@main_menu = nil
|
92
90
|
@profile_menu = nil
|
93
91
|
@model_resource_mapping = {}
|
94
|
-
@tabs_style = :tabs
|
95
92
|
@resource_default_view = :show
|
96
93
|
@authorization_client = :pundit
|
97
94
|
@field_wrapper_layout = :inline
|
98
95
|
@resources = nil
|
99
|
-
@prefix_path = nil
|
100
|
-
@cache_store = computed_cache_store
|
101
96
|
end
|
102
97
|
|
103
98
|
def current_user_method(&block)
|
@@ -143,38 +138,7 @@ module Avo
|
|
143
138
|
end
|
144
139
|
|
145
140
|
def app_name
|
146
|
-
|
147
|
-
Avo::Hosts::BaseHost.new(block: @app_name).handle
|
148
|
-
else
|
149
|
-
@app_name
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
def cache_store
|
154
|
-
Avo::ExecutionContext.new(
|
155
|
-
target: @cache_store,
|
156
|
-
production_rejected_cache_stores: %w[ActiveSupport::Cache::MemoryStore ActiveSupport::Cache::NullStore]
|
157
|
-
).handle
|
158
|
-
end
|
159
|
-
|
160
|
-
# When not in production or test we'll just use the MemoryStore which is good enough.
|
161
|
-
# When running in production we'll use Rails.cache if it's not ActiveSupport::Cache::MemoryStore or ActiveSupport::Cache::NullStore.
|
162
|
-
# If it's one of rejected cache stores, we'll use the FileStore.
|
163
|
-
# We decided against the MemoryStore in production because it will not be shared between multiple processes (when using Puma).
|
164
|
-
def computed_cache_store
|
165
|
-
-> {
|
166
|
-
if Rails.env.production?
|
167
|
-
if Rails.cache.class.to_s.in?(production_rejected_cache_stores)
|
168
|
-
ActiveSupport::Cache.lookup_store(:file_store, Rails.root.join("tmp", "cache"))
|
169
|
-
else
|
170
|
-
Rails.cache
|
171
|
-
end
|
172
|
-
elsif Rails.env.test?
|
173
|
-
Rails.cache
|
174
|
-
else
|
175
|
-
ActiveSupport::Cache.lookup_store(:memory_store)
|
176
|
-
end
|
177
|
-
}
|
141
|
+
Avo::ExecutionContext.new(target: @app_name).handle
|
178
142
|
end
|
179
143
|
end
|
180
144
|
|
data/lib/avo/current.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
class Avo::Current < ActiveSupport::CurrentAttributes
|
2
|
+
# if Rails.env.development?
|
3
|
+
# singleton_class.attr_accessor :previous_attributes
|
4
|
+
# before_reset {
|
5
|
+
# puts ["before_reset->", self.previous_attributes].inspect
|
6
|
+
# if attributes.present?
|
7
|
+
# puts ["has attributes->"].inspect
|
8
|
+
# self.previous_attributes = attributes
|
9
|
+
# end
|
10
|
+
# puts ["before_reset->", self.previous_attributes].inspect
|
11
|
+
# }
|
12
|
+
|
13
|
+
# attr_accessor :previous_attributes
|
14
|
+
|
15
|
+
# def previous_attributes=(value)
|
16
|
+
# @previous_attributes = value
|
17
|
+
# end
|
18
|
+
# end
|
19
|
+
|
20
|
+
attribute :app
|
21
|
+
attribute :license
|
22
|
+
attribute :context, :user, :view_context
|
23
|
+
attribute :error_manager
|
24
|
+
attribute :resource_manager
|
25
|
+
attribute :tool_manager
|
26
|
+
attribute :plugin_manager
|
27
|
+
|
28
|
+
delegate :params, to: :request
|
29
|
+
|
30
|
+
def request
|
31
|
+
view_context.request || ActionDispatch::Request.empty
|
32
|
+
end
|
33
|
+
|
34
|
+
def current_user
|
35
|
+
Rails.logger.warn "DEPRECATION WARNING: Avo::Current.current_user become deprecated and will become obsolete on futhure versions. Please use Avo::Current.user instead."
|
36
|
+
|
37
|
+
user
|
38
|
+
end
|
39
|
+
end
|
data/lib/avo/dsl/field_parser.rb
CHANGED
data/lib/avo/dynamic_router.rb
CHANGED
@@ -1,15 +1,26 @@
|
|
1
1
|
module Avo
|
2
2
|
class DynamicRouter
|
3
|
+
def self.eager_load(entity)
|
4
|
+
paths = Avo::ENTITIES.fetch entity
|
5
|
+
|
6
|
+
return unless paths.present?
|
7
|
+
|
8
|
+
pathname = Rails.root.join(*paths)
|
9
|
+
if pathname.directory?
|
10
|
+
Rails.autoloaders.main.eager_load_dir(pathname.to_s)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
3
14
|
def self.routes
|
4
15
|
Avo::Engine.routes.draw do
|
5
16
|
scope "resources", as: "resources" do
|
6
17
|
# Check if the user chose to manually register the resource files.
|
7
18
|
# If so, eager_load the resources dir.
|
8
19
|
if Avo.configuration.resources.nil?
|
9
|
-
Avo::
|
20
|
+
Avo::DynamicRouter.eager_load(:resources) unless Rails.application.config.eager_load
|
10
21
|
end
|
11
22
|
|
12
|
-
Avo::
|
23
|
+
Avo::Resources::ResourceManager.fetch_resources
|
13
24
|
.select do |resource|
|
14
25
|
resource != :BaseResource
|
15
26
|
end
|
@@ -17,7 +28,11 @@ module Avo
|
|
17
28
|
resource.is_a? Class
|
18
29
|
end
|
19
30
|
.map do |resource|
|
20
|
-
resources resource.
|
31
|
+
resources resource.route_key do
|
32
|
+
member do
|
33
|
+
get :preview
|
34
|
+
end
|
35
|
+
end
|
21
36
|
end
|
22
37
|
end
|
23
38
|
end
|
data/lib/avo/engine.rb
CHANGED
@@ -3,6 +3,8 @@ Gem.loaded_specs["avo"].dependencies.each do |d|
|
|
3
3
|
case d.name
|
4
4
|
when "activerecord"
|
5
5
|
require "active_record/railtie"
|
6
|
+
when "activesupport"
|
7
|
+
require "active_support/railtie"
|
6
8
|
when "actionview"
|
7
9
|
require "action_view/railtie"
|
8
10
|
when "activestorage"
|
@@ -19,23 +21,40 @@ module Avo
|
|
19
21
|
isolate_namespace Avo
|
20
22
|
|
21
23
|
config.after_initialize do
|
22
|
-
#
|
23
|
-
::Avo
|
24
|
-
end
|
24
|
+
# Reset before reloads in development
|
25
|
+
::Avo.asset_manager.reset
|
25
26
|
|
26
|
-
|
27
|
-
Avo
|
28
|
-
path = Rails.root.join(*path_params)
|
27
|
+
# Boot Avo
|
28
|
+
::Avo.boot
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
# After deploy we want to make sure the license response is being cleared.
|
31
|
+
# We need a fresh license response.
|
32
|
+
# This is disabled in development because the initialization process might be triggered more than once.
|
33
|
+
unless Rails.env.development?
|
34
|
+
begin
|
35
|
+
Licensing::HQ.new.clear_response
|
36
|
+
rescue => exception
|
37
|
+
Avo.logger.info "Failed to clear Avo HQ response: #{exception.message}"
|
32
38
|
end
|
33
39
|
end
|
34
40
|
end
|
35
41
|
|
36
|
-
|
37
|
-
|
38
|
-
|
42
|
+
# Ensure we reboot the app when something changes
|
43
|
+
config.to_prepare do
|
44
|
+
# Boot Avo
|
45
|
+
::Avo.boot
|
46
|
+
end
|
47
|
+
|
48
|
+
initializer "avo.autoload" do |app|
|
49
|
+
# This undoes Rails' previous nested directories behavior in the `app` dir.
|
50
|
+
# More on this: https://github.com/fxn/zeitwerk/issues/250
|
51
|
+
avo_directory = Rails.root.join("app", "avo").to_s
|
52
|
+
ActiveSupport::Dependencies.autoload_paths.delete(avo_directory)
|
53
|
+
|
54
|
+
if Dir.exist?(avo_directory)
|
55
|
+
Rails.autoloaders.main.push_dir(avo_directory, namespace: Avo)
|
56
|
+
app.config.watchable_dirs[avo_directory] = [:rb]
|
57
|
+
end
|
39
58
|
end
|
40
59
|
|
41
60
|
initializer "avo.reloader" do |app|
|
@@ -46,17 +65,16 @@ module Avo
|
|
46
65
|
end
|
47
66
|
end
|
48
67
|
|
49
|
-
initializer "debug_exception_response_format" do |app|
|
50
|
-
app.config.debug_exception_response_format = :api
|
51
|
-
# app.config.logger = ::Logger.new(STDOUT)
|
52
|
-
end
|
53
|
-
|
54
68
|
initializer "avo.test_buddy" do |app|
|
55
69
|
if Avo::IN_DEVELOPMENT
|
56
|
-
Rails.autoloaders.main.push_dir Avo::Engine.root.join("spec", "
|
70
|
+
Rails.autoloaders.main.push_dir Avo::Engine.root.join("spec", "testing_helpers")
|
57
71
|
end
|
58
72
|
end
|
59
73
|
|
74
|
+
initializer "debug_exception_response_format" do |app|
|
75
|
+
app.config.debug_exception_response_format = :api
|
76
|
+
end
|
77
|
+
|
60
78
|
config.app_middleware.use(
|
61
79
|
Rack::Static,
|
62
80
|
urls: ["/avo-assets"],
|
@@ -75,18 +93,5 @@ module Avo
|
|
75
93
|
initializer "avo.locales" do |app|
|
76
94
|
I18n.load_path += Dir[Avo::Engine.root.join("lib", "generators", "avo", "templates", "locales", "*.{rb,yml}")]
|
77
95
|
end
|
78
|
-
|
79
|
-
# After deploy we want to make sure the license response is being cleared.
|
80
|
-
# We need a fresh license response.
|
81
|
-
# This is disabled in development because the initialization process might be triggered more than once.
|
82
|
-
config.after_initialize do
|
83
|
-
unless Rails.env.development?
|
84
|
-
begin
|
85
|
-
Licensing::HQ.new.clear_response
|
86
|
-
rescue => exception
|
87
|
-
puts "Failed to clear Avo HQ response: #{exception.message}"
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
96
|
end
|
92
97
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Avo
|
2
|
+
class ErrorManager
|
3
|
+
class << self
|
4
|
+
def build
|
5
|
+
new
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :errors
|
10
|
+
|
11
|
+
alias_method :all, :errors
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@errors = []
|
15
|
+
end
|
16
|
+
|
17
|
+
def add(error)
|
18
|
+
errors << error
|
19
|
+
end
|
20
|
+
|
21
|
+
def has_errors?
|
22
|
+
errors.present?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -10,13 +10,6 @@ module Avo
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
# If you want this block to behave like a view you can delegate the missing methods to the view_context
|
14
|
-
#
|
15
|
-
# Ex: Avo::ExecutionContext.new(target: ..., delegate_missing_to: :view_context).handle
|
16
|
-
if args[:delegate_missing_to].present?
|
17
|
-
self.class.send(:delegate_missing_to, args[:delegate_missing_to])
|
18
|
-
end
|
19
|
-
|
20
13
|
# If target doesn't respond to call, we don't need to initialize the others attr_accessors.
|
21
14
|
return unless (@target = args[:target]).respond_to? :call
|
22
15
|
|
@@ -26,15 +19,18 @@ module Avo
|
|
26
19
|
end
|
27
20
|
|
28
21
|
# Set defaults on not initialized accessors
|
29
|
-
@context ||= Avo::
|
30
|
-
@
|
31
|
-
@
|
32
|
-
@
|
33
|
-
@
|
34
|
-
@main_app ||= view_context
|
35
|
-
@avo ||= view_context
|
22
|
+
@context ||= Avo::Current.context
|
23
|
+
@current_user ||= Avo::Current.user
|
24
|
+
@params ||= Avo::Current.params
|
25
|
+
@request ||= Avo::Current.request
|
26
|
+
@view_context ||= Avo::Current.view_context
|
27
|
+
@main_app ||= @view_context.main_app
|
28
|
+
@avo ||= @view_context.avo
|
36
29
|
end
|
37
30
|
|
31
|
+
delegate :result, to: :card
|
32
|
+
delegate :authorize, to: Avo::Services::AuthorizationService
|
33
|
+
|
38
34
|
# Return target if target is not callable, otherwise, execute target on this instance context
|
39
35
|
def handle
|
40
36
|
target.respond_to?(:call) ? instance_exec(&target) : target
|
@@ -8,7 +8,7 @@ module Avo
|
|
8
8
|
|
9
9
|
hide_on [:edit, :new]
|
10
10
|
|
11
|
-
default_options = {info: :info, success: :success, danger: :danger, warning: :warning
|
11
|
+
default_options = {info: :info, success: :success, danger: :danger, warning: :warning}
|
12
12
|
@options = args[:options].present? ? default_options.merge(args[:options]) : default_options
|
13
13
|
end
|
14
14
|
end
|