cm-admin 0.4.3 → 0.5.3

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: dfec95ffd823756a98b20c323fbe673123031f28c0ba4da0f99148b9ecb5bde6
4
- data.tar.gz: 78601ced8fbacade877acb859adb35d3467fb59a30f8378378d4ea18187ca38f
3
+ metadata.gz: bcbb26a08fa072ec95a1363e72c63ebfad6a1c661d303d50af5379f2f5bce0b1
4
+ data.tar.gz: 2f2526862a9312a48f768eb001ba52f6365182e105556136e2e763e96e21484a
5
5
  SHA512:
6
- metadata.gz: 74277a250eea68170ba20c9f084a5733c07ffddd2948a189e43b183900ec125ca8768dcffeec4308b85de1cfa6e376193d1513279c3b083b0a1c6f65b7e4d6d9
7
- data.tar.gz: b1f323c0340c805ad4190d35d0e87cec5fb922e35eafea36091c8fb7c127e352fcbc8e3a10c422b0b42bbd30b09c97acb6e628b03f4b170865ecea2809edea68
6
+ metadata.gz: c8d834bc6b9716aeef9b5c82137106c9aae52afd435ef384e7543be09fd4f18cb3f593374aebf5d840c9d17f7d0ecb99a9c9066508a1645fdff32d433d9ef983
7
+ data.tar.gz: c21ae398e2d2542186251a98bc706e203164e70319e841041527122358cd9cf3162620d8b860570b5f288f2ba1734c73a2a3a83da917c8b159120ad28c8febae
@@ -12,3 +12,13 @@
12
12
  }
13
13
 
14
14
  }
15
+
16
+ .nested-field-wrapper {
17
+ label {
18
+ font-size: 14px;
19
+ margin-bottom: 16px;
20
+ }
21
+ .nested-fields {
22
+ margin-bottom: 16px;
23
+ }
24
+ }
@@ -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,7 +1,8 @@
1
1
  .nested-fields
2
2
  - @model.available_fields[action_name.to_sym][assoc_name].each do |field|
3
- = f.label field.field_name, class: 'field-label'
4
- br
5
- = input_field_for_column(f, field)
6
- - if @reflections.select {|x| x if x.name == assoc_name}.first.macro == :has_many
7
- = link_to_remove_association "remove #{assoc_name}", f
3
+ .row
4
+ .col-sm-10
5
+ = input_field_for_column(f, field)
6
+ .col-sm-2
7
+ - if @reflections.select {|x| x if x.name == assoc_name}.first.macro == :has_many
8
+ = link_to_remove_association "x", f
@@ -1,6 +1,7 @@
1
- #tasks
1
+ .nested-field-wrapper
2
+ label.field-label = table_name.to_s.titleize
2
3
  = f.fields_for table_name do |record|
3
4
  = render partial: '/cm_admin/main/nested_fields', locals: { f: record, assoc_name: table_name }
4
5
  - if @reflections.select {|x| x if x.name == table_name}.first.macro == :has_many
5
6
  .links
6
- = link_to_add_association "add #{table_name}", f, table_name, partial: '/cm_admin/main/nested_fields', render_options: {locals: { assoc_name: table_name }}
7
+ = link_to_add_association "+ Add #{table_name.to_s.titleize}", f, table_name, partial: '/cm_admin/main/nested_fields', render_options: {locals: { assoc_name: table_name }}
@@ -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/#{ar_object.model_name.collection}/#{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
28
- - elsif @model.current_action.name == 'show'
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" }
31
+ - elsif @model.current_action.name == 'show' || @action.layout_type == "cm_association_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
@@ -10,6 +10,8 @@ html
10
10
  = stylesheet_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
11
11
  link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" /
12
12
  = javascript_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
13
+ = javascript_include_tag 'cm_admin/custom', 'data-turbolinks-track': 'reload'
14
+ = stylesheet_link_tag 'cm_admin/custom', media: 'all', 'data-turbolinks-track': 'reload'
13
15
  script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"
14
16
  script src="https://raw.githack.com/SortableJS/Sortable/master/Sortable.js"
15
17
  body
@@ -19,7 +21,7 @@ html
19
21
  .cm-admin
20
22
  = render 'layouts/left_sidebar_nav'
21
23
  .panel-area
22
- - if defined?(@action) && @action&.layout_type.to_s == 'cm_association_show'
24
+ - if defined?(@action) && (@action&.layout_type.to_s == 'cm_association_show' || @action.parent == "show")
23
25
  .show-page.page-container
24
26
  .show-page__tabs.sticky-container
25
27
  .cm-tabs-bar
@@ -27,16 +29,18 @@ html
27
29
  == render 'cm_admin/main/tabs'
28
30
  .show-page__inner.scrollable
29
31
  = yield
30
- - elsif defined?(@action) && @action&.layout_type.to_s == 'cm_association_index'
32
+ - elsif defined?(@action) && (@action&.layout_type.to_s == 'cm_association_index' || @action.parent == "index")
31
33
  .show-page.page-container
32
34
  .show-page__tabs.sticky-container
33
35
  .cm-tabs-bar
34
36
  == render 'cm_admin/main/top_navbar'
35
37
  == render 'cm_admin/main/tabs'
36
- - if @associated_model.filters.present?
38
+ - if @associated_model && @associated_model.filters.present?
37
39
  .index-page__filters
38
40
  == render partial: 'cm_admin/main/filters', locals: { filters: @associated_model.filters }
39
41
  = yield
40
42
  - else
41
43
  = yield
42
- = render 'layouts/flash_message'
44
+ = render 'layouts/flash_message'
45
+ = render 'layouts/custom_action_modals'
46
+
data/cm_admin.gemspec CHANGED
@@ -3,8 +3,8 @@ require_relative 'lib/cm_admin/version'
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "cm-admin"
5
5
  spec.version = CmAdmin::VERSION
