avo 0.5.0.beta2 → 0.5.0.beta7

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.

Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -4
  3. data/Gemfile.lock +1 -5
  4. data/app/components/avo/index/grid_item_component.html.erb +8 -8
  5. data/app/components/avo/index/grid_item_component.rb +6 -12
  6. data/app/components/avo/index/resource_grid_component.html.erb +1 -1
  7. data/app/components/avo/index/resource_table_component.html.erb +2 -2
  8. data/app/components/avo/index/table_row_component.html.erb +1 -1
  9. data/app/controllers/avo/actions_controller.rb +2 -5
  10. data/app/controllers/avo/application_controller.rb +12 -4
  11. data/app/controllers/avo/base_controller.rb +1 -9
  12. data/app/controllers/avo/relations_controller.rb +1 -1
  13. data/app/controllers/avo/search_controller.rb +1 -1
  14. data/app/frontend/packs/application.js +1 -1
  15. data/app/views/avo/base/_actions.html.erb +0 -6
  16. data/app/views/avo/base/_boolean_filter.html.erb +1 -1
  17. data/app/views/avo/base/_filters.html.erb +3 -11
  18. data/app/views/avo/base/_select_filter.html.erb +1 -1
  19. data/app/views/avo/home/_resources.html.erb +0 -1
  20. data/app/views/avo/partials/_table_header.html.erb +1 -1
  21. data/app/views/layouts/avo/_filter_wrapper.html.erb +1 -1
  22. data/app/views/layouts/avo/application.html.erb +5 -0
  23. data/avo.gemspec +0 -1
  24. data/config/webpacker.yml +10 -23
  25. data/lib/avo.rb +5 -16
  26. data/lib/avo/app.rb +204 -0
  27. data/lib/avo/base_action.rb +123 -0
  28. data/lib/avo/base_resource.rb +326 -0
  29. data/lib/avo/configuration.rb +8 -0
  30. data/lib/avo/engine.rb +12 -31
  31. data/lib/avo/{app/fields → fields}/badge_field.rb +1 -1
  32. data/lib/avo/{app/fields/field.rb → fields/base_field.rb} +3 -7
  33. data/lib/avo/{app/fields/belongs_to.rb → fields/belongs_to_field.rb} +3 -3
  34. data/lib/avo/{app/fields → fields}/boolean_field.rb +1 -1
  35. data/lib/avo/{app/fields → fields}/boolean_group_field.rb +1 -1
  36. data/lib/avo/{app/fields → fields}/code_field.rb +1 -1
  37. data/lib/avo/{app/fields → fields}/country_field.rb +1 -1
  38. data/lib/avo/{app/fields → fields}/currency_field.rb +1 -1
  39. data/lib/avo/{app/fields → fields}/date_field.rb +0 -2
  40. data/lib/avo/{app/fields → fields}/date_time_field.rb +0 -2
  41. data/lib/avo/{app/fields → fields}/external_image_field.rb +1 -1
  42. data/lib/avo/{app/fields → fields}/field_extensions/has_field_name.rb +0 -0
  43. data/lib/avo/{app/fields → fields}/field_extensions/visible_in_different_views.rb +1 -1
  44. data/lib/avo/{app/fields → fields}/file_field.rb +1 -2
  45. data/lib/avo/{app/fields → fields}/files_field.rb +1 -2
  46. data/lib/avo/{app/fields → fields}/gravatar_field.rb +1 -1
  47. data/lib/avo/{app/fields/has_and_belongs_to_many.rb → fields/has_and_belongs_to_many_field.rb} +1 -1
  48. data/lib/avo/{app/fields/has_many.rb → fields/has_many_field.rb} +1 -1
  49. data/lib/avo/{app/fields/has_one.rb → fields/has_one_field.rb} +1 -1
  50. data/lib/avo/{app/fields → fields}/heading_field.rb +1 -1
  51. data/lib/avo/{app/fields → fields}/hidden_field.rb +0 -2
  52. data/lib/avo/{app/fields → fields}/id_field.rb +1 -1
  53. data/lib/avo/{app/fields → fields}/key_value_field.rb +1 -1
  54. data/lib/avo/{app/fields → fields}/markdown_field.rb +1 -3
  55. data/lib/avo/{app/fields → fields}/number_field.rb +0 -2
  56. data/lib/avo/{app/fields → fields}/password_field.rb +0 -2
  57. data/lib/avo/{app/fields → fields}/select_field.rb +1 -1
  58. data/lib/avo/{app/fields → fields}/status_field.rb +1 -1
  59. data/lib/avo/{app/fields → fields}/text_field.rb +1 -1
  60. data/lib/avo/{app/fields → fields}/textarea_field.rb +0 -2
  61. data/lib/avo/{app/fields → fields}/trix_field.rb +1 -3
  62. data/lib/avo/filters/base_filter.rb +20 -0
  63. data/lib/avo/filters/boolean_filter.rb +7 -0
  64. data/lib/avo/filters/select_filter.rb +7 -0
  65. data/lib/avo/{app/grid_fields → grid_fields}/body_field.rb +0 -2
  66. data/lib/avo/{app/grid_fields → grid_fields}/grid_field.rb +0 -0
  67. data/lib/avo/{app/grid_fields → grid_fields}/preview_field.rb +0 -2
  68. data/lib/avo/{app/grid_fields → grid_fields}/title_field.rb +0 -2
  69. data/lib/avo/licensing/community_license.rb +6 -0
  70. data/lib/avo/licensing/h_q.rb +88 -0
  71. data/lib/avo/licensing/license.rb +50 -0
  72. data/lib/avo/licensing/license_manager.rb +22 -0
  73. data/lib/avo/licensing/null_license.rb +14 -0
  74. data/lib/avo/licensing/pro_license.rb +11 -0
  75. data/lib/avo/loaders/actions_loader.rb +6 -0
  76. data/lib/avo/loaders/fields_loader.rb +27 -0
  77. data/lib/avo/loaders/filters_loader.rb +6 -0
  78. data/lib/avo/loaders/loader.rb +15 -0
  79. data/lib/avo/services/authorization_service.rb +93 -0
  80. data/lib/avo/services/panel_service.rb +27 -0
  81. data/lib/avo/{app/tools_manager.rb → tools_manager.rb} +0 -0
  82. data/lib/avo/version.rb +1 -1
  83. data/lib/generators/avo/action_generator.rb +11 -5
  84. data/lib/generators/avo/controller_generator.rb +14 -8
  85. data/lib/generators/avo/filter_generator.rb +14 -8
  86. data/lib/generators/avo/install_generator.rb +14 -10
  87. data/lib/generators/avo/locales_generator.rb +11 -7
  88. data/lib/generators/avo/partials_generator.rb +11 -5
  89. data/lib/generators/avo/resource_generator.rb +33 -15
  90. data/lib/generators/avo/templates/{action.rb → action.tt} +2 -4
  91. data/lib/generators/avo/templates/filters/boolean_filter.tt +11 -0
  92. data/lib/generators/avo/templates/filters/select_filter.tt +11 -0
  93. data/lib/generators/avo/templates/initializer/{avo.rb → avo.tt} +6 -0
  94. data/lib/generators/avo/templates/resource/controller.tt +2 -0
  95. data/lib/generators/avo/templates/resource/resource.tt +17 -0
  96. data/public/avo-packs/css/{application-3598cfbb.css → application-c75ac28c.css} +1 -1
  97. data/public/avo-packs/css/application-c75ac28c.css.br +0 -0
  98. data/public/avo-packs/css/{application-3598cfbb.css.gz → application-c75ac28c.css.gz} +0 -0
  99. data/public/avo-packs/js/{application-6ba2bd1bca05d69b96e0.js → application-8849c6e2c8f75d55c666.js} +3 -3
  100. data/public/avo-packs/js/{application-6ba2bd1bca05d69b96e0.js.LICENSE.txt → application-8849c6e2c8f75d55c666.js.LICENSE.txt} +0 -0
  101. data/public/avo-packs/js/application-8849c6e2c8f75d55c666.js.br +0 -0
  102. data/public/avo-packs/js/application-8849c6e2c8f75d55c666.js.gz +0 -0
  103. data/public/avo-packs/js/{application-6ba2bd1bca05d69b96e0.js.map → application-8849c6e2c8f75d55c666.js.map} +1 -1
  104. data/public/avo-packs/js/application-8849c6e2c8f75d55c666.js.map.br +0 -0
  105. data/public/avo-packs/js/{application-6ba2bd1bca05d69b96e0.js.map.gz → application-8849c6e2c8f75d55c666.js.map.gz} +0 -0
  106. data/public/avo-packs/manifest.json +6 -6
  107. data/public/avo-packs/manifest.json.br +0 -0
  108. data/public/avo-packs/manifest.json.gz +0 -0
  109. metadata +72 -87
  110. data/config/webpacker_packed.yml +0 -86
  111. data/lib/avo/app/action.rb +0 -145
  112. data/lib/avo/app/actions_loader.rb +0 -11
  113. data/lib/avo/app/app.rb +0 -181
  114. data/lib/avo/app/fields_loader.rb +0 -29
  115. data/lib/avo/app/filter.rb +0 -23
  116. data/lib/avo/app/filters/boolean_filter.rb +0 -13
  117. data/lib/avo/app/filters/select_filter.rb +0 -13
  118. data/lib/avo/app/licensing/community_license.rb +0 -4
  119. data/lib/avo/app/licensing/hq.rb +0 -86
  120. data/lib/avo/app/licensing/license.rb +0 -48
  121. data/lib/avo/app/licensing/license_manager.rb +0 -25
  122. data/lib/avo/app/licensing/null_license.rb +0 -12
  123. data/lib/avo/app/licensing/pro_license.rb +0 -9
  124. data/lib/avo/app/resource.rb +0 -291
  125. data/lib/avo/app/resource_grid_fields.rb +0 -30
  126. data/lib/avo/app/services/authorization_service.rb +0 -110
  127. data/lib/avo/app/services/panel_service.rb +0 -25
  128. data/lib/avo/app/tool.rb +0 -5
  129. data/lib/generators/avo/templates/filters/boolean_filter.rb +0 -17
  130. data/lib/generators/avo/templates/filters/select_filter.rb +0 -17
  131. data/lib/generators/avo/templates/resource/%plural_name%_controller.tt +0 -2
  132. data/lib/generators/avo/templates/resource/%singular_name%.tt +0 -20
  133. data/public/avo-packs/css/application-3598cfbb.css.br +0 -0
  134. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.br +0 -0
  135. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.gz +0 -0
  136. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.map.br +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 714d80a0c55444d87252f30e9233fe5db432136e9cd4ba0ad9851a57fd73b37e
