avo 2.11.2.pre.3 → 2.11.3.pre.1
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.lock +1 -1
- data/app/assets/stylesheets/avo.css +1 -0
- data/app/assets/stylesheets/css/scrollbar.css +30 -0
- data/app/components/avo/actions_component.html.erb +3 -3
- data/app/components/avo/actions_component.rb +12 -3
- data/app/components/avo/button_component.rb +1 -3
- data/app/components/avo/paginator_component.html.erb +35 -33
- data/app/components/avo/paginator_component.rb +3 -1
- data/app/components/avo/panel_component.html.erb +1 -1
- data/app/components/avo/resource_component.rb +6 -4
- data/app/components/avo/sidebar_component.html.erb +1 -1
- data/app/components/avo/tab_switcher_component.html.erb +1 -1
- data/app/components/avo/views/resource_index_component.html.erb +3 -3
- data/app/components/avo/views/resource_show_component.html.erb +143 -52
- data/app/components/avo/views/resource_show_component.rb +1 -0
- data/app/controllers/avo/base_controller.rb +8 -7
- data/app/javascript/avo.js +1 -1
- data/app/javascript/js/controllers/fields/date_field_controller.js +7 -3
- data/app/views/avo/debug/report.html.erb +1 -0
- data/app/views/avo/private/design.html.erb +1 -1
- data/lib/avo/base_resource.rb +5 -1
- data/lib/avo/concerns/has_editable_controls.rb +34 -0
- data/lib/avo/fields/date_time_field.rb +2 -2
- data/lib/avo/fields/has_base_field.rb +2 -0
- data/lib/avo/licensing/pro_license.rb +1 -0
- data/lib/avo/resources/controls/action.rb +32 -0
- data/lib/avo/resources/controls/actions_list.rb +19 -0
- data/lib/avo/resources/controls/back_button.rb +13 -0
- data/lib/avo/resources/controls/base_control.rb +59 -0
- data/lib/avo/resources/controls/delete_button.rb +13 -0
- data/lib/avo/resources/controls/detach_button.rb +13 -0
- data/lib/avo/resources/controls/edit_button.rb +13 -0
- data/lib/avo/resources/controls/execution_context.rb +59 -0
- data/lib/avo/resources/controls/items_holder.rb +19 -0
- data/lib/avo/resources/controls/link_to.rb +27 -0
- data/lib/avo/version.rb +1 -1
- data/lib/generators/avo/templates/action.tt +1 -1
- data/lib/generators/avo/templates/resource_tools/partial.tt +1 -1
- data/lib/generators/avo/templates/standalone_action.tt +1 -1
- data/public/avo-assets/avo.css +602 -43
- data/public/avo-assets/avo.js +2 -2
- data/public/avo-assets/avo.js.map +2 -2
- metadata +14 -3
- data/lib/avo/concerns/has_model.rb +0 -11
@@ -0,0 +1,34 @@
|
|
1
|
+
module Avo
|
2
|
+
module Concerns
|
3
|
+
module HasEditableControls
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
class_attribute :show_controls
|
8
|
+
class_attribute :show_controls_holder
|
9
|
+
class_attribute :show_controls_holder_called, default: false
|
10
|
+
end
|
11
|
+
|
12
|
+
def has_show_controls?
|
13
|
+
return false if ::Avo::App.license.lacks_with_trial(:resource_show_controls)
|
14
|
+
|
15
|
+
self.class.show_controls.present?
|
16
|
+
end
|
17
|
+
|
18
|
+
def render_show_controls
|
19
|
+
return [] if ::Avo::App.license.lacks_with_trial(:resource_show_controls)
|
20
|
+
|
21
|
+
if show_controls.present?
|
22
|
+
Avo::Resources::Controls::ExecutionContext.new(
|
23
|
+
block: show_controls,
|
24
|
+
resource: self,
|
25
|
+
model: model,
|
26
|
+
view: view
|
27
|
+
).handle.items
|
28
|
+
else
|
29
|
+
[]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -5,6 +5,7 @@ module Avo
|
|
5
5
|
attr_accessor :scope
|
6
6
|
attr_accessor :attach_scope
|
7
7
|
attr_accessor :description
|
8
|
+
attr_accessor :discreet_pagination
|
8
9
|
|
9
10
|
def initialize(id, **args, &block)
|
10
11
|
super(id, **args, &block)
|
@@ -14,6 +15,7 @@ module Avo
|
|
14
15
|
@display = args[:display].present? ? args[:display] : :show
|
15
16
|
@searchable = args[:searchable] == true
|
16
17
|
@description = args[:description]
|
18
|
+
@discreet_pagination = args[:discreet_pagination] || false
|
17
19
|
end
|
18
20
|
|
19
21
|
def searchable
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Avo
|
2
|
+
module Resources
|
3
|
+
module Controls
|
4
|
+
class Action < BaseControl
|
5
|
+
attr_reader :klass
|
6
|
+
|
7
|
+
def initialize(klass, model: nil, resource: nil, view: nil, **args)
|
8
|
+
super(**args)
|
9
|
+
|
10
|
+
@klass = klass
|
11
|
+
@resource = resource
|
12
|
+
@model = model
|
13
|
+
@view = view
|
14
|
+
end
|
15
|
+
|
16
|
+
def action
|
17
|
+
return @instance if @instance.present?
|
18
|
+
|
19
|
+
@instance = @klass.new(model: @model, resource: @resource, view: @view)
|
20
|
+
end
|
21
|
+
|
22
|
+
def path
|
23
|
+
Avo::Services::URIService.parse(@resource.record_path).append_paths("actions", action.param_id).to_s
|
24
|
+
end
|
25
|
+
|
26
|
+
def label
|
27
|
+
@args[:label] || action.action_name
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Avo
|
2
|
+
module Resources
|
3
|
+
module Controls
|
4
|
+
class ActionsList < BaseControl
|
5
|
+
def exclude
|
6
|
+
Array.wrap(@args[:exclude]) || []
|
7
|
+
end
|
8
|
+
|
9
|
+
def color
|
10
|
+
@args[:color] || :primary
|
11
|
+
end
|
12
|
+
|
13
|
+
def style
|
14
|
+
@args[:style] || :outline
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Avo
|
2
|
+
module Resources
|
3
|
+
module Controls
|
4
|
+
class BaseControl
|
5
|
+
def initialize(**args)
|
6
|
+
@args = args
|
7
|
+
end
|
8
|
+
|
9
|
+
def label
|
10
|
+
@args[:label] || @label
|
11
|
+
end
|
12
|
+
|
13
|
+
def title
|
14
|
+
@args[:title]
|
15
|
+
end
|
16
|
+
|
17
|
+
def color
|
18
|
+
@args[:color] || :gray
|
19
|
+
end
|
20
|
+
|
21
|
+
def style
|
22
|
+
@args[:style] || :text
|
23
|
+
end
|
24
|
+
|
25
|
+
def icon
|
26
|
+
@args[:icon] || nil
|
27
|
+
end
|
28
|
+
|
29
|
+
def back_button?
|
30
|
+
is_a? Avo::Resources::Controls::BackButton
|
31
|
+
end
|
32
|
+
|
33
|
+
def edit_button?
|
34
|
+
is_a? Avo::Resources::Controls::EditButton
|
35
|
+
end
|
36
|
+
|
37
|
+
def delete_button?
|
38
|
+
is_a? Avo::Resources::Controls::DeleteButton
|
39
|
+
end
|
40
|
+
|
41
|
+
def actions_list?
|
42
|
+
is_a? Avo::Resources::Controls::ActionsList
|
43
|
+
end
|
44
|
+
|
45
|
+
def link_to?
|
46
|
+
is_a? Avo::Resources::Controls::LinkTo
|
47
|
+
end
|
48
|
+
|
49
|
+
def detach_button?
|
50
|
+
is_a? Avo::Resources::Controls::DetachButton
|
51
|
+
end
|
52
|
+
|
53
|
+
def action?
|
54
|
+
is_a? Avo::Resources::Controls::Action
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require "dry-initializer"
|
2
|
+
|
3
|
+
# This object holds some data tha is usually needed to compute blocks around the app.
|
4
|
+
module Avo
|
5
|
+
module Resources
|
6
|
+
module Controls
|
7
|
+
class ExecutionContext
|
8
|
+
extend Dry::Initializer
|
9
|
+
|
10
|
+
option :context, default: proc { Avo::App.context }
|
11
|
+
option :params, default: proc { Avo::App.params }
|
12
|
+
option :view_context, default: proc { Avo::App.view_context }
|
13
|
+
option :current_user, default: proc { Avo::App.current_user }
|
14
|
+
option :items_holder, default: proc { Avo::Resources::Controls::ItemsHolder.new }
|
15
|
+
option :resource, optional: true
|
16
|
+
option :model, optional: true
|
17
|
+
option :view, optional: true
|
18
|
+
option :block, optional: true
|
19
|
+
|
20
|
+
delegate :authorize, to: Avo::Services::AuthorizationService
|
21
|
+
|
22
|
+
def handle
|
23
|
+
instance_exec(&block)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def back_button(**args)
|
29
|
+
items_holder.add_item Avo::Resources::Controls::BackButton.new(**args)
|
30
|
+
end
|
31
|
+
|
32
|
+
def delete_button(**args)
|
33
|
+
items_holder.add_item Avo::Resources::Controls::DeleteButton.new(**args)
|
34
|
+
end
|
35
|
+
|
36
|
+
def detach_button(**args)
|
37
|
+
items_holder.add_item Avo::Resources::Controls::DetachButton.new(**args)
|
38
|
+
end
|
39
|
+
|
40
|
+
def edit_button(**args)
|
41
|
+
items_holder.add_item Avo::Resources::Controls::EditButton.new(**args)
|
42
|
+
end
|
43
|
+
|
44
|
+
def link_to(label, path, **args)
|
45
|
+
items_holder.add_item Avo::Resources::Controls::LinkTo.new(label: label, path: path, **args)
|
46
|
+
end
|
47
|
+
|
48
|
+
def actions_list(**args)
|
49
|
+
items_holder.add_item Avo::Resources::Controls::ActionsList.new(**args)
|
50
|
+
end
|
51
|
+
|
52
|
+
def action(klass, **args)
|
53
|
+
# abort model.inspect
|
54
|
+
items_holder.add_item Avo::Resources::Controls::Action.new(klass, model: model, resource: resource, view: view, **args)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Avo
|
2
|
+
module Resources
|
3
|
+
module Controls
|
4
|
+
class LinkTo < BaseControl
|
5
|
+
def initialize(**args)
|
6
|
+
super(**args)
|
7
|
+
end
|
8
|
+
|
9
|
+
def path
|
10
|
+
@args[:path]
|
11
|
+
end
|
12
|
+
|
13
|
+
def target
|
14
|
+
@args[:target] || nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def data
|
18
|
+
@args[:data] || {}
|
19
|
+
end
|
20
|
+
|
21
|
+
def class
|
22
|
+
@args[:class] || nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/avo/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class <%= class_name.camelize %> < Avo::BaseAction
|
2
|
-
self.name =
|
2
|
+
self.name = "<%= name.underscore.humanize %>"
|
3
3
|
|
4
4
|
def handle(**args)
|
5
5
|
models, fields, current_user, resource = args.values_at(:models, :fields, :current_user, :resource)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div class="flex flex-col">
|
2
2
|
<%%= render Avo::PanelComponent.new(name: "<%= human_name %>") do |c| %>
|
3
3
|
<%% c.tools do %>
|
4
|
-
<%%= a_link('/avo', icon: 'heroicons/solid/academic-cap', style: :primary) do %>
|
4
|
+
<%%= a_link('/avo', icon: 'heroicons/solid/academic-cap', color: :primary, style: :primary) do %>
|
5
5
|
Dummy link
|
6
6
|
<%% end %>
|
7
7
|
<%% end %>
|