avo 3.11.9 → 3.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +9 -9
  3. data/app/components/avo/fields/common/badge_viewer_component.rb +1 -1
  4. data/app/components/avo/filters_component.rb +1 -1
  5. data/app/components/avo/index/grid_item_component.rb +1 -1
  6. data/app/components/avo/index/resource_controls_component.rb +1 -1
  7. data/app/components/avo/index/resource_grid_component.rb +1 -1
  8. data/app/components/avo/index/resource_table_component.rb +17 -1
  9. data/app/components/avo/index/table_row_component.rb +1 -1
  10. data/app/components/avo/items/panel_component.rb +1 -1
  11. data/app/components/avo/paginator_component.rb +4 -2
  12. data/app/components/avo/panel_component.rb +1 -1
  13. data/app/components/avo/panel_name_component.rb +1 -1
  14. data/app/components/avo/sidebar/base_item_component.rb +1 -0
  15. data/app/components/avo/sidebar/link_component.html.erb +1 -1
  16. data/app/components/avo/sidebar/link_component.rb +1 -0
  17. data/app/components/avo/sidebar_profile_component.rb +1 -1
  18. data/app/components/avo/views/resource_edit_component.rb +1 -1
  19. data/app/components/avo/views/resource_index_component.html.erb +2 -2
  20. data/app/components/avo/views/resource_index_component.rb +1 -1
  21. data/app/components/avo/views/resource_show_component.rb +1 -1
  22. data/lib/avo/concerns/model_class_constantized.rb +8 -3
  23. data/lib/avo/resources/base.rb +5 -1
  24. data/lib/avo/version.rb +1 -1
  25. data/lib/generators/avo/tailwindcss/install_generator.rb +1 -1
  26. data/lib/generators/avo/templates/tailwindcss/tailwind.config.js +1 -0
  27. data/public/avo-assets/avo.base.js +98 -98
  28. data/public/avo-assets/avo.base.js.map +4 -4
  29. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95ed3c490102f236611ef61554c7f9f52475a5af2dd772ca5c520a07b14cc039
4
- data.tar.gz: c019b70a43ef1176cebd6522619987f8b7a961a1b8cda4775f1d0304d0726f29
3
+ metadata.gz: 7ea6bacc70642569fc566cfe8077351f912d1732dc448aaae5c3c7e9f514c03b
4
+ data.tar.gz: 00311e5f04c3cc273f95b9ca28d349e5b1b04fcab26e1b55b3d7dbea4742b538
5
5
  SHA512:
6
- metadata.gz: ed49311c6bd0f97ba58ec73f13f9f1f523ab8fff7112d9fc4891b30b02f1f251324040061db06c2d476f4db3109b2d4ea392fd05e213a7754dadddfc170eef9e
7
- data.tar.gz: aeaf279a6dc17e01d4073ef7bbdec098996a95d2f057e88c3c68b168f8713c9d893a03efdfdbead547a323cc24dc0f51a7a2b282844ad360f2e7454b276f2ca7
6
+ metadata.gz: 8f33cbf80efdcc7c0b499bd6832b827e4d010550425e3de2d1a277039ad72182bef24a43f05bd893ffbdfd99e89cef878b03d35d61c9dbf2809d76f2c8567182
7
+ data.tar.gz: 6f4298165afa9a741778a1226d90b1f513bbf85b27ca604ab69d4cab96c36893823ca69b0b353d2215bbb10fede3782086e2187ee1a6bde3d89ce5c4d54aff91
data/Gemfile.lock CHANGED
@@ -7,7 +7,7 @@ GIT
7
7
 
8
8
  GIT
9
9
  remote: https://github.com/rails/rails.git
10
- revision: 984b10b6fca7572a6d60150a06f43095210a11f6
10
+ revision: c692e75d96f572f3fe518f06bec0dfd12b548429
11
11
  branch: main
12
12
  specs:
13
13
  actioncable (8.0.0.alpha)
@@ -105,7 +105,7 @@ GIT
105
105
  PATH
106
106
  remote: .
107
107
  specs:
108
- avo (3.11.9)
108
+ avo (3.12.0)
109
109
  actionview (>= 6.1)
110
110
  active_link_to
111
111
  activerecord (>= 6.1)
@@ -156,8 +156,8 @@ GEM
156
156
  money-rails (~> 1.12)
157
157
  avo-record_link_field (0.0.1)
158
158
  aws-eventstream (1.3.0)
