cm-admin 0.8.8 → 0.9.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.
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