avo 3.11.8 → 3.11.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -2
- data/Gemfile.lock +1 -1
- data/app/assets/builds/avo.base.css +11683 -0
- data/app/assets/builds/avo.base.js +158260 -0
- data/app/assets/builds/avo.base.js.map +7 -0
- data/app/assets/config/avo_manifest.js +0 -1
- data/app/components/avo/index/resource_grid_component.html.erb +1 -1
- data/app/components/avo/index/resource_map_component.html.erb +1 -1
- data/app/components/avo/index/resource_table_component.rb +1 -1
- data/app/components/avo/index/table_row_component.rb +1 -1
- data/app/components/avo/views/resource_index_component.html.erb +2 -2
- data/app/controllers/avo/base_controller.rb +6 -10
- data/app/helpers/avo/application_helper.rb +3 -8
- data/lib/avo/resources/base.rb +13 -0
- data/lib/avo/svg_finder.rb +1 -1
- data/lib/avo/version.rb +1 -1
- data/public/avo-assets/avo.base.css +18 -38
- metadata +4 -1
@@ -10,7 +10,7 @@
|
|
10
10
|
} do %>
|
11
11
|
<% @resources.each_with_index do |resource, index| %>
|
12
12
|
<% cache_if Avo.configuration.cache_resources_on_index_view, resource.cache_hash(@parent_record) do %>
|
13
|
-
<%= render(Avo::Index::GridItemComponent.new(resource: resource, reflection: @reflection, parent_record: @parent_record, parent_resource: @parent_resource, actions: actions)) %>
|
13
|
+
<%= render(resource.resolve_component(Avo::Index::GridItemComponent).new(resource: resource, reflection: @reflection, parent_record: @parent_record, parent_resource: @parent_resource, actions: actions)) %>
|
14
14
|
<% end %>
|
15
15
|
<% end %>
|
16
16
|
<% end %>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
</div>
|
6
6
|
<% if render_table? %>
|
7
7
|
<div class="overflow-auto <%= table_component_order_class %>">
|
8
|
-
<%= render(Avo::Index::ResourceTableComponent.new(resources: @resources, resource: @resource, reflection: @reflection, parent_record: @parent_record, parent_resource: @parent_resource, pagy: @pagy, query: @query)) %>
|
8
|
+
<%= render(@resource.resolve_component(Avo::Index::ResourceTableComponent).new(resources: @resources, resource: @resource, reflection: @reflection, parent_record: @parent_record, parent_resource: @parent_resource, pagy: @pagy, query: @query)) %>
|
9
9
|
</div>
|
10
10
|
<% end %>
|
11
11
|
</div>
|
@@ -71,7 +71,7 @@ class Avo::Index::ResourceTableComponent < Avo::BaseComponent
|
|
71
71
|
header_fields.concat row_fields
|
72
72
|
|
73
73
|
# Create a TableRowComponent instance for the resource and add it to @table_row_components
|
74
|
-
table_row_components << Avo::Index::TableRowComponent.new(
|
74
|
+
table_row_components << resource.resolve_component(Avo::Index::TableRowComponent).new(
|
75
75
|
resource: resource,
|
76
76
|
fields: row_fields,
|
77
77
|
reflection: @reflection,
|
@@ -11,7 +11,7 @@ class Avo::Index::TableRowComponent < Avo::BaseComponent
|
|
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))
|
14
|
-
prop :header_fields, _Nilable(_Array(
|
14
|
+
prop :header_fields, _Nilable(_Array(String))
|
15
15
|
|
16
16
|
def resource_controls_component
|
17
17
|
Avo::Index::ResourceControlsComponent.new(
|
@@ -59,7 +59,7 @@
|
|
59
59
|
<% if view_type.to_sym == :table %>
|
60
60
|
<% if @resources.present? %>
|
61
61
|
<div class="w-full relative flex-1 flex mt-0">
|
62
|
-
<%= render(Avo::Index::ResourceTableComponent.new(resources: @resources, resource: @resource, reflection: @reflection, parent_record: @parent_record, parent_resource: @parent_resource, pagy: @pagy, query: @query, actions: @actions)) %>
|
62
|
+
<%= render(@resource.resolve_component(Avo::Index::ResourceTableComponent).new(resources: @resources, resource: @resource, reflection: @reflection, parent_record: @parent_record, parent_resource: @parent_resource, pagy: @pagy, query: @query, actions: @actions)) %>
|
63
63
|
</div>
|
64
64
|
<% else %>
|
65
65
|
<%= helpers.empty_state by_association: params[:related_name].present?, view_type: view_type, add_background: true %>
|
@@ -70,7 +70,7 @@
|
|
70
70
|
<% if view_type.to_sym == :map %>
|
71
71
|
<% if @resources.present? %>
|
72
72
|
<div>
|
73
|
-
<%= render(Avo::Index::ResourceMapComponent.new(resources: @resources, resource: @resource, reflection: @reflection, parent_record: @parent_record, parent_resource: @parent_resource, pagy: @pagy, query: @query)) %>
|
73
|
+
<%= render(@resource.resolve_component(Avo::Index::ResourceMapComponent).new(resources: @resources, resource: @resource, reflection: @reflection, parent_record: @parent_record, parent_resource: @parent_resource, pagy: @pagy, query: @query)) %>
|
74
74
|
</div>
|
75
75
|
<% else %>
|
76
76
|
<%= helpers.empty_state by_association: params[:related_name].present?, view_type: view_type, add_background: true %>
|
@@ -581,18 +581,14 @@ module Avo
|
|
581
581
|
# Set the view component for the current view
|
582
582
|
# It will try to use the custom component if it's set, otherwise it will use the default one
|
583
583
|
def set_component_for(view, fallback_view: nil)
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
view: @view
|
590
|
-
).handle
|
584
|
+
default_component = "Avo::Views::Resource#{(fallback_view || view).to_s.classify}Component"
|
585
|
+
|
586
|
+
# Search for the custom component by key and by class name:
|
587
|
+
custom_component = @resource.custom_components.dig(:"resource_#{view}_component") ||
|
588
|
+
@resource.custom_components.dig(default_component)
|
591
589
|
|
592
590
|
# If the component is not set, use the default one
|
593
|
-
|
594
|
-
return @component = "Avo::Views::Resource#{(fallback_view || view).to_s.classify}Component".constantize
|
595
|
-
end
|
591
|
+
return @component = default_component.constantize if custom_component.nil?
|
596
592
|
|
597
593
|
# If the component is set, try to use it
|
598
594
|
@component = custom_component.to_s.safe_constantize
|
@@ -3,8 +3,6 @@ module Avo
|
|
3
3
|
include ::Pagy::Frontend
|
4
4
|
include Avo::ResourcesHelper
|
5
5
|
|
6
|
-
AVO_CACHED_SVGS = {}
|
7
|
-
|
8
6
|
def render_license_warning(title: "", message: "", icon: "exclamation")
|
9
7
|
render partial: "avo/sidebar/license_warning", locals: {
|
10
8
|
title: title,
|
@@ -67,12 +65,9 @@ module Avo
|
|
67
65
|
|
68
66
|
file_name = "#{file_name}.svg" unless file_name.end_with? ".svg"
|
69
67
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
# The path shouldn't change between reboots so we can memoize the paths based on the filename.
|
74
|
-
def svg_path(file_name)
|
75
|
-
AVO_CACHED_SVGS[file_name] ||= Avo::SvgFinder.find_asset(file_name).pathname.to_s
|
68
|
+
with_asset_finder(::Avo::SvgFinder) do
|
69
|
+
inline_svg file_name, **args
|
70
|
+
end
|
76
71
|
end
|
77
72
|
|
78
73
|
def input_classes(extra_classes = "", has_error: false)
|
data/lib/avo/resources/base.rb
CHANGED
@@ -619,6 +619,19 @@ module Avo
|
|
619
619
|
@record_param ||= @record.persisted? ? @record.to_param : nil
|
620
620
|
end
|
621
621
|
|
622
|
+
def custom_components
|
623
|
+
@custom_components ||= Avo::ExecutionContext.new(
|
624
|
+
target: components,
|
625
|
+
resource: self,
|
626
|
+
record: @record,
|
627
|
+
view: @view
|
628
|
+
).handle.with_indifferent_access
|
629
|
+
end
|
630
|
+
|
631
|
+
def resolve_component(original_component)
|
632
|
+
custom_components.dig(original_component.to_s)&.to_s&.safe_constantize || original_component
|
633
|
+
end
|
634
|
+
|
622
635
|
private
|
623
636
|
|
624
637
|
def flatten_keys(array)
|
data/lib/avo/svg_finder.rb
CHANGED
@@ -28,7 +28,7 @@ class Avo::SvgFinder
|
|
28
28
|
Avo::Engine.root.join("app", "assets", "svgs", "heroicons", "outline", @filename),
|
29
29
|
Avo::Engine.root.join(@filename).to_s,
|
30
30
|
# Add all paths from Rails including engines
|
31
|
-
*Rails.application.assets
|
31
|
+
*Rails.application.config.assets&.paths&.map { |path| File.join(path, @filename) }
|
32
32
|
].map(&:to_s).uniq
|
33
33
|
end
|
34
34
|
|
data/lib/avo/version.rb
CHANGED
@@ -7346,10 +7346,6 @@ tag.tagify__tag{
|
|
7346
7346
|
bottom:0.25rem
|
7347
7347
|
}
|
7348
7348
|
|
7349
|
-
.bottom-4{
|
7350
|
-
bottom:1rem
|
7351
|
-
}
|
7352
|
-
|
7353
7349
|
.bottom-full{
|
7354
7350
|
bottom:100%
|
7355
7351
|
}
|
@@ -7394,10 +7390,6 @@ tag.tagify__tag{
|
|
7394
7390
|
right:0.75rem
|
7395
7391
|
}
|
7396
7392
|
|
7397
|
-
.right-4{
|
7398
|
-
right:1rem
|
7399
|
-
}
|
7400
|
-
|
7401
7393
|
.start-1{
|
7402
7394
|
inset-inline-start:0.25rem
|
7403
7395
|
}
|
@@ -7654,6 +7646,10 @@ tag.tagify__tag{
|
|
7654
7646
|
margin-top:-1rem
|
7655
7647
|
}
|
7656
7648
|
|
7649
|
+
.-mt-6{
|
7650
|
+
margin-top:-1.5rem
|
7651
|
+
}
|
7652
|
+
|
7657
7653
|
.-mt-9{
|
7658
7654
|
margin-top:-2.25rem
|
7659
7655
|
}
|
@@ -7702,10 +7698,6 @@ tag.tagify__tag{
|
|
7702
7698
|
margin-left:2.5rem
|
7703
7699
|
}
|
7704
7700
|
|
7705
|
-
.ml-12{
|
7706
|
-
margin-left:3rem
|
7707
|
-
}
|
7708
|
-
|
7709
7701
|
.ml-2{
|
7710
7702
|
margin-left:0.5rem
|
7711
7703
|
}
|
@@ -7722,6 +7714,10 @@ tag.tagify__tag{
|
|
7722
7714
|
margin-left:1.5rem
|
7723
7715
|
}
|
7724
7716
|
|
7717
|
+
.ml-8{
|
7718
|
+
margin-left:2rem
|
7719
|
+
}
|
7720
|
+
|
7725
7721
|
.ml-auto{
|
7726
7722
|
margin-left:auto
|
7727
7723
|
}
|
@@ -7913,6 +7909,16 @@ tag.tagify__tag{
|
|
7913
7909
|
height:6rem
|
7914
7910
|
}
|
7915
7911
|
|
7912
|
+
.size-36{
|
7913
|
+
width:9rem;
|
7914
|
+
height:9rem
|
7915
|
+
}
|
7916
|
+
|
7917
|
+
.size-48{
|
7918
|
+
width:12rem;
|
7919
|
+
height:12rem
|
7920
|
+
}
|
7921
|
+
|
7916
7922
|
.size-6{
|
7917
7923
|
width:1.5rem;
|
7918
7924
|
height:1.5rem
|
@@ -7966,10 +7972,6 @@ tag.tagify__tag{
|
|
7966
7972
|
height:1.5rem
|
7967
7973
|
}
|
7968
7974
|
|
7969
|
-
.h-60{
|
7970
|
-
height:15rem
|
7971
|
-
}
|
7972
|
-
|
7973
7975
|
.h-64{
|
7974
7976
|
height:16rem
|
7975
7977
|
}
|
@@ -8066,10 +8068,6 @@ tag.tagify__tag{
|
|
8066
8068
|
min-height:8rem
|
8067
8069
|
}
|
8068
8070
|
|
8069
|
-
.min-h-dvh{
|
8070
|
-
min-height:100dvh
|
8071
|
-
}
|
8072
|
-
|
8073
8071
|
.min-h-full{
|
8074
8072
|
min-height:100%
|
8075
8073
|
}
|
@@ -8432,10 +8430,6 @@ tag.tagify__tag{
|
|
8432
8430
|
flex-direction:column
|
8433
8431
|
}
|
8434
8432
|
|
8435
|
-
.flex-col-reverse{
|
8436
|
-
flex-direction:column-reverse
|
8437
|
-
}
|
8438
|
-
|
8439
8433
|
.flex-wrap{
|
8440
8434
|
flex-wrap:wrap
|
8441
8435
|
}
|
@@ -9418,10 +9412,6 @@ tag.tagify__tag{
|
|
9418
9412
|
padding-bottom:2rem
|
9419
9413
|
}
|
9420
9414
|
|
9421
|
-
.pe-1{
|
9422
|
-
padding-inline-end:0.25rem
|
9423
|
-
}
|
9424
|
-
|
9425
9415
|
.pl-1{
|
9426
9416
|
padding-left:0.25rem
|
9427
9417
|
}
|
@@ -9446,10 +9436,6 @@ tag.tagify__tag{
|
|
9446
9436
|
padding-top:0.125rem
|
9447
9437
|
}
|
9448
9438
|
|
9449
|
-
.pt-1{
|
9450
|
-
padding-top:0.25rem
|
9451
|
-
}
|
9452
|
-
|
9453
9439
|
.pt-16{
|
9454
9440
|
padding-top:4rem
|
9455
9441
|
}
|
@@ -9928,12 +9914,6 @@ tag.tagify__tag{
|
|
9928
9914
|
transition-duration:150ms
|
9929
9915
|
}
|
9930
9916
|
|
9931
|
-
.transition-colors{
|
9932
|
-
transition-property:color, background-color, border-color, text-decoration-color, fill, stroke;
|
9933
|
-
transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);
|
9934
|
-
transition-duration:150ms
|
9935
|
-
}
|
9936
|
-
|
9937
9917
|
.transition-opacity{
|
9938
9918
|
transition-property:opacity;
|
9939
9919
|
transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.11.
|
4
|
+
version: 3.11.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adrian Marin
|
@@ -222,6 +222,9 @@ files:
|
|
222
222
|
- Gemfile.lock
|
223
223
|
- README.md
|
224
224
|
- Rakefile
|
225
|
+
- app/assets/builds/avo.base.css
|
226
|
+
- app/assets/builds/avo.base.js
|
227
|
+
- app/assets/builds/avo.base.js.map
|
225
228
|
- app/assets/config/avo_manifest.js
|
226
229
|
- app/assets/stylesheets/avo.base.css
|
227
230
|
- app/assets/stylesheets/css/active-storage.css
|