cm-admin 1.1.8 → 1.2.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 (153) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.vscode/settings.json +3 -0
  4. data/Gemfile.lock +1 -1
  5. data/app/assets/javascripts/cm_admin/scaffolds.js +6 -0
  6. data/app/assets/javascripts/cm_admin/shared_scaffolds.js +97 -81
  7. data/app/assets/stylesheets/cm_admin/base/form.scss +31 -225
  8. data/app/assets/stylesheets/cm_admin/base/navbar.scss +11 -38
  9. data/app/assets/stylesheets/cm_admin/base/quicksearch.scss +3 -4
  10. data/app/assets/stylesheets/cm_admin/base/scaffold.scss +8 -5
  11. data/app/assets/stylesheets/cm_admin/base/show.scss +17 -35
  12. data/app/assets/stylesheets/cm_admin/base/table.scss +8 -14
  13. data/app/assets/stylesheets/cm_admin/components/_buttons.scss +28 -140
  14. data/app/assets/stylesheets/cm_admin/components/_modal.scss +7 -30
  15. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_accordion.scss +158 -0
  16. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_alert.scss +68 -0
  17. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_badge.scss +38 -0
  18. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_breadcrumb.scss +40 -0
  19. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_button-group.scss +142 -0
  20. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_buttons.scss +207 -0
  21. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_card.scss +239 -0
  22. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_carousel.scss +244 -0
  23. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_close.scss +63 -0
  24. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_containers.scss +41 -0
  25. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_dropdown.scss +250 -0
  26. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_forms.scss +9 -0
  27. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_functions.scss +302 -0
  28. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_grid.scss +39 -0
  29. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_helpers.scss +12 -0
  30. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_images.scss +42 -0
  31. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_list-group.scss +197 -0
  32. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_maps.scss +174 -0
  33. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_mixins.scss +42 -0
  34. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_modal.scss +237 -0
  35. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_nav.scss +197 -0
  36. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_navbar.scss +289 -0
  37. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_offcanvas.scss +146 -0
  38. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_pagination.scss +109 -0
  39. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_placeholders.scss +51 -0
  40. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_popover.scss +196 -0
  41. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_progress.scss +68 -0
  42. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_reboot.scss +610 -0
  43. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_root.scss +184 -0
  44. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_spinners.scss +85 -0
  45. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_tables.scss +171 -0
  46. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_toasts.scss +73 -0
  47. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_tooltip.scss +119 -0
  48. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_transitions.scss +27 -0
  49. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_type.scss +106 -0
  50. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_utilities.scss +806 -0
  51. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_variables-dark.scss +85 -0
  52. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_variables.scss +1745 -0
  53. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/bootstrap-grid.scss +62 -0
  54. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/bootstrap-reboot.scss +10 -0
  55. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/bootstrap-utilities.scss +19 -0
  56. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/bootstrap.scss +52 -0
  57. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_floating-labels.scss +95 -0
  58. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_form-check.scss +188 -0
  59. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_form-control.scss +214 -0
  60. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_form-range.scss +91 -0
  61. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_form-select.scss +80 -0
  62. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_form-text.scss +11 -0
  63. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_input-group.scss +132 -0
  64. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_labels.scss +36 -0
  65. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_validation.scss +12 -0
  66. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_clearfix.scss +3 -0
  67. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_color-bg.scss +7 -0
  68. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_colored-links.scss +30 -0
  69. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  70. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_icon-link.scss +25 -0
  71. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_position.scss +36 -0
  72. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_ratio.scss +26 -0
  73. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_stacks.scss +15 -0
  74. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  75. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  76. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  77. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_vr.scss +8 -0
  78. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_alert.scss +18 -0
  79. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_backdrop.scss +14 -0
  80. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_banner.scss +7 -0
  81. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_border-radius.scss +78 -0
  82. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  83. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  84. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_buttons.scss +70 -0
  85. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_caret.scss +69 -0
  86. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_clearfix.scss +9 -0
  87. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_color-mode.scss +21 -0
  88. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  89. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_container.scss +11 -0
  90. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_deprecate.scss +10 -0
  91. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_forms.scss +153 -0
  92. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_gradients.scss +47 -0
  93. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_grid.scss +151 -0
  94. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_image.scss +16 -0
  95. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_list-group.scss +26 -0
  96. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_lists.scss +7 -0
  97. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_pagination.scss +10 -0
  98. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_reset-text.scss +17 -0
  99. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_resize.scss +6 -0
  100. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_table-variants.scss +24 -0
  101. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  102. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_transition.scss +26 -0
  103. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_utilities.scss +97 -0
  104. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_visually-hidden.scss +33 -0
  105. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/jasmine.js +16 -0
  106. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
  107. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
  108. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
  109. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/sass-true/register.js +14 -0
  110. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/sass-true/runner.js +17 -0
  111. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
  112. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/utilities/_api.scss +47 -0
  113. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/vendor/_rfs.scss +348 -0
  114. data/app/assets/stylesheets/cm_admin/dependency/bootstrap.min.css +4 -5
  115. data/app/assets/stylesheets/cm_admin/pages/import_page.scss +3 -10
  116. data/app/controllers/cm_admin/resource_controller.rb +22 -5
  117. data/app/helpers/cm_admin/application_helper.rb +4 -4
  118. data/app/views/cm_admin/main/_actions_dropdown.html.slim +3 -5
  119. data/app/views/cm_admin/main/_associated_table.html.slim +1 -1
  120. data/app/views/cm_admin/main/_custom_action_modal_form.html.slim +6 -0
  121. data/app/views/cm_admin/main/_nested_fields.html.slim +36 -16
  122. data/app/views/cm_admin/main/_nested_table_form.html.slim +17 -8
  123. data/app/views/cm_admin/main/_nested_table_section.html.slim +17 -0
  124. data/app/views/cm_admin/main/_show_section.html.slim +10 -0
  125. data/app/views/cm_admin/main/_tabs.html.slim +2 -2
  126. data/app/views/cm_admin/main/_top_navbar.html.slim +17 -17
  127. data/app/views/cm_admin/main/associated_show.html.slim +5 -4
  128. data/app/views/cm_admin/main/edit.html.slim +18 -18
  129. data/app/views/cm_admin/main/history.html.slim +5 -6
  130. data/app/views/cm_admin/main/import_form.html.slim +3 -3
  131. data/app/views/cm_admin/main/new.html.slim +17 -17
  132. data/app/views/cm_admin/main/show.html.slim +12 -13
  133. data/app/views/layouts/_custom_action_modal.html.slim +11 -0
  134. data/app/views/layouts/_custom_action_modals.html.slim +13 -9
  135. data/app/views/layouts/_destroy_action_modal.html.slim +16 -0
  136. data/app/views/layouts/_quick_links.html.slim +2 -2
  137. data/app/views/layouts/cm_admin.html.slim +13 -15
  138. data/config/routes.rb +1 -3
  139. data/lib/cm_admin/model.rb +1 -0
  140. data/lib/cm_admin/models/custom_action.rb +6 -0
  141. data/lib/cm_admin/models/dsl_method.rb +9 -4
  142. data/lib/cm_admin/models/field.rb +2 -1
  143. data/lib/cm_admin/models/form_field.rb +2 -1
  144. data/lib/cm_admin/models/row.rb +40 -0
  145. data/lib/cm_admin/models/section.rb +20 -3
  146. data/lib/cm_admin/version.rb +1 -1
  147. data/lib/cm_admin/view_helpers/field_display_helper.rb +3 -3
  148. data/lib/cm_admin/view_helpers/form_field_helper.rb +40 -14
  149. data/lib/cm_admin/view_helpers/form_helper.rb +60 -22
  150. data/lib/cm_admin/view_helpers/manage_column_popup_helper.rb +2 -2
  151. data/lib/cm_admin/view_helpers/page_info_helper.rb +4 -4
  152. data/lib/cm_admin/view_helpers.rb +3 -2
  153. metadata +108 -2
