cm-admin 0.4.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6a604ef5af3423a1ea530076b93e4ef86f1353c5697949131ac198bf374eef9e
4
- data.tar.gz: bedbde6c9a8abcc303668e6744964d7bc4e7050beafb6a07c0e17cde1392a687
3
+ metadata.gz: 2047ac958ebd117645f7089227af0177f495f1cf640791c3e2f9fb2920fc1f04
4
+ data.tar.gz: 3f81a0d55a072ec52cb51b54e04cfd77edc87e562275539045ec39ca98e5b6ca
5
5
  SHA512:
6
- metadata.gz: 710123223b9520e39b0dd7426ed62d2941828087543717804361f98c6f668af8e2e829ab4c21e4285fff237306787c24c467922e1eb3ba0175ade65e41a6e49c
7
- data.tar.gz: 101a879ca7b6a56a473cf95cffd02ff0d543d96c68f952335ad8639692368ff651905d9198ee7a5a35abe1aaa10f0894d9e841d86976e2c1fd82afc128647b9e
6
+ metadata.gz: b7f8ac87cb03febd769e5f11a8e4819eff5cb978727c1bc55d73680970147b1e28c15293d1d819dbec11c290fc090126a32bdc3db1f30d7202013bbf4a43c25b
7
+ data.tar.gz: 370da992ee711a9e2d15d665e4ee2e595ab4767e3761c58d603ad3a6abef95b1f09412e8d92e7ea0dea3763f1ce1332a735f42a9d5b27e7e35f05800fcc6d863
data/README.md CHANGED
@@ -24,27 +24,6 @@ Install the gem
24
24
 
25
25
  $ rails g cm_admin:install
26
26
 
27
- For generating the index page views
28
-
29
- $ rails g cm_admin:view products index title description
30
-
31
- For generating the show page views
32
-
33
- $ rails g cm_admin:view products show title description
34
-
35
- For generating the form page views
36
- $ rails g cm_admin:view products form column_name:field_type
37
- $ rails g cm_admin:view products form title:string description:string
38
-
39
- Following field types are acceted
40
-
41
- * input-integer
42
- * input-string
43
- * single-select
44
- * multi-select
45
- * checkbox
46
- * radio
47
-
48
27
  ## Usage
49
28
 
