cm-admin 0.8.9 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/.stylelintrc.json +3 -0
- data/.github/workflows/linters.yml +31 -0
- data/Gemfile +5 -1
- data/Gemfile.lock +24 -11
- data/app/assets/stylesheets/cm_admin/base/auth.scss +1 -1
- data/app/assets/stylesheets/cm_admin/base/common.scss +3 -3
- data/app/assets/stylesheets/cm_admin/base/filters.scss +11 -17
- data/app/assets/stylesheets/cm_admin/base/form.scss +119 -50
- data/app/assets/stylesheets/cm_admin/base/main-nav.scss +3 -7
- data/app/assets/stylesheets/cm_admin/base/navbar.scss +3 -2
- data/app/assets/stylesheets/cm_admin/base/quicksearch.scss +4 -6
- data/app/assets/stylesheets/cm_admin/base/scaffold.scss +47 -2
- data/app/assets/stylesheets/cm_admin/base/show.scss +11 -9
- data/app/assets/stylesheets/cm_admin/base/sidebar.scss +9 -19
- data/app/assets/stylesheets/cm_admin/base/table.scss +258 -325
- data/app/assets/stylesheets/cm_admin/base/tabs.scss +1 -2
- data/app/assets/stylesheets/cm_admin/components/_buttons.scss +19 -6
- data/app/assets/stylesheets/cm_admin/components/_drawer.scss +4 -8
- data/app/assets/stylesheets/cm_admin/components/_dropdown-popup.scss +1 -2
- data/app/assets/stylesheets/cm_admin/components/_input.scss +1 -1
- data/app/assets/stylesheets/cm_admin/components/_status-tag.scss +3 -2
- data/app/assets/stylesheets/cm_admin/helpers/_variable.scss +4 -0
- data/app/assets/stylesheets/cm_admin/scaffold.scss +2 -2
- data/app/controllers/cm_admin/resource_controller.rb +4 -2
- data/app/javascript/packs/cm_admin/filters.js +1 -1
- data/app/javascript/packs/cm_admin/scaffolds.js +34 -1
- data/app/views/cm_admin/main/_actions_dropdown.html.slim +2 -2
- data/app/views/cm_admin/main/_associated_table.html.slim +20 -21
- data/app/views/cm_admin/main/_member_custom_action_modal.html.slim +1 -1
- data/app/views/cm_admin/main/_nested_fields.html.slim +26 -9
- data/app/views/cm_admin/main/_nested_table_form.html.slim +9 -10
- data/app/views/cm_admin/main/_table.html.slim +13 -14
- data/app/views/cm_admin/main/_tabs.html.slim +1 -1
- data/app/views/cm_admin/main/associated_index.html.slim +4 -5
- data/app/views/cm_admin/main/index.html.slim +13 -14
- data/app/views/cm_admin/main/show.html.slim +2 -2
- data/app/views/layouts/cm_admin.html.slim +5 -5
- data/lib/cm_admin/model.rb +6 -1
- data/lib/cm_admin/models/action.rb +1 -1
- data/lib/cm_admin/models/column.rb +16 -3
- data/lib/cm_admin/models/dsl_method.rb +17 -4
- data/lib/cm_admin/models/field.rb +7 -1
- data/lib/cm_admin/models/filter.rb +1 -1
- data/lib/cm_admin/models/utils/associations.rb +25 -0
- data/lib/cm_admin/version.rb +1 -1
- data/lib/cm_admin/view_helpers/field_display_helper.rb +21 -1
- data/lib/cm_admin/view_helpers/page_info_helper.rb +11 -3
- data/package-lock.json +2868 -229
- data/package.json +2 -0
- data/tmp/cache/webpacker/last-compilation-digest-development +1 -1
- data/yarn.lock +1656 -48
- metadata +5 -2
@@ -77,10 +77,23 @@ module CmAdmin
|
|
77
77
|
def column(field_name, options={})
|
78
78
|
@available_fields[@current_action.name.to_sym] ||= []
|
79
79
|
if @available_fields[@current_action.name.to_sym].select{|x| x.lockable}.size > 0 && options[:lockable]
|
80
|
-
raise
|
80
|
+
raise 'Only one column can be locked in a table.'
|
81
81
|
end
|
82
82
|
|
83
|
-
|
83
|
+
duplicate_columns = @available_fields[@current_action.name.to_sym].filter{|x| x.field_name.to_sym == field_name}
|
84
|
+
terminate = false
|
85
|
+
|
86
|
+
if duplicate_columns.size.positive?
|
87
|
+
duplicate_columns.each do |column|
|
88
|
+
if options[:field_type].to_s != 'association'
|
89
|
+
terminate = true
|
90
|
+
elsif options[:field_type].to_s == 'association' && column.association_name.to_s == options[:association_name].to_s
|
91
|
+
terminate = true
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
unless terminate
|
84
97
|
@available_fields[@current_action.name.to_sym] << CmAdmin::Models::Column.new(field_name, options)
|
85
98
|
end
|
86
99
|
end
|
@@ -107,9 +120,9 @@ module CmAdmin
|
|
107
120
|
# end
|
108
121
|
# end
|
109
122
|
# end
|
110
|
-
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, icon_name: 'fa fa-th-large', &block)
|
123
|
+
def custom_action(name: nil, display_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, icon_name: 'fa fa-th-large', &block)
|
111
124
|
action = CmAdmin::Models::CustomAction.new(
|
112
|
-
name: name, verb: verb, layout: layout, layout_type: layout_type, partial: partial, path: path,
|
125
|
+
name: name, display_name: display_name, verb: verb, layout: layout, layout_type: layout_type, partial: partial, path: path,
|
113
126
|
parent: self.current_action.name, display_type: display_type, display_if: display_if,
|
114
127
|
action_type: :custom, route_type: route_type, icon_name: icon_name, &block)
|
115
128
|
@available_actions << action
|
@@ -1,9 +1,13 @@
|
|
1
|
+
require_relative 'utils/associations'
|
2
|
+
|
1
3
|
module CmAdmin
|
2
4
|
module Models
|
3
5
|
class Field
|
6
|
+
include Utils::Associations
|
4
7
|
|
5
8
|
attr_accessor :field_name, :label, :header, :field_type, :format, :precision, :height,
|
6
|
-
:width, :helper_method, :preview, :custom_link, :
|
9
|
+
:width, :helper_method, :preview, :custom_link, :prefix, :suffix, :tag_class,
|
10
|
+
:display_if, :association_name, :association_type
|
7
11
|
|
8
12
|
def initialize(field_name, attributes = {})
|
9
13
|
@field_name = field_name
|
@@ -14,6 +18,8 @@ module CmAdmin
|
|
14
18
|
self.height = 50 if self.field_type == :image && self.height.nil?
|
15
19
|
self.width = 50 if self.field_type == :image && self.width.nil?
|
16
20
|
self.display_if = lambda { |arg| return true } if self.display_if.nil?
|
21
|
+
|
22
|
+
validation_for_association
|
17
23
|
end
|
18
24
|
|
19
25
|
def set_default_values
|
@@ -70,7 +70,7 @@ module CmAdmin
|
|
70
70
|
|
71
71
|
if filter.db_column_name.map{|x| x.is_a?(Hash)}.include?(true)
|
72
72
|
associations_hash = filter.db_column_name.select{|x| x if x.is_a?(Hash)}.last
|
73
|
-
records = records.
|
73
|
+
records = records.left_joins(associations_hash.keys).distinct
|
74
74
|
end
|
75
75
|
|
76
76
|
records = records.where(
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module CmAdmin
|
2
|
+
module Models
|
3
|
+
module Utils
|
4
|
+
module Associations
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
def validation_for_association
|
8
|
+
return unless field_type.to_s == "association"
|
9
|
+
|
10
|
+
raise ArgumentError, 'Expected association_name and association_type to be present' if association_name.nil? || association_type.nil?
|
11
|
+
|
12
|
+
if association_type.to_s == 'polymorphic'
|
13
|
+
raise ArgumentError, "Expected field_name - #{field_name} - to be an array of hash. Eg, [{table_name_1: 'column_name_1'}, {table_name_2: 'column_name_2'}]" unless field_name.is_a?(Array)
|
14
|
+
|
15
|
+
field_name.each do |element|
|
16
|
+
raise ArgumentError, "Expected element #{element} to be a hash. Eg, [{table_name_1: 'column_name_1'}, {table_name_2: 'column_name_2'}]" unless element.is_a?(Hash)
|
17
|
+
end
|
18
|
+
elsif ['belongs_to', 'has_one'].include? association_type.to_s
|
19
|
+
raise ArgumentError, "Expected field_name - #{field_name} to be a String or Symbol" unless field_name.is_a?(Symbol) || field_name.is_a?(String)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/cm_admin/version.rb
CHANGED
@@ -11,7 +11,14 @@ module CmAdmin
|
|
11
11
|
|
12
12
|
def show_field_label(ar_object, field)
|
13
13
|
content_tag(:div, class: "info-split__lhs") do
|
14
|
-
|
14
|
+
field_label = if field.label.present?
|
15
|
+
field.label.to_s
|
16
|
+
elsif field.association_type.to_s == "polymorphic"
|
17
|
+
ar_object.send(field.association_name).class.to_s.titleize
|
18
|
+
else
|
19
|
+
field.field_name.to_s.titleize
|
20
|
+
end
|
21
|
+
p = field_label
|
15
22
|
end
|
16
23
|
end
|
17
24
|
|
@@ -73,6 +80,14 @@ module CmAdmin
|
|
73
80
|
image_tag('https://cm-admin.s3.ap-south-1.amazonaws.com/gem_static_assets/image_not_available.png', height: 50, width: 50)
|
74
81
|
end
|
75
82
|
end
|
83
|
+
when :association
|
84
|
+
if field.association_type.to_s == 'polymorphic'
|
85
|
+
association_name = ar_object.send(field.association_name).class.to_s.underscore
|
86
|
+
field_name = find_field_name(field, association_name)
|
87
|
+
link_to ar_object.send(field.association_name).send(field_name), cm_admin.send("#{association_name}_show_path", ar_object.send(field.association_name).id)
|
88
|
+
elsif ['belongs_to', 'has_one'].include? field.association_type.to_s
|
89
|
+
link_to ar_object.send(field.association_name).send(field.field_name), cm_admin.send("#{field.association_name}_show_path", ar_object.send(field.association_name).id)
|
90
|
+
end
|
76
91
|
end
|
77
92
|
end
|
78
93
|
|
@@ -92,6 +107,11 @@ module CmAdmin
|
|
92
107
|
end
|
93
108
|
end
|
94
109
|
|
110
|
+
def find_field_name(field, association_name)
|
111
|
+
field.field_name.each do |hash|
|
112
|
+
return hash[association_name.to_sym] if hash.has_key?(association_name.to_sym)
|
113
|
+
end
|
114
|
+
end
|
95
115
|
end
|
96
116
|
end
|
97
117
|
end
|
@@ -71,14 +71,22 @@ module CmAdmin
|
|
71
71
|
|
72
72
|
def custom_action_button(custom_action, current_action_name)
|
73
73
|
if current_action_name == "index"
|
74
|
-
link_to custom_action
|
74
|
+
link_to custom_action_title(custom_action), @model.ar_model.table_name + '/' + custom_action.path, class: 'secondary-btn ml-2', method: custom_action.verb
|
75
75
|
elsif current_action_name == "show"
|
76
|
-
link_to custom_action
|
76
|
+
link_to custom_action_title(custom_action), custom_action.path.gsub(':id', params[:id]), class: 'secondary-btn ml-2', method: custom_action.verb
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
80
|
def custom_modal_button(custom_action)
|
81
|
-
link_to custom_action
|
81
|
+
link_to custom_action_title(custom_action), '', class: 'secondary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
|
82
|
+
end
|
83
|
+
|
84
|
+
def custom_action_title(custom_action)
|
85
|
+
custom_action.display_name.to_s.presence || custom_action.name.to_s.titleize
|
86
|
+
end
|
87
|
+
|
88
|
+
def tab_display_name(nav_item_name)
|
89
|
+
nav_item_name.instance_of?(Symbol) ? nav_item_name.to_s.titleize : nav_item_name.to_s
|
82
90
|
end
|
83
91
|
end
|
84
92
|
end
|