@@ -10,6 +10,7 @@ require_relative 'models/column'
10
10
  require_relative 'models/filter'
11
11
  require_relative 'models/export'
12
12
  require_relative 'models/section'
13
+ require_relative 'models/row'
13
14
  require_relative 'models/tab'
14
15
  require_relative 'models/dsl_method'
15
16
  require 'pagy'
@@ -3,6 +3,12 @@ require_relative 'actions/blocks'
3
3
  module CmAdmin
4
4
  module Models
5
5
  class CustomAction < Action
6
+ attr_accessor :modal_configuration
7
+
8
+ def initialize(attributes = {}, &block)
9
+ super
10
+ end
11
+
6
12
  class << self
7
13
  def find_by(model, search_hash)
8
14
  model.available_actions.find { |i| i.name == search_hash[:name] }
@@ -60,9 +60,14 @@ module CmAdmin
60
60
  yield if block
61
61
  end
62
62
 
63
- def cm_section(section_name, display_if: nil, &block)
63
+ def row(display_if: nil, &block)
64
64
  @available_fields[@current_action.name.to_sym] ||= []
65
- @available_fields[@current_action.name.to_sym] << CmAdmin::Models::Section.new(section_name, @current_action, @model, display_if, &block)
65
+ @available_fields[@current_action.name.to_sym] << CmAdmin::Models::Row.new(@current_action, @model, display_if, &block)
66
+ end
67
+
68
+ def cm_section(section_name, display_if: nil, col_size: nil, &block)
69
+ @available_fields[@current_action.name.to_sym] ||= []
70
+ @available_fields[@current_action.name.to_sym] << CmAdmin::Models::Section.new(section_name, @current_action, @model, display_if, col_size, &block)
66
71
  end