4
- data.tar.gz: 184d84ab6338864f1b0479c344278544422cb3967acff3dd6063148a446211fc
3
+ metadata.gz: 48ae6c7207084645f7a7a14a462ebc7161f94801e100054d53f48722f758f9c2
4
+ data.tar.gz: dcc5caabc807328ddd1c52c640d446d88d84c58f786b693d59455f1e7d251744
5
5
  SHA512:
6
- metadata.gz: bc03e6bcd02b5f628e063f94188cf3293f747ee0f53bfcae46cf198bd1074c5da9304c94024e7a3fbcada4a6ee7342f0f20e9c9659dd57e2a6cd8d4d3bd686c2
7
- data.tar.gz: b7a1c8fdf844e0064eef6df2449b501a75e0ed4f06499c6f74187654f16b02f316690076c00f3bafe98641a651b05c722cabd1c81f080eac0ffab03302754ac3
6
+ metadata.gz: '038536c5cc11eeae399c9cbb59d366868bb3affe39592075c8852d65df49f1a362917a9e96861c804e807a6ed0e2cb39932e5bb82cb04d54b9830301a44b7056'
7
+ data.tar.gz: b9d16aa4a175c5a43a0ec24059e4715febc755cea5b28be601b0b9fb22f9414881ec170b6ad9e1dbe2e51a77d6b8d5cae7e620d8d1d7dc95c4c01c988f9f09ca
data/Gemfile CHANGED
@@ -78,7 +78,6 @@ group :development do
78
78
  # Release helper
