rails_admin_state 1.6.2 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c3bd861e03c61582cf8332e0f43de009998ddd2cb17ae610d28f0cef471232b8
4
- data.tar.gz: 984dad7bd37df4de260a81189c44330b034ace5fd8fdac438552a6acba40198a
3
+ metadata.gz: a3dfba5319d0c88df1f3be75dd3e2ae8fa33b40b62455c134db782cc512b7869
4
+ data.tar.gz: '0917cebc9cb29dc8aac1ab9ba6553cce676877dc1d00a2617883036a2dc69fc0'
5
5
  SHA512:
6
- metadata.gz: 0e90994431e5924d0a0f8308bba41eb0edecc65880ccdc9ec13aee39c2f47680e86002afd6eaf1b61641a5568ee440d932d0d31d0479987b52a24dc98b67fab2
7
- data.tar.gz: 616398eda1a7e761db1dcceabf73666301714dddd37c36fec1dee4024f7c9c408e725df1419021c7984063c7ea6ddaefde04a99a80921d383c484f2c6935371f
6
+ metadata.gz: 6927e33771eaec9dfabba5bb0fb7da1bc2de94d4b57351a65fd43b4dfef265e1bac060a6a0339c31f6698ee5bf945207b636f01315c6ff2871b7c3f3b18be43d
7
+ data.tar.gz: c381c5efc393d480f54cff46797a61813b5d8f18e1eff72a41a3421560ef2bd995288f1badbb4ef85d580816ea9d6fa12c400907d9fb2780625d3f9cfcb2b67e
@@ -30,18 +30,36 @@ module RailsAdmin
30
30
  raise 'event disabled' if @state_machine_options.disabled?(params[:event].to_sym)
31
31
  if @object.send("fire_#{params[:attr]}_event".to_sym, params[:event].to_sym)
32
32
  @object.save!
33
- flash[:success] = I18n.t('admin.state_machine.event_fired', attr: params[:method], event: params[:event])
33
+ if params['ajax'].present?
34
+ render json: {
35
+ html: RailsAdmin::Config::Fields::Types::State.pretty_value_from_params(params[:attr], @abstract_model, @object, @authorization_adapter, rails_admin, @state_machine_options)
36
+ }
37
+ else
38
+ flash[:success] = I18n.t('admin.state_machine.event_fired', attr: params[:method], event: params[:event])
39
+ end
34
40
  else
35
- flash[:error] = @object.errors.full_messages.join(', ')
41
+ if params['ajax'].present?
42
+ render text: @object.errors.full_messages.join(', ')
43
+ else
44
+ flash[:error] = @object.errors.full_messages.join(', ')
45
+ end
36
46
  end
37
47
  rescue Exception => e
38
48
  Rails.logger.error e
39
- flash[:error] = I18n.t('admin.state_machine.error', err: e.to_s)
49
+ if params['ajax'].present?
50
+ render text: I18n.t('admin.state_machine.error', err: e.to_s)
51
+ else
52
+ flash[:error] = I18n.t('admin.state_machine.error', err: e.to_s)
53
+ end
40
54
  end
41
55
  else
42
- flash[:error] = I18n.t('admin.state_machine.no_id')
56
+ if params['ajax'].present?
57
+ render text: I18n.t('admin.state_machine.no_id')
58
+ else
59
+ flash[:error] = I18n.t('admin.state_machine.no_id')
60
+ end
43
61
  end
44
- redirect_back(fallback_location: rails_admin.dashboard_path)
62
+ redirect_back(fallback_location: rails_admin.dashboard_path) unless params['ajax'].present?
45
63
  end
46
64
  end
47
65
 
@@ -10,35 +10,13 @@ module RailsAdmin
10
10
  include RailsAdmin::Engine.routes.url_helpers
11
11
 
12
12
  register_instance_option :pretty_value do
13
+
13
14
  @state_machine_options = ::RailsAdminState::Configuration.new @abstract_model
14
15
  v = bindings[:view]
16
+ obj = bindings[:object]
17
+ c = bindings[:controller]
15
18
 