159
- aws-partitions (1.967.0)
160
- aws-sdk-core (3.201.5)
159
+ aws-partitions (1.969.0)
160
+ aws-sdk-core (3.202.0)
161
161
  aws-eventstream (~> 1, >= 1.3.0)
162
162
  aws-partitions (~> 1, >= 1.651.0)
163
163
  aws-sigv4 (~> 1.9)
@@ -320,7 +320,7 @@ GEM
320
320
  activerecord (>= 4.0)
321
321
  hashids (~> 1.0)
322
322
  hashids (1.0.6)
323
- highline (3.1.0)
323
+ highline (3.1.1)
324
324
  reline
325
325
  hightop (0.4.0)
326
326
  activesupport (>= 6.1)
@@ -401,7 +401,7 @@ GEM
401
401
  money (~> 6.13)
402
402
  railties (>= 3.0)
403
403
  msgpack (1.7.2)
404
- net-imap (0.4.14)
404
+ net-imap (0.4.15)
405
405
  date
406
406
  net-protocol
407
407
  net-pop (0.1.2)
@@ -417,7 +417,7 @@ GEM
417
417
  nokogiri (1.16.7-x86_64-linux)
418
418
  racc (~> 1.4)
419
419
  orm_adapter (0.5.0)
420
- pagy (9.0.5)
420
+ pagy (9.0.6)
421
421
  parallel (1.26.3)
422
422
  parser (3.3.4.2)
423
423
  ast (~> 2.4.1)
@@ -604,7 +604,7 @@ GEM
604
604
  prettier_print (>= 1.2.0)
605
605
  terminal-table (3.0.2)
606
606
  unicode-display_width (>= 1.1.1, < 3)
607
- test-prof (1.4.0)
607
+ test-prof (1.4.1)
608
608
  thor (1.3.1)
609
609
  thread_safe (0.3.6)
610
610
  tilt (2.4.0)
@@ -621,7 +621,7 @@ GEM
621
621
  unaccent (0.4.0)
622
622
  unicode-display_width (2.5.0)
623
623
  useragent (0.16.10)
624
- view_component (3.13.0)
624
+ view_component (3.14.0)
625
625
  activesupport (>= 5.2.0, < 8.0)
626
626
  concurrent-ruby (~> 1.0)
627
627
  method_source (~> 1.0)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Avo::Fields::Common::BadgeViewerComponent < Avo::BaseComponent
4
- prop :value, String
4
+ prop :value, _Union(_String, _Symbol)
5
5
  prop :options, Hash
6
6
 
7
7
  def after_initialize
@@ -6,7 +6,7 @@ class Avo::FiltersComponent < Avo::BaseComponent
6
6
  prop :filters, _Array(Avo::Filters::BaseFilter), default: [].freeze
7
7
  prop :resource, _Nilable(Avo::BaseResource)
8
8
  prop :applied_filters, Hash, default: {}.freeze
9
- prop :parent_record, _Nilable(ActiveRecord::Base)
9
+ prop :parent_record, _Nilable(_Any)
10
10
 
11
11
  def render?
12
12
  @filters.present?
@@ -6,7 +6,7 @@ class Avo::Index::GridItemComponent < Avo::BaseComponent
6
6
 
7
7
  prop :resource, _Nilable(Avo::BaseResource)
8
8
  prop :reflection, _Nilable(ActiveRecord::Reflection::AbstractReflection)
9
- prop :parent_record, _Nilable(ActiveRecord::Base)
9
+ prop :parent_record, _Nilable(_Any)
10
10
  prop :parent_resource, _Nilable(Avo::BaseResource)
11
11
  prop :actions, _Nilable(_Array(Avo::BaseAction))
12
12
 
@@ -5,7 +5,7 @@ class Avo::Index::ResourceControlsComponent < Avo::ResourceComponent
5
5
 
6
6
  prop :resource, _Nilable(Avo::BaseResource)
7
7
  prop :reflection, _Nilable(ActiveRecord::Reflection::AbstractReflection)
8
- prop :parent_record, _Nilable(ActiveRecord::Base)
8
+ prop :parent_record, _Nilable(_Any)
9
9
  prop :parent_resource, _Nilable(Avo::BaseResource)
10
10
  prop :view_type, Symbol, default: :table
11
11
  prop :actions, _Nilable(_Array(Avo::BaseAction))
@@ -4,7 +4,7 @@ class Avo::Index::ResourceGridComponent < Avo::BaseComponent
4
4
  prop :resources, _Array(_Nilable(Avo::BaseResource))