79
79
  gem 'bump', require: false
80
80
  gem 'gem-release', require: false
81
- gem 'faker', require: false
82
81
 
83
82
  # gem 'rack-mini-profiler'
84
83
  # gem 'memory_profiler'
@@ -89,6 +88,10 @@ group :development do
89
88
  # gem 'pry-rails'
90
89
  end
91
90
 
91
+ group :development, :test do
92
+ gem 'faker', require: false
93
+ end
94
+
92
95
  group :test do
93
96
  gem 'rspec-rails', '~> 4.0.0'
94
97
  gem 'rails-controller-testing'
@@ -97,7 +100,6 @@ group :test do
97
100
  gem 'selenium-webdriver'
98
101
  # Easy installation and use of web drivers to run system tests with browsers
99
102
  gem 'webdrivers'
100
- gem 'faker'
101
103
  gem 'fuubar'
102
104
  gem 'simplecov', require: false
103
105
  gem 'simplecov-cobertura'
@@ -116,8 +118,6 @@ gem 'httparty'
116
118
 
117
119
  gem 'iso'
118
120
 
119
- gem 'i18n-js'
120
-
121
121
  gem 'hotwire-rails'
122
122
 
123
123
  gem 'active_link_to'
data/Gemfile.lock CHANGED
@@ -1,12 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- avo (0.5.0.beta2)
4
+ avo (0.5.0.beta7)
5
5
  active_link_to
