cm-admin 0.4.3 → 0.5.3

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: 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