67
72
 
68
73
  # This method is deprecated. Use cm_section instead.
@@ -116,13 +121,13 @@ module CmAdmin
116
121
  # end
117
122
  # end
118
123
  # end
119
- def custom_action(name: nil, page_title: nil, page_description: 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)
124
+ def custom_action(name: nil, page_title: nil, page_description: nil, display_name: nil, verb: nil, layout: nil, layout_type: nil, partial: nil, path: nil, display_type: nil, modal_configuration: {}, display_if: lambda { |arg| return true }, route_type: nil, icon_name: 'fa fa-th-large', &block)
120
125
  action = CmAdmin::Models::CustomAction.new(
121
126
  page_title: page_title, page_description: page_description,
122
127
  name: name, display_name: display_name, verb: verb, layout: layout,
123
128
  layout_type: layout_type, partial: partial, path: path,
124
129
  parent: self.current_action.name, display_type: display_type, display_if: display_if,
125
- action_type: :custom, route_type: route_type, icon_name: icon_name, &block)
130
+ action_type: :custom, route_type: route_type, icon_name: icon_name, modal_configuration: modal_configuration, &block)
126
131
  @available_actions << action
127
132
  # self.class.class_eval(&block)
128
133
  end
@@ -7,7 +7,7 @@ module CmAdmin
7
7
 
8
8
  attr_accessor :field_name, :label, :header, :field_type, :format, :precision, :height,
9
9
  :width, :helper_method, :preview, :custom_link, :prefix, :suffix, :tag_class,
10
- :display_if, :association_name, :association_type
10
+ :display_if, :association_name, :association_type, :col_size
11
11
 
12
12
  def initialize(field_name, attributes = {})
13
13
  @field_name = field_name
@@ -24,6 +24,7 @@ module CmAdmin
24
24
 
25
25
  def set_default_values
26
26
  self.tag_class = {}
27
+ self.col_size = nil
27
28
  end
28
29
  end
29
30
  end
@@ -6,7 +6,7 @@ module CmAdmin
6
6
  include Utils::Helpers
7
7
 
8
8
  attr_accessor :field_name, :label, :header, :input_type, :collection, :disabled, :helper_method,
9
- :placeholder, :display_if, :html_attr, :target
9
+ :placeholder, :display_if, :html_attr, :target, :col_size
10
10
 