6
6
  countries
7
7
  hotwire-rails
8
8
  httparty
9
- i18n-js
10
9
  image_processing
11
10
  inline_svg
12
11
  pagy
@@ -144,8 +143,6 @@ GEM
144
143
  multi_xml (>= 0.5.2)
145
144
  i18n (1.8.9)
146
145
  concurrent-ruby (~> 1.0)
147
- i18n-js (3.8.0)
148
- i18n (>= 0.6.6)
149
146
  i18n_data (0.10.0)
150
147
  image_processing (1.12.1)
151
148
  mini_magick (>= 4.9.5, < 5)
@@ -368,7 +365,6 @@ DEPENDENCIES
368
365
  gem-release
369
366
  hotwire-rails
370
367
  httparty
371
- i18n-js
372
368
  image_processing (~> 1.2)
373
369
  inline_svg
374
370
  iso
@@ -4,19 +4,19 @@
4
4
  <div class="relative w-full pb-3/4 rounded-t-xl overflow-hidden">
5
5
  <%== item_selector_input floating: true, size: :lg %>
6
6
 
7
- <% if preview.respond_to? :to_image %>
8
- <%= link_to_if preview.link_to_resource, image_tag(preview.to_image, class: 'absolute h-full w-full object-cover'), helpers.resource_path(@resource.model), class: 'absolute h-full w-full object-cover', title: title.value %>
9
- <% elsif preview.type == 'file_field' %>
10
- <% if preview.value.attached? && preview.value.representable? %>
11
- <%= link_to_if preview.link_to_resource, image_tag(preview.variant(resize_to_limit: [480, 480]), class: 'absolute h-full w-full object-cover'), helpers.resource_path(@resource.model), class: 'absolute h-full w-full object-cover', title: title.value %>
7
+ <% if cover.respond_to? :to_image %>
8
+ <%= link_to_if cover.link_to_resource, image_tag(cover.to_image, class: 'absolute h-full w-full object-cover'), helpers.resource_path(@resource.model), class: 'absolute h-full w-full object-cover', title: title.value %>
9
+ <% elsif cover.type == 'file_field' %>
10
+ <% if cover.value.attached? && cover.value.representable? %>
11
+ <%= link_to_if cover.link_to_resource, image_tag(cover.variant(resize_to_limit: [480, 480]), class: 'absolute h-full w-full object-cover'), helpers.resource_path(@resource.model), class: 'absolute h-full w-full object-cover', title: title.value %>
12
12
  <% else %>