50
29
  For demo check [here](http://cm-admin.labs.commutatus.com/admin/users/)
@@ -1,6 +1,6 @@
1
1
  .admin-table-index
2
2
  .table-top
3
- p.table-top__total-count = "#{@associated_ar_object.pagy.count} #{@associated_model.ar_model.table_name} found"
3
+ p.table-top__total-count = "#{@associated_ar_object.pagy.count} #{@associated_model&.ar_model&.table_name} found"
4
4
  .table-top__column-action
5
5
  button.secondary-btn.column-btn data-target="#columnActionModal" data-toggle="modal" type="button"
6
6
  span
@@ -1,13 +1,12 @@
1
1
  .admin-table-index
2
2
  .table-top
3
3
  p.table-top__total-count = "#{@ar_object.pagy.count} #{@model.ar_model.table_name} found"
4
- .table-top__column-action
5
- button.secondary-btn.column-btn data-bs-target="#columnActionModal" data-bs-toggle="modal"
6
- span
7
- i.fa.fa-columns.bolder
8
- span
9
- i.fa.fa-angle-down
10
-
4
+ // .table-top__column-action
5
+ // button.secondary-btn.column-btn data-bs-target="#columnActionModal" data-bs-toggle="modal"
6
+ // span
7
+ // i.fa.fa-columns.bolder
8
+ // span
9
+ // i.fa.fa-angle-down
11
10
  .new-admin-table.scrollable
12
11
  table.cm-table
13
12
  thead.cm-table__header
@@ -23,9 +22,13 @@
23
22
  td.check-box-space
24
23
  span
25
24
  input.cm-checkbox type="checkbox"
26
- - @model.available_fields[:index].each do |column|
25
+ - @model.available_fields[:index].each_with_index do |column, index|
27
26
  td.text-ellipsis
28
- span class="#{column.cm_css_class}" = show_field_value(ar_object, column)
27
+ span class="#{column.cm_css_class}"
28
+ - if index == 0
29
+ = link_to ar_object.send(column.field_name), "/cm_admin/#{@model.ar_model.table_name}/#{ar_object.id}"
30
+ - else
31
+ = show_field_value(ar_object, column)
29
32
  td.row-action-cell
30
33
  .row-action-tool
31
34
  button.secondary-btn.tool-btn type="button"
@@ -24,8 +24,13 @@
24
24
  a.primary-btn.ml-2 href="#{page_url('new')}"
25
25
  | Add
26
26
  - @model.available_actions.select{|act| act if act.route_type == 'collection'}.each do |custom_action|
27
- = link_to custom_action.name, @model.ar_model.table_name + '/' + custom_action.path, class: 'primary-btn ml-2', method: custom_action.verb
27
+ - if custom_action.display_type == :button
28
+ = link_to custom_action.name.titleize, @model.ar_model.table_name + '/' + custom_action.path, class: 'primary-btn ml-2', method: custom_action.verb
29
+ - elsif custom_action.display_type == :modal
30
+ = link_to custom_action.name.titleize, '', class: 'primary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
28
31
  - elsif @model.current_action.name == 'show'
29
32
  - @model.available_actions.select{|act| act if act.route_type == 'member'}.each do |custom_action|
30
- - if custom_action.display_if.call(@ar_object)
31
- = link_to custom_action.name, custom_action.path.gsub(':id', params[:id]), class: 'primary-btn ml-2', method: custom_action.verb
33
+ - if custom_action.display_type == :button && custom_action.display_if.call(@ar_object)
34
+ = link_to custom_action.name.titleize, custom_action.path.gsub(':id', params[:id]), class: 'primary-btn ml-2', method: custom_action.verb
35
+ - elsif custom_action.display_type == :modal && custom_action.display_if.call(@ar_object)
36
+ = link_to custom_action.name.titleize, '', class: 'primary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
@@ -1,6 +1,6 @@
1
1
  .cm-index-page
2
2
  .index-page
3
3
  .index-page__table-container.pt-0
4
- == render 'cm_admin/main/associated_table'
4
+ == render partial: 'cm_admin/main/associated_table'
5
5
 
6
- = column_pop_up(@associated_model)
6
+ // = column_pop_up(@associated_model)
@@ -0,0 +1,9 @@
1
+ - @model.available_actions.select{|act| act if act.route_type == 'collection' && act.display_type == :modal}.each do |custom_action|
2
+ .modal.fade id="#{custom_action.name.classify}Modal" aria-hidden="true" aria-labelledby="exampleModalLabel" tabindex="1"
3
+ .modal-dialog
4
+ .modal-content
5
+ .modal-header
6
+ h5#exampleModalLabel.modal-title = custom_action.name.classify
7
+ button.btn-close aria-label="Close" data-bs-dismiss="modal" type="button"
8
+ .modal-body
9
+ = render partial: custom_action.partial
@@ -19,7 +19,7 @@ html
19
19
  .cm-admin
20
20
  = render 'layouts/left_sidebar_nav'
21
21
  .panel-area
22
- - if defined?(@action) && @action&.layout_type.to_s == 'cm_association_show'
22
+ - if defined?(@action) && (@action&.layout_type.to_s == 'cm_association_show' || @action.parent == "show")
23
23
  .show-page.page-container
24
24
  .show-page__tabs.sticky-container
25
25
  .cm-tabs-bar
@@ -27,16 +27,18 @@ html
27
27
  == render 'cm_admin/main/tabs'
28
28
  .show-page__inner.scrollable
29
29
  = yield
30
- - elsif defined?(@action) && @action&.layout_type.to_s == 'cm_association_index'
30
+ - elsif defined?(@action) && (@action&.layout_type.to_s == 'cm_association_index' || @action.parent == "index")
31
31
  .show-page.page-container
32
32
  .show-page__tabs.sticky-container
33
33
  .cm-tabs-bar
34
34
  == render 'cm_admin/main/top_navbar'
35
35
  == render 'cm_admin/main/tabs'
36
- - if @associated_model.filters.present?
36
+ - if @associated_model && @associated_model.filters.present?
37
37
  .index-page__filters
38
38
  == render partial: 'cm_admin/main/filters', locals: { filters: @associated_model.filters }
39
39
  = yield
40
40
  - else
41
41
  = yield
42
- = render 'layouts/flash_message'
42
+ = render 'layouts/flash_message'
43
+ = render 'layouts/custom_action_modals'
44
+
data/config/routes.rb CHANGED
@@ -10,7 +10,7 @@ CmAdmin::Engine.routes.draw do
10
10
 
11
11
  # Defining action routes for each model
12
12
  CmAdmin.cm_admin_models.each do |model|
13
- model.available_actions.each do |act|
13
+ model.available_actions.sort_by {|act| act.class}.each do |act|
14
14
  scope model.name.tableize do
15
15
  send(act.verb, act.path.present? ? act.path : act.name, to: "#{model.name.underscore}##{act.name}")
16
16
  end
@@ -92,7 +92,6 @@ module CmAdmin
92
92
  # If model is User, controller will be UsersController
93
93
  def define_controller
94
94
  klass = Class.new(CmAdmin::ApplicationController) do
95
-
96
95
  $available_actions.each do |action|
97
96
  define_method action.name.to_sym do
98
97
 
@@ -102,6 +101,8 @@ module CmAdmin
102
101
  @action = CmAdmin::Models::Action.find_by(@model, name: action_name)
103
102
  @ar_object = @model.try(@action.parent || action_name, params)
104
103
  @ar_object, @associated_model, @associated_ar_object = @model.custom_controller_action(action_name, params.permit!) if !@ar_object.present? && params[:id].present?
104
+ aar_model = request.url.split('/')[-2].classify.constantize if params[:aar_id]
105
+ @associated_ar_object = aar_model.find(params[:aar_id]) if params[:aar_id]
105
106
  nested_tables = @model.available_fields[:new].except(:fields).keys
106
107
  nested_tables += @model.available_fields[:edit].except(:fields).keys
107
108
  @reflections = @model.ar_model.reflect_on_all_associations
@@ -126,13 +127,19 @@ module CmAdmin
126
127
  else
127
128
  format.html { render '/cm_admin/main/new' }
128
129
  end
129
- elsif action.class == CmAdmin::Models::CustomAction
130
- redirect_url = request.referrer || "/cm_admin/#{@model.ar_model.table_name}/#{@ar_object.id}"
131
- data = @action.parent == "index" ? @ar_object.data : @ar_object
132
- if @action.code_block.call(@ar_object)
133
- format.html { redirect_to redirect_url }
130
+ elsif action.action_type == :custom
131
+ if action.child_records
132
+ format.html { render action.layout }
133
+ elsif action.display_type == :page
134
+ data = @action.parent == "index" ? @ar_object.data : @ar_object
135
+ format.html { render action.partial }
134
136
  else
135
- format.html { redirect_to redirect_url }
137
+ redirect_url = request.referrer || "/cm_admin/#{@model.ar_model.table_name}/#{@ar_object.id}"
138
+ if @action.code_block.call(@ar_object)
139
+ format.html { redirect_to redirect_url }
140
+ else
141
+ format.html { redirect_to redirect_url }
142
+ end
136
143
  end
137
144
  elsif action.layout.present?
138
145
  if request.xhr? && action.partial.present?
@@ -4,7 +4,9 @@ module CmAdmin
4
4
  module Models
5
5
  class Action
6
6
  include Actions::Blocks
7
- attr_accessor :name, :verb, :layout_type, :layout, :partial, :path, :page_title, :page_description, :child_records, :is_nested_field, :nested_table_name, :parent, :display_if, :route_type, :code_block
7
+ attr_accessor :name, :verb, :layout_type, :layout, :partial, :path, :page_title, :page_description,
8
+ :child_records, :is_nested_field, :nested_table_name, :parent, :display_if, :route_type, :code_block,
9
+ :display_type, :action_type
8
10
 
9
11
  def initialize(attributes = {}, &block)
10
12
  if attributes[:layout_type].present? && attributes[:layout].nil? && attributes[:partial].nil?
@@ -25,7 +27,9 @@ module CmAdmin
25
27
 
26
28
  def set_default_values
27
29
  self.is_nested_field = false
28
- self.display_if = true
30
+ self.display_if = lambda { |arg| return true }
31
+ self.display_type = :button
32
+ self.action_type = :default
29
33
  end
30
34
 
31
35
  class << self
@@ -65,7 +65,7 @@ module CmAdmin
65
65
  nested_fields = nested_tables.map {|table|
66
66
  Hash[
67
67
  table.to_s + '_attributes',
68
- table.to_s.singularize.titleize.constantize.columns.map(&:name).reject { |i| CmAdmin::REJECTABLE_FIELDS.include?(i) }.map(&:to_sym) + [:id, :_destroy]
68
+ table.to_s.classify.constantize.columns.map(&:name).reject { |i| CmAdmin::REJECTABLE_FIELDS.include?(i) }.map(&:to_sym) + [:id, :_destroy]
69
69
  ]
70
70
  }
71
71
  permittable_fields += nested_fields
@@ -3,6 +3,13 @@ module CmAdmin
3
3
  module DslMethod
4
4
  extend ActiveSupport::Concern
5
5
 
6
+ def cm_page(name: nil, partial: nil, path: nil, route_type: nil, page_title: nil, display_type: :button, &block)
7
+ action = CmAdmin::Models::CustomAction.new(name: name, verb: :get, partial: partial, path: path, route_type: route_type, display_type: display_type, &block)
8
+ @available_actions << action
9
+ # @available_actions << CmAdmin::Models::CustomAction.new(name: name, verb: 'get', layout: 'cm_admin', partial: partial, path: path, parent: self.current_action.name, route_type: route_type, page_title: page_title, display_type: display_type, &block)
10
+ # @current_action = CmAdmin::Models::CustomAction.find_by(self, name: name)
11
+ end
12
+
6
13
  def cm_index(page_title: nil ,page_description: nil, &block)
7
14
  @current_action = CmAdmin::Models::Action.find_by(self, name: 'index')
8
15
  @current_action.page_title = page_title
@@ -49,7 +56,9 @@ module CmAdmin
49
56
  @current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
50
57
  @available_tabs << CmAdmin::Models::Tab.new(tab_name, '', &block)
51
58
  else
52
- action = CmAdmin::Models::Action.new(name: custom_action.to_s, verb: :get, path: ':id/'+custom_action, layout_type: layout_type, layout: layout, partial: partial, child_records: associated_model)
59
+ action = CmAdmin::Models::Action.new(name: custom_action.to_s, verb: :get, path: ':id/'+custom_action,
60
+ layout_type: layout_type, layout: layout, partial: partial, child_records: associated_model,
61
+ action_type: :custom, display_type: :page)
53
62
  @available_actions << action
54
63
  @current_action = action
55
64
  @available_tabs << CmAdmin::Models::Tab.new(tab_name, custom_action, &block)
@@ -109,8 +118,12 @@ module CmAdmin
109
118
  # end
110
119
  # end
111
120
  # end
112
- def custom_action(name: nil, verb: nil, layout: nil, partial: nil, path: nil, display_if: lambda { |arg| return true }, route_type: nil, &block)
113
- @available_actions << CmAdmin::Models::CustomAction.new(name: name, verb: verb, layout: layout, partial: partial, path: path, parent: self.current_action.name, display_if: display_if, route_type: route_type, &block)
121
+ def custom_action(name: nil, verb: nil, layout: nil, layout_type: nil, partial: nil, path: nil, display_type: nil, display_if: lambda { |arg| return true }, route_type: nil, &block)
122
+ action = CmAdmin::Models::CustomAction.new(
123
+ name: name, verb: verb, layout: layout, layout_type: layout_type, partial: partial, path: path,
124
+ parent: self.current_action.name, display_type: display_type, display_if: display_if,
125
+ action_type: :custom, route_type: route_type, &block)
126
+ @available_actions << action
114
127
  # self.class.class_eval(&block)
115
128
  end
116
129
 
@@ -1,3 +1,3 @@
1
1
  module CmAdmin
2
- VERSION = "0.4.4"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -6,8 +6,10 @@ module CmAdmin
6
6
  end
7
7
 
8
8
  def action_title
9
- if @model.current_action.page_title
10
- title = @model.current_action.page_title
9
+ show_action = CmAdmin::Models::Action.find_by(@model, name: 'show')
10
+ title = @model.current_action.page_title || show_action.page_title
11
+ if title
12
+ title = (title.class == Symbol) ? @ar_object.send(title) : title
11
13
  else
12
14
  title = "#{@model.name}"
13
15
  case action_name
@@ -24,8 +26,11 @@ module CmAdmin
24
26
  end
25
27
 
26
28
  def action_description
29
+ show_action = CmAdmin::Models::Action.find_by(@model, name: 'show')
27
30
  if @model.current_action.page_description
28
31
  title = @model.current_action.page_description
32
+ elsif show_action.page_description
33
+ title = show_action.page_description
29
34
  else
30
35
  title = "#{@model.name}"
31
36
  case action_name
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cm-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - sajinmp
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2022-01-07 00:00:00.000000000 Z
13
+ date: 2022-01-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: pagy
@@ -152,6 +152,7 @@ files:
152
152
  - app/views/cm_admin/main/new.html.slim
153
153
  - app/views/cm_admin/main/show.html.slim
154
154
  - app/views/cm_admin/static/error_401.html.slim
155
+ - app/views/layouts/_custom_action_modals.html.slim
155
156
  - app/views/layouts/_flash_message.html.slim
156
157
  - app/views/layouts/_left_sidebar_nav.html.slim
157
158
  - app/views/layouts/_quick_links.html.slim