11
11
  VALID_INPUT_TYPES = %i[
12
12
  integer decimal string single_select multi_select date date_time text
@@ -30,6 +30,7 @@ module CmAdmin
30
30
  self.input_type = :string
31
31
  self.html_attr = {}
32
32
  self.target = {}
33
+ self.col_size = nil
33
34
  end
34
35
 
35
36
  def set_default_placeholder
@@ -0,0 +1,40 @@
1
+ module CmAdmin
2
+ module Models
3
+ class Row
4
+
5
+ # Description
6
+ # A row is like a container which holds a list of form_field or section.
7
+ # These list of fields or section are iterated and displayed on new/edit page.
8
+ # A row is like a wrapper on the HTML, which adds a div element 'row' class from bootstrap.
9
+
10
+ attr_accessor :sections, :display_if, :row_fields
11
+
12
+ def initialize(current_action, cm_model, display_if, &block)
13
+ @sections = []
14
+ @row_fields = []
15
+ @display_if = display_if || lambda { |arg| return true }
16
+ @current_action = current_action
17
+ @cm_model = cm_model
18
+ instance_eval(&block)
19
+ end
20
+
21
+ def form_field(field_name, options={}, arg=nil)
22
+ if @current_action.is_nested_field
23
+ @nested_table_fields[@current_action.nested_table_name] ||= []
24
+ @nested_table_fields[@current_action.nested_table_name] << CmAdmin::Models::FormField.new(field_name, options[:input_type], options)
25
+ else
26
+ @row_fields << CmAdmin::Models::FormField.new(field_name, options[:input_type], options)
27
+ end
28
+ end
29
+
30
+ def cm_section(section_name, col_size: nil, display_if: nil, &block)
31
+ @sections << CmAdmin::Models::Section.new(section_name, @current_action, @model, display_if, col_size, &block)
32
+ end
33
+
34
+ # This method is deprecated. Use cm_section instead.
35
+ def cm_show_section(section_name, col_size: nil, display_if: nil, &block)
36
+ cm_section(section_name, col_size: col_size, display_if: display_if, &block)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -2,11 +2,18 @@ module CmAdmin
2
2
  module Models
3
3
  class Section
4
4
 
5
- attr_accessor :section_name, :section_fields, :display_if, :current_action, :cm_model, :nested_table_fields
5
+ # Description
6
+ # A section is like a container which holds a list of fields or form fields
7
+ # These list of fields are iterated and displayed on show/new/edit page.
8
+ # It also contains rows, which contains sections and fields.
6
9
 
7
- def initialize(section_name, current_action, cm_model, display_if, &block)
10
+ attr_accessor :section_name, :section_fields, :display_if, :current_action, :cm_model, :nested_table_fields, :rows, :col_size
11
+
12
+ def initialize(section_name, current_action, cm_model, display_if, col_size, &block)
8
13
  @section_fields = []
14
+ @rows = []
9
15
  @nested_table_fields = {}
16
+ @col_size = col_size
10
17
  @section_name = section_name
11
18
  @current_action = current_action
12
19
  @cm_model = cm_model
@@ -15,7 +22,12 @@ module CmAdmin
15
22
  end
16
23
 
17
24
  def field(field_name, options={})
18
- @section_fields << CmAdmin::Models::Field.new(field_name, options)
25
+ if @current_action.is_nested_field
26
+ @nested_table_fields[@current_action.nested_table_name] ||= []
27
+ @nested_table_fields[@current_action.nested_table_name] << CmAdmin::Models::Field.new(field_name, options)
28
+ else
29
+ @section_fields << CmAdmin::Models::Field.new(field_name, options)
30
+ end
19
31
  end
20
32
 
21
33
  def form_field(field_name, options={}, arg=nil)
@@ -33,6 +45,11 @@ module CmAdmin
33
45
  yield
34
46
  end
35
47
 
48
+ def row(display_if: nil, &block)
49
+ @rows ||= []
50
+ @rows << CmAdmin::Models::Row.new(@current_action, @model, display_if, &block)
51
+ end
52
+
36
53
  end
37
54
  end
38
55
  end
@@ -1,3 +1,3 @@
1
1
  module CmAdmin
2
- VERSION = '1.1.8'
2
+ VERSION = '1.2.0'
3
3
  end
@@ -3,14 +3,14 @@ module CmAdmin
3
3
  module FieldDisplayHelper
4
4
  def show_field(ar_object, field)
5
5
  return unless field.display_if.call(ar_object)
6
- content_tag(:div, class: "info-split") do
6
+ content_tag(:div, class: "card-info") do
7
7
  concat show_field_label(ar_object, field)
8
8
  concat value_with_prefix_and_suffix(ar_object, field)
9
9
  end
10
10
  end
11
11
 
12
12
  def show_field_label(ar_object, field)
13
- content_tag(:div, class: "info-split__lhs") do
13
+ content_tag(:div, class: "card-info__label") do
14
14
  field_label = if field.label.present?
15
15
  field.label.to_s
16
16
  elsif field.association_type.to_s == "polymorphic"
@@ -24,7 +24,7 @@ module CmAdmin
24
24
 
25
25
  def value_with_prefix_and_suffix(ar_object, field)
26
26
  value = show_field_value(ar_object, field)
27
- content_tag(:div, class: "info-split__rhs") do
27
+ content_tag(:div, class: "card-info__description") do
28
28
  concat field.prefix
29
29
  concat value
30
30
  concat field.suffix
@@ -13,7 +13,7 @@ module CmAdmin
13
13
 
14
14
  def cm_integer_field(form_obj, cm_field, value, required_class, _target_action)
15
15
  form_obj.text_field cm_field.field_name,
16
- class: "normal-input #{required_class}",
16
+ class: "field-control #{required_class}",
17
17
  disabled: cm_field.disabled,
18
18
  value: value,
19
19
  placeholder: cm_field.placeholder,
@@ -22,7 +22,7 @@ module CmAdmin
22
22
 
23
23
  def cm_decimal_field(form_obj, cm_field, value, required_class, _target_action)
24
24
  form_obj.number_field cm_field.field_name,
25
- class: "normal-input #{required_class}",
25
+ class: "field-control #{required_class}",
26
26
  disabled: cm_field.disabled,
27
27
  value: value,
28
28
  placeholder: cm_field.placeholder,
@@ -31,7 +31,7 @@ module CmAdmin
31
31
 
32
32
  def cm_string_field(form_obj, cm_field, value, required_class, _target_action)
33
33
  form_obj.text_field cm_field.field_name,
34
- class: "normal-input #{required_class}",
34
+ class: "field-control #{required_class}",
35
35
  disabled: cm_field.disabled,
36
36
  value: value,
37
37
  placeholder: cm_field.placeholder
@@ -40,7 +40,7 @@ module CmAdmin
40
40
  def cm_single_select_field(form_obj, cm_field, value, required_class, target_action)
41
41
  form_obj.select cm_field.field_name, options_for_select(select_collection_value(form_obj.object, cm_field), form_obj.object.send(cm_field.field_name)),
42
42
  { include_blank: cm_field.placeholder },
43
- class: "normal-input #{required_class} select-2",
43
+ class: "field-control #{required_class} select-2",
44
44
  disabled: cm_field.disabled,
45
45
  data: {
46
46
  field_name: cm_field.field_name,
@@ -54,13 +54,13 @@ module CmAdmin
54
54
  form_obj.select cm_field.field_name,
55
55
  options_for_select(select_collection_value(form_obj.object, cm_field), form_obj.object.send(cm_field.field_name)),
56
56
  { include_blank: cm_field.placeholder },
57
- class: "normal-input #{required_class} select-2",
57
+ class: "field-control #{required_class} select-2",
58
58
  disabled: cm_field.disabled, multiple: true
59
59
  end
60
60
 
61
61
  def cm_date_field(form_obj, cm_field, value, required_class, _target_action)
62
62
  form_obj.text_field cm_field.field_name,
63
- class: "normal-input #{required_class}",
63
+ class: "field-control #{required_class}",
64
64
  disabled: cm_field.disabled,
65
65
  value: value&.strftime('%d-%m-%Y'),
66
66
  placeholder: cm_field.placeholder,
@@ -69,7 +69,7 @@ module CmAdmin
69
69
 
70
70
  def cm_date_time_field(form_obj, cm_field, value, required_class, _target_action)
71
71
  form_obj.text_field cm_field.field_name,
72
- class: "normal-input #{required_class}",
72
+ class: "field-control #{required_class}",
73
73
  disabled: cm_field.disabled,
74
74
  value: value,
75
75
  placeholder: cm_field.placeholder,
@@ -78,22 +78,48 @@ module CmAdmin
78
78
 
79
79
  def cm_text_field(form_obj, cm_field, value, required_class, _target_action)
80
80
  form_obj.text_area cm_field.field_name,
81
- class: "normal-input #{required_class}",
81
+ class: "field-control #{required_class}",
82
82
  placeholder: cm_field.placeholder
83
83
  end
84
84
 
85
85
  def cm_rich_text_field(form_obj, cm_field, value, required_class, _target_action)
86
86
  form_obj.rich_text_area cm_field.field_name,
87
- class: "normal-input #{required_class}",
87
+ class: "field-control #{required_class}",
88
88
  placeholder: cm_field.placeholder
89
89
  end
90
90
 
91
91
  def cm_single_file_upload_field(form_obj, cm_field, _value, required_class, _target_action)
92
- form_obj.file_field cm_field.field_name, class: "normal-input #{required_class}"
92
+ content_tag(:div) do
93
+ concat form_obj.file_field cm_field.field_name, class: "normal-input #{required_class}"
94
+ concat attachment_list(form_obj, cm_field, _value, required_class, _target_action)
95
+ end
93
96
  end
94
97
 
95
98
  def cm_multi_file_upload_field(form_obj, cm_field, _value, required_class, _target_action)
96
- form_obj.file_field cm_field.field_name, multiple: true, class: "normal-input #{required_class}"
99
+ content_tag(:div) do
100
+ concat form_obj.file_field cm_field.field_name, multiple: true, class: "normal-input #{required_class}"
101
+ concat attachment_list(form_obj, cm_field, _value, required_class, _target_action)
102
+ end
103
+ end
104
+
105
+ def attachment_list(form_obj, cm_field, _value, required_class, _target_action)
106
+ attached = form_obj.object.send(cm_field.field_name)
107
+ content_tag(:div) do
108
+ if attached.class == ActiveStorage::Attached::Many
109
+ attached.each do |attachment|
110
+ concat attachment_with_icon(attachment)
111
+ end
112
+ else
113
+ concat attachment_with_icon(attached)
114
+ end
115
+ end
116
+ end
117
+
118
+ def attachment_with_icon(attachment)
119
+ content_tag(:div, class: 'destroy-attachment', data: { ar_id: attachment.id}) do
120
+ concat content_tag(:i, '', class: 'fa-solid fa-trash-can')
121
+ concat content_tag(:span, attachment.filename.to_s)
122
+ end
97
123
  end
98
124
 
99
125
  def cm_check_box_field(form_obj, cm_field, value, required_class, target_action)
@@ -128,7 +154,7 @@ module CmAdmin
128
154
  else
129
155
  form_obj.check_box cm_field.field_name,
130
156
  {
131
- class: "normal-input cm-checkbox #{required_class} #{target_action.present? ? 'linked-field-request' : ''}",
157
+ class: "field-control cm-checkbox #{required_class} #{target_action.present? ? 'linked-field-request' : ''}",
132
158
  disabled: cm_field.disabled,
133
159
  data: {
134
160
  field_name: cm_field.field_name,
@@ -158,7 +184,7 @@ module CmAdmin
158
184
  content_tag :div, class: 'cm-radio-tag' do
159
185
  concat form_obj.check_box cm_field.field_name,
160
186
  {
161
- class: "normal-input cm-checkbox #{required_class} #{target_action.present? ? 'linked-field-request' : ''}",
187
+ class: "field-control cm-checkbox #{required_class} #{target_action.present? ? 'linked-field-request' : ''}",
162
188
  disabled: cm_field.disabled,
163
189
  name: "#{@model.name.underscore}[#{cm_field.field_name}][]",
164
190
  data: {
@@ -186,7 +212,7 @@ module CmAdmin
186
212
 
187
213
  def format_radio_button(val, form_obj)
188
214
  content_tag :div, class: 'cm-radio-tag' do
189
- concat form_obj.radio_button :level, val, class: 'normal-input cm-radio'
215
+ concat form_obj.radio_button :level, val, class: 'field-control cm-radio'
190
216
  end
191
217
  end
192
218
  end
@@ -28,48 +28,85 @@ module CmAdmin
28
28
  set_form_for_fields(resource, columns, url, method)
29
29
  end
30
30
 
31
- def form_with_mentioned_fields(resource, sections_array, method)
31
+ def form_with_mentioned_fields(resource, entities, method)
32
32
  # columns = resource.class.columns.select { |i| available_fields.map(&:field_name).include?(i.name.to_sym) }
33
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
- set_form_with_sections(resource, sections_array, url, method)
36
+ set_form_with_sections(resource, entities, url, method)
37
37
  end
38
38
 
39
- def split_form_into_section(resource, form_obj, sections_array)
39
+ def split_form_into_section(resource, form_obj, entities)
40
40
  content_tag :div do
41
- sections_array.each do |section|
41
+ entities.each do |entity|
42
+ if entity.class == CmAdmin::Models::Row
43
+ concat create_rows(resource, form_obj, entity)
44
+ elsif entity.class == CmAdmin::Models::Section
45
+ concat(content_tag(:div, class: 'row') do
46
+ concat create_sections(resource, form_obj, entity)
47
+ end)
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ def create_rows(resource, form_obj, row)
54
+ content_tag :div, class: 'row' do
55
+ row.sections.each do |section|
42
56
  concat create_sections(resource, form_obj, section)
43
57
  end
44
58
  end
45
59
  end
46
60
 
47
61
  def create_sections(resource, form_obj, section)
48
- content_tag :div, class: 'form-container' do
62
+ content_tag :div, class: 'col form-container' do
49
63
  concat content_tag(:p, section.section_name, class: 'form-title')
50
64
  concat set_form_for_fields(resource, form_obj, section)
51
65
  end
52
66
  end
53
67
 
68
+ def create_row_inside_section(resource, form_obj, rows)
69
+ rows.each do |row|
70
+ concat(content_tag(:div, class: 'row') do
71
+ row.row_fields.each do |field|
72
+ concat set_form_field(resource, form_obj, field)
73
+ end
74
+ end)
75
+ end
76
+ return
77
+ end
78
+
54
79
  def set_form_for_fields(resource, form_obj, section)
55
80
  content_tag(:div, class: 'form-container__inner') do
56
- section.section_fields.each do |field|
57
- next unless field.display_if.call(form_obj.object)
81
+ concat create_row_inside_section(resource, form_obj, section.rows) if section.rows.present?
82
+ concat set_form_fields(resource, form_obj, section.section_fields)
83
+ concat set_nested_form_fields(form_obj, section)
84
+ end
85
+ end
86
+
87
+ def set_form_fields(resource, form_obj, fields)
88
+ fields.each do |field|
89
+ concat(content_tag(:div, class: 'row') do
90
+ concat set_form_field(resource, form_obj, field)
91
+ end)
92
+ end
93
+ return
94
+ end
95
+
96
+ def set_form_field(resource, form_obj, field)
97
+ content_tag(:div, class: field.col_size ? "col-#{field.col_size}" : 'col') do
98
+ next unless field.display_if.call(form_obj.object)
58
99
 
59
- if field.input_type.eql?(:hidden)
100
+ if field.input_type.eql?(:hidden)
101
+ concat input_field_for_column(form_obj, field)
102
+ else
103
+ concat(content_tag(:div, class: "form-field #{field.disabled ? 'disabled' : ''}") do
104
+ concat form_obj.label field.label, field.label, class: 'field-label'
105
+ concat tag.br
60
106
  concat input_field_for_column(form_obj, field)
61
- else
62
- concat(content_tag(:div, class: "input-wrapper #{field.disabled ? 'disabled' : ''}") do
63
- concat form_obj.label field.label, field.label, class: 'field-label'
64
- concat tag.br
65
- concat(content_tag(:div, class: 'datetime-wrapper') do
66
- concat input_field_for_column(form_obj, field)
67
- end)
68
- concat tag.p resource.errors[field.field_name].first if resource.errors[field.field_name].present?
69
- end)
70
- end
107
+ concat tag.p resource.errors[field.field_name].first if resource.errors[field.field_name].present?
108
+ end)
71
109
  end
72
- concat set_nested_form_fields(form_obj, section)
73
110
  end
74
111
  end
75
112
 
@@ -81,7 +118,7 @@ module CmAdmin
81
118
  end
82
119
  end
83
120
 
84
- def set_form_with_sections(resource, sections_array, url, method)
121
+ def set_form_with_sections(resource, entities, url, method)
85
122
  form_for(resource, url: url, method: method, html: { class: "cm_#{resource.class.name.downcase}_form" } ) do |form_obj|
86
123
  if params[:referrer]
87
124
  concat form_obj.text_field "referrer", class: "normal-input", hidden: true, value: params[:referrer], name: 'referrer'
@@ -92,9 +129,10 @@ module CmAdmin
92
129
  elsif params[:associated_class] && params[:associated_id]
93
130
  concat form_obj.text_field params[:associated_class] + '_id', class: "normal-input", hidden: true, value: params[:associated_id]
94
131
  end
95
- concat split_form_into_section(resource, form_obj, sections_array)
132
+ concat split_form_into_section(resource, form_obj, entities)
96
133
  concat tag.br
97
- concat form_obj.submit 'Save', class: 'cta-btn mt-3 form_submit', data: {form_class: "cm_#{form_obj.object.class.name.downcase}_form"}
134
+ # TODO: form_submit class is used for JS functionality, Have to remove
135
+ concat form_obj.submit 'Save', class: 'btn-cta form_submit', data: {form_class: "cm_#{form_obj.object.class.name.downcase}_form"}
98
136
  end
99
137
  end
100
138
  end
@@ -65,8 +65,8 @@ module CmAdmin
65
65
 
66
66
  def manage_column_footer
67
67
  concat(content_tag(:div, class: 'modal-footer') do
68
- concat tag.button 'Close', class: 'gray-border-btn', data: {bs_dismiss: 'modal'}
69
- concat tag.button 'Save', class: 'cta-btn'
68
+ concat tag.button 'Close', class: 'btn-secondary', data: {bs_dismiss: 'modal'}
69
+ concat tag.button 'Save', class: 'btn-cta'
70
70
  end)
71
71
  return
72
72
  end
@@ -67,7 +67,7 @@ module CmAdmin
67
67
  when :modal
68
68
  custom_modal_button(custom_action)
69
69
  when :page
70
- link_to custom_action_title(custom_action), "#{@model.ar_model.table_name}/#{custom_action.path}", class: 'secondary-btn ml-2', method: custom_action.verb
70
+ link_to custom_action_title(custom_action), "#{@model.ar_model.table_name}/#{custom_action.path}", class: 'btn-secondary ms-2', method: custom_action.verb
71
71
  end
72
72
  end
73
73
  end
@@ -83,14 +83,14 @@ module CmAdmin
83
83
 
84
84
  def custom_action_button(custom_action, current_action_name)
85
85
  if current_action_name == "index"
86
- button_to custom_action_title(custom_action), @model.ar_model.table_name + '/' + custom_action.path, class: 'secondary-btn ml-2', method: custom_action.verb
86
+ button_to custom_action_title(custom_action), @model.ar_model.table_name + '/' + custom_action.path, class: 'btn-secondary ms-2', method: custom_action.verb
87
87
  elsif current_action_name == "show"
88
- button_to custom_action_title(custom_action), custom_action.path.gsub(':id', params[:id]), class: 'secondary-btn ml-2', method: custom_action.verb
88
+ button_to custom_action_title(custom_action), custom_action.path.gsub(':id', params[:id]), class: 'btn-secondary ms-2', method: custom_action.verb
89
89
  end
90
90
  end
91
91
 
92
92
  def custom_modal_button(custom_action)
93
- link_to custom_action_title(custom_action), '', class: 'secondary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
93
+ link_to custom_action_title(custom_action), '', class: 'btn-secondary ms-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal-#{@ar_object.id}" }
94
94
  end
95
95
 
96
96
  def custom_action_title(custom_action)
@@ -15,7 +15,7 @@ module CmAdmin
15
15
  include ActionView::Helpers::TagHelper
16
16
 
17
17
  def exportable(_klass, html_class: [])
18
- tag.a 'Export as excel', class: html_class.append('filter-btn modal-btn mr-2'), data: { toggle: 'modal', target: '#exportmodal' } do
18
+ tag.a 'Export as excel', class: html_class.append('filter-btn modal-btn me-2'), data: { toggle: 'modal', target: '#exportmodal' } do
19
19
  concat tag.i class: 'fa fa-download'
20
20
  concat tag.span ' Export'
21
21
  end
@@ -53,7 +53,8 @@ module CmAdmin
53
53
  concat hidden_field_tag 'class_name', klass.name.to_s, id: 'export-to-file-klass'
54
54
  concat checkbox_row(klass)
55
55
  concat tag.hr
56
- concat submit_tag 'Export', class: 'btn btn-primary btn-bordered export-to-file-btn'
56
+ # TODO: export-to-file-btn class is used for JS functionality, Have to remove
57
+ concat submit_tag 'Export', class: 'btn-primary export-to-file-btn'
57
58
  end
58
59
  end
59
60
  end