13
13
  <div class="absolute bg-gray-100 w-full h-full">
14
14
  <%= helpers.svg 'avocado', class: 'relative transform -translate-x-1/2 -translate-y-1/2 h-20 text-gray-400 inset-auto top-1/2 left-1/2' %>
15
15
  </div>
16
16
  <% end %>
17
17
  <% else %>
18
- <% if preview.value.present? %>
19
- <%= link_to_if preview.link_to_resource, image_tag(preview.value, class: 'absolute h-full w-full object-cover'), helpers.resource_path(@resource.model), class: 'absolute h-full w-full object-cover', title: title.value %>
18
+ <% if cover.value.present? %>
19
+ <%= link_to_if cover.link_to_resource, image_tag(cover.value, class: 'absolute h-full w-full object-cover'), helpers.resource_path(@resource.model), class: 'absolute h-full w-full object-cover', title: title.value %>
20
20
  <% else %>
21
21
  <div class="absolute bg-gray-100 w-full h-full">
22
22
  <%= helpers.svg 'avocado', class: 'relative transform -translate-x-1/2 -translate-y-1/2 h-20 text-gray-400 inset-auto top-1/2 left-1/2' %>
@@ -27,7 +27,7 @@
27
27
  <div class="grid grid-cols-1 place-content-between p-4 h-full">
28
28
  <div class="mb-4">
29
29
  <div class="grid font-semibold leading-tight text-lg mb-2">
30
- <%= link_to_if preview.link_to_resource, title.value, helpers.resource_path(@resource.model) if title.present? %>
30
+ <%= link_to_if title.link_to_resource, title.value, helpers.resource_path(@resource.model) if title.present? %>
31
31
  </div>
32
32
  <div class="text-sm break-words">
33
33
  <%= body.value if body.present? %>
@@ -3,29 +3,23 @@
3
3
  class Avo::Index::GridItemComponent < ViewComponent::Base
4
4
  include Avo::ResourcesHelper
5
5
 
6
- def initialize(resource: resource, reflection: reflection, parent_model: nil)
6
+ def initialize(resource: nil, reflection: nil, parent_model: nil)
7
7
  @resource = resource
8
8
  @reflection = reflection
9
- @grid_fields = resource.get_fields(view_type: :grid)
9
+ @grid_fields = resource.get_grid_fields
10
10
  @parent_model = parent_model
11
11
  end
12
12
 
13
13
  private
14
- def preview
15
- @grid_fields.detect do |field|
16
- field.grid_position == :preview
17
- end
14
+ def cover
15
+ @grid_fields[:cover].first
18
16
  end
19
17
 
20
18
  def title
21
- @grid_fields.detect do |field|
22
- field.grid_position == :title
23
- end
19
+ @grid_fields[:title].first
24
20
  end
25
21
 
26
22
  def body
27
- @grid_fields.detect do |field|
28
- field.grid_position == :body
29
- end
23
+ @grid_fields[:body].first
30
24
  end
31
25
  end
@@ -1,7 +1,7 @@
1
1
  <% if @resources.present?%>
2
2
  <div class="w-full grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 2xl:grid-cols-6 gap-6">
3
3
  <% @resources.each_with_index do |resource, index| %>
4
- <% cache_if Avo::PACKED, [resource.model, resource.file_hash] do %>
4
+ <% cache_if Avo.configuration.cache_resources_on_index_view, resource.cache_hash(@parent_model) do %>
5
5
  <%= render(Avo::Index::GridItemComponent.new(resource: resource, reflection: @reflection, parent_model: @parent_model)) %>
6
6
  <% end %>
7
7
  <% end %>
@@ -1,10 +1,10 @@
1
1
  <div class="w-full">
2
2
  <% if @resources.present?%>
