avo 3.0.0.beta1 → 3.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of avo might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +5 -5
- data/Gemfile.lock +81 -92
- data/{public/avo-assets/avo.css → app/assets/builds/avo.base.css} +686 -728
- 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 -1
- data/app/assets/svgs/failed_to_load.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 -1
- data/app/components/avo/actions_component.html.erb +1 -1
- data/app/components/avo/actions_component.rb +16 -42
- data/app/components/avo/alert_component.html.erb +1 -1
- data/app/components/avo/base_component.rb +7 -7
- data/app/components/avo/field_wrapper_component.html.erb +4 -4
- data/app/components/avo/field_wrapper_component.rb +1 -1
- data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +5 -5
- data/app/components/avo/fields/belongs_to_field/edit_component.rb +4 -8
- data/app/components/avo/fields/boolean_field/edit_component.html.erb +0 -1
- data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +1 -1
- data/app/components/avo/fields/code_field/edit_component.html.erb +0 -1
- 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/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/show_component.html.erb +4 -5
- data/app/components/avo/fields/has_one_field/show_component.rb +2 -6
- data/app/components/avo/fields/index_component.rb +0 -1
- 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/progress_bar_field/edit_component.html.erb +0 -1
- data/app/components/avo/fields/select_field/edit_component.html.erb +1 -2
- 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/show_component.html.erb +1 -1
- data/app/components/avo/index/field_wrapper_component.html.erb +1 -1
- data/app/components/avo/index/field_wrapper_component.rb +12 -0
- data/app/components/avo/index/grid_item_component.html.erb +35 -9
- data/app/components/avo/index/grid_item_component.rb +10 -36
- data/app/components/avo/index/resource_controls_component.rb +11 -8
- data/app/components/avo/index/resource_table_component.rb +1 -1
- data/app/components/avo/item_switcher_component.html.erb +5 -10
- data/app/components/avo/item_switcher_component.rb +1 -2
- data/app/components/avo/modal_component.html.erb +1 -1
- data/app/components/avo/panel_component.html.erb +1 -6
- 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 +0 -2
- data/app/components/avo/resource_component.rb +6 -69
- data/app/components/avo/resource_sidebar_component.rb +1 -1
- 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 +3 -3
- data/app/components/avo/sidebar_component.rb +4 -4
- data/app/components/avo/sidebar_profile_component.html.erb +27 -27
- data/app/components/avo/views/resource_edit_component.html.erb +5 -5
- data/app/components/avo/views/resource_edit_component.rb +1 -1
- data/app/components/avo/views/resource_index_component.html.erb +10 -19
- data/app/components/avo/views/resource_index_component.rb +16 -22
- data/app/components/avo/views/resource_show_component.html.erb +4 -4
- data/app/controllers/avo/actions_controller.rb +20 -20
- data/app/controllers/avo/application_controller.rb +67 -90
- data/app/controllers/avo/associations_controller.rb +7 -5
- data/app/controllers/avo/attachments_controller.rb +7 -22
- data/app/controllers/avo/base_controller.rb +35 -47
- data/app/controllers/avo/home_controller.rb +1 -1
- data/app/controllers/avo/search_controller.rb +16 -20
- data/app/controllers/concerns/avo/initializes_avo.rb +8 -3
- data/app/helpers/avo/application_helper.rb +6 -13
- data/app/javascript/js/application.js +0 -2
- data/app/javascript/js/controllers/fields/{easy_mde_controller.js → simple_mde_controller.js} +3 -4
- data/app/javascript/js/controllers/search_controller.js +1 -3
- data/app/javascript/js/controllers.js +2 -2
- data/app/views/avo/actions/show.html.erb +3 -5
- data/app/views/avo/associations/new.html.erb +3 -3
- data/app/views/avo/debug/status.html.erb +5 -6
- 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/_footer.html.erb +1 -1
- data/app/views/avo/partials/_javascript.html.erb +1 -1
- data/app/views/avo/partials/_navbar.html.erb +1 -1
- data/app/views/avo/partials/_table_header.html.erb +8 -0
- 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 -2
- data/avo.gemspec +1 -2
- data/config/initializers/pagy.rb +10 -12
- data/config/routes.rb +5 -5
- data/db/factories.rb +0 -17
- data/lib/avo/app.rb +165 -0
- data/lib/avo/base_action.rb +18 -31
- data/lib/avo/base_resource.rb +213 -238
- data/lib/avo/concerns/breadcrumbs.rb +2 -2
- data/lib/avo/concerns/can_replace_items.rb +7 -3
- data/lib/avo/concerns/filters_session_handler.rb +4 -5
- data/lib/avo/concerns/has_item_type.rb +0 -4
- data/lib/avo/concerns/has_items.rb +115 -93
- data/lib/avo/concerns/is_visible.rb +1 -1
- data/lib/avo/concerns/model_class_constantized.rb +2 -0
- data/lib/avo/configuration.rb +8 -9
- data/lib/avo/current.rb +1 -35
- data/lib/avo/dsl/field_parser.rb +1 -1
- data/lib/avo/dynamic_router.rb +2 -13
- data/lib/avo/engine.rb +13 -11
- data/lib/avo/execution_context.rb +2 -4
- data/lib/avo/fields/base_field.rb +14 -51
- data/lib/avo/fields/belongs_to_field.rb +13 -20
- data/lib/avo/fields/concerns/is_searchable.rb +1 -1
- data/lib/avo/fields/concerns/use_resource.rb +1 -1
- data/lib/avo/fields/date_field.rb +3 -16
- data/lib/avo/fields/field_manager.rb +3 -13
- data/lib/avo/fields/file_field.rb +0 -2
- data/lib/avo/fields/files_field.rb +0 -6
- data/lib/avo/fields/has_base_field.rb +5 -5
- data/lib/avo/fields/has_one_field.rb +1 -2
- data/lib/avo/fields/id_field.rb +1 -2
- data/lib/avo/filters/base_filter.rb +0 -9
- data/lib/avo/grid_collector.rb +40 -0
- data/lib/avo/html/builder.rb +1 -3
- data/lib/avo/licensing/h_q.rb +6 -11
- data/lib/avo/licensing/license.rb +1 -1
- data/lib/avo/licensing/license_manager.rb +1 -1
- data/lib/avo/licensing/{nil_license.rb → null_license.rb} +1 -1
- data/lib/avo/loaders/fields_loader.rb +1 -7
- data/lib/avo/plugin.rb +0 -10
- data/lib/avo/plugin_manager.rb +4 -2
- data/lib/avo/reloader.rb +1 -1
- data/lib/avo/resources/controls/actions_list.rb +1 -2
- data/lib/avo/resources/controls/create_button.rb +1 -1
- data/lib/avo/resources/controls/delete_button.rb +1 -1
- data/lib/avo/resources/controls/detach_button.rb +1 -1
- data/lib/avo/resources/controls/edit_button.rb +1 -1
- data/lib/avo/resources/controls/show_button.rb +1 -1
- data/lib/avo/resources/items/holder.rb +5 -13
- data/lib/avo/resources/items/item_group.rb +0 -1
- data/lib/avo/resources/resource_manager.rb +18 -11
- data/lib/avo/services/debug_service.rb +5 -6
- data/lib/avo/services/telemetry_service.rb +2 -3
- data/lib/avo/version.rb +1 -1
- data/lib/avo.rb +25 -109
- data/lib/generators/avo/action_generator.rb +8 -8
- data/lib/generators/avo/card/chartkick_generator.rb +18 -0
- data/lib/generators/avo/card/metric_generator.rb +18 -0
- data/lib/generators/avo/card/partial_generator.rb +19 -0
- data/lib/generators/avo/eject_generator.rb +0 -1
- data/lib/generators/avo/filter_generator.rb +8 -8
- data/lib/generators/avo/install_generator.rb +1 -11
- data/lib/generators/avo/resource_generator.rb +4 -22
- data/lib/generators/avo/tailwindcss/install_generator.rb +1 -4
- data/lib/generators/avo/templates/action.tt +5 -7
- 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 +3 -5
- data/lib/generators/avo/templates/initializer/avo.tt +2 -4
- data/lib/generators/avo/templates/resource/resource.tt +6 -6
- data/lib/generators/avo/templates/scope.tt +1 -1
- data/lib/generators/avo/templates/standalone_action.tt +8 -0
- data/lib/generators/avo/templates/tailwindcss/Procfile.dev +1 -1
- data/lib/tasks/avo_tasks.rake +0 -5
- metadata +19 -56
- data/app/assets/svgs/map-empty-state.svg +0 -35
- data/app/assets/svgs/map-view-type.svg +0 -3
- 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/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_component.html.erb +0 -27
- data/app/components/avo/fields/common/files/view_type/grid_component.rb +0 -51
- data/app/components/avo/fields/common/files/view_type/list_component.html.erb +0 -22
- data/app/components/avo/fields/common/files/view_type/list_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/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/views/avo/attachments/destroy.turbo_stream.erb +0 -7
- data/app/views/avo/partials/_profile_menu_extra.html.erb +0 -2
- data/lib/avo/concerns/has_description.rb +0 -23
- data/lib/avo/fields/area_field.rb +0 -39
- data/lib/avo/fields/concerns/file_authorization.rb +0 -31
- data/lib/avo/fields/location_field.rb +0 -86
- data/lib/avo/resources/items/row.rb +0 -54
- data/lib/generators/avo/card_generator.rb +0 -27
- data/public/avo-assets/avo.base.css +0 -10542
- data/public/avo-assets/avo.base.js +0 -949
- data/public/avo-assets/avo.base.js.map +0 -7
- data/public/avo-assets/avo.js +0 -513
- data/public/avo-assets/avo.js.map +0 -7
@@ -1,3 +1,4 @@
|
|
1
|
+
|
1
2
|
module Avo
|
2
3
|
module Concerns
|
3
4
|
module FiltersSessionHandler
|
@@ -33,11 +34,9 @@ module Avo
|
|
33
34
|
end
|
34
35
|
|
35
36
|
def cache_resource_filters?
|
36
|
-
Avo
|
37
|
-
|
38
|
-
|
39
|
-
resource: @resource
|
40
|
-
).handle
|
37
|
+
return Avo.configuration.cache_resource_filters unless Avo.configuration.cache_resource_filters.is_a?(Proc)
|
38
|
+
|
39
|
+
Avo.configuration.cache_resource_filters.call(current_user: current_user, resource: @resource)
|
41
40
|
end
|
42
41
|
end
|
43
42
|
end
|
@@ -3,117 +3,154 @@ module Avo
|
|
3
3
|
module HasItems
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
raise DeprecatedAPIError.new message
|
10
|
-
end
|
6
|
+
included do
|
7
|
+
class_attribute :items_holder
|
8
|
+
end
|
11
9
|
|
10
|
+
class_methods do
|
12
11
|
# DSL methods
|
13
12
|
def field(name, as: :text, **args, &block)
|
14
|
-
|
13
|
+
ensure_items_holder_initialized
|
14
|
+
|
15
|
+
items_holder.field name, as: as, **args, &block
|
15
16
|
end
|
16
17
|
|
17
18
|
def panel(name = nil, **args, &block)
|
18
|
-
|
19
|
-
end
|
19
|
+
ensure_items_holder_initialized
|
20
20
|
|
21
|
-
|
22
|
-
deprecated_dsl_api __method__, "fields"
|
21
|
+
items_holder.panel name, **args, &block
|
23
22
|
end
|
24
23
|
|
25
24
|
def tabs(**args, &block)
|
26
|
-
|
25
|
+
ensure_items_holder_initialized
|
26
|
+
|
27
|
+
items_holder.tabs Avo::Resources::Items::TabGroup::Builder.parse_block(**args, &block)
|
27
28
|
end
|
28
29
|
|
29
30
|
def tool(klass, **args)
|
30
|
-
|
31
|
+
ensure_items_holder_initialized
|
32
|
+
|
33
|
+
items_holder.tool klass, **args
|
31
34
|
end
|
32
35
|
|
33
36
|
def heading(body, **args)
|
34
|
-
|
37
|
+
ensure_items_holder_initialized
|
38
|
+
|
39
|
+
items_holder.heading body, **args
|
35
40
|
end
|
36
41
|
|
37
42
|
def sidebar(**args, &block)
|
38
|
-
|
43
|
+
ensure_items_holder_initialized
|
44
|
+
|
45
|
+
items_holder.sidebar Avo::Resources::Items::Sidebar::Builder.parse_block(**args, &block)
|
39
46
|
end
|
40
47
|
# END DSL methods
|
41
|
-
end
|
42
|
-
|
43
|
-
attr_writer :items_holder
|
44
48
|
|
45
|
-
|
49
|
+
def items
|
50
|
+
if items_holder.present?
|
51
|
+
items_holder.items
|
52
|
+
else
|
53
|
+
[]
|
54
|
+
end
|
55
|
+
end
|
46
56
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
delegate :tabs, to: :items_holder
|
51
|
-
delegate :tool, to: :items_holder
|
52
|
-
delegate :heading, to: :items_holder
|
53
|
-
delegate :sidebar, to: :items_holder
|
57
|
+
# Dives deep into panels and tabs to fetch all the fields for a resource.
|
58
|
+
def fields(only_root: false)
|
59
|
+
fields = []
|
54
60
|
|
55
|
-
|
56
|
-
|
57
|
-
end
|
61
|
+
items.each do |item|
|
62
|
+
next if item.nil?
|
58
63
|
|
59
|
-
|
60
|
-
|
61
|
-
|
64
|
+
unless only_root
|
65
|
+
# Dive into panels to fetch their fields
|
66
|
+
if item.is_panel?
|
67
|
+
fields << extract_fields_from_items(item)
|
68
|
+
end
|
62
69
|
|
63
|
-
|
64
|
-
|
65
|
-
|
70
|
+
# Dive into tabs to fetch their fields
|
71
|
+
if item.is_tab_group?
|
72
|
+
item.items.map do |tab|
|
73
|
+
fields << extract_fields_from_items(tab)
|
74
|
+
end
|
75
|
+
end
|
66
76
|
|
67
|
-
|
68
|
-
|
69
|
-
|
77
|
+
# Dive into sidebar to fetch their fields
|
78
|
+
if item.is_sidebar?
|
79
|
+
fields << extract_fields_from_items(item)
|
80
|
+
end
|
81
|
+
end
|
70
82
|
|
71
|
-
|
72
|
-
|
73
|
-
|
83
|
+
if item.is_field?
|
84
|
+
fields << item
|
85
|
+
end
|
86
|
+
end
|
74
87
|
|
75
|
-
|
76
|
-
|
77
|
-
fields = []
|
88
|
+
fields.flatten
|
89
|
+
end
|
78
90
|
|
79
|
-
|
80
|
-
|
91
|
+
def tab_groups
|
92
|
+
items.select do |item|
|
93
|
+
item.is_tab_group?
|
94
|
+
end
|
95
|
+
end
|
81
96
|
|
82
|
-
|
83
|
-
# Dive into panels to fetch their fields
|
84
|
-
if item.is_panel?
|
85
|
-
fields << extract_fields_from_items(item)
|
86
|
-
end
|
97
|
+
private
|
87
98
|
|
88
|
-
|
89
|
-
|
90
|
-
item.items.map do |tab|
|
91
|
-
fields << extract_fields_from_items(tab)
|
92
|
-
end
|
93
|
-
end
|
99
|
+
def extract_fields_from_items(thing)
|
100
|
+
fields = []
|
94
101
|
|
95
|
-
|
96
|
-
if item.
|
102
|
+
thing.items.each do |item|
|
103
|
+
if item.is_field?
|
104
|
+
fields << item
|
105
|
+
elsif item.is_panel?
|
97
106
|
fields << extract_fields_from_items(item)
|
98
107
|
end
|
99
108
|
end
|
100
109
|
|
101
|
-
|
102
|
-
|
103
|
-
end
|
110
|
+
fields
|
111
|
+
end
|
104
112
|
|
105
|
-
|
106
|
-
|
107
|
-
end
|
113
|
+
def ensure_items_holder_initialized
|
114
|
+
self.items_holder ||= Avo::Resources::Items::Holder.new
|
108
115
|
end
|
116
|
+
end
|
117
|
+
|
118
|
+
attr_accessor :items_holder
|
109
119
|
|
110
|
-
|
120
|
+
delegate :invalid_fields, to: :items_holder
|
121
|
+
delegate :items, to: :items_holder
|
122
|
+
|
123
|
+
def hydrate_fields
|
124
|
+
fields.map do |field|
|
125
|
+
field.hydrate(record: @record, view: @view, resource: self)
|
126
|
+
end
|
127
|
+
self
|
128
|
+
end
|
129
|
+
|
130
|
+
def fields(**args)
|
131
|
+
self.class.fields(**args)
|
132
|
+
end
|
133
|
+
|
134
|
+
def tab_groups
|
135
|
+
self.class.tab_groups
|
111
136
|
end
|
112
137
|
|
113
138
|
def get_field_definitions(only_root: false)
|
114
|
-
|
139
|
+
fields = self.fields(only_root: only_root)
|
140
|
+
|
141
|
+
return [] if fields.blank?
|
142
|
+
|
143
|
+
items = fields.map do |field|
|
115
144
|
field.hydrate(resource: self, user: user, view: view)
|
116
145
|
end
|
146
|
+
|
147
|
+
if Avo::App.license.lacks_with_trial(:advanced_fields)
|
148
|
+
items = items.reject do |field|
|
149
|
+
field.type == "tags"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
items
|
117
154
|
end
|
118
155
|
|
119
156
|
def get_preview_fields
|
@@ -166,10 +203,7 @@ module Avo
|
|
166
203
|
end
|
167
204
|
end
|
168
205
|
|
169
|
-
|
170
|
-
fields.each do |field|
|
171
|
-
field.hydrate(record: @record, view: @view, resource: self)
|
172
|
-
end
|
206
|
+
hydrate_fields
|
173
207
|
|
174
208
|
fields
|
175
209
|
end
|
@@ -222,10 +256,8 @@ module Avo
|
|
222
256
|
panelfull_items.grep(Avo::Resources::Items::TabGroup).each do |tab_group|
|
223
257
|
tab_group.items.grep(Avo::Resources::Items::Tab).each do |tab|
|
224
258
|
tab.items.grep(Avo::Resources::Items::Panel).each do |panel|
|
225
|
-
|
226
|
-
|
227
|
-
panel.items.grep(Avo::Resources::Items::Row).each do |row|
|
228
|
-
set_target_to_top row.items.grep(Avo::Fields::BelongsToField)
|
259
|
+
panel.items.grep(Avo::Fields::BelongsToField).each do |field|
|
260
|
+
field.target = :_top
|
229
261
|
end
|
230
262
|
end
|
231
263
|
end
|
@@ -261,6 +293,9 @@ module Avo
|
|
261
293
|
|
262
294
|
item
|
263
295
|
end
|
296
|
+
.select do |item|
|
297
|
+
item.visible_in_view?(view: view)
|
298
|
+
end
|
264
299
|
.select do |item|
|
265
300
|
item.visible?
|
266
301
|
end
|
@@ -272,8 +307,7 @@ module Avo
|
|
272
307
|
end
|
273
308
|
end
|
274
309
|
.select do |item|
|
275
|
-
|
276
|
-
if !item.is_a?(Avo::Fields::LocationField) && !item.is_heading? && view.in?([:edit, :update, :new, :create])
|
310
|
+
if !item.is_heading? && view.in?([:edit, :update, :new, :create])
|
277
311
|
if item.respond_to?(:id)
|
278
312
|
item.resource.record.respond_to?("#{item.id}=")
|
279
313
|
else
|
@@ -299,26 +333,14 @@ module Avo
|
|
299
333
|
visible_items.blank?
|
300
334
|
end
|
301
335
|
|
302
|
-
|
336
|
+
def hydrate(**args)
|
337
|
+
super(**args)
|
303
338
|
|
304
|
-
|
305
|
-
|
306
|
-
field.target = :_top
|
339
|
+
items_holder.items.each do |item|
|
340
|
+
item.hydrate(**args)
|
307
341
|
end
|
308
|
-
end
|
309
|
-
|
310
|
-
def extract_fields_from_items(thing)
|
311
|
-
fields = []
|
312
342
|
|
313
|
-
|
314
|
-
if item.is_field?
|
315
|
-
fields << item
|
316
|
-
elsif item.is_panel? || item.is_row?
|
317
|
-
fields << extract_fields_from_items(item)
|
318
|
-
end
|
319
|
-
end
|
320
|
-
|
321
|
-
fields
|
343
|
+
self
|
322
344
|
end
|
323
345
|
end
|
324
346
|
end
|
data/lib/avo/configuration.rb
CHANGED
@@ -2,9 +2,8 @@ module Avo
|
|
2
2
|
class Configuration
|
3
3
|
include ResourceConfiguration
|
4
4
|
|
5
|
-
attr_writer :app_name
|
6
|
-
attr_writer :branding
|
7
5
|
attr_writer :root_path
|
6
|
+
attr_accessor :app_name
|
8
7
|
attr_accessor :timezone
|
9
8
|
attr_accessor :per_page
|
10
9
|
attr_accessor :per_page_steps
|
@@ -42,7 +41,7 @@ module Avo
|
|
42
41
|
attr_accessor :field_wrapper_layout
|
43
42
|
attr_accessor :sign_out_path_name
|
44
43
|
attr_accessor :resources
|
45
|
-
|
44
|
+
attr_writer :branding
|
46
45
|
|
47
46
|
def initialize
|
48
47
|
@root_path = "/avo"
|
@@ -116,8 +115,8 @@ module Avo
|
|
116
115
|
end
|
117
116
|
|
118
117
|
def namespace
|
119
|
-
if
|
120
|
-
|
118
|
+
if computed_root_path.present?
|
119
|
+
computed_root_path.delete "/"
|
121
120
|
else
|
122
121
|
root_path.delete "/"
|
123
122
|
end
|
@@ -129,6 +128,10 @@ module Avo
|
|
129
128
|
@root_path
|
130
129
|
end
|
131
130
|
|
131
|
+
def computed_root_path
|
132
|
+
Avo.configuration.root_path
|
133
|
+
end
|
134
|
+
|
132
135
|
def feature_enabled?(feature)
|
133
136
|
!@disabled_features.map(&:to_sym).include?(feature.to_sym)
|
134
137
|
end
|
@@ -136,10 +139,6 @@ module Avo
|
|
136
139
|
def branding
|
137
140
|
Avo::Configuration::Branding.new(**@branding || {})
|
138
141
|
end
|
139
|
-
|
140
|
-
def app_name
|
141
|
-
Avo::ExecutionContext.new(target: @app_name).handle
|
142
|
-
end
|
143
142
|
end
|
144
143
|
|
145
144
|
def self.configuration
|
data/lib/avo/current.rb
CHANGED
@@ -1,39 +1,5 @@
|
|
1
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
2
|
attribute :app
|
21
3
|
attribute :license
|
22
|
-
attribute :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
|
4
|
+
attribute :params, :request, :context, :current_user, :view_context
|
39
5
|
end
|
data/lib/avo/dsl/field_parser.rb
CHANGED
data/lib/avo/dynamic_router.rb
CHANGED
@@ -1,23 +1,12 @@
|
|
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
|
-
|
14
3
|
def self.routes
|
15
4
|
Avo::Engine.routes.draw do
|
16
5
|
scope "resources", as: "resources" do
|
17
6
|
# Check if the user chose to manually register the resource files.
|
18
7
|
# If so, eager_load the resources dir.
|
19
8
|
if Avo.configuration.resources.nil?
|
20
|
-
Avo::
|
9
|
+
Avo::App.eager_load(:resources) unless Rails.application.config.eager_load
|
21
10
|
end
|
22
11
|
|
23
12
|
Avo::Resources::ResourceManager.fetch_resources
|
@@ -28,7 +17,7 @@ module Avo
|
|
28
17
|
resource.is_a? Class
|
29
18
|
end
|
30
19
|
.map do |resource|
|
31
|
-
resources resource.route_key do
|
20
|
+
resources resource.new.route_key do
|
32
21
|
member do
|
33
22
|
get :preview
|
34
23
|
end
|
data/lib/avo/engine.rb
CHANGED
@@ -3,19 +3,20 @@ 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"
|
8
6
|
when "actionview"
|
9
7
|
require "action_view/railtie"
|
10
8
|
when "activestorage"
|
11
9
|
require "active_storage/engine"
|
12
|
-
when "actiontext"
|
13
|
-
require "action_text/engine"
|
14
10
|
else
|
15
11
|
require d.name
|
16
12
|
end
|
17
13
|
end
|
18
14
|
|
15
|
+
# In development we should load the engine so we get the autoload for components
|
16
|
+
if ENV["RAILS_ENV"] === "development"
|
17
|
+
require "view_component/engine"
|
18
|
+
end
|
19
|
+
|
19
20
|
module Avo
|
20
21
|
class Engine < ::Rails::Engine
|
21
22
|
isolate_namespace Avo
|
@@ -25,7 +26,8 @@ module Avo
|
|
25
26
|
::Avo.asset_manager.reset
|
26
27
|
|
27
28
|
# Boot Avo
|
28
|
-
::Avo.boot
|
29
|
+
::Avo::App.boot
|
30
|
+
::Avo.plugin_manager.boot_plugins
|
29
31
|
|
30
32
|
# After deploy we want to make sure the license response is being cleared.
|
31
33
|
# We need a fresh license response.
|
@@ -42,7 +44,7 @@ module Avo
|
|
42
44
|
# Ensure we reboot the app when something changes
|
43
45
|
config.to_prepare do
|
44
46
|
# Boot Avo
|
45
|
-
::Avo.boot
|
47
|
+
::Avo::App.boot
|
46
48
|
end
|
47
49
|
|
48
50
|
initializer "avo.autoload" do |app|
|
@@ -57,6 +59,10 @@ module Avo
|
|
57
59
|
end
|
58
60
|
end
|
59
61
|
|
62
|
+
initializer "avo.init_fields" do |app|
|
63
|
+
::Avo::App.init_fields
|
64
|
+
end
|
65
|
+
|
60
66
|
initializer "avo.reloader" do |app|
|
61
67
|
Avo::Reloader.new.tap do |reloader|
|
62
68
|
reloader.execute
|
@@ -67,7 +73,7 @@ module Avo
|
|
67
73
|
|
68
74
|
initializer "avo.test_buddy" do |app|
|
69
75
|
if Avo::IN_DEVELOPMENT
|
70
|
-
Rails.autoloaders.main.push_dir Avo::Engine.root.join("spec", "
|
76
|
+
Rails.autoloaders.main.push_dir Avo::Engine.root.join("spec", "helpers")
|
71
77
|
end
|
72
78
|
end
|
73
79
|
|
@@ -89,9 +95,5 @@ module Avo
|
|
89
95
|
Rails::Generators.configure! app.config.generators
|
90
96
|
require_relative "../generators/model_generator"
|
91
97
|
end
|
92
|
-
|
93
|
-
initializer "avo.locales" do |app|
|
94
|
-
I18n.load_path += Dir[Avo::Engine.root.join("lib", "generators", "avo", "templates", "locales", "*.{rb,yml}")]
|
95
|
-
end
|
96
98
|
end
|
97
99
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Avo
|
2
2
|
class ExecutionContext
|
3
|
-
attr_accessor :target, :context, :params, :view_context, :current_user, :request, :include
|
3
|
+
attr_accessor :target, :context, :params, :view_context, :current_user, :request, :include
|
4
4
|
|
5
5
|
def initialize(**args)
|
6
6
|
# Extend the class with custom modules if required.
|
@@ -20,12 +20,10 @@ module Avo
|
|
20
20
|
|
21
21
|
# Set defaults on not initialized accessors
|
22
22
|
@context ||= Avo::Current.context
|
23
|
-
@current_user ||= Avo::Current.
|
23
|
+
@current_user ||= Avo::Current.current_user
|
24
24
|
@params ||= Avo::Current.params
|
25
25
|
@request ||= Avo::Current.request
|
26
26
|
@view_context ||= Avo::Current.view_context
|
27
|
-
@main_app ||= @view_context.main_app
|
28
|
-
@avo ||= @view_context.avo
|
29
27
|
end
|
30
28
|
|
31
29
|
delegate :result, to: :card
|