cm-admin 0.8.8 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/.stylelintrc.json +3 -0
  3. data/.github/workflows/linters.yml +31 -0
  4. data/Gemfile +5 -1
  5. data/Gemfile.lock +20 -9
  6. data/app/assets/stylesheets/cm_admin/base/auth.scss +1 -1
  7. data/app/assets/stylesheets/cm_admin/base/common.scss +3 -3
  8. data/app/assets/stylesheets/cm_admin/base/filters.scss +11 -17
  9. data/app/assets/stylesheets/cm_admin/base/form.scss +6 -12
  10. data/app/assets/stylesheets/cm_admin/base/main-nav.scss +3 -7
  11. data/app/assets/stylesheets/cm_admin/base/navbar.scss +3 -2
  12. data/app/assets/stylesheets/cm_admin/base/quicksearch.scss +4 -6
  13. data/app/assets/stylesheets/cm_admin/base/scaffold.scss +45 -2
  14. data/app/assets/stylesheets/cm_admin/base/show.scss +11 -9
  15. data/app/assets/stylesheets/cm_admin/base/sidebar.scss +9 -19
  16. data/app/assets/stylesheets/cm_admin/base/table.scss +258 -325
  17. data/app/assets/stylesheets/cm_admin/base/tabs.scss +1 -2
  18. data/app/assets/stylesheets/cm_admin/components/_buttons.scss +19 -6
  19. data/app/assets/stylesheets/cm_admin/components/_drawer.scss +4 -8
  20. data/app/assets/stylesheets/cm_admin/components/_dropdown-popup.scss +1 -2
  21. data/app/assets/stylesheets/cm_admin/components/_input.scss +1 -1
  22. data/app/assets/stylesheets/cm_admin/components/_status-tag.scss +3 -2
  23. data/app/assets/stylesheets/cm_admin/helpers/_variable.scss +4 -0
  24. data/app/assets/stylesheets/cm_admin/scaffold.scss +2 -2
  25. data/app/controllers/cm_admin/resource_controller.rb +4 -2
  26. data/app/helpers/cm_admin/application_helper.rb +6 -0
  27. data/app/javascript/packs/cm_admin/filters.js +1 -1
  28. data/app/javascript/packs/cm_admin/scaffolds.js +4 -1
  29. data/app/models/concerns/cm_admin/file_import.rb +13 -7
  30. data/app/views/cm_admin/main/_actions_dropdown.html.slim +2 -2
  31. data/app/views/cm_admin/main/_associated_table.html.slim +25 -23
  32. data/app/views/cm_admin/main/_member_custom_action_modal.html.slim +1 -1
  33. data/app/views/cm_admin/main/_table.html.slim +14 -15
  34. data/app/views/cm_admin/main/associated_index.html.slim +4 -5
  35. data/app/views/cm_admin/main/index.html.slim +13 -14
  36. data/app/views/cm_admin/main/show.html.slim +2 -2
  37. data/app/views/layouts/cm_admin.html.slim +5 -5
  38. data/lib/cm_admin/model.rb +6 -1
  39. data/lib/cm_admin/models/action.rb +1 -1
  40. data/lib/cm_admin/models/column.rb +16 -3
  41. data/lib/cm_admin/models/dsl_method.rb +17 -4
  42. data/lib/cm_admin/models/field.rb +7 -1
  43. data/lib/cm_admin/models/utils/associations.rb +25 -0
  44. data/lib/cm_admin/version.rb +1 -1
  45. data/lib/cm_admin/view_helpers/field_display_helper.rb +25 -1
  46. data/lib/cm_admin/view_helpers/page_info_helper.rb +7 -3
  47. data/package-lock.json +2801 -158
  48. data/package.json +2 -0
  49. data/tmp/cache/webpacker/last-compilation-digest-development +1 -1
  50. data/yarn.lock +6949 -5133
  51. metadata +6 -3
@@ -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, :precision, :prefix, :suffix, :tag_class, :display_if
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module CmAdmin
2
- VERSION = "0.8.8"
2
+ VERSION = '0.9.0'
3
3
  end
@@ -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
- p = field.label.present? ? field.label.to_s : field.field_name.to_s.titleize
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
 
@@ -35,6 +42,9 @@ module CmAdmin
35
42
  when :datetime
36
43
  self.extend LocalTimeHelper
37
44
  local_time(ar_object.send(field.field_name).strftime(field.format || "%d/%m/%Y").to_s) if ar_object.send(field.field_name)
45
+ when :date
46
+ self.extend LocalTimeHelper
47
+ local_date(ar_object.send(field.field_name), (field.format || '%B %e, %Y'))
38
48
  when :text
39
49
  ar_object.send(field.field_name)
40
50
  when :custom
@@ -70,6 +80,14 @@ module CmAdmin
70
80
  image_tag('https://cm-admin.s3.ap-south-1.amazonaws.com/gem_static_assets/image_not_available.png', height: 50, width: 50)
71
81
  end
72
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
73
91
  end
74
92
  end
75
93
 
@@ -88,6 +106,12 @@ module CmAdmin
88
106
  end
89
107
  end
90
108
  end
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
91
115
  end
92
116
  end
93
117
  end
@@ -71,14 +71,18 @@ 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.name.titleize, @model.ar_model.table_name + '/' + custom_action.path, class: 'secondary-btn ml-2', method: custom_action.verb
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.name.titleize, custom_action.path.gsub(':id', params[:id]), class: 'secondary-btn ml-2', method: custom_action.verb
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.name.titleize, '', class: 'secondary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
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
82
86
  end
83
87
  end
84
88
  end