3
3
  <table class="w-full px-4 overflow-hidden">
4
- <%= render partial: 'avo/partials/table_header', locals: {fields: @resource.get_fields(view_type: :table, reflection: @reflection)} %>
4
+ <%= render partial: 'avo/partials/table_header', locals: {fields: @resource.get_fields(reflection: @reflection)} %>
5
5
  <tbody>
6
6
  <% @resources.each_with_index do |resource, index| %>
7
- <% cache_if Avo::PACKED, [resource.model, resource.file_hash] do %>
7
+ <% cache_if Avo.configuration.cache_resources_on_index_view, resource.cache_hash(@parent_model) do %>
8
8
  <%= render Avo::Index::TableRowComponent.new(resource: resource, reflection: @reflection, parent_model: @parent_model) %>
9
9
  <% end %>
10
10
  <% end %>
@@ -7,7 +7,7 @@
7
7
  <%== item_selector_input floating: false %>
8
8
  </div>
9
9
  </td>
10
- <% @resource.get_fields(view_type: :table, reflection: @reflection).each_with_index do |field, index| %>
10
+ <% @resource.get_fields(reflection: @reflection).each_with_index do |field, index| %>
11
11
  <%= index_field field, index, @resource %>
12
12
  <% end %>
13
13
  <td class="text-right whitespace-nowrap px-2">
@@ -27,17 +27,14 @@ module Avo
27
27
  end
28
28
 
29
29
  def set_action
30
- action_class = params[:action_id].gsub('avo_actions_', '').classify
31
- action_name = "Avo::Actions::#{action_class}"
30
+ action_class = params[:action_id].gsub('avo_actions_', '').classify.safe_constantize
32
31
 
33
32
  if params[:id].present?
34
33
  model = @resource.model_class.find params[:id]
35
34
  end
36
35
 
37
- @action = action_name.safe_constantize.new
38
- @action.configure
36
+ @action = action_class.new
39
37
  @action.hydrate(model: model, resource: resource, user: _current_user)
40
- @action.boot_fields request
41
38
  end
42
39
 
43
40
  def respond(response)
@@ -15,8 +15,7 @@ module Avo
15
15
  add_flash_types :info, :warning, :success, :error
16
16
 
17
17
  def init_app
18
- Avo::App.boot if Avo::IN_DEVELOPMENT
19
- Avo::App.init request
18
+ Avo::App.init request: request, context: context
20
19
 
21
20
  @license = Avo::App.license
22
21
  end
@@ -36,6 +35,10 @@ module Avo
36
35
  instance_eval(&Avo.configuration.current_user)
37
36
  end
38
37
 
38
+ def context
39
+ instance_eval(&Avo.configuration.context)
40
+ end
41
+
39
42
  def resources_path(model, keep_query_params: false, **args)
40
43
  return if model.nil?
41
44
 
@@ -152,7 +155,12 @@ module Avo
152
155
  # Gets the Avo resource for this request based on the request from the `resource_name` "param"
153
156
  # Ex: Avo::Resources::Project, Avo::Resources::Team, Avo::Resources::User
154
157
  def resource
155
- App.get_resource @resource_name.to_s.camelize.singularize
158
+
159
+ resource = App.get_resource @resource_name.to_s.camelize.singularize
160
+
161
+ return resource if resource.present?
162
+
163
+ App.get_resource_by_controller_name @resource_name
156
164
  end
157
165
 
158
166
  def related_resource
@@ -221,7 +229,7 @@ module Avo
221
229
  end
222
230
 
223
231
  def set_authorization
224
- @authorization = AuthorizationService.new _current_user
232
+ @authorization = Services::AuthorizationService.new _current_user
225
233
  end
226
234
 
227
235
  def set_container_classes
@@ -186,8 +186,6 @@ module Avo
186
186
  @filters = @resource.get_filters.map do |filter_class|
187
187
  filter = filter_class.new
188
188
 
189
- filter.configure
190
-
191
189
  filter
192
190
  end
193
191
  end
@@ -198,12 +196,7 @@ module Avo
198
196
  end