6
- spec.authors = ["sajinmp", "anbublacky", "manikandan0603"]
7
- spec.email = ["sajinprasadkm@gmail.com", "anbublacky@gmail.com"]
6
+ spec.authors = ["sajinmp", "anbublacky", "AdityaTiwari2102"]
7
+ spec.email = ["sajinprasadkm@gmail.com", "anbublacky@gmail.com", "taditya.tiwari007@gmail.com"]
8
8
 
9
9
  spec.summary = %q{This is an admin panel gem}
10
10
  spec.description = %q{This is an admin panel gem}
data/config/routes.rb CHANGED
@@ -10,9 +10,9 @@ 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
- send(act.verb, act.path.present? ? act.path : act.name, to: "#{model.name.underscore}##{act.name}")
15
+ send(act.verb, act.path.present? ? act.path : act.name, to: "#{model.name.underscore}##{act.name}", as: "#{model.name.underscore}_#{act.name}")
16
16
  end
17
17
  end
18
18
  end
@@ -12,6 +12,8 @@ module CmAdmin
12
12
  initializer 'RailsAdmin precompile hook', group: :all do |app|
13
13
  app.config.assets.precompile += %w(
14
14
  cm_admin/cm_admin.css
15
+ cm_admin/custom.js
16
+ cm_admin/custom.css
15
17
  )
16
18
  end
17
19
 
@@ -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
 
@@ -100,8 +99,11 @@ module CmAdmin
100
99
  @model = CmAdmin::Model.find_by(name: controller_name.classify)
101
100
  @model.params = params
102
101
  @action = CmAdmin::Models::Action.find_by(@model, name: action_name)
102
+ @model.current_action = @action
103
103
  @ar_object = @model.try(@action.parent || action_name, params)
104
104
  @ar_object, @associated_model, @associated_ar_object = @model.custom_controller_action(action_name, params.permit!) if !@ar_object.present? && params[:id].present?
105
+ aar_model = request.url.split('/')[-2].classify.constantize if params[:aar_id]
106
+ @associated_ar_object = aar_model.find(params[:aar_id]) if params[:aar_id]
105
107
  nested_tables = @model.available_fields[:new].except(:fields).keys
106
108
  nested_tables += @model.available_fields[:edit].except(:fields).keys
107
109
  @reflections = @model.ar_model.reflect_on_all_associations
@@ -126,13 +128,19 @@ module CmAdmin
126
128
  else
127
129
  format.html { render '/cm_admin/main/new' }
128
130
  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 }
131
+ elsif action.action_type == :custom
132
+ if action.child_records
133
+ format.html { render action.layout }
134
+ elsif action.display_type == :page
135
+ data = @action.parent == "index" ? @ar_object.data : @ar_object
136
+ format.html { render action.partial }
134
137
  else
135
- format.html { redirect_to redirect_url }
138
+ if @action.code_block.call(@ar_object)
139
+ redirect_url = @action.redirection_url || request.referrer || "/cm_admin/#{@model.ar_model.table_name}/#{@ar_object.id}"
140
+ format.html { redirect_to redirect_url }
141
+ else
142
+ format.html { redirect_to request.referrer }
143
+ end
136
144
  end
137
145
  elsif action.layout.present?
138
146
  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, :redirection_url
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.3"
2
+ VERSION = "0.5.3"
3
3
  end
@@ -22,7 +22,7 @@ module CmAdmin
22
22
 
23
23
  def form_with_all_fields(resource, method)
24
24
  columns = resource.class.columns.dup
25
- table_name = resource.class.table_name
25
+ table_name = resource.model_name.collection
26
26
  columns.reject! { |i| REJECTABLE.include?(i.name) }
27
27
  url = CmAdmin::Engine.mount_path + "/#{table_name}/#{resource.id}"
28
28
  set_form_for_fields(resource, columns, url, method)
@@ -30,7 +30,7 @@ module CmAdmin
30
30
 
31
31
  def form_with_mentioned_fields(resource, available_fields, method)
32
32
  # columns = resource.class.columns.select { |i| available_fields.map(&:field_name).include?(i.name.to_sym) }
33
- table_name = resource.class.table_name
33
+ table_name = resource.model_name.collection
34
34
  # columns.reject! { |i| REJECTABLE.include?(i.name) }
35
35
  url = CmAdmin::Engine.mount_path + "/#{table_name}/#{resource.id}"
36
36
  set_form_for_fields(resource, available_fields, url, method)
@@ -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,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cm-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - sajinmp
8
8
  - anbublacky
9
- - manikandan0603
9
+ - AdityaTiwari2102
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2022-01-05 00:00:00.000000000 Z
13
+ date: 2022-02-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: pagy
@@ -86,6 +86,7 @@ description: This is an admin panel gem
86
86
  email:
87
87
  - sajinprasadkm@gmail.com
88
88
  - anbublacky@gmail.com
89
+ - taditya.tiwari007@gmail.com
89
90
  executables: []
90
91
  extensions: []
91
92
  extra_rdoc_files: []
@@ -152,6 +153,7 @@ files:
152
153
  - app/views/cm_admin/main/new.html.slim
153
154
  - app/views/cm_admin/main/show.html.slim
154
155
  - app/views/cm_admin/static/error_401.html.slim
156
+ - app/views/layouts/_custom_action_modals.html.slim
155
157
  - app/views/layouts/_flash_message.html.slim
156
158
  - app/views/layouts/_left_sidebar_nav.html.slim
157
159
  - app/views/layouts/_quick_links.html.slim