5
5
  prop :resource, _Nilable(Avo::BaseResource)
6
6
  prop :reflection, _Nilable(ActiveRecord::Reflection::AbstractReflection)
7
- prop :parent_record, _Nilable(ActiveRecord::Base)
7
+ prop :parent_record, _Nilable(_Any)
8
8
  prop :parent_resource, _Nilable(Avo::BaseResource)
9
9
  prop :actions, _Nilable(_Array(Avo::BaseAction)), reader: :public
10
10
  end
@@ -11,7 +11,7 @@ class Avo::Index::ResourceTableComponent < Avo::BaseComponent
11
11
  prop :resources, _Nilable(_Array(Avo::BaseResource))
12
12
  prop :resource, _Nilable(Avo::BaseResource)
13
13
  prop :reflection, _Nilable(ActiveRecord::Reflection::AbstractReflection)
14
- prop :parent_record, _Nilable(ActiveRecord::Base)
14
+ prop :parent_record, _Nilable(_Any)
15
15
  prop :parent_resource, _Nilable(Avo::BaseResource)
16
16
  prop :pagy, _Nilable(Pagy)
17
17
  prop :query, _Nilable(ActiveRecord::Relation)
@@ -24,6 +24,8 @@ class Avo::Index::ResourceTableComponent < Avo::BaseComponent
24
24
  end
25
25
 
26
26
  Avo::Services::EncryptionService.encrypt(message: @query, purpose: :select_all, serializer: Marshal)
27
+ rescue
28
+ disable_select_all
27
29
  end
28
30
 
29
31
  def selected_page_label
@@ -86,4 +88,18 @@ class Avo::Index::ResourceTableComponent < Avo::BaseComponent
86
88
 
87
89
  [header_fields, table_row_components]
88
90
  end
91
+
92
+ private
93
+
94
+ def disable_select_all
95
+ if Rails.env.development?
96
+ Avo.error_manager.add({
97
+ url: "https://docs.avohq.io/3.0/select-all.html#serialization-known-issues",
98
+ target: "_blank",
99
+ message: "An error occurred while serializing the query object. The Select All feature has been disabled because it depends on successful query serialization. For more details and troubleshooting steps, click here."
100
+ })
101
+ end
102
+
103
+ :select_all_disabled
104
+ end
89
105
  end
@@ -7,7 +7,7 @@ class Avo::Index::TableRowComponent < Avo::BaseComponent
7
7
 
8
8
  prop :resource, _Nilable(Avo::BaseResource)
9
9
  prop :reflection, _Nilable(ActiveRecord::Reflection::AbstractReflection)
10
- prop :parent_record, _Nilable(ActiveRecord::Base)
10
+ prop :parent_record, _Nilable(_Any)
11
11
  prop :parent_resource, _Nilable(Avo::BaseResource)
12
12
  prop :actions, _Nilable(_Array(Avo::BaseAction))
13
13
  prop :fields, _Nilable(_Array(Avo::Fields::BaseField))
@@ -11,7 +11,7 @@ class Avo::Items::PanelComponent < Avo::ResourceComponent
11
11
  prop :actions, _Nilable(_Array(Avo::BaseAction)), reader: :public
12
12
  prop :index, _Nilable(Integer), reader: :public
13
13
  prop :parent_component, _Nilable(ViewComponent::Base)
14
- prop :parent_record, _Nilable(ActiveRecord::Base)
14
+ prop :parent_record, _Nilable(_Any)
15
15
  prop :parent_resource, _Nilable(Avo::BaseResource)
16
16
  prop :reflection, _Nilable(ActiveRecord::Reflection::AbstractReflection)
17
17
 
@@ -2,9 +2,11 @@
2
2
 
3
3
  class Avo::PaginatorComponent < Avo::BaseComponent
4
4
  prop :resource, _Nilable(Avo::BaseResource)
5
- prop :parent_record, _Nilable(ActiveRecord::Base)
5
+ prop :parent_record, _Nilable(_Any)
6
6
  prop :pagy, _Nilable(Pagy)
7
- prop :turbo_frame, _Nilable(String)
7
+ prop :turbo_frame, _Nilable(_Union(String, Symbol)) do |frame|
8
+ frame.present? ? CGI.escapeHTML(frame) : :_top
9
+ end
8
10
  prop :index_params, _Nilable(Hash)
9
11
  prop :discreet_pagination, _Nilable(_Boolean)