199
197
 
200
198
  @actions = @resource.get_actions.map do |action|
201
- action = action.new
202
-
203
- action.hydrate(model: model, resource: @resource)
204
- action.boot_fields request
205
-
206
- action
199
+ action.new.hydrate(model: model, resource: @resource)
207
200
  end
208
201
  end
209
202
 
@@ -216,7 +209,6 @@ module Avo
216
209
 
217
210
  @resource.get_filters.each do |filter_class|
218
211
  filter = filter_class.new
219
- filter.configure
220
212
 
221
213
  if filter.default.present?
222
214
  filter_defaults[filter_class.to_s] = filter.default
@@ -35,7 +35,7 @@ module Avo
35
35
  @options = query.all.map do |model|
36
36
  {
37
37
  value: model.id,
38
- label: model.send(@attachment_resource.title)
38
+ label: model.send(@attachment_resource.class.title)
39
39
  }
40
40
  end
41
41
  end
@@ -35,7 +35,7 @@ module Avo
35
35
  resources.map do |model|
36
36
  {
37
37
  id: model.id,
38
- search_label: model.send(avo_resource.title),
38
+ search_label: model.send(avo_resource.class.title),
39
39
  link: "/resources/#{model.class.to_s.singularize.underscore}/#{model.id}",
40
40
  }
41
41
  end
@@ -11,7 +11,7 @@ import tippy from 'tippy.js'
11
11
  // Toastr alerts
12
12
  import '../js/toastr'
13
13
 
14
- Mousetrap.bind('r r r', () => Turbo.visit(window.location.href))
14
+ Mousetrap.bind('r r r', () => Turbo.visit(window.location.href, { action: "replace" }))
15
15
 
16
16
  const application = Application.start()
17
17
 
@@ -14,12 +14,6 @@
14
14
  >
15
15
  <%
16
16
  @actions.each_with_index do |action, index|
17
- case action.class.superclass.to_s
18
- when Avo::Filters::SelectFilter.to_s
19
- template = 'select_action'
20
- when Avo::Filters::BooleanFilter.to_s
21
- template = 'boolean_action'
22
- end
23
17
  path = action_name == 'show' ?
24
18
  "/avo/resources/#{@resource.model_class.model_name.route_key}/#{@model.id}/actions/#{action.param_id}" :
25
19
  "/avo/resources/#{@resource.model_class.model_name.route_key}/actions/#{action.param_id}"
@@ -12,7 +12,7 @@
12
12
  set_value = {} if set_value.nil?
13
13
  %>
14
14
  <div data-controller="boolean-filter">
15
- <%= filter_wrapper name: filter.name, index: index do %>
15
+ <%= filter_wrapper name: filter.name do %>
16
16
  <div class="flex items-center">
17
17
  <div class="space-y-2">
18
18
  <% filter.options.each do |value, label| %>
@@ -10,19 +10,11 @@
10
10
  <% end %>
11
11
 
12
12
  <div
13
- class="absolute block inset-auto right-0 top-full bg-white min-w-300px mt-2 z-20 shadow-context rounded-xl hidden"
13
+ class="absolute block inset-auto right-0 top-full bg-white min-w-300px mt-2 z-20 shadow-context rounded-xl hidden divide-y divide-gray-300"
14
14
  data-toggle-panel-target="panel"
15
15
  >
16
- <%
17
- @filters.each_with_index do |filter, index|
18
- case filter.class.superclass.to_s
19
- when Avo::Filters::SelectFilter.to_s
20
- template = 'avo/base/select_filter'
21
- when Avo::Filters::BooleanFilter.to_s
22
- template = 'avo/base/boolean_filter'
23
- end
24
- %>
25
- <%= render partial: template, locals: {filter: filter, index: index} %>
16
+ <% @filters.each do |filter| %>
17
+ <%= render partial: filter.class.template, locals: {filter: filter} %>
26
18
  <% end %>
27
19
 
28
20
  <div class="p-4 border-gray-300 border-t">
