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
@@ -1,53 +0,0 @@
|
|
1
|
-
module Avo
|
2
|
-
module Concerns
|
3
|
-
module Pagination
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
include Pagy::Backend
|
8
|
-
|
9
|
-
class_attribute :pagination, default: {}
|
10
|
-
|
11
|
-
PAGINATION_METHOD = {
|
12
|
-
default: :pagy,
|
13
|
-
countless: :pagy_countless,
|
14
|
-
} unless defined? PAGINATION_METHOD
|
15
|
-
|
16
|
-
PAGINATION_DEFAULTS = {
|
17
|
-
type: :default,
|
18
|
-
size: [1, 2, 2, 1],
|
19
|
-
} unless defined? PAGINATION_DEFAULTS
|
20
|
-
end
|
21
|
-
|
22
|
-
def pagination_type
|
23
|
-
@pagination_type ||= ActiveSupport::StringInquirer.new(pagination_hash[:type].to_s)
|
24
|
-
end
|
25
|
-
|
26
|
-
def apply_pagination(index_params:, query:)
|
27
|
-
extra_pagy_params = {}
|
28
|
-
|
29
|
-
# Reset open filters when a user navigates to a new page
|
30
|
-
extra_pagy_params[:keep_filters_panel_open] = if params[:keep_filters_panel_open] == "1"
|
31
|
-
"0"
|
32
|
-
end
|
33
|
-
|
34
|
-
send PAGINATION_METHOD[pagination_type.to_sym],
|
35
|
-
query,
|
36
|
-
items: index_params[:per_page],
|
37
|
-
link_extra: "data-turbo-frame=\"#{params[:turbo_frame]}\"",
|
38
|
-
params: extra_pagy_params,
|
39
|
-
size: pagination_hash[:size]
|
40
|
-
end
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
def pagination_hash
|
45
|
-
@pagination ||= PAGINATION_DEFAULTS.merge Avo::ExecutionContext.new(
|
46
|
-
target: pagination,
|
47
|
-
resource: self,
|
48
|
-
view: @view
|
49
|
-
).handle
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module Avo
|
2
|
-
module Concerns
|
3
|
-
module PolicyHelpers
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
class_methods do
|
7
|
-
def inherit_association_from_policy(association_name, policy_class)
|
8
|
-
[:create, :edit, :update, :destroy, :show, :reorder, :act_on].each do |method_action|
|
9
|
-
define_policy_method(method_action, association_name, policy_class)
|
10
|
-
end
|
11
|
-
|
12
|
-
define_policy_method("view", association_name, policy_class, "index")
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
# Define a method for the given action and association name.
|
18
|
-
# Call the policy class with the given action passing the user and record.
|
19
|
-
# Example:
|
20
|
-
# def create_team_members?
|
21
|
-
# TeamMemberPolicy.new(user, record).create?
|
22
|
-
# end
|
23
|
-
def define_policy_method(method_action, association_name, policy_class, policy_action = method_action)
|
24
|
-
define_method "#{method_action}_#{association_name}?" do
|
25
|
-
policy_class.new(user, record).send "#{policy_action}?"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module Avo
|
2
|
-
module Concerns
|
3
|
-
module VisibleInDashboard
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
class_attribute :visible, default: true
|
8
|
-
end
|
9
|
-
|
10
|
-
def is_visible?
|
11
|
-
# Default is true
|
12
|
-
return true if visible == true
|
13
|
-
|
14
|
-
# Hide if false
|
15
|
-
return false if visible == false
|
16
|
-
|
17
|
-
if visible.respond_to? :call
|
18
|
-
call_block
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def is_hidden?
|
23
|
-
!is_visible?
|
24
|
-
end
|
25
|
-
|
26
|
-
def call_block
|
27
|
-
::Avo::Hosts::DashboardVisibility.new(block: visible, dashboard: self).handle
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# This concern helps us figure out what items are visible for each tab, panel or sidebar
|
2
|
-
module Avo
|
3
|
-
module Concerns
|
4
|
-
module VisibleItems
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
def items
|
7
|
-
if items_holder.present?
|
8
|
-
items_holder.items
|
9
|
-
else
|
10
|
-
[]
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def visible_items
|
15
|
-
items
|
16
|
-
.map do |item|
|
17
|
-
if item.respond_to? :hydrate
|
18
|
-
item.hydrate(view: view)
|
19
|
-
end
|
20
|
-
|
21
|
-
item
|
22
|
-
end
|
23
|
-
.map do |item|
|
24
|
-
visible(item) ? item : nil
|
25
|
-
end
|
26
|
-
.compact
|
27
|
-
end
|
28
|
-
|
29
|
-
def visible(item)
|
30
|
-
return item.visible? unless item.is_field?
|
31
|
-
|
32
|
-
return false if item.respond_to?(:authorized?) && item.resource.present? && !item.authorized?
|
33
|
-
|
34
|
-
item.visible? && item.visible_on?(view)
|
35
|
-
end
|
36
|
-
|
37
|
-
def visible?
|
38
|
-
any_item_visible = visible_items.any?
|
39
|
-
return any_item_visible unless respond_to?(:visible_on?)
|
40
|
-
|
41
|
-
visible_on?(view) && any_item_visible
|
42
|
-
end
|
43
|
-
|
44
|
-
def hydrate(view: nil)
|
45
|
-
@view = view
|
46
|
-
|
47
|
-
self
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,89 +0,0 @@
|
|
1
|
-
module Avo
|
2
|
-
module Dashboards
|
3
|
-
class BaseDashboard
|
4
|
-
# TODO: convert the dashboards from classes to instances.
|
5
|
-
extend Avo::Concerns::VisibleInDashboard
|
6
|
-
extend ActiveSupport::DescendantsTracker
|
7
|
-
|
8
|
-
class_attribute :id
|
9
|
-
class_attribute :name
|
10
|
-
class_attribute :description
|
11
|
-
class_attribute :items_holder
|
12
|
-
class_attribute :grid_cols, default: 3
|
13
|
-
# TODO: remove this when you make the conversion.
|
14
|
-
class_attribute :visible, default: true
|
15
|
-
class_attribute :index, default: 0
|
16
|
-
class_attribute :authorize, default: -> { true }
|
17
|
-
|
18
|
-
class << self
|
19
|
-
def options_deprecation_message
|
20
|
-
Rails.logger.warn "DEPRECATION WARNING: Card options parameter is deprecated in favor of arguments parameter and will be removed from Avo version 3.0.0"
|
21
|
-
end
|
22
|
-
|
23
|
-
def card(klass, label: nil, description: nil, cols: nil, rows: nil, refresh_every: nil, options: {}, arguments: {}, visible: nil)
|
24
|
-
options_deprecation_message if options.present?
|
25
|
-
self.items_holder ||= []
|
26
|
-
|
27
|
-
self.items_holder << klass.new(
|
28
|
-
dashboard: self,
|
29
|
-
label: label,
|
30
|
-
description: description,
|
31
|
-
cols: cols,
|
32
|
-
rows: rows,
|
33
|
-
refresh_every: refresh_every,
|
34
|
-
options: options,
|
35
|
-
arguments: arguments,
|
36
|
-
index: index,
|
37
|
-
visible: visible
|
38
|
-
)
|
39
|
-
self.index += 1
|
40
|
-
end
|
41
|
-
|
42
|
-
def item_at_index(index)
|
43
|
-
items.find do |item|
|
44
|
-
next if item.index.blank?
|
45
|
-
|
46
|
-
item.index == index
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def divider(**args)
|
51
|
-
self.items_holder ||= []
|
52
|
-
|
53
|
-
self.items_holder << BaseDivider.new(dashboard: self, **args)
|
54
|
-
end
|
55
|
-
|
56
|
-
def items
|
57
|
-
items = self.items_holder || []
|
58
|
-
|
59
|
-
items.filter do |item|
|
60
|
-
item.is_visible?
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def classes
|
65
|
-
case grid_cols
|
66
|
-
when 3
|
67
|
-
"sm:grid-cols-3"
|
68
|
-
when 4
|
69
|
-
"sm:grid-cols-4"
|
70
|
-
when 5
|
71
|
-
"sm:grid-cols-5"
|
72
|
-
when 6
|
73
|
-
"sm:grid-cols-6"
|
74
|
-
else
|
75
|
-
"sm:grid-cols-3"
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def navigation_label
|
80
|
-
name
|
81
|
-
end
|
82
|
-
|
83
|
-
def navigation_path
|
84
|
-
Avo::App.view_context.avo.dashboard_path id
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
module Avo
|
2
|
-
module Dashboards
|
3
|
-
class BaseDivider
|
4
|
-
include Avo::Concerns::VisibleInDashboard
|
5
|
-
|
6
|
-
attr_reader :dashboard
|
7
|
-
attr_reader :label
|
8
|
-
attr_reader :invisible
|
9
|
-
attr_reader :index
|
10
|
-
attr_reader :visible
|
11
|
-
|
12
|
-
class_attribute :id
|
13
|
-
|
14
|
-
def initialize(dashboard: nil, label: nil, invisible: false, index: nil, visible: true)
|
15
|
-
@dashboard = dashboard
|
16
|
-
@label = label
|
17
|
-
@invisible = invisible
|
18
|
-
@index = index
|
19
|
-
@visible = visible
|
20
|
-
end
|
21
|
-
|
22
|
-
def is_divider?
|
23
|
-
true
|
24
|
-
end
|
25
|
-
|
26
|
-
def is_card?
|
27
|
-
false
|
28
|
-
end
|
29
|
-
|
30
|
-
def call_block
|
31
|
-
::Avo::Hosts::CardVisibility.new(block: visible, card: self, parent: dashboard).handle
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
module Avo
|
2
|
-
module Dashboards
|
3
|
-
class ChartkickCard < BaseCard
|
4
|
-
class_attribute :chart_type
|
5
|
-
class_attribute :chart_options, default: {}
|
6
|
-
class_attribute :flush, default: true
|
7
|
-
class_attribute :legend, default: false
|
8
|
-
class_attribute :scale, default: false
|
9
|
-
class_attribute :legend_on_left, default: false
|
10
|
-
class_attribute :legend_on_right, default: false
|
11
|
-
|
12
|
-
def chartkick_classes
|
13
|
-
case chart_type
|
14
|
-
when :area_chart, :line_chart, :scatter_chart, :bar_chart, :column_chart
|
15
|
-
if self.class.flush
|
16
|
-
"-mx-1.5 top-auto -bottom-1.5"
|
17
|
-
else
|
18
|
-
"px-2"
|
19
|
-
end
|
20
|
-
else
|
21
|
-
""
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def chartkick_options
|
26
|
-
card_height = 144
|
27
|
-
card_heading = 40
|
28
|
-
|
29
|
-
default = {
|
30
|
-
# figure our the available height for the chart
|
31
|
-
height: "#{(rows * card_height) - card_heading}px",
|
32
|
-
colors: ::Avo.configuration.branding.chart_colors,
|
33
|
-
library: {
|
34
|
-
discrete: false,
|
35
|
-
points: false,
|
36
|
-
animation: true
|
37
|
-
},
|
38
|
-
id: "#{dashboard.id}-#{rand(10_000..99_999)}"
|
39
|
-
}
|
40
|
-
|
41
|
-
no_scale_options = {display: false}
|
42
|
-
no_scale = {
|
43
|
-
library: {
|
44
|
-
scales: {
|
45
|
-
x: no_scale_options,
|
46
|
-
y: no_scale_options
|
47
|
-
}
|
48
|
-
}
|
49
|
-
}
|
50
|
-
|
51
|
-
no_legend = {library: {plugins: {legend: {display: false}}}}
|
52
|
-
legend_on_left = {library: {plugins: {legend: {position: "left"}}}}
|
53
|
-
legend_on_right = {library: {plugins: {legend: {position: "right"}}}}
|
54
|
-
|
55
|
-
# Add chart.js configuration for the different states
|
56
|
-
unless self.class.legend
|
57
|
-
default = default.deep_merge(no_legend)
|
58
|
-
end
|
59
|
-
|
60
|
-
unless self.class.scale
|
61
|
-
default = default.deep_merge(no_scale)
|
62
|
-
end
|
63
|
-
|
64
|
-
if self.class.legend_on_left
|
65
|
-
default = default.deep_merge(legend_on_left)
|
66
|
-
end
|
67
|
-
|
68
|
-
if self.class.legend_on_right
|
69
|
-
default = default.deep_merge(legend_on_right)
|
70
|
-
end
|
71
|
-
|
72
|
-
# Add the custom chart options at the end
|
73
|
-
default.deep_merge(self.class.chart_options)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Avo
|
2
|
-
module Fields
|
3
|
-
module FieldExtensions
|
4
|
-
module HasFieldName
|
5
|
-
# Set the field name
|
6
|
-
def field_name(name)
|
7
|
-
self.field_name_attribute = name
|
8
|
-
end
|
9
|
-
|
10
|
-
# Get the field name
|
11
|
-
def get_field_name
|
12
|
-
return field_name_attribute if field_name_attribute.present?
|
13
|
-
|
14
|
-
to_s.demodulize.underscore.gsub "_field", ""
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,111 +0,0 @@
|
|
1
|
-
module Avo
|
2
|
-
module Fields
|
3
|
-
module FieldExtensions
|
4
|
-
module VisibleInDifferentViews
|
5
|
-
attr_accessor :show_on_index
|
6
|
-
attr_accessor :show_on_show
|
7
|
-
attr_accessor :show_on_new
|
8
|
-
attr_accessor :show_on_edit
|
9
|
-
|
10
|
-
def initialize(id = nil, **args, &block)
|
11
|
-
@show_on_index = @show_on_index.nil? ? true : @show_on_index
|
12
|
-
@show_on_show = @show_on_show.nil? ? true : @show_on_show
|
13
|
-
@show_on_new = @show_on_new.nil? ? true : @show_on_new
|
14
|
-
@show_on_edit = @show_on_edit.nil? ? true : @show_on_edit
|
15
|
-
end
|
16
|
-
|
17
|
-
# Validates if the field is visible on certain view
|
18
|
-
def visible_on?(view)
|
19
|
-
raise "No view specified on visibility check." if view.blank?
|
20
|
-
|
21
|
-
send :"show_on_#{view}"
|
22
|
-
end
|
23
|
-
|
24
|
-
def show_on(*where)
|
25
|
-
return show_on_all if where.include? :all
|
26
|
-
|
27
|
-
normalize_views(where).flatten.each do |view|
|
28
|
-
show_on_view view
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def hide_on(*where)
|
33
|
-
return hide_on_all if where.include? :all
|
34
|
-
|
35
|
-
normalize_views(where).flatten.each do |view|
|
36
|
-
hide_on_view view
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def only_on(*where)
|
41
|
-
hide_on_all
|
42
|
-
normalize_views(where).flatten.each do |view|
|
43
|
-
show_on_view view
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def except_on(*where)
|
48
|
-
show_on_all
|
49
|
-
normalize_views(where).flatten.each do |view|
|
50
|
-
hide_on_view view
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
# 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
|
55
|
-
def show_on_create
|
56
|
-
show_on_new
|
57
|
-
end
|
58
|
-
|
59
|
-
# 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
|
60
|
-
def show_on_update
|
61
|
-
show_on_edit
|
62
|
-
end
|
63
|
-
|
64
|
-
private
|
65
|
-
|
66
|
-
def show_on_view(view)
|
67
|
-
send("show_on_#{view}=", true)
|
68
|
-
end
|
69
|
-
|
70
|
-
def hide_on_view(view)
|
71
|
-
send("show_on_#{view}=", false)
|
72
|
-
end
|
73
|
-
|
74
|
-
def only_on_view(view)
|
75
|
-
hide_on_all
|
76
|
-
show_on_view view
|
77
|
-
end
|
78
|
-
|
79
|
-
def except_on_view(view)
|
80
|
-
show_on_all
|
81
|
-
hide_on_view view
|
82
|
-
end
|
83
|
-
|
84
|
-
def show_on_all
|
85
|
-
@show_on_index = true
|
86
|
-
@show_on_show = true
|
87
|
-
@show_on_edit = true
|
88
|
-
@show_on_new = true
|
89
|
-
end
|
90
|
-
|
91
|
-
def hide_on_all
|
92
|
-
@show_on_index = false
|
93
|
-
@show_on_show = false
|
94
|
-
@show_on_edit = false
|
95
|
-
@show_on_new = false
|
96
|
-
end
|
97
|
-
|
98
|
-
def normalize_views(*views_and_groups)
|
99
|
-
forms = views_and_groups.flatten! & [:forms]
|
100
|
-
|
101
|
-
if forms.present?
|
102
|
-
views_and_groups -= forms
|
103
|
-
views_and_groups += [:new, :edit]
|
104
|
-
end
|
105
|
-
|
106
|
-
views_and_groups.flatten.uniq
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
@@ -1,102 +0,0 @@
|
|
1
|
-
module Avo
|
2
|
-
module Fields
|
3
|
-
class TagsField < BaseField
|
4
|
-
attr_reader :acts_as_taggable_on
|
5
|
-
attr_reader :close_on_select
|
6
|
-
attr_reader :delimiters
|
7
|
-
attr_reader :enforce_suggestions
|
8
|
-
attr_reader :suggestions_max_items
|
9
|
-
attr_reader :mode
|
10
|
-
|
11
|
-
def initialize(id, **args, &block)
|
12
|
-
super(id, **args, &block)
|
13
|
-
|
14
|
-
add_boolean_prop args, :close_on_select
|
15
|
-
add_boolean_prop args, :enforce_suggestions
|
16
|
-
add_string_prop args, :acts_as_taggable_on
|
17
|
-
add_array_prop args, :disallowed
|
18
|
-
add_array_prop args, :delimiters, [","]
|
19
|
-
add_array_prop args, :suggestions
|
20
|
-
add_string_prop args, :suggestions_max_items
|
21
|
-
add_string_prop args, :mode, nil
|
22
|
-
add_string_prop args, :fetch_values_from
|
23
|
-
add_string_prop args, :fetch_labels
|
24
|
-
end
|
25
|
-
|
26
|
-
def field_value
|
27
|
-
return fetched_labels if @fetch_labels.present?
|
28
|
-
|
29
|
-
return json_value if acts_as_taggable_on.present?
|
30
|
-
|
31
|
-
value || []
|
32
|
-
end
|
33
|
-
|
34
|
-
def json_value
|
35
|
-
value.map do |item|
|
36
|
-
{
|
37
|
-
value: item.name
|
38
|
-
}
|
39
|
-
end.as_json
|
40
|
-
end
|
41
|
-
|
42
|
-
def fill_field(model, key, value, params)
|
43
|
-
if acts_as_taggable_on.present?
|
44
|
-
model.send(act_as_taggable_attribute(key), value)
|
45
|
-
else
|
46
|
-
val = if value.is_a?(String)
|
47
|
-
value.split(",")
|
48
|
-
elsif value.is_a?(Array)
|
49
|
-
value
|
50
|
-
else
|
51
|
-
value
|
52
|
-
end
|
53
|
-
model.send("#{key}=", val)
|
54
|
-
end
|
55
|
-
|
56
|
-
model
|
57
|
-
end
|
58
|
-
|
59
|
-
def suggestions
|
60
|
-
return @suggestions if @suggestions.is_a? Array
|
61
|
-
|
62
|
-
if @suggestions.respond_to? :call
|
63
|
-
return Avo::Hosts::RecordHost.new(block: @suggestions, record: model).handle
|
64
|
-
end
|
65
|
-
|
66
|
-
[]
|
67
|
-
end
|
68
|
-
|
69
|
-
def disallowed
|
70
|
-
return @disallowed if @disallowed.is_a? Array
|
71
|
-
|
72
|
-
if @disallowed.respond_to? :call
|
73
|
-
return Avo::Hosts::RecordHost.new(block: @disallowed, record: model).handle
|
74
|
-
end
|
75
|
-
|
76
|
-
[]
|
77
|
-
end
|
78
|
-
|
79
|
-
def fetch_values_from
|
80
|
-
if @fetch_values_from.respond_to?(:call)
|
81
|
-
Avo::Hosts::ResourceRecordHost.new(block: @fetch_values_from, resource: resource, record: model).handle
|
82
|
-
else
|
83
|
-
@fetch_values_from
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
private
|
88
|
-
|
89
|
-
def fetched_labels
|
90
|
-
if @fetch_labels.respond_to?(:call)
|
91
|
-
Avo::Hosts::ResourceRecordHost.new(block: @fetch_labels, resource: resource, record: model).handle
|
92
|
-
else
|
93
|
-
@fetch_labels
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def act_as_taggable_attribute(key)
|
98
|
-
"#{key.singularize}_list="
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
data/lib/avo/grid_collector.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
module Avo
|
2
|
-
class GridCollector
|
3
|
-
include Avo::Concerns::HasFields
|
4
|
-
|
5
|
-
attr_accessor :cover_field
|
6
|
-
attr_accessor :title_field
|
7
|
-
attr_accessor :body_field
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
@cover_field = nil
|
11
|
-
@title_field = nil
|
12
|
-
@body_field = nil
|
13
|
-
end
|
14
|
-
|
15
|
-
def cover(field_name, as:, **args, &block)
|
16
|
-
field_parser = Avo::Dsl::FieldParser.new(id: field_name, as: as, order_index: items_index, **args, &block).parse
|
17
|
-
self.cover_field = field_parser.instance if field_parser.valid?
|
18
|
-
end
|
19
|
-
|
20
|
-
def title(field_name, as:, **args, &block)
|
21
|
-
field_parser = Avo::Dsl::FieldParser.new(id: field_name, as: as, order_index: items_index, **args, &block).parse
|
22
|
-
self.title_field = field_parser.instance if field_parser.valid?
|
23
|
-
end
|
24
|
-
|
25
|
-
def body(field_name, as:, **args, &block)
|
26
|
-
field_parser = Avo::Dsl::FieldParser.new(id: field_name, as: as, order_index: items_index, **args, &block).parse
|
27
|
-
self.body_field = field_parser.instance if field_parser.valid?
|
28
|
-
end
|
29
|
-
|
30
|
-
def hydrate(model:, view:, resource:)
|
31
|
-
cover_field.hydrate(model: model, view: view, resource: resource) if cover_field.present?
|
32
|
-
title_field.hydrate(model: model, view: view, resource: resource) if title_field.present?
|
33
|
-
body_field.hydrate(model: model, view: view, resource: resource) if body_field.present?
|
34
|
-
|
35
|
-
self
|
36
|
-
end
|
37
|
-
|
38
|
-
def blank?
|
39
|
-
title_field.blank?
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|