10
12
 
@@ -24,7 +24,7 @@ class Avo::PanelComponent < Avo::BaseComponent
24
24
  prop :profile_photo, _Nilable(Avo::ProfilePhoto)
25
25
  prop :cover_photo, _Nilable(Avo::CoverPhoto)
26
26
  prop :args, Hash, :**, default: {}.freeze
27
- prop :name, _Nilable(String) do |value|
27
+ prop :name, _Nilable(_Union(_String, _Integer)) do |value|
28
28
  value || @args&.dig(:title)
29
29
  end
30
30
 
@@ -3,7 +3,7 @@
3
3
  class Avo::PanelNameComponent < Avo::BaseComponent
4
4
  renders_one :body
5
5
 
6
- prop :name, _Nilable(String)
6
+ prop :name, _Nilable(_Union(_String, _Integer))
7
7
  prop :url, _Nilable(String)
8
8
  prop :target, Symbol, default: :self do |value|
9
9
  value&.to_sym
@@ -5,6 +5,7 @@ class Avo::Sidebar::BaseItemComponent < Avo::BaseComponent
5
5
 
6
6
  # Object = Avo::Menu::BaseItem || ViewComponent::Base
7
7
  prop :item, _Nilable(Object), reader: :public
8
+ prop :locals, _Nilable(Hash), default: {}.freeze
8
9
 
9
10
  def after_initialize
10
11
  @items = @item.items.select(&:visible?)
@@ -1,5 +1,5 @@
1
1
  <% if @path.present? %>
2
- <%= send link_method, @path, class: classes, active: @active, target: @target, data: @data do %>
2
+ <%= send link_method, @path, class: classes, active: @active, target: @target, data: @data, **@args do %>
3
3
  <%= helpers.svg @icon, class: "h-4 text-gray-700" if @icon.present? %>
4
4
  <%= @label %>
5
5
  <% if @target == :_blank %>
@@ -11,6 +11,7 @@ class Avo::Sidebar::LinkComponent < Avo::BaseComponent
11
11
  end
12
12
  prop :data, Hash, default: {}.freeze
13
13
  prop :icon, _Nilable(String)
14
+ prop :args, Hash, :**, default: {}.freeze
14
15
 
15
16
  def is_external?
16
17
  # If the path contains the scheme, check if it includes the root path or not
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Avo::SidebarProfileComponent < Avo::BaseComponent
4
- prop :user, _Nilable(ActiveRecord::Base)
4
+ prop :user, _Nilable(_Any)
5
5
 
6
6
  def avatar
7
7
  if @user.respond_to?(:avatar) && @user.avatar.present?
@@ -4,7 +4,7 @@ class Avo::Views::ResourceEditComponent < Avo::ResourceComponent
4
4
  include Avo::ApplicationHelper
5
5
 
6
6
  prop :resource, _Nilable(Avo::BaseResource)
7
- prop :record, _Nilable(ActiveRecord::Base)
7
+ prop :record, _Nilable(_Any)
8
8
  prop :actions, _Array(Avo::BaseAction), default: [].freeze
9
9
  prop :view, Avo::ViewInquirer, default: Avo::ViewInquirer.new(:edit).freeze
10
10
  prop :display_breadcrumbs, _Boolean, default: true, reader: :public
@@ -79,7 +79,7 @@
79
79
  <% if view_type.to_sym == :table || view_type.to_sym == :map %>
80
80
  <% if @records.present? %>
81
81
  <div class="mt-4 w-full">
82
- <%= render Avo::PaginatorComponent.new pagy: @pagy, turbo_frame: @turbo_frame || "none", index_params: @index_params, resource: @resource, parent_record: @parent_record, discreet_pagination: field&.discreet_pagination %>
82
+ <%= render Avo::PaginatorComponent.new pagy: @pagy, turbo_frame: @turbo_frame, index_params: @index_params, resource: @resource, parent_record: @parent_record, discreet_pagination: field&.discreet_pagination %>
83
83
  </div>
84
84
  <% end %>
85
85
  <% end %>
@@ -88,7 +88,7 @@
88
88
  <%= render Avo::Index::ResourceGridComponent.new(resources: @resources, resource: @resource, reflection: @reflection, parent_record: @parent_record, parent_resource: @parent_resource, actions: @actions) %>
89
89
  </div>
90
90
  <div class="mt-6">