@@ -7,7 +7,7 @@
7
7
  end
8
8
  %>
9
9
  <div data-controller="select-filter">
10
- <%= filter_wrapper name: filter.name, index: index do %>
10
+ <%= filter_wrapper name: filter.name do %>
11
11
  <%= select_tag filter.id, options_for_select(filter.options.invert, set_value),
12
12
  class: input_classes('w-full mb-0'),
13
13
  include_blank: '—',
@@ -1,5 +1,4 @@
1
1
  <%
2
- Rails.application.eager_load!
3
2
  models = ApplicationRecord.descendants
4
3
  %>
5
4
  <div>
@@ -30,7 +30,7 @@
30
30
  end
31
31
  classes = "text-blue-gray-600 tracking-tight leading-tight text-xs font-semibold"
32
32
  %>
33
- <th class="text-left uppercase px-3 py-2 ">
33
+ <th class="text-left uppercase px-3 py-2 whitespace-nowrap">
34
34
  <% if field.sortable %>
35
35
  <%= link_to params.permit!.merge(sort_by: sort_by, sort_direction: sort_direction), class: "flex items-center #{classes} #{'cursor-pointer' if field.sortable}", 'data-turbo-frame': params[:turbo_frame] do %>
36
36
  <%= field.name %>
@@ -1,4 +1,4 @@
1
- <div class="border-gray-300 <%= 'border-t' if index != 0 %>">
1
+ <div>
2
2
  <div class="p-4 pb-0 text-sm font-bold text-gray-600">
3
3
  <%= name %>
4
4
  </div>
@@ -8,6 +8,11 @@
8
8
 
9
9
  <%= render partial: 'avo/partials/javascript' %>
10
10
 
11
+ <%# if Avo::PACKED %>
12
+ <%#= stylesheet_link_tag 'application', media: 'all', "data-turbo-track": "reload" %>
13
+ <%#= javascript_include_tag 'avo-packs/application', "data-turbo-track": "reload" %>
14
+ <%# else %>
15
+ <%# end %>
11
16
  <%= javascript_pack_tag 'application' %>
12
17
  <%= stylesheet_pack_tag 'application', media: 'all' %>
13
18
  </head>
data/avo.gemspec CHANGED
@@ -39,7 +39,6 @@ Gem::Specification.new do |spec|
39
39
  spec.add_dependency 'countries'
40
40
  spec.add_dependency 'pundit'
41
41
  spec.add_dependency 'httparty'
42
- spec.add_dependency 'i18n-js'
43
42
  spec.add_dependency 'active_link_to'
44
43
  spec.add_dependency 'image_processing'
45
44
  spec.add_dependency 'view_component'
data/config/webpacker.yml CHANGED
@@ -51,32 +51,19 @@ default: &default
51
51
  - .jpeg
52
52
  - .jpg
53
53
 
54
+ # We override the development env. when packed.
55
+ # Avo needs to be packed and compiled for when the dev uses it in his development env.
54
56
  development:
55
57
  <<: *default
56
- compile: true
57
58
 
58
- # Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
59
- check_yarn_integrity: true
60
-
61
- # Reference: https://webpack.js.org/configuration/dev-server/
62
- dev_server:
63
- https: false
64
- host: localhost
65
- port: 3039
66
- public: localhost:3039
67
- hmr: true
68
- # Inline should be set to true if using HMR
69
- inline: true
70
- overlay: true
71
- compress: true
72
- disable_host_check: true
73
- use_local_ip: false
74
- quiet: false
75
- headers:
76
- 'Access-Control-Allow-Origin': '*'
77
- watch_options:
78
- ignored: '**/node_modules/**'
79
- env_prefix: "AVO_WEBPACKER_DEV_SERVER"
59
+ # Production depends on precompilation of packs prior to booting for performance.
60
+ compile: false
61
+
62
+ # Extract and emit a css file
63
+ extract_css: true
64
+
65
+ # Cache manifest.json for performance
66
+ cache_manifest: true
80
67
 
81
68
  test:
82
69
  <<: *default