16
- state = bindings[:object].send(name)
17
- state_class = @state_machine_options.state(state)
18
- s = bindings[:object].class.state_machines[name.to_sym].states[state.to_sym]
19
- ret = [
20
- '<div class="label ' + state_class + '">' + s.human_name + '</div>',
21
- '<div style="height: 10px;"></div>'
22
- ]
23
- unless read_only
24
- events = bindings[:object].class.state_machines[name.to_sym].events
25
- bindings[:object].send("#{name}_events".to_sym).each do |event|
26
- next if @state_machine_options.disabled?(event)
27
- unless bindings[:controller].try(:authorization_adapter).nil?
28
- adapter = bindings[:controller].authorization_adapter
29
- next unless (adapter.authorized?(:state, @abstract_model, bindings[:object]) && (adapter.authorized?(:all_events, @abstract_model, bindings[:object]) || adapter.authorized?(event, @abstract_model, bindings[:object])))
30
- end
31
- event_class = @state_machine_options.event(event)
32
- ret << bindings[:view].link_to(
33
- events[event].human_name,
34
- state_path(model_name: @abstract_model, id: bindings[:object].id, event: event, attr: name),
35
- method: :post,
36
- class: "btn btn-mini btn-xs #{event_class}",
37
- style: 'margin-bottom: 5px;'
38
- )
39
- end
40
- end
41
- ('<div style="white-space: normal;">' + ret.join(' ') + '</div>').html_safe
19
+ self.class.pretty_value_from_params(name, @abstract_model, obj, c.try(:authorization_adapter), v, @state_machine_options, read_only)
42
20
  end
43
21
 
44
22
  register_instance_option :formatted_value do
@@ -63,7 +41,7 @@ module RailsAdmin
63
41
  events = bindings[:object].class.state_machines[name.to_sym].events
64
42
  bindings[:object].send("#{name}_events".to_sym).each do |event|
65
43
  next if @state_machine_options.disabled?(event)
66
- unless bindings[:controller].try(:authorization_adapter).nil?
44
+ unless bindings[:controller].try(:authorization_adapter).nil?
67
45
  adapter = bindings[:controller].authorization_adapter
68
46
  next unless (adapter.authorized?(:state, @abstract_model, bindings[:object]) && (adapter.authorized?(:all_events, @abstract_model, bindings[:object]) || adapter.authorized?(event, @abstract_model, bindings[:object])))
69
47
  end
@@ -91,7 +69,7 @@ module RailsAdmin
91
69
  end
92
70
  ('<div style="white-space: normal;">' + ret.join(' ') + '</div>').html_safe
93
71
  end
94
-
72
+
95
73
  register_instance_option :export_value do
96
74
  state = bindings[:object].send(name)
97
75
  bindings[:object].class.state_machines[name.to_sym].states[state.to_sym].human_name
@@ -112,6 +90,55 @@ module RailsAdmin
112
90
  register_instance_option :multiple? do
113
91
  false
114
92
  end
93
+
94
+ def self.pretty_value_from_params name, abstract_model, obj, authorization_adapter, view, state_machine_options, read_only = false
95
+ state = obj.send(name)
96
+ state_class = state_machine_options.state(state)
97
+ s = obj.class.state_machines[name.to_sym].states[state.to_sym]
98
+ ret = [
99
+ '<div class="label ' + state_class + '">' + s.human_name + '</div>',
100
+ '<div style="height: 10px;"></div>'
101
+ ]
102
+ unless read_only
103
+ events = obj.class.state_machines[name.to_sym].events
104
+ obj.send("#{name}_events".to_sym).each do |event|
105
+ next if state_machine_options.disabled?(event)
106
+ unless authorization_adapter.nil?
107
+ adapter = authorization_adapter
108
+ next unless (adapter.authorized?(:state, abstract_model, obj) && (adapter.authorized?(:all_events, abstract_model, obj) || adapter.authorized?(event, abstract_model, obj)))
109
+ end
110
+ event_class = state_machine_options.event(event)
111
+ ret << ActionController::Base.helpers.link_to(
112
+ events[event].human_name,
113
+ view.state_path(model_name: abstract_model, id: obj.id, event: event, attr: name),
114
+ method: :post,
115
+ class: "btn btn-mini btn-xs #{event_class}",
116
+ style: 'margin-bottom: 5px;',
117
+ onclick: <<-END.strip_heredoc.gsub("\n", ' ').gsub(/ +/, ' ')
118
+ event.preventDefault();
119
+ event.stopPropagation();
120
+ var $t = $(this);
121
+ var old_html = $t.html();
122
+ $t.html("<i class='fa fa-spinner fa-spin'></i>");
123
+ $.ajax({
124
+ type: "POST",
125
+ url: $t.attr("href"),
126
+ data: {ajax:true},
127
+ success: function(r) {
128
+ $t.parent().parent().html(r.html);
129
+ },
130
+ error: function(e) {
131
+ $t.html(old_html);
132
+ alert(e.responseText);
133
+ }
134
+ });
135
+ return false;
136
+ END
137
+ )
138
+ end
139
+ end
140
+ ('<div style="white-space: normal;">' + ret.join(' ') + '</div>').html_safe
141
+ end
115
142
  end
116
143
  end
117
144
  end
@@ -1,3 +1,3 @@
1
1
  module RailsAdminState
2
- VERSION = "1.6.2"
2
+ VERSION = "1.8.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_admin_state
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - glebtv
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-05 00:00:00.000000000 Z
11
+ date: 2019-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails_admin