91
- <%= render Avo::PaginatorComponent.new pagy: @pagy, turbo_frame: @turbo_frame || "none", index_params: @index_params, resource: @resource, parent_record: @parent_record, discreet_pagination: field&.discreet_pagination %>
91
+ <%= render Avo::PaginatorComponent.new pagy: @pagy, turbo_frame: @turbo_frame, index_params: @index_params, resource: @resource, parent_record: @parent_record, discreet_pagination: field&.discreet_pagination %>
92
92
  </div>
93
93
  <% end %>
94
94
  <% end %>
@@ -14,7 +14,7 @@ class Avo::Views::ResourceIndexComponent < Avo::ResourceComponent
14
14
  prop :actions, _Array(Avo::BaseAction), default: [].freeze
15
15
  prop :reflection, _Nilable(ActiveRecord::Reflection::AbstractReflection)
16
16
  prop :turbo_frame, _Nilable(String), default: ""
17
- prop :parent_record, _Nilable(ActiveRecord::Base)
17
+ prop :parent_record, _Nilable(_Any)
18
18
  prop :parent_resource, _Nilable(Avo::BaseResource)
19
19
  prop :applied_filters, Hash, default: {}.freeze
20
20
  prop :query, _Nilable(ActiveRecord::Relation), reader: :public
@@ -8,7 +8,7 @@ class Avo::Views::ResourceShowComponent < Avo::ResourceComponent
8
8
  prop :resource, _Nilable(Avo::BaseResource)
9
9
  prop :reflection, _Nilable(ActiveRecord::Reflection::AbstractReflection)
10
10
  prop :parent_resource, _Nilable(Avo::BaseResource)
11
- prop :parent_record, _Nilable(ActiveRecord::Base)
11
+ prop :parent_record, _Nilable(_Any)
12
12
  prop :resource_panel, _Nilable(_Array(Avo::BaseAction)), reader: :public
13
13
  prop :actions, _Array(Avo::BaseAction), default: [].freeze, reader: :public
14
14
 
@@ -6,11 +6,16 @@ module Avo
6
6
  class_methods do
7
7
  # Cast the model class to a constantized version and memoize it like that
8
8
  def model_class=(value)
9
- @model_class = case value
9
+ @model_class = value
10
+ end
11
+
12
+ # Cast the model class to a constantized version
13
+ def constantized_model_class
14
+ @constantized_model_class ||= case @model_class
10
15
  when Class
11
- value
16
+ @model_class
12
17
  when String, Symbol
13
- value.to_s.safe_constantize
18
+ @model_class.to_s.safe_constantize
14
19
  else
15
20
  raise ArgumentError.new "Failed to find a proper model class for #{self}"
16
21
  end
@@ -143,7 +143,7 @@ module Avo
143
143
  # where we figure out the model class from the record
144
144
  def model_class(record_class: nil)
145
145
  # get the model class off of the static property
146
- return @model_class if @model_class.present?
146
+ return constantized_model_class if @model_class.present?
147
147
 
148
148
  # get the model class off of the record for STI models
149
149
  return record_class if record_class.present?
@@ -395,6 +395,10 @@ module Avo
395
395
  end
396
396
 
397
397
  def record_title
398
+ fetch_record_title.to_s
399
+ end
400
+
401
+ def fetch_record_title
398
402
  return name if @record.nil?
399
403
 
400
404
  # Get the title from the record if title is not set, try to get the name, title or label, or fallback to the to_param
data/lib/avo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Avo
2
- VERSION = "3.11.9" unless const_defined?(:VERSION)
2
+ VERSION = "3.12.0" unless const_defined?(:VERSION)
3
3
  end
@@ -35,7 +35,7 @@ module Generators
35
35
  script_name = "avo:tailwindcss"
36
36
  if Rails.root.join("Procfile.dev").exist?
37
37
  say "Add #{cmd = "avo_css: yarn #{script_name} --watch"} to Procfile.dev"
38
- append_to_file "Procfile.dev", "#{cmd}\n"
38
+ append_to_file "Procfile.dev", "\n#{cmd}\n"
39
39
  else
40
40
  say "Add default Procfile.dev"
41
41
  copy_file template_path("Procfile.dev"), "Procfile.dev"
@@ -7,5 +7,6 @@ module.exports = {
7
7
  './app/views/**/*.html.erb',
8
8
  './app/helpers/**/*.rb',
9
9
  './app/javascript/**/*.js',
10
+ './app/components/avo/**/*.html.erb',
10
11
  